在Matlab中最小二乘法计算拟合曲线系数的程序

发布时间 : 星期一 文章在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 '计算完毕!';

联系合同范文客服:xxxxx#qq.com(#替换为@)