最小二乘法matlab程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
理解最小二乘法的基本原理,通过计算机解决相关问题;用matlab程序解决问题。
1.实验目的:
(1)理解最小二乘法的基本原理,通过计算机解决相关问题;
(2)用matlab解决问题。
2.实验内容:
给定一组实验数据(Xi,Yi)(i=1,2,…n)编写一个通用程序,计算线性拟合和二次拟合(x,y)的值。
3.程序源代码及运行结果:
(一)线性拟合
x=[12345678]
y=[15.320.527.436.649.165.687.8117.6]
x1=0;
x12=0;
y1=0;
xy=0;
n=8;
for i=1:n
x1=x1+x(i);
x12=x12+x(i)^2
y1=y1+y(i);
xy=xy+x(i)*y(i);
end
x1
y1
x12
xy
a0=(y1*x12-x1*xy)/(n*x12-x1*x1);
a1=(n*xy-x1*y1)/(n*x12-x1*x1);
a0
a1
yy=a0+a1*x
plot(x,y,'o')
plot(yy)
运行结果:
x=
12345678
y=
15.300020.500027.400036.600049.100065.6000 87.8000117.6000
x12=
1514305591140204
x1=
36
y1=
419.9000
x12=
204
xy=
2.4794e+003
a0=
-10.7107
a1=
14.0440
yy=
Columns1through7
3.333317.377431.421445.465559.509573.5536 87.5976
Column8
101.6417
>>
(二)二次拟合
xx=0;
yy=0;
x2=0;
x3=0;
x4=0;
xy=0;
y2=0;
n=8;
x1=1:8;
y1=[15.320.527.436.649.165.687.8117.6];
for i=1:n
xx=xx+x1(i);
x2=x2+x1(i)^2;
x3=x3+x1(i)^3;
x4=x4+x1(i)^4;
yy=yy+y1(i);
xy=xy+x1(i)*y1(i);
y2=y2+x1(i)*x1(i)*y1(i);
end
xx
x2
x3
x4
yy
xy
y2
A=[n xx x2;xx x2x3;x2x3x4]; B=[yy;xy;y2];
C=A\B;
C
运行结果:
xx=
36
x2=
204
x3=
1296
x4=
8772
yy=
419.9000
xy=
2.4794e+003
y2=
1.6347e+004
C=
18.8518
-3.6935
1.9708
>>
(三)线性拟合和二次拟合:function ZXE(x,y,m)
S=zeros(1,2*m+1);
T=zeros(m+1,1);
for k=1:2*m+1
S(k)=sum(x.^(k-1)); end
for k=1:m+1
T(k)=sum(x.^(k-1).*y); end
A=zeros(m+1,m+1);
a=zeros(m+1,1);
for i=1:m+1
for j=1:m+1
A(i,j)=S(i+j-1);
end
end
a=A\T;
for k=1:m+1
fprintf('a[%d]=%f\n',k,a(k)); end
运行结果:
>>ZXE(x,y,1);
a[1]=-10.710714
a[2]=14.044048
>>ZXE(x,y,2);
a[1]=18.851786
a[2]=-3.693452
a[3]=1.970833
>>
图像: