Лабораторная работа №2 / Лаба2_Метод наименьших квадратов
.doc
Министерство Образования РФ
Санкт- Петербургский государственный
электротехнический университет “ЛЭТИ”
ФКТИ
Кафедра ВМ
Отчет по лабораторной работе №2
“МЕТОД НАИМЕНЬШИХ КВАДРАТОВ”
По дисциплине “Вычислительная математка”
Вариант №1
Выполнил:
группа: 3371,
Артемьев Ю.Г
Проверил:
Ингстер Ю.И.
Санкт – Петербург
2005
Текст программы(МЕТОД НАИМЕНЬШИХ КВАДРАТОВ ):
Basis1.m:
function y=basis1(x,i)
y = x.^i
Work1.m:
% Создаем матрицу g, составленную из столбцов базисных функций
for i=0:m,
g(:,i+1)=basis1(x',i);
end
% Вычисляем матрицу Грама:
gram=zeros(m+1);
for i=1:m+1,
for k=1:m+1
gram(i,k)=sum(g(:,i).*g(:,k));
end,
end
% Вычисляем столбец правых частей:
b=zeros(m+1,1);
for i = 1:m+1,
b(i)=sum(y'.*g(:,i));
end
% Вычисляем строку t коэффициентов модели:
t=gram^(-1)*b;
t=t'
% Вычисляем строку f значений модельного многочлена:
f=g(:,1)*t(1);
for i=2:m+1,
f=f + g(:,i)*t(i);
end
f=f';
% Запоминаем среднеквадратичную погрешность аппроксимации:
nx=max(size(x));
err(m)=sqrt(sum((y-f).^2)/nx)
plot(x,y,'*', x,f), grid, pause
Laba2_1:
% ЧАСТЬ 1: АЛГЕБРАИЧЕСКАЯ АППРОКСИМАЦИЯ
clc;
clear;
a=0;
a0=0; a1=0; a2=1; a3=-1;
b=5;
n=25;
x=a:(b-a)/n:b;
y0=a0 + a1*x + a2*exp(-x) + a3*exp(-2*x);
y=y0 + 0.03 * randn(size(x));
plot(x,y,'*'), grid, pause
m=1, work1, f1=f; t1=t;
m=2, work1, f2=f; t2=t;
m=3, work1, f3=f; t3=t;
m=4, work1, f4=f; t4=t;
p=polyfit(x,y,4)
err1=err
save result11 t1 t2 t3 t4 p err1
nm=plot(x,y,'*', x,f1,'-.', x,f2,'--', x,f3,':', x,f4, x,y0,'o'), grid, pause
saveas( nm(1,:),'grafik2.fig' );
Basis2.m:
function y=basis2(x,i)
if i==0, y=x*0+1;
elseif i==1, y=x;
elseif i==2, y=exp(-x);
elseif i==3, y=exp(-2*x);
end;
Work2.m:
% Создаем матрицу g, составленную из столбцов базисных функций
for i=0:m,
g(:,i+1)=basis2(x',i);
end
% Вычисляем матрицу Грама:
gram=zeros(m+1);
for i=1:m+1,
for k=1:m+1
gram(i,k)=sum(g(:,i).*g(:,k));
end,
end
% Вычисляем столбец правых частей:
b=zeros(m+1,1);
for i = 1:m+1,
b(i)=sum(y'.*g(:,i));
end
% Вычисляем строку t коэффициентов модели:
t=gram^(-1)*b;
t=t'
% Вычисляем строку f значений модельного многочлена:
f=g(:,1)*t(1);
for i=2:m+1,
f=f + g(:,i)*t(i);
end
f=f';
% Запоминаем среднеквадратичную погрешность аппроксимации:
nx=max(size(x));
err(m)=sqrt(sum((y-f).^2)/nx)
plot(x,y,'*', x,f), grid, pause
Laba2_2:
% ЧАСТЬ 2: АППРОКСИМАЦИЯ ЭКСПОНЕНТАМИ
clc;
clear;
a=0;
b=5;
a0=0; a1=0; a2=1; a3=-1;
n=25;
x=a:(b-a)/n:b;
y0=a0+ a1*x + a2*exp(-x) + a3*exp(-2*x);
y=y0 + 0.03 * randn(size(x));
plot(x,y,'*'), grid, pause
m=1, work2, f1=f; t1=t;
m=2, work2, f2=f; t2=t;
m=3, work2, f3=f; t3=t;
err2=err
save result12 t1 t2 t3 err2
plot(x,y,'*', x,f1,'-.', x,f2,'--', x,f3,':', x,y0,'o'), grid, pause