Программное аппроксимирование

Функции MATLAB для полиномиальных моделей

Два MATLAB® функции могут смоделировать ваши данные с помощью полинома.

Аппроксимации полиномом

Функция

Описание

polyfit

polyfit(x,y,n) находит коэффициенты полинома p(x) степени n который подходит для y данные путем минимизации суммы квадратов отклонений данных от модели (аппроксимация методом наименьших квадратов).

polyval

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')

Figure contains an axes. The axes with title Plot of y Versus t contains an object of type line.

Можно попробовать смоделировать эти данные с помощью полиномиальной функции второй степени,

y=a2t2+a1t+a0.

Неизвестные коэффициенты, a0, a1, и a2, вычисляются путем минимизации суммы квадратов отклонений данных от модели (аппроксимация методом наименьших квадратов).

Использование polyfit чтобы найти полиномиальные коэффициенты.

p = polyfit(t,y,2)
p = 1×3

   -0.2942    1.0231    0.4981

MATLAB вычисляет полиномиальные коэффициенты в нисходящих степенях.

Полиномиальная модель данных второй степени задается уравнением

y=-0.2942t2+1.0231t+0.4981.

Вычислите полином с равномерными интервалами времени, 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)')

Figure contains an axes. The axes with title Plot of Data (Points) and Model (Line) contains 2 objects of type line.

Вычислите модель в временном векторе данных

y2 = polyval(p,t);

Вычислите невязки.

res = y - y2;

Постройте график невязок.

figure, plot(t,res,'+')
title('Plot of the Residuals')

Figure contains an axes. The axes with title Plot of the Residuals contains an object of type line.

Заметьте, что подгонка второй степени примерно соответствует основной форме данных, но не захватывает плавную кривую, на которой, по-видимому, лежат данные. В невязках, по-видимому, есть шаблон, который указывает, что может потребоваться другая модель. Полином пятой степени (показан следующим) делает лучшую работу по отслеживанию колебаний данных.

Повторите упражнение, на этот раз используя полином пятой степени от 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')

Figure contains an axes. The axes with title Fifth-Degree Polynomial Fit contains 2 objects of type line.

Примечание

Если вы пытаетесь смоделировать физическую ситуацию, всегда важно учитывать, является ли модель определенного порядка значимой в вашей ситуации.

Линейная модель с неполиномиальными терминами

Этот пример показывает аппроксимацию данных с помощью линейной модели, содержащей неполиномиальные условия.

Когда полиномиальная функция не дает удовлетворительной модели ваших данных, можно попробовать использовать линейную модель с неполиномиальными терминами. Например, рассмотрите следующую функцию, которая линейна в параметрах a0, a1, и a2, но нелинейный в t данные:

y=a0+a1e-t+a2te-t.

Можно вычислить неизвестные коэффициенты a0, a1, и a2 путем построения и решения набора одновременных уравнений и решения для параметров. Следующий синтаксис достигает этого путем формирования матрицы проекта, где каждый столбец представляет переменную, используемую для предсказания отклика (a члена в модели), и каждая строка соответствует одному наблюдению этих переменных.

Введите 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.3983-0.8860e-t+0.3085te-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')

Figure contains an axes. The axes with title Plot of Model and Original Data contains 2 objects of type line.

Множественная регрессия

Этот пример показывает, как использовать множественную регрессию для данных моделей, которая является функцией более чем одной переменной.

Когда y является функцией более чем одной переменной-предиктора, матричные уравнения, которые выражают отношения между переменными, должны быть расширены, чтобы соответствовать дополнительным данным. Это называется множественной регрессией.

Измерьте количество y для нескольких значений x1 и x2. Сохраните эти значения в векторах 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=a0+a1x1+a2x2.

Множественная регрессия решает для неизвестных коэффициентов a0, a1, и a2 путем минимизации суммы квадратов отклонений данных от модели (аппроксимация методом наименьших квадратов).

Создайте и решите набор одновременных уравнений, сформировав матрицу проекта, X.

X = [ones(size(x1))  x1  x2];

Решить для параметров можно с помощью оператора обратной косой черты.

a = X\y
a = 3×1

    0.1018
    0.4844
   -0.2847

Модель аппроксимации данных методом наименьших квадратов

y=0.1018+0.4844x1-0.2847x2.

Чтобы подтвердить модель, найдите максимум абсолютного значения отклонения данных от модели.

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')

Figure contains an axes. The axes with title U.S. Population from 1790 to 1990 contains an object of type line.

График показывает сильный шаблон, что указывает на высокую корреляцию между переменными.

Вычислите коэффициенты корреляции

В этом фрагменте примера вы определяете статистическую корреляцию между переменными cdate и pop для обоснования моделирования данных. Для получения дополнительной информации о коэффициентах корреляции см. «Линейная корреляция».

Вычислите матрицу коэффициента корреляции.

corrcoef(cdate,pop)
ans = 2×2

    1.0000    0.9597
    0.9597    1.0000

Диагональные элементы матрицы представляют совершенную корреляцию каждой переменной с самой собой и равны 1. Off-диагональные элементы очень близки к 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)');

Figure contains an axes. The axes with title U.S. Population from 1790 to 1990 contains 2 objects of type line. These objects represent Polynomial Model, Data.

График показывает, что квадратично-полиномиальное приближение обеспечивает хорошее приближение к данным.

Вычислите невязки для этой подгонки.

res = pop - pop_fit;
figure, plot(cdate,res,'+')
title('Residuals for the Quadratic Polynomial Model')

Figure contains an axes. The axes with title Residuals for the Quadratic Polynomial Model contains an object of type line.

Заметьте, что график невязок показывает шаблон, который указывает, что полином второй степени может быть не подходящим для моделирования этих данных.

Графическое изображение и вычисление доверительных границ

Доверительные границы являются доверительными интервалами для предсказанного отклика. Ширина интервала указывает на степень уверенности в подгонке.

Этот фрагмент примера применяется 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

Figure contains an axes. The axes with title Quadratic Polynomial Fit with Confidence Bounds contains 4 objects of type line.

Интервал 95% указывает, что у вас есть 95% вероятность того, что новое наблюдение попадет в границы.