В системе MATLAB приближение данных полиномом реализуется функцией polyfit (интерполяция или аппроксимация в зависимости от соотношения размерности массивов x, y и степени полинома) :
p = polyfit(x,y,n)
[p,S] = polyfit(x,y,n)
[p,S,mu] = polyfit(x,y,n)
p = polyfit(x, y, n) – возвращает вектор коэффициентов полинома р(х) степени n, который с наименьшей среднеквадратичной погрешностью аппроксимирует функцию у(х) в смысле метода наименьших квадратов. Результатом является вектор-строка длиной n+1, содержащий коэффициенты полинома в порядке уменьшения степеней х. Если число экспериментальных данных (размерность x и y) меньше или равно n+1, то реализуется обычная полиномиальная интерполяция, при которой график полинома точно проходит через узловые точки с координатами (х, у), хранящиеся в векторах х и у. В противном случае (если размерность x и y больше n+1) точного совпадения графика с узловыми точками не наблюдается;
[p, S] = polyfit(x, y, n) – возвращает коэффициенты полинома р и массив записей S, который можно использовать совместно с функцией polyval для оценки погрешностей или предсказания. Если ошибки задания исходной функции y(x) независимы и распределены по номинальному закону с постоянной дисперсией, то функция polyval обеспечивает 50-процентный доверительный интервал;
[p, S, mu] = polyfit(x, y, n) – возвращает коэффициенты полинома р и структуру S для использования вместе с функцией polyval с целью оценки или предсказания погрешности, но так, что прoисходит центрирование (нормирование) и масштабирование х, xnorm=(х-mu(l))/mu(2), где mu(l) = mean(x) и mu(2) = std(x). Центрирование и масштабирование не только улучшают свойства степенного многочлена, получаемого при помощи polyval, но и значительно повышают качественные характеристики самого алгоритма аппроксимации.
К сожалению, при степени полинома свыше 5 погрешность полиномиальной регрессии сильно возрастает и ее применение без центрирования и масштабирования становится рискованным.
y = polyval(p,x) – возвращает значения полинома степени n, для аргумента (в точках) x. Входной аргумент p – вектор длины n+1, чьи элементы – коэффициенты должны быть заданы.
Покажем применение приближения данных с использованием функций polyfit(x, y, n) и polyval(p,x). Пусть дано
Х
0,1
0,3
0,5
0,7
0,9
1,1
1,3
1,5
Y
5,332
4,488
2,432
1,803
2,223
2,467
4,127
5,091
В поле команд MATLAB задаем массивы x ( =0.2) и y, набирая
Формируем вспомогательный массив xi для сглаженного отображения линий найденных полиномов с маленьким шагом =0.01
» xi=[0.1:0.01:1.5];
Вычислим значения полиномов в точках с мелкой сеткой массива xi:
» f8=polyval(p8, xi);
» f4=polyval(p4, xi);
Печатаем результат
» plot(x,y,'ob',xi,f8,'k:',xi,f4,'k-');
» legend ('табличные данные','n=8','n=4',0);
» title ('Приближение табличной функции полиномом cтепени n');
Обратите внимание на то, что при полиномиальной регрессии для n=4 (размерность x и y больше n+1) узловые точки не ложатся точно на график полинома, поскольку их приближение к нему является наилучшим в смысле минимального среднеквадратического отклонения (аппроксимация).
А для n=8 (размерность x и y меньше n+1) узловые точки точно легли на график полинома (интерполяция).