Два MATLAB® функции могут смоделировать ваши данные с помощью полинома.
Аппроксимации полиномом
Функция | Описание |
---|---|
| |
|
Этот пример показов, как данные модели с полиномом.
Измерьте количество 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')
Можно попробовать смоделировать эти данные с помощью полиномиальной функции второй степени,
Неизвестные коэффициенты, , , и , вычисляются путем минимизации суммы квадратов отклонений данных от модели (аппроксимация методом наименьших квадратов).
Использование polyfit
чтобы найти полиномиальные коэффициенты.
p = polyfit(t,y,2)
p = 1×3
-0.2942 1.0231 0.4981
MATLAB вычисляет полиномиальные коэффициенты в нисходящих степенях.
Полиномиальная модель данных второй степени задается уравнением
Вычислите полином с равномерными интервалами времени, 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)')
Вычислите модель в временном векторе данных
y2 = polyval(p,t);
Вычислите невязки.
res = y - y2;
Постройте график невязок.
figure, plot(t,res,'+') title('Plot of the Residuals')
Заметьте, что подгонка второй степени примерно соответствует основной форме данных, но не захватывает плавную кривую, на которой, по-видимому, лежат данные. В невязках, по-видимому, есть шаблон, который указывает, что может потребоваться другая модель. Полином пятой степени (показан следующим) делает лучшую работу по отслеживанию колебаний данных.
Повторите упражнение, на этот раз используя полином пятой степени от 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')
Примечание
Если вы пытаетесь смоделировать физическую ситуацию, всегда важно учитывать, является ли модель определенного порядка значимой в вашей ситуации.
Этот пример показывает аппроксимацию данных с помощью линейной модели, содержащей неполиномиальные условия.
Когда полиномиальная функция не дает удовлетворительной модели ваших данных, можно попробовать использовать линейную модель с неполиномиальными терминами. Например, рассмотрите следующую функцию, которая линейна в параметрах , , и , но нелинейный в данные:
Можно вычислить неизвестные коэффициенты , , и путем построения и решения набора одновременных уравнений и решения для параметров. Следующий синтаксис достигает этого путем формирования матрицы проекта, где каждый столбец представляет переменную, используемую для предсказания отклика (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
Поэтому модель данных задается как
Теперь оцените модель в регулярно разнесенных точках и постройте график модели с исходными данными.
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')
Этот пример показывает, как использовать множественную регрессию для данных моделей, которая является функцией более чем одной переменной.
Когда y является функцией более чем одной переменной-предиктора, матричные уравнения, которые выражают отношения между переменными, должны быть расширены, чтобы соответствовать дополнительным данным. Это называется множественной регрессией.
Измерьте количество для нескольких значений и . Сохраните эти значения в векторах 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]';
Модель этих данных имеет вид
Множественная регрессия решает для неизвестных коэффициентов , , и путем минимизации суммы квадратов отклонений данных от модели (аппроксимация методом наименьших квадратов).
Создайте и решите набор одновременных уравнений, сформировав матрицу проекта, X
.
X = [ones(size(x1)) x1 x2];
Решить для параметров можно с помощью оператора обратной косой черты.
a = X\y
a = 3×1
0.1018
0.4844
-0.2847
Модель аппроксимации данных методом наименьших квадратов
Чтобы подтвердить модель, найдите максимум абсолютного значения отклонения данных от модели.
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')
График показывает сильный шаблон, что указывает на высокую корреляцию между переменными.
В этом фрагменте примера вы определяете статистическую корреляцию между переменными 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)');
График показывает, что квадратично-полиномиальное приближение обеспечивает хорошее приближение к данным.
Вычислите невязки для этой подгонки.
res = pop - pop_fit; figure, plot(cdate,res,'+') title('Residuals for the Quadratic Polynomial Model')
Заметьте, что график невязок показывает шаблон, который указывает, что полином второй степени может быть не подходящим для моделирования этих данных.
Доверительные границы являются доверительными интервалами для предсказанного отклика. Ширина интервала указывает на степень уверенности в подгонке.
Этот фрагмент примера применяется 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
Интервал 95% указывает, что у вас есть 95% вероятность того, что новое наблюдение попадет в границы.