Добавил:
Помогу с учёбой на Прикладной информатике, пишите, найдёте сами Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СПИНТех - Прикладная информатика / ЧМ_ЛР-5_Толстов_П-31

.docx
Скачиваний:
13
Добавлен:
01.02.2023
Размер:
207.2 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное автономное образовательное

учреждение высшего образования

Национальный исследовательский университет “МИЭТ”

Институт Системной и программной инженерии и информационных технологий

Дисциплина: Численные методы

Лабораторная работа №5

«Аппроксимация данных методом наименьших квадратов»

Вариант 21

Выполнил:

Студент П-31

Толстов Д.В.

Преподаватель:

Лавров И.В.

Москва 2022

Теория:

В общем случае рассматривают линейную по параметрам регрессионную модель вида

y = b0+b1*a1(x) +…+ bk-1*a k-1(x),

где a1(x), … , a k-1(x), − известные функции; b0, b1, … , bk-1 − неизвестные параметры.

Пусть имеется n наблюдений (xi, yi), которые являются результатом реализации случайного вектора (X, Y). Подставим в вышеуказанную модель:

y = b0+b1*a1(xi) +…+ bk-1*a k-1(xi) + εi, где i = 1, 2, … n; εi − случайные независимые друг относительно друга и распределенные по нормальному закону ошибки наблюдений.

По методу наименьших квадратов в качестве оценок bj принимают значения , дающие минимум функции.

В матричных обозначениях эту систему уравнений можно записать в виде:

Задание:

  1. Написать m-файлы для реализации метода наименьших квадратов для построения линейной регрессии по x и y. Взять 10 первых точек из своего варианта. Вычислить медиану, средние значения, смещенную и несмещенную оценку среднеквадратичного отклонения, коэффициент корреляции.

x = [5:0.06:8];

Y = [1.9663 1.6476 0.7114 2.4589 3.2220 3.0810 2.9495 4.4071 ...

3.7540 4.3238 4.5238 4.5653 5.0215 4.7886 4.1480 4.4855 ...

5.1016 4.2923 4.6496 4.2193 3.9369 3.8189 3.9092 3.9575 ...

3.5582 3.8837 2.9589 2.0519 2.5481 2.3186 2.1911 2.0457 ...

2.2128 1.0942 1.3103 1.0029 0.5667 1.7896 0.4738 -0.2055 ...

1.2955 0.4975 -0.2888 0.5275 0.7079 -0.3114 0.1746 0.0137 ...

-0.5175 0.6409 0.0295];

n1 = 10;

x1 = x(1:n1);

y1 = Y(1:n1);

x_ = 0;

y_ = 0;

x2_ = 0;

xy_ = 0;

for i1 = 1:n1

x_ = x_ + x(i1);

y_ = y_ + Y(i1);

x2_ = x2_ + x(i1) * x(i1);

xy_ = xy_ + x(i1) * Y(i1);

end

x_ = x_ / n1;

y_ = y_ / n1;

x2_ = x2_ / n1;

xy_ = xy_ / n1;

b0 = (x2_ * y_ - x_ * xy_) / (x2_ - x_ * x_);

b1 = (xy_ - x_ * y_) / (x2_ - x_ * x_);

x_gr = x(1):0.01:x(n1);

y_gr = b0 + b1 * x_gr;

plot(x_gr, y_gr, x1, y1, '*')

median_x = median(x1)

median_y = median(y1)

std_s = std(y1,1) %смещенная оценка среднеквадратичного отклонения

std_n = std(y1,0) %несмещенная оценка среднеквадратичного отклонения

cor = corrcoef(x1,y1) %коэффициент корреляции

  1. Написать m-файлы функции для реализации метода наименьших квадратов для построения нелинейной полиномиальной регрессии со степенным базисом (n = 3, 5, 7) и построить аппроксимирующие кривые.

x = [5:0.06:8];

Y = [1.9663 1.6476 0.7114 2.4589 3.2220 3.0810 2.9495 4.4071 ...

3.7540 4.3238 4.5238 4.5653 5.0215 4.7886 4.1480 4.4855 ...

5.1016 4.2923 4.6496 4.2193 3.9369 3.8189 3.9092 3.9575 ...

3.5582 3.8837 2.9589 2.0519 2.5481 2.3186 2.1911 2.0457 ...

2.2128 1.0942 1.3103 1.0029 0.5667 1.7896 0.4738 -0.2055 ...

1.2955 0.4975 -0.2888 0.5275 0.7079 -0.3114 0.1746 0.0137 ...

-0.5175 0.6409 0.0295];

n = 51;

y = Y';

k3 = 3;

k5 = 5;

k7 = 7;

Y3 = 0;

Y5 = 0;

Y7 = 0;

#----- k = 3

A = ones(n, k3);

for i = 1:n

for j = 2:k3

A(i, j) = x(i).^(j - 1);

end

end

b_ = inv(A' * A) * A' * y;

for i = 1:k3

Y3 = Y3 + b_(i)*x.^(i - 1);

end

#----- k = 5

A = ones(n, k5);

for i = 1:n

for j = 2:k5

A(i, j) = x(i).^(j - 1);

end

end

b_ = inv(A' * A) * A' * y;

for i = 1:k5

Y5 = Y5 + b_(i)*x.^(i - 1);

end

#----- k = 7

A = ones(n, k7);

for i = 1:n

for j = 2:k7

A(i, j) = x(i).^(j - 1);

end

end

b_ = inv(A' * A) * A' * y;

for i = 1:k7

Y7 = Y7 + b_(i)*x.^(i - 1);

end

plot(x,Y3,'m',x,Y5,'r',x,Y7,'g',x,y,'.')

y=y';

figure

plot(x,Y3-y,'m',x,Y5-y,'r',x,Y7-y,'g')

Аппроксимирующие кривые и график ошибок аппроксимации:

  1. Использовать стандартные средства Matlab для построения соответствующих кривых. Сравнить результаты.

x = [5:0.06:8];

Y = [1.9663 1.6476 0.7114 2.4589 3.2220 3.0810 2.9495 4.4071 ...

3.7540 4.3238 4.5238 4.5653 5.0215 4.7886 4.1480 4.4855 ...

5.1016 4.2923 4.6496 4.2193 3.9369 3.8189 3.9092 3.9575 ...

3.5582 3.8837 2.9589 2.0519 2.5481 2.3186 2.1911 2.0457 ...

2.2128 1.0942 1.3103 1.0029 0.5667 1.7896 0.4738 -0.2055 ...

1.2955 0.4975 -0.2888 0.5275 0.7079 -0.3114 0.1746 0.0137 ...

-0.5175 0.6409 0.0295];

p3 = polyfit(x, y, 3);

Y3 = polyval(p3, x);

p5 = polyfit(x, y, 5);

Y5 = polyval(p5, x);

p7 = polyfit(x, y, 7);

Y7 = polyval(p7, x);

plot(x, Y3, 'm', x, Y5, 'r', x, Y7, 'g', x, y, '.')

figure

plot(x, Y3-y, 'm', x, Y5-y, 'r', x, Y7-y, 'g')

Аппроксимирующие кривые и график ошибок аппроксимации:

Сравнение результатов: стандартные средства Matlab решают задачу аппроксимации точнее, чем метод наименьших квадратов. С увеличением значения степенного базиса уменьшается ошибка аппроксимации и, следовательно, растет точность аппроксимирующей кривой.

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