Программная аппроксимация

Функции 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 путем построения и решения набора одновременных уравнений и решения для параметров. Следующий синтаксис выполняет это путем формирования матрицы проекта, где каждый столбец представляет переменную, используемую, чтобы предсказать ответ (член в модели), и каждая строка соответствует одному наблюдению за теми переменными.

Введите 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 object. The axes object with title Plot of Model and Original Data contains 2 objects of type line.

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

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

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

Измерьте количество y для нескольких значений x1 и x2. Сохраните эти значения в векторах x1x2 , и 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 object. The axes object 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. Недиагональные элементы очень близко к 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 object. The axes object 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 object. The axes object 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 object. The axes object with title Quadratic Polynomial Fit with Confidence Bounds contains 4 objects of type line.

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