发布时间 : 星期一 文章在Matlab中最小二乘法计算拟合曲线系数的程序更新完毕开始阅读
clear all
load('F:\\2——学习资料篇\\1——专业课资料\\测量数据处理程序设计\\Matlab中最小法计算程序\\datafile.mat') %%加载数据
[r,c]=size(data); %úta数据第一列为点序号,第二列为x坐标,第三列为y坐标 m=20; %%假设其运行次数, for n=1:m;
for i=1:r/2 %%用数据的前半部分计算系数 x1=data(i,2); y1=data(i,3); for j=1:n;
B1(i,j)=x1^(j-1); %%B矩阵计算 end
l(i,1)=y1; %%l矩阵 end
X=inv(B1'*B1)*B1'*l; %%系数矩阵 V=B1*X-l;
[r1,c1]=size(B1);
m0(n,1)=sqrt((V'*V)/(r1-c1)); %%单位权中误差 if n>2&&m0(n,1)>=m0(n-1,1); %%判断单位权中误差 disp(n)
xsgs=n-1; %%单位权中误差最小时其系数的个数 zgcs=n-2; %%单位权中误差最小时其x的最高次数 break %%如果找到了最优值时跳出循环 end end for i=1:r
x2=data(i,2); y2=data(i,3); for k=1:xsgs;
B2(i,k)=x2^(k-1); end
l2(i,1)=y2;
X1=inv(B2'*B2)*B2'*l2; %%计算出最优的系数矩阵 end
x2=data(:,2); y2=data(:,3);
plot(x2,y2,'bo'); %%作出测量点的图形 hold on y3(i,1)=0; for i=1:r; for k=1:5;
a=X1(k,1)*data(i,2)^(k-1); y3(i,1)=y3(i,1)+a;
end %%该循环是将求出的系数代入拟合曲线,验证所有数据
end
y4=y3(:,1);
plot(x2,y4,'r'); %%作出拟合曲线的图形 title('最小二乘法拟合图'); xlabel('数据'); ylabel('拟合');
legend('观测数据点','拟合曲线',1); msgbox '计算完毕!';