Как сделать апроксимацию в маткаде
Приведем два варианта решения задачи аппроксимации:
-
в первом примере каждый из перечисленных этапов реализован в виде отдельного блока с необходимыми комментариями;
Функция MNK, использованная во втором примере, получает через список параметров m – объем выборки; k – число факторов; z – матрицу значений факторов; y – вектор значений функции отклика. Результатом выполнения функции будет вектор коэффициентов регрессии – (k+1) элемент, так как исходное регрессионное уравнение предполагает наличие свободного члена.
Отметим, что рассмотренный алгоритм позволяет оценить коэффициенты уравнений при нескольких независимых переменных, т.е. является алгоритмом множественной линейной регрессии. Основная задача пользователя – правильно определить факторы и вычислить их значения для матрицы факторов.
Mathcad имеет ряд встроенных функций, реализующих алгоритмы аппроксимации для различных видов уравнений. Как правило, предполагается наличие одной независимой переменной.
Все функции, упоминаемые далее в этом разделе, описаны в приложении «Встроенные функции и ключевые слова» настоящего пособия.
2. Линейная регрессия общего вида аппроксимирует заданную совокупность точек функцией вида
Таким образом, функция регрессии является линейной комбинацией функций F1(x), F2(x), . Fn(x), причем сами эти функции (факторы) могут быть нелинейными, что расширяет возможности такой аппроксимации и распространяет ее на нелинейные функции.
Для реализации линейной регрессии общего вида используется функция
Она возвращает вектор коэффициентов линейной регрессии общего вида К, при котором среднеквадратичная погрешность приближения «облака» исходных точек, координаты которых хранятся в векторах VX и VY, оказывается минимальной. Вектор F должен содержать функции F1(x), F2(x), . Fn(x), записанные в символьном виде.
3. В Mathcad введена и функция для обеспечения полиномиальной регрессии при произвольной степени полинома
Она возвращает вектор VS, запрашиваемый функцией interp(VS, VX, VY.x), содержащий коэффициенты многочлена n-й степени, который наилучшим образом приближает «облако» точек с координатами, хранящимися в векторах VX и VY. Для вычисления коэффициентов полинома регрессии используется функция submatrix (см. пример).
На практике не рекомендуется делать степень аппроксимирующего полинома выше 4–6, поскольку погрешности реализации регрессии сильно возрастают. Функция regress создает единственный приближающий полином, коэффициенты которого вычисляются по всей совокупности заданных точек.
4. Многомерную регрессию также можно реализовать в Mathcad. Самый типичный случай ее использования – приближение поверхностей в трехмерном пространстве. Их можно описать, задав массив значений высот z, соответствующих двухмерному массиву Мху координат точек (х,у) на горизонтальной плоскости.
Новых функций для этого не задано. Используются уже описанные ранее функции, но в несколько иной форме, например
- regress (Mxy, Vz, n) – возвращает вектор, запрашиваемый функцией interp (VS. Mxy, Vz, V) для вычисления многочлена n-й степени, который наилучшим образом приближает точки множества Мху и Vz, Мху – матрица размера 2m, содержащая координаты х и у. Vz – m-мерный вектор, содержащий z-координаты, соответствующие m точкам, указанным в Мху.
- Interp(VS, Mxy, Vz, V) – возвращает значение z по заданным векторам VS (создается функцией regress) и Мху, Vz и V (вектор координат х и у заданной точки, для которой находится z).
5. Под нелинейной регрессией общего вида подразумевается нахождение вектора К коэффициентов произвольной функции F(x, К1, К2, . Кn), при котором обеспечивается минимальная среднеквадратичная погрешность приближения «облака» исходных точек.
Для проведения нелинейной регрессии общего вида используется функция
genfit(VX, VY, VS, F)
Эта функция возвращает вектор К параметров функции F, дающий минимальную среднеквадратичную погрешность приближения функцией F(x, К1, К2, . Кn) исходных данных.
F должен быть вектором с символьными элементами, причем они должны содержать аналитические выражения для исходной функции и ее производных по всем параметрам. Вектор VS должен содержать начальные значения элементов вектора К, необходимые для решения системы нелинейных уравнений регрессии итерационным методом.
В примере далее приведен образец реализации нелинейной регрессии общего вида для уравнения ln p = A – B / (C + t).
При решении этой задачи возникают две проблемы. Во-первых, надо вычислить значения производных по переменным A, B, C. В документе это сделано с помощью символьных операций
Вторая проблема связана с необходимостью применения функции genfit в ее стандартном виде. Поэтому пришлось заменить искомые коэффициенты модели на элементы массива k
6. Перечень некоторых дополнительных функций для оценки коэффициентов аппроксимирующих уравнений разного вида (см. приложение)
- expfit(vx, vy, vg) – возвращает вектор, содержащий коэффициенты (a, b и с) аппроксимирующего выражения вида а·еxp(b·х)+с, график которого лучшим образом приближается к точкам, координаты которых хранятся в векторах vx и vy (вектор vg содержит первое приближение к решению);
- lgsfit(vx, vy, vg) – то же, но для выражения а/(1+b·е (–с·х) );
- logfit(vx, vy) – то же, но для выражения a·ln(x+b)+c (начального приближения не требуется);
- medfit(vx, vy) – то же, но для выражения а+bx (начального приближения не требуется);
- pwrfit(vx, vy, vg) – то же, но для выражения а·х b +с. Вектор vg содержит первое приближение к решению;
- sinfit(vx, vy, vg) – то же, но для выражения a·sin(x+b)+c.
Апроксимация функции в MathCAD
Аппроксимация функций с помощью MathCAD К ПРАКТИЧЕСКОЙ ЧАСТИ 1. Линейная регрессия Линейная регрессия в системе Mathcad выполняется по векторам аргумента Х и от- счетов Y функциями: intercept(X,Y) – вычисляет параметр а1 , смещение линии регрессии по вертикали; slope(X,Y) – вычисляет параметр a2 , угловой коэффициент линии регрессии. Полученные значения коэффициентов используем в уравнении регрессии y(x) = a1+a2*x . Функция corr(Y,y(x)) вычисляет коэффициент корреляции Пирсона . Чем он ближе к 1 , тем точнее обрабатываемые данные соответствуют линейной зависимости. 2. Полиномиальная регрессия Одномерная полиномиальная регрессия с произвольной степенью n полинома с произвольными координатами отсчетов в Mathcad выполняется функциями: regress(X,Y,n) – вычисляет вектор S , в составе которого находятся коэффици- енты ai полинома n -й степени; Значения коэффициентов ai могут быть извлечены из вектора S функцией submatrix(S, 3, length(S)-1, 0, 0) . Полученные значения коэффициентов используем в уравнении регрессии y(x) = a1+a2*x+a3*x 2 . 3. Нелинейная регрессия Для простых типовых формул аппроксимации предусмотрен ряд функций нелиней- ной регрессии, в которых параметры функций подбираются программой Mathcad. К их числу относится функция expfit(X,Y,S) , которая возвращает вектор, со- держащий коэффициенты a1 , a2 и a3 экспоненциальной функции y(x) = a1·exp(a2·x) + a3 . В вектор S вводятся начальные значения коэффициентов a1 , a2 и a3 первого приближения.
Пример расчетов в среде MathCAD Исходные данные:
| 0 | 16 | |||||
| 0.4 | 20 | |||||
| 0.7 | 25.5 | |||||
| 1 | 34 | |||||
| 1.5 | 40.7 | |||||
| m | ||||||
| 49 | x m | 0 | y m | 1 | ||
| 1.9 | ||||||
| 2.5 | 60 | |||||
| 2.9 | 69.6 | |||||
| 3.6 | 89 | |||||
| 4.3 | 98.3 | |||||
| 0 | 0 | |||||
| 0 | 0 | 0 | 16 | |||
| 1 | 0.4 | 1 | 20 | |||
| 2 | 0.7 | 2 | 25.5 | |||
| x | 3 | 1 | y | 3 | 34 | |
| 4 | 1.5 | 4 | 40.7 | |||
| 5 | 1.9 | 5 | 49 | |||
| 6 | 2.5 | 6 | 60 | |||
| 7 | 2.9 | 7 | 69.6 | |||
| 8 | 3.6 | 8 | 89 | |||
| 9 | 4.3 | 9 | 98.3 | |||
Линейная регрессия:
| a1 | intercept(x y) | |
| a1 | 12.665 | |
| a2 | slope(x y) | |
| a2 | 19.971 | |
| f(x) a1 | a2 x | corr(y f(x)) 0.997 |
100 y f(x) 50 0
| Полиномиальная регрессия (n=2): | ||||
| s regress(x y 2) | ||||
| coeff submatrix(s 3 length(s) | 1 0 0) | |||
| A coeff | ||||
| a1 A 0 | a1 14.494 | |||
| a2 A 1 | a2 16.96 | |||
| a3 A 2 | a3 0.714 | |||
| f(x) a1 | a2 x a3 x 2 | corr(y f(x)) 0.998 | ||
| 150 | ||||
| y | 100 | |||
| f(x) | 50 | |||
| 0 | 2 | 4 | 6 | |
| 0 | ||||
| x | ||||
| Экспоненциальная регрессия (n=2): | ||||||
| 1 | ||||||
| s 1 | ||||||
| 1 | ||||||
| 169.694 | ||||||
| A expfit(x y s) | A | 0.095 | ||||
| 154.614 | ||||||
| a1 A 0 | a1 169.694 | |||||
| a2 A 1 | a2 0.095 | |||||
| a3 A 2 | a3 154.614 | |||||
| f(x) a1 e a2 x a3 | corr(y f(x)) 0.997 | |||||
| 150 | ||||||
| y | 100 | |||||
| f(x) | ||||||
| 50 | ||||||
| 0 | 2 | 4 | 6 | |||
| 0 | ||||||
| x | ||||||
Вывод: сравнивая результаты вычислений, можно сделать вывод, что самый высокий коэффициент детерминированности (корреляции) – в случае полиноми- альной регрессии второй степени ( 0.998 ). Следовательно, что квадратичная аппроксимация наилучшим образом описы- вает экспериментальные данные.
14.03.2016 767.9 Кб 291 Антонов В.В. Поиски и разведка подземных вод Уч пос 2006.pdf
22.11.2018 200.19 Кб 6 антропогенные нарушения водных объектов.doc
Апроксимация и ее использование в разработке игр и не только
Привет всем кто зашел. Речь вот о чем я на дня делал из частичек смерч и для задания его формы воспользовался методом наименьших квадратов (если кто не знает это один из способов апроксимации (если и это кто не знает то — построение аналитической функции по значениям другой функции известным только в некоторых точках)).
Так-вот мне интересно применял ли кто нибудь из вас апроксимацию, если да то интересно где.
Я сейчас пишу программу которая будет апроксимировать функции и значения для упрощения работы, но нужно сделать примеры ее применения. Тем кто поможет в этом вопросе будет отправлен экземпляр программы совершенно безвозмездно.
Один из моих примеров, возникший пол часа назад, с помощью апроксимации можно случайные числа с равномерным распределение превратить в случ. числа с нормальным или например Фишера распределением. Если интересно пишите в форум.
Основной вариант использования это упростиь и ускорить вычисление больших функций но зависящих от одной переменной. Либо когда у вас вобще функции нет а есть график нарисованый на листе бумаги — а вам нужна такая функция.
Обращайтесь я раскажу как это сделать и вручную и в маткаде.
#1
1:38, 15 июня 2003
Аппроксимация — это, типа, построение сглаженных кривых или поверхностей, насколько я знаю? Можно сказать, что её применяют в анимации. Например, для плавного изменения координат — простое линейное сглаживание не подходит. Различают линейную, синус/косинус, кубическую, NURBS (Non uniformed rational b-splines) и Безье (не знаю, насколько близки понятия аппроксимация и интерполяция). На мой взгляд, наиболее употребимы линейная (самая простая), кубическая (заданные контрольные точки будут сто-пудово принадлежать кривой), и Безье (кривой принадлежат первая и последняя точки — остальные задают как бы каркас и будут принадлежать кривой в очень редких случаях).
Как я сказал, главное применение в анимации. Аппроксимацию+рандом применяют для создания шума Перлина (а из него сложные текстуры — от простой «плазмы» до карт планет и дерева). Безье и НУРБС (можно в принципе все прикрутить) для создания гладких форм по контрольным точкам, там, ландшафтов всяких. Из нурбс даже голову человеческую сделать можно. Смотри проект Almighty на этом сайте. У них одни НУРБСы в движке.
Как ты заметил, при помощи этой вещи можно изменять распределение чисел в рандоме. Про нормальное распределение — это я не понял, как, но интересно. А вот легко можно сделать, чтобы некоторые числа выпадали чаще других, а другие — почти никогда. Помогает в играх, например при создании искусственного интеллекта. Можно опять же (это ближе к анимации) по точкам строить график частоты событий, их приоритетности и т. п.
Из Безье (например в 3D MAX Studio) люблю делать формы (сплайны), а по ним делать тела вращения (чашки, лампочки, диски и т. п.).
Также из четырёхточковой Безье-кривой часто делают твухточковый отрезок кривой (точки 1, 4, обычно фиксированны) а пары 1-2 и 3-4 используют, как направляющие вектора, задающие кривизну кривой. Т. е, перемещая точки 2 и 3 меняешь кривизну кривой. Очень удобно в анимации.
#2
1:52, 15 июня 2003
ZET
Спасибо тебе, если тебе прога такая нужна как допишем я тебе ее сразу замылю, главное мыло оставь, или же после выхода я об этом в форуме напишу, да пару статеек по применения сделаю.
По поводу нормального распределения — это как раз получится то о чем ты говориш, в смысле вероятность выпадения одних чисел больше чем других.
Апроксимацию я делал степенными полиномами типа:F(t) = C0 + C1*t + C2*t`2 . они хоть со степенью и выглядят страшно но полиномом второй степени можно задать график с двумя тремя перегибами. Мы сейчас добавляем другие типы апроксимации.
Отличие от интерполяции как я знаю не оченьто и большое просто кроме интерполяции есть еще и экстраполяция, когда точки находят за пределами заданного интервала. А апроксимация это и то и другое и спомощью нее получают не какоето числовое значение а другую функция например более скоростную. Теже степенные полиномы можно быстро считать используя алгоритмы быстрого возведения в сепень.
Люди напишите если такая прога вам интересна и какого типа функции она должна апроксимировать (кол-во переменных, отрезок существования и т.п.)
#3
2:02, 15 июня 2003
Насчет фигур вращения. Я когда частицами делал торандо то по рисунку получил функцию зависимости радиуса торнадо от высоты в данной точке.
Насчет нормального распределения, если ты учил теор вер и мат статистику, то наверное помниш графики функции плотности нормального и равномерного распределения. Теперь вот такой вариант: 1) строим график функции плотности нормального распределения 2) апроксимируем его и получаем аналитическую функцию 3) как аргумент подставляем в нее случ. число сделаное генератором псевдо случ. чисел (например random()) эти числа имеют в большинстве случаев равномерное распределения 4) в итоге наша функция возвращает число уже с нормальным распределеним
В этом есть большой плюс у нормального распределения есть хорошие параметры, это мат ожидание грубо говоря центр графика, и среднеквадратическое, это уже степень разброса. Меняя эти параметры можно получать всякие прикольные варианты с распределением.
А если ты не учил теор вер тогда я могу тебе отправить вариант решения такой задачки на С++.
#4
2:04, 15 июня 2003
Чуть не забыл, степенные полиномы еще удобны тем что можно делать плавный переход от одного к другому, и соответственно получать промежуточные значения. Тобто можно в рилтайме одну фигуру вращения превратить в другую, это как минимум.
#5
2:07, 15 июня 2003
С полиномами — это ты загнул. Гораздо проще — по очереди для каждых четырёх точек — это кубическая будет. Мега-гладкая. Смотри:
double M_N_INTERPOLATORS::CubicIP(const double &v0, const double &v1, const double &v2, const double &v3, const double &x)
Интерполирует по v1, v2, v3, v4 промежуток v2-v3 по параметру x в интервале [0;1]. Код не тестировал, но должен работать.
#6
2:08, 15 июня 2003
Хотя, может это то и есть.
Как сделать апроксимацию в маткаде
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |