最小二乘法matlab
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值实验报告一
1.数值实验问题
已知液体的表面张力s是温度T的线性函数s=aT+b,对某种液体有表如下的实验数据。
试用最小二乘法确定系数a,b。
并通过图形展示拟合效果。
2.数值方法
最小二乘法。
3.数值结果
方法一的系数:b0 =67.9593
a0 = -0.0799
方法二的系数:b1 =67.9593
a1 =-0.0799
方法三的系数:c2 =67.9289
b2 =-0.0775
a2 =-2.4294e-005
方法三为二次拟合,c2为常数项,b2为一次项的系数,a2为二次项的系数。
结果图形展示:
4.讨论
数值实验中出现的问题:由于方法一是书上的运行过程中并没有什么问题,但是在方法二中当单独运行方法二时并不会出现问题,但是当与方法一同时运行时就会报错,经过对比分析发现是由于方法一与方法二的变量重合但是变量内的数值不通用造成的,任意更改重合变量中的一个后程序就可以完美运行了;在对方法三进行编程时遇到了编程完成但是找不到错误的问题,进过老师的指导发现是有一个变量的结果与预知不符,在老师的帮助下重新对该变量编程,最终完成了方法三的编写。
分析实验结果:通过对实验结果的分析,发现三种方法的拟合曲线稍有差别,但是差别不大,均围绕说给的表格的数据拟合,没有大的偏移,这说明这三种方法都是有效可行的。
程序代码:
方法一:
s=[68.0 67.1 66.4 65.6 64.6 61.8 61.0 60.0]';
T=[0 10 20 30 40 80 90 95]';
T1=ones(8,1);
G=[T1 T];
Z=G\s ;
b0=Z(1);
a0=Z(2);
plot(T,s,'r*',T,a0*T+b0,'r')
方法二:
s=[68.0 67.1 66.4 65.6 64.6 61.8 61.0 60.0]';
T=[0 10 20 30 40 80 90 95]';
X=1:100;
wi=ones(8,1);
A(1,1)=0;
A(1,2)=0;
A(2,1)=0;
A(2,2)=0;
B(1,1)=0;
B(2,1)=0;
for i=1:8,
A(1,1)=A(1,1)+wi(i);
end
for i=1:8,
A(1,2)=A(1,2)+wi(i).*T(i);
A(2,1)=A(1,2);
end
for i=1:8,
A(2,2)=A(2,2)+wi(i).*T(i).^2;
end
for i=1:8,
B(1,1)=B(1,1)+wi(i).*s(i);
end
for i=1:8,
B(2,1)=B(2,1)+wi(i).*s(i).*T(i);
end
C=A\B;
b1=C(1);
a1=C(2);
plot(X,a1*X+b1,'b+')
方法三:
s=[68.0 67.1 66.4 65.6 64.6 61.8 61.0 60.0]'; T=[0 10 20 30 40 80 90 95]';
X1=0:1:100;
n=2;
m=length(T);
vi=ones(m,1);
for j=1:n+1.
for k=1:n+1,
D(j,k)=0;
end
end
for j=1:n+1.
for k=1:n+1,
for l=1:m,
D(j,k)=D(j,k)+vi(l).*T(l).^(k+j-2); end
end
end
for l=1:n+1,
E(l,1)=0;
end
for j=1:n+1,
for l=1:m,
E(j,1)=E(j,1)+vi(l).*s(l).*T(l).^(j-1); end
end
F=D\E;
c2=F(1);
b2=F(2);
a2=F(3);
plot(X1,a2.*X1.^2+b2*X1+c2,'r+')。