Лаб 5 / Отчет 5
.docxМинистерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
Национальный исследовательский университет “МИЭТ”
Факультет Прикладных информационных технологий
Отчет по лабораторной работе №5
Вариант 7
Дисциплина: Численные методы
Выполнил:
Студент П-43
Губарев Сергей
Москва, 2022 год
Аппроксимация данных методом наименьших квадратов
Цель работы: изучение метода наименьших квадратов для аппроксимации данных; приобретение навыков программирования метода наименьших квадратов для аппроксимации экспериментальных данных; приобретение навыков использования стандартных средств системы Matlab для задачи аппроксимации.
Ход работы
Задание 1
% задача 1. Написать m-файлы для реализации метода наименьших
% квадратов для построения линейной регрессии по x и y. Взять
% 10 первых точек из своего варианта. Вычислить медиану, средние
% значения, смещенную и несмещенную оценку среднеквадратичного
% отклонения, коэффициент корреляции.
clear
% точки по варианту (7)
x = [-0.5:0.04:1.5]
Y = [0.8381, 0.6434, 0.8021, 0.5503, 0.7475, 0.8743, 0.7827 0.9828, 0.7537, 0.5455, ...
0.6848, 0.9725, 0.8272, 0.8888, 0.9585, 0.5737, 0.7556, 0.7446 0.7009, 0.8001, ...
1.0066, 0.8044, 0.9543, 0.7044, 0.7818, 0.6713, 0.7297, 0.7109 0.7870, 0.7939, ...
0.6826, 0.7843, 0.7412, 0.6961, 0.6057, 0.6965, 0.5632, 0.3903 0.5605, 0.4690, ...
0.4037, 0.5651, 0.6047, 0.2716, 0.3140, 0.1634, 0.3118, -0.1071 0.2734, 0.1377, ...
0.1034];
% первые 10 точек для задания
Y1_zadanie1 = [0.8381, 0.6434, 0.8021, 0.5503, 0.7475, 0.8743, 0.7827 0.9828, 0.7537, 0.5455];
X1_zadanie1 = x(1:10);
% средние значения от массивов точек из задания
srednee_znachenie_X1=mean(X1_zadanie1);
srednee_znachenie_Y1=mean(Y1_zadanie1);
% погрешности точек, заданных по условию
pogreshnost_znachenia_X1=X1_zadanie1-srednee_znachenie_X1;
pogreshnost_znachenia_Y1=Y1_zadanie1-srednee_znachenie_Y1;
% параметры b0 и b1 (для линейной регрессии)
b1_parametr=sum(pogreshnost_znachenia_X1.*pogreshnost_znachenia_Y1)/sum(pogreshnost_znachenia_X1.^2)
b0_parametr=srednee_znachenie_Y1-b1_parametr.*srednee_znachenie_X1
% для графика линейной регрессии
graph_x=[X1_zadanie1(1) X1_zadanie1(10)];
graph_y=b0_parametr+b1_parametr*graph_x;
figure(1)
plot(graph_x, graph_y, X1_zadanie1, Y1_zadanie1, '*')
% вторая часть задачи
% поиск несмещенной оценки среднеквадратичного отклонения, смещенной,
% медианы и коэффициента корелляции
nesmeshennaya_otsenka_sr_otkloneniya=std(Y1_zadanie1,0)
smeshennaya_otsenka_sr_otkloneniya=std(Y1_zadanie1,1)
mediana_tochek_x=median(X1_zadanie1)
mediana_tochek_y=median(Y1_zadanie1)
koefficient_korellyatsii=corrcoef(X1_zadanie1,Y1_zadanie1)
Задание 2
% задача 2. Написать m-файлы функции для реализации метода наименьших
% квадратов для построения нелинейной полиномиальной регрессии со
% степенным базисом (n = 3, 5, 7) и построить аппроксимирующие кривые.
clear
% точки по варианту (7)
x = [-0.5:0.04:1.5]
Y = [0.8381, 0.6434, 0.8021, 0.5503, 0.7475, 0.8743, 0.7827 0.9828, 0.7537, 0.5455, ...
0.6848, 0.9725, 0.8272, 0.8888, 0.9585, 0.5737, 0.7556, 0.7446 0.7009, 0.8001, ...
1.0066, 0.8044, 0.9543, 0.7044, 0.7818, 0.6713, 0.7297, 0.7109 0.7870, 0.7939, ...
0.6826, 0.7843, 0.7412, 0.6961, 0.6057, 0.6965, 0.5632, 0.3903 0.5605, 0.4690, ...
0.4037, 0.5651, 0.6047, 0.2716, 0.3140, 0.1634, 0.3118, -0.1071 0.2734, 0.1377, ...
0.1034];
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')
Задания 3 – 5
% задачи 3-5.Построить график и отобразить на нем следующие данные:
% исходные данные в виде точек и графики аппроксимирующих функций. Использовать
% стандартные средства Matlab для построения соответствующих кривых.
% Сравнить результаты. Построить графики ошибок аппроксимации для всех n.
clear
% точки по варианту (7)
x = [-0.5:0.04:1.5]
y = [0.8381, 0.6434, 0.8021, 0.5503, 0.7475, 0.8743, 0.7827 0.9828, 0.7537, 0.5455, ...
0.6848, 0.9725, 0.8272, 0.8888, 0.9585, 0.5737, 0.7556, 0.7446 0.7009, 0.8001, ...
1.0066, 0.8044, 0.9543, 0.7044, 0.7818, 0.6713, 0.7297, 0.7109 0.7870, 0.7939, ...
0.6826, 0.7843, 0.7412, 0.6961, 0.6057, 0.6965, 0.5632, 0.3903 0.5605, 0.4690, ...
0.4037, 0.5651, 0.6047, 0.2716, 0.3140, 0.1634, 0.3118, -0.1071 0.2734, 0.1377, ...
0.1034];
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')