matlab 最小二乘法绘图,用MatLab画图(最小二乘法做曲线拟合)

之前帮朋友利用实验数据画图,发现MatLab的确是画图的好工具,用它画的图比Excel光滑、精确。利用一组数据要计算出这组数据对应的函数表达式从而得到相应图像,MatLab的程序如下:

x=[1  5  10  20  30  40  60  80]

y=[15.4  33.9  42.2  50.5  56  62.7  72  81.1]

plot(x,y,'r*');

legend('实验数据(xi,yi)')

xlabel('x'),ylabel('y'),

title('数据点(xi,yi)的散点图')

syms a1 a2 a3

x=[1  5  10  20  30  40  60  80];

fi=a1.*x.^2+a2.*x+a3

y=[15.4  33.9  42.2  50.5  56  62.7  72  81.1]

fi =[a1+a2+a3,25*a1+5*a2+a3,  100*a1+10*a2+a3,  400*a1+20*a2+a3,  900*a1+30*a2+a3, 1600*a1+40*a2+a3, 3600*a1+60*a2+a3, 6400*a1+80*a2+a3];

fy=fi-y;fy2=fy.^2;J=sum(fy.^2)

syms a1 a2 a3

J =(a1+a2+a3-77/5)^2+(25*a1+5*a2+a3-339/10)^2+(100*a1+10*a2+a3-211/5)^2+(400*a1+20*a2+a3-101/2)^2+(900*a1+30*a2+a3-56)^2+(1600*a1+40*a2+a3-627/10)^2+(3600*a1+60*a2+a3-72)^2+(6400*a1+80*a2+a3-811/10)^2;

Ja1=diff(J,a1);Ja2=diff(J,a2);Ja3=diff(J,a3);

Ja11=simple(Ja1),Ja21=simple(Ja2),Ja31=simple(Ja3)

A=[114921252,1656252,26052;1656252,26052,492;26052,492,16];

B=[9542429/5,166129/5,4138/5];

C=B/A,f=poly2sym(C)

xi=[1  5  10  20  30  40  60  80];

y=[15.4  33.9  42.2  50.5  56  62.7  72  81.1];

n=length(xi);

f=-0.0086.*xi.^2+1.3876.*xi+23.1078;

x=1:1/10:80;

F=-0.0086.*x.^2+1.3876.*x+23.1078;

fy=abs(f-y);fy2=fy.^2;Ew=max(fy),

E1=sum(fy)/n,E2=sqrt((sum(fy2))/n)

plot(xi,y,'r*'),hold on,plot(x,F,'b-'),hold off

legend('数据点(xi,yi)','拟合曲线 f(x)= -0.0086x^2+1.3876x+23.1078'),

xlabel('x'),ylabel('y'),

title('实验数据点(xi,yi)及拟合曲线f(x)')

下图是这个程序运行后的图像:

0818b9ca8b590ca3270a3433284dd417.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值