matlab曲线拟合,急!
=[0 0.07 0.21 0.41 0.72 0.97 1.22 1.44 1.65 1.86 2.02 2.19 2.33 2.48 2.58
2.70 2.85 2.91 2.96 3.02 3.08 3.13 3.16 3.20 3.22 3.27 3.28 3.28 3.27 3.24 ]
求四次多项式拟合,写求出其关系式的程序 ,最好附图。
求高手指教! 展开
分别使用2、3、4阶多项式拟合,结果如图所示。
需要说明的是,使用四阶多项式拟合,会有警告信息“Polynomial is badly conditioned”,原因是其实不需要使用那么高的阶次,3阶就足够了。
顺便说一下,其实对于一元多项式拟合,更方便的做法是使用绘图窗口的基本拟合工具(Basic Fitting),可以交互式选择多种拟合方法以及显示方式,建议试一试。
代码如下(也可从附件直接下载):
X=0:20:580;
Y=[0 0.07 0.21 0.41 0.72 0.97 1.22 1.44 1.65 1.86 2.02 2.19 2.33 2.48 2.58 2.70 2.85 2.91 2.96 3.02 3.08 3.13 3.16 3.20 3.22 3.27 3.28 3.28 3.27 3.24 ];
N=[4 3 2];
clm={'rx:', 'g--p', 'm-.o'}
plot(X,Y,'.-')
hold on
lgd = { '原始数据' };
for i=1:length(N)
n=N(i)
p=polyfit(X,Y,n);
plot(X,polyval(p,X),clm{i})
syms x
y=sum(vpa(p,3).*x.^[n:-1:0]);
lgd{i+1} = ['y = ' char(y)];
end
xlabel('x');
ylabel('y');
legend(lgd{:}, 4)