Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЧМиМТТС.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.87 Mб
Скачать

Аппроксимация данных

При решении задач приближения функции можно выделить два направления: 1) процесс интерполяции, определяющий вид функции (полинома), совпадающей с табличными данными; 2) процесс аппроксимации, обеспечивающий оптимальное расположение линии функции (регрессии) среди множества экспериментальных точек (возможно содержащих погрешности), не обязательно совпадающей с ними.

Рассмотрим некоторые возможности MATLAB для обеих этих задач.

Приближение данных полиномом

В системе 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, набирая

» x=[0.1:0.2:1.5];

» y=[5.332 4.488 2.432 1.803 2.223 2.467 4.127 5.091];

Вычислим коэффициенты полиномов степени 8 и 4

» p8=polyfit(x, y, 8);

p8= –84.708 361.1 –527.32 265.53 0.0 38.354 –73.197 18.412 4.1822

» p4=polyfit(x, y, 4);

p4= –10.356 32.7 –26.462 0.74862 5.5629

Формируем вспомогательный массив 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) узловые точки точно легли на график полинома (интерполяция).