在matlab 中用最小二乘法拟合y=a*x^2+b*x的程序要如何写

在matlab 中用最小二乘法拟合y=a*x^2+b*x的程序要如何写,第1张

matlab中曲线拟合的最优标准是采用最常见的最小二乘法,而所谓曲线拟合就是利用最小二乘法使得拟合多项式在各节点处的偏差达到最小。

给出一组数据的话就可以进行数据拟合。

你说的应该是2次拟合多项式

程序如下:

t=输入数据;

y=输入数据;

p=polyfit(t,y,3)

然后就可以进行数据拟合了。

定义:(xi)2为最小,按ni=1这样的标准定义的拟合函数称为最小二乘拟合,是离散情形下的最佳平方逼近对给定数据点{(Xi,Yi)}(i=0,1,…,m),在取定的函数类Φ 中,求p(x)∈Φ ,使误差的平方和E^2最小,E^2=∑[p(Xi)-Yi]^2。从几何意义上讲,就是寻求与给定点 {(Xi,Yi)}(i=0,1,…,m)的距离平方和为最小的曲线y=p(x)。函数p(x)称为拟合函数或最小二乘解,求拟合函数p(x)的方法称为曲线拟合的最小二乘法。

matlab里面有自带的ployfit拟合曲线的函数啊!可以拟合一次、二次、多次的曲线!

举个列子,对正弦曲线上的点进行拟合

x=0:01pi:2pi;

y=sin(x);

plot(x,y,''),hold on;

p=polyfit(x,y,3)

%此处拟合为3次曲线,可以拟合得更高一些次数

xx=0:001pi:2pi;

yy=polyval(p,xx);

plot(xx,yy,'-r',xx,sin(xx),'-b')

p =

0088562710774691 -0834683884655302 1786088996171104 -01191642413538

画出的图中,蓝色虚线是正弦曲线,星点是拟合数据点,红色是拟合出的曲线,可以提高曲线拟合的次数,应该更逼近的

x1=[350 350 350 350 350 350 350 350 350 500 500 500 500 500 500 500 500 500 650 650 650 650 650 650 650 650 650];

x2=[2 2 2 35 35 35 5 5 5 2 2 2 35 35 35 5 5 5 2 2 2 35 35 35 5 5 5];

x3=[233 1 0428 233 1 0428 233 1 0428 233 1 0428 233 1 0428 233 1 0428 233 1 0428 233 1 0428 233 1 0428];

y=[9027 9368 9265 874 9171 9394 8649 939 936 824 9227 9398 8758 9301 9324 8296 9261 9483 9032 926 9277 8997 9031 9347 9051 9261 9404];

%每3个x为一组对应一个y,请问怎样编写matlab程序,进行最小二乘法拟合,得到回归方程……很迷茫,看书都不知道从哪里看起,还没有入门……

format short g

Y=y'

X11=[ones(1,length(y));x1;x2;x3]'

B1=regress(Y,X11)% 多元一次线性回归

[m,n]=size(X11)

X22=[];

for i=2:n

for j=2:n

if i<=j

X22=([X22,X11(:,i)X11(:,j)]);

else

continue

end

end

end

X=[X11,X22];

B2=regress(Y,X)% 多元二次线性回归

[Y XB2 Y-XB2]

plot(Y,X11B1,'o',Y,XB2,'')

hold on,line([min(y),max(y)],[min(y),max(y)])

axis([min(y) max(y) min(y) max(y)])

legend('一次线性回归','二次线性回归')

xlabel('实际值');ylabel('计算值')

运行结果:

X11 =

1 350 2 233

1 350 2 1

1 350 2 0428

1 350 35 233

1 350 35 1

1 350 35 0428

1 350 5 233

1 350 5 1

1 350 5 0428

1 500 2 233

1 500 2 1

1 500 2 0428

1 500 35 233

1 500 35 1

1 500 35 0428

1 500 5 233

1 500 5 1

1 500 5 0428

1 650 2 233

1 650 2 1

1 650 2 0428

1 650 35 233

1 650 35 1

1 650 35 0428

1 650 5 233

1 650 5 1

1 650 5 0428

B1 =

94718

00010963

0022593

-32882

m =

27

n =

4

B2 =

11198

-0070507

-051146

-16597

60444e-005

00015111

00046857

003037

-034654

-096485

ans =

9027 87965 2305

9368 93186 049375

9265 94382 -17321

874 87031 036943

9171 92943 -12331

9394 94436 -049629

8649 86233 025722

939 92837 10633

936 94627 -10272

824 87187 -47867

9227 91473 079689

9398 92267 17131

8758 86592 098778

9301 9157 144

9324 92661 057889

8296 86134 -31744

9261 91804 080644

9483 93192 1638

9032 89128 11917

926 9248 012004

9277 92872 -010171

8997 88874 10961

9031 92917 -26069

9347 93606 -013593

9051 88756 17539

9261 9349 -088042

9404 94477 -043682

效果不是太好,用三次方可能效果好些,我没有时间了,你仿照二次方的自己写。

以上就是关于在matlab 中用最小二乘法拟合y=a*x^2+b*x的程序要如何写全部的内容,包括:在matlab 中用最小二乘法拟合y=a*x^2+b*x的程序要如何写、什么是最小二乘拟合,方法和具体步骤、大虾们,谁能用matlab做个曲线拟合的最小二乘法的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9317789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存