Иллюстрированный самоучитель по MatLab
Интерполяция и аппроксимация данных. Полиномиальная регрессия.
Под аппроксимацией обычно подразумевается описание некоторой, порой не заданной явно, зависимости или совокупности представляющих ее данных с помощью другой, обычно более простой или более единообразной зависимости. Часто данные находятся в виде отдельных узловых точек, координаты которых задаются таблицей данных.
Результат аппроксимации может не проходить через узловые точки. Напротив, задача интерполяции – найти данные в окрестности узловых точек. Для этого используются подходящие функции, значения которых в узловых точках совпадают с координатами этих точек. Например, при линейной интерполяции зависимости у(х) узловые точки соединяются друг с другом отрезками прямых и считается, что искомые промежуточные точки расположены на этих отрезках.
Для повышения точности интерполяции применяют параболы (квадратичная интерполяция) или полиномы более высокой степени (полиномиальная интерполяция). Для обработки данных MATLAB использует различные функции интерполяции и аппроксимации данных. Набор таких функций вместе с несколькими вспомогательными функциями описан в этом разделе.
Одна из наиболее известных аппроксимаций – полиномиальная. В системе MATLAB определены функции аппроксимации данных полиномами по методу наименьших квадратов – полиномиальной регрессии. Это выполняет функция, приведенная ниже:
- polyfit(x.y.n) – возвращает вектор коэффициентов полинома р(х) степени п, который с наименьшей среднеквадратичной погрешностью аппроксимирует функцию у(х). Результатом является вектор-строка длиной n+1, содержащий коэффициенты полинома в порядке уменьшения степеней х и у равно n+1, то реализуется обычная полиномиальная аппроксимация, при которой график полинома точно проходит через узловые точки с координатами (х.у), хранящиеся в векторах х и у. В противном случае точного совпадения графика с узловыми точками не наблюдается;
- [p.S] = polyflt(x.y.n) – возвращает коэффициенты полинома р и структуру S для использования вместе с функцией polyval с целью оценивания или предсказания погрешности;
- [p.S] = polyfit(x,y,n,mu) возвращает коэффициенты полинома р и структуру S для использования вместе с функцией polyval с целью оценивания или предска-зния погрешности, но так, что происходит центрирование (нормирование) и масштабирование х, xnorm = (х -mu(l))/mu(2), где mu(l) = mean(x) и mu(2) = std(x). Центрирование и масштабирование не только улучшают свойства степенного многочлена, получаемого при помощи polyval, но и значительно повышают качественные характеристики самого алгоритма аппроксимации.
Рис. 17.10. Пример использования функции polyfit
Пример (полиномиальная регрессия для функции s:
Аппроксимация и интерполяция данных в Matlab
В системе Matlab для аппроксимации данных полиномом с помощью МНК используют функцию polyfit(x, у, п), которая возвращает вектор коэффициентов полинома р(х) степени п, аппроксимирующего функцию у(х) с наименьшей среднеквадратичной погрешностью. Результатом является вектор-строка из п+1 коэффициента полинома в порядке уменьшения степеней.
Для построения графика аппроксимирующей функции р(х) используют вспомогательную функцию polyvalf/?, х), которая вычисляет значения р(х) для заданных значений х.
х= [0:0.2:2*pi]; у = sin(x); polyfit(x, у, 3)
0.0916 -0.8608 1.8485 -0.1546
Т.е. наш аппроксимирующий полином имеет вид:
Х*) = 0.0916х 3 -0.8608х 2 + 1.8485х -0.1546
Если теперь ввести строку
f = polyval(p, х); plot(x, у, х, f),
то откроется графическое окно, представленное на рис. 4.27.

Рис. 4.27. Графики исходной и аппроксимирующей функций
Для интерполяции функции у(х), заданной аналитически или таблицей, в системе Matlab используют функцию yi = interpl(x, у, xi), возвращающую вектор yi, содержащий элементы, соответствующие элементам xi и полученные интерполяцией векторов х, у. Вектор х определяет точки, в которых известны значения у.
Задать метод интерполяции, как и в системе Scilab, можно с помощью функции yi = interpl(x, у, xi, method), где параметр method может принимать следующие значения: ‘nearest’ -ступенчатая интерполяция, ‘linear’ — линейная интерполяция (по умолчанию), ‘spline’ — кубическая сплайн-интерполяция, ‘cubic’ -кубическая интерполяция.
yi = interp] (x, у, xiy,
plot(x, y, ‘*’, xi, yi, ‘r-‘), grid
Результат работы программы представлен на рис. 4.28.

Рис. 4.28. Графики исходной и интерполирующей функций
Замечание. Можно для интерполяции использовать функции polyfit, polyval.
Аппроксимация и интерполяция данных в Matcad
Наиболее просто в системе Mathcad решается задача аппроксимации исходных данных, представленных в виде таблицы, линейной регрессией вида у = а0+а1х.
Для определения коэффициентов регрессии а0, at в Mathcad служат следующие функции:
- • line(x, у) возвращает массив а = Г* 0 коэффициентов регрессии;
- • intercepts, у) возвращает коэффициент регрессии л0;
- • slope(x,y) возвращает коэффициент регрессии Я].
Для вычисления коэффициента корреляции в Mathcad предназначена функция согг(х,у).
Пример. Данные о растворимости NaNO3 в зависимости от температуры воды представлены в виде таблицы
Для построения квадратичной аппроксимации полиномами степени п > 2 в Mathcad можно воспользоваться функциями regress и interp.
Функция regress(x, у, к) возвращает вектор коэффициентов полинома k-й степени, подобранного методом наименьших квадратов по экспериментальным точкам (х — массив абсцисс, у -массив ординат экспериментальных точек).
Элементы массива х должны быть упорядочены по возрастанию. После определения коэффициентов полинома для вычисления значения полинома в конкретных точках можно воспользоваться функцией interp.
Функция interp(s, х, у, t) вычисляет значения полинома в точке t, х — массив абсцисс, у — массив ординат экспериментальных точек, s — массив коэффициентов полинома, найденный с помощью функции regress.
С помощью функций regress и interp можно подобрать коэффициенты аппроксимирующего полинома любой степени.
Кроме описанных выше универсальных возможностей подбора аппроксимирующих зависимостей, в Mathcad существуют следующие функции для подбора коэффициентов аппроксимирующих функций специального вида:
- • expfit(x, у,g) — возвращает коэффициенты зависимости ае Ьх +с-,
- • lgsfit(x,у, g) — возвращает коэффициенты зависимости а
- • sinfit(x, у, g) — возвращает коэффициенты зависимости asin(x + b) + c;
- • pwrfit(x, у,g) — возвращает коэффициенты зависимости ах ь + с;
- • Iogfit(x, у,g) — возвращает коэффициенты зависимости aln(x + Z?) + c;
- • Infit(x, у) — возвращает коэффициенты зависимости а 1п(х)+Ь.
Во всех этих функциях х — массив абсцисс экспериментальных точек, у — массив ординат экспериментальных точек, g — вектор, задающий начальное приближение параметров а, Ьис.
Пример применения функции pwrfit приведен на рис. 4.29.
Решение задач интерполяции в системе Mathcad возможно с помощью канонического полинома, полинома Лагранжа, полинома Ньютона и сплайн-интерполяции. Для вычисления коэффициентов сплайнов существуют следующие функции:
• cspline(x, у) — возвращает массив коэффициентов
• pspline(x, у) — возвращает массив коэффициентов
• Ispline(x, у) — возвращает массив коэффициентов линейного сплайна.
Во всех этих функциях х — массив абсцисс экспериментальных точек, у — массив ординат экспериментальных точек. После вычисления коэффициентов сплайна можно, обратившись к функции interp, вычислить значение интерполяционного полинома в конкретной точке. Для этого в функцию interp первым параметром необходимо передать массив коэффициентов сплайна.
Рис. 4.29. Графики исходной и аппроксимирующей функции
Документация
Два MATLAB ® функции могут смоделировать ваши данные полиномом.
Функции аппроксимации полиномом
polyfit(x,y,n) находит коэффициенты полиномиального p(x) из степени n это соответствует y данные путем минимизации суммы квадратов отклонений данных из модели (метод наименьших квадратов).
polyval(p,x) возвращает значение полинома степени n это было определено polyfit , оцененный в x .
В этом примере показано, как моделировать данные с помощью полинома.
Измерьте количество y в нескольких значениях времени t .
t = [0 0.3 0.8 1.1 1.6 2.3]; y = [0.6 0.67 1.01 1.35 1.47 1.25]; plot(t,y,'o') title('Plot of y Versus t')

Можно попытаться моделировать эти данные с помощью полиномиальной функции второй степени,
y = a 2 t 2 + a 1 t + a 0 .
Неизвестные коэффициенты, a 0 , a 1 , и a 2 , вычисляются путем минимизации суммы квадратов отклонений данных из модели (метод наименьших квадратов).
Используйте polyfit найти полиномиальные коэффициенты.
p = polyfit(t,y,2)
p = 1×3 -0.2942 1.0231 0.4981
MATLAB вычисляет полиномиальные коэффициенты в убывающих степенях.
Полиномиальная модель второй степени данных дана уравнением
y = — 0 . 2 9 4 2 t 2 + 1 . 0 2 3 1 t + 0 . 4 9 8 1 .
Оцените полином в однородно расположенные с интервалами времена, t2 . Затем отобразите на графике исходные данные и модель на том же графике.
t2 = 0:0.1:2.8; y2 = polyval(p,t2); figure plot(t,y,'o',t2,y2) title('Plot of Data (Points) and Model (Line)')

Оцените модель во временном векторе данных
y2 = polyval(p,t);
Вычислите остаточные значения.
res = y - y2;
Постройте остаточные значения.
figure, plot(t,res,'+') title('Plot of the Residuals')

Заметьте, что подгонка второй степени примерно следует за основной формой данных, но не получает плавную кривую, на которой данные, кажется, лежат. В остаточных значениях, кажется, существует шаблон, который указывает, что различная сила модели необходима. Полином пятой степени (показанный затем) делает лучшее задание следующих колебания данных.
Повторите осуществление, на этот раз с помощью полинома пятой степени от polyfit .
p5 = polyfit(t,y,5)
p5 = 1×6 0.7303 -3.5892 5.4281 -2.5175 0.5910 0.6000
Оцените полином в t2 и постройте подгонку сверху данных в новом окне рисунка.
y3 = polyval(p5,t2); figure plot(t,y,'o',t2,y3) title('Fifth-Degree Polynomial Fit')

Примечание
При попытке смоделировать физическую ситуацию, всегда важно рассмотреть, значима ли модель определенного порядка в вашей ситуации.
Линейная модель с неполиномиальными условиями
В этом примере показано, как соответствовать данным линейной моделью, содержащей неполиномиальные термины.
Когда полиномиальная функция не производит удовлетворительную модель ваших данных, можно попытаться использовать линейную модель с неполиномиальными терминами. Например, рассмотрите следующую функцию, которая линейна в параметрах a 0 , a 1 , и a 2 , но нелинейный в t данные:
y = a 0 + a 1 e — t + a 2 t e — t .
Можно вычислить неизвестные коэффициенты a 0 , a 1 , и a 2 путем построения и решения набора одновременных уравнений и решения для параметров. Следующий синтаксис выполняет это путем формирования матрицы проекта , где каждый столбец представляет переменную, используемую, чтобы предсказать ответ (член в модели), и каждая строка соответствует одному наблюдению за теми переменными.
Введите t и y как вектор-столбцы.
t = [0 0.3 0.8 1.1 1.6 2.3]'; y = [0.6 0.67 1.01 1.35 1.47 1.25]';
Сформируйте матрицу проекта.
X = [ones(size(t)) exp(-t) t.*exp(-t)];
Вычислите коэффициенты модели.
a = X\y
a = 3×1 1.3983 -0.8860 0.3085
Поэтому моделью данных дают
y = 1 . 3 9 8 3 — 0 . 8 8 6 0 e — t + 0 . 3 0 8 5 t e — t .
Теперь оцените модель в расположенных с равными интервалами точках и постройте модель с исходными данными.
T = (0:0.1:2.5)'; Y = [ones(size(T)) exp(-T) T.*exp(-T)]*a; plot(T,Y,'-',t,y,'o'), grid on title('Plot of Model and Original Data')

Множественная регрессия
В этом примере показано, как использовать множественную регрессию для данных модели, которые являются функцией больше чем одного переменного предиктора.
Когда y является функцией больше чем одного переменного предиктора, матричные уравнения, которые описывают отношения среди переменных, должны быть расширены, чтобы хранить дополнительные данные. Это называется множественной регрессией .
Измерьте количество y для нескольких значений x 1 и x 2 . Сохраните эти значения в векторах x1 x2 , и y , соответственно.
x1 = [.2 .5 .6 .8 1.0 1.1]'; x2 = [.1 .3 .4 .9 1.1 1.4]'; y = [.17 .26 .28 .23 .27 .24]';
Модель этих данных имеет вид
y = a 0 + a 1 x 1 + a 2 x 2 .
Множественная регрессия определяет неизвестные коэффициенты a 0 , a 1 , и a 2 путем минимизации суммы квадратов отклонений данных из модели (метод наименьших квадратов).
Создайте и решите набор одновременных уравнений путем формирования матрицы проекта, X .
X = [ones(size(x1)) x1 x2];
Решите для параметров при помощи оператора обратной косой черты.
a = X\y
a = 3×1 0.1018 0.4844 -0.2847
Модель метода наименьших квадратов данных
y = 0 . 1 0 1 8 + 0 . 4 8 4 4 x 1 — 0 . 2 8 4 7 x 2 .
Чтобы подтвердить модель, найдите максимум абсолютного значения отклонения данных из модели.
Y = X*a; MaxErr = max(abs(Y - y))
MaxErr = 0.0038
Это значение намного меньше, чем любое из значений данных, указывая, что эта модель точно следует за данными.
Программная аппроксимация
В этом примере показано, как использовать функции MATLAB для:
- Вычисление коэффициентов корреляции
- Подбор кривой многочлену к данным
- Графическое изображение и вычисление доверительных границ
Загрузите демонстрационные данные о переписи из census.mat , который содержит американские данные о населении с лет 1790 — 1990.
load census
Это добавляет следующие две переменные в рабочее пространство MATLAB.
- cdate вектор-столбец, содержащий годы 1790 — 1990 с шагом 10.
- pop вектор-столбец с американской численностью населения, соответствующей каждый год в cdate .
Отобразите данные на графике.
plot(cdate,pop,'ro') title('U.S. Population from 1790 to 1990')

График показывает сильный шаблон, который указывает на высокую корреляцию между переменными.
Вычисление коэффициентов корреляции
В этом фрагменте примера вы определяете статистическую корреляцию между переменными cdate и pop выровнять по ширине моделирование данных. Для получения дополнительной информации о коэффициентах корреляции, смотрите Линейную корреляцию.
Вычислите матрицу коэффициента корреляции.
corrcoef(cdate,pop)
ans = 2×2 1.0000 0.9597 0.9597 1.0000
Диагональные элементы матрицы представляют совершенную корреляцию каждой переменной с собой и равны 1. Недиагональные элементы очень близко к 1, указывая, что существует сильная статистическая корреляция между переменными cdate и pop .
Подбор кривой многочлену к данным
Этот фрагмент примера применяется polyfit и polyval Функции MATLAB, чтобы смоделировать данные.
Вычислите подходящие параметры.
[p,ErrorEst] = polyfit(cdate,pop,2);
pop_fit = polyval(p,cdate,ErrorEst);
Отобразите на графике данные и подгонку.
plot(cdate,pop_fit,'-',cdate,pop,'+'); title('U.S. Population from 1790 to 1990') legend('Polynomial Model','Data','Location','NorthWest'); xlabel('Census Year'); ylabel('Population (millions)');

График показывает, что квадратичная аппроксимация полиномом предоставляет хорошее приближение данным.
Вычислите остаточные значения для этой подгонки.
res = pop - pop_fit; figure, plot(cdate,res,'+') title('Residuals for the Quadratic Polynomial Model')

Заметьте, что график остаточных значений показывает шаблон, который указывает, что полиномиальная сила второй степени не подходит для моделирования этих данных.
Графическое изображение и вычисление доверительных границ
Доверительные границы являются доверительными интервалами для предсказанного ответа. Ширина интервала указывает на степень уверенности в соответствии.
Этот фрагмент примера применяется polyfit и polyval к census выборочные данные, чтобы произвести доверительные границы для полиномиальной модели второго порядка.
Следующий код использует интервал ± 2 Δ , который соответствует 95%-му доверительному интервалу для больших выборок.
Оцените подгонку и ошибочную оценку предсказания (дельта).
[pop_fit,delta] = polyval(p,cdate,ErrorEst);
Отобразите на графике данные, подгонку и доверительные границы.
plot(cdate,pop,'+',. cdate,pop_fit,'g-',. cdate,pop_fit+2*delta,'r:',. cdate,pop_fit-2*delta,'r:'); xlabel('Census Year'); ylabel('Population (millions)'); title('Quadratic Polynomial Fit with Confidence Bounds') grid on

95%-й интервал указывает, что у вас есть 95%-й шанс, что новое наблюдение будет находиться в пределах границ.
Открытый пример
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
Аппроксимация производных MatLab
Для выполнения аппроксимации Лапласиана в MATLAB используется следующая функция:
del 2(11) — возвращает матрицу L дискретной аппроксимации дифференциального оператора Лапласа, примененного к функции U:
Матрица L имеет тот же размер, что и матрица U, и каждый ее элемент равен разности элемента массива U и среднего значения четырех его соседних элементов (для узлов сетки во внутренней области). Для вычислений используется пятиточечная формула аппроксимации Лапласиана.
Другие формы этой функции также возвращают матрицу L, но допускают дополнительные установки:
L = del2(U,h) — использует шаг h для установки расстояния между точками в каждом направлении (h — скалярная величина). По умолчанию h=1;
L = de!2(U,hx,hy) — использует hx и hy для точного определения расстояния между точками. Если hx — скалярная величина, то задается расстояние между точками в направлении оси х, если hx — вектор, то он должен иметь размер. равный числу столбцов- матрицы U , и точно определять координаты точек по оси х. Аналогично если hy — скалярная величина, то задается расстояние между точками в направлении оси у, если hy — вектор, то он должен иметь размер. равный числу строк матрицы U, и точно определять координаты точек по оси у:
L = del2(U,hx.hy,hz. ) — если U является многомерным массивом, то расстояния задаются с помощью параметров hx, hy, hz. Пример: