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做个曲线拟合的最小二乘法的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)