exponenta event banner

Программная подгонка

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

Войти 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. Внедиагональные элементы очень близки к 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 выборка данных для создания доверительных границ для модели полинома второго порядка.

Следующий код использует интервал ± , что соответствует 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%.