matlab曲线拟合问题

x=[1 2 3 4 5 6 7 8 9 10 100 200 300 400 500 600 700 800 900 1000];
>> y=[0.8 1.28 1.44 1.46 1.60 1.66 1.78 1.80 1.90 2.08 2.92 2.94 3.14 3.24 3.42 3.54 3.66 3.74 3.78 3.88];
用插值拟合的曲线比较诡异,请教其他拟合方法。

x=[1 2 3 4 5 6  7 8 9 10 100 200  300 400 500 600 700 800  900 1000];

y=[0.8 1.28 1.44 1.46 1.60 1.66  1.78 1.80 1.90 2.08 2.92  2.94  3.14 3.24 3.42 3.54 3.66 3.74  3.78 3.88];

values=spcrv([[x(1) x x(end)];[y(1) y y(end)]],3,1000);

plot(values(1,:),values(2,:),'r');

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-06
x=[1 2 3 4 5 6 7 8 9 10 100 200 300 400 500 600 700 800 900 1000];
y=[0.8 1.28 1.44 1.46 1.60 1.66 1.78 1.80 1.90 2.08 2.92 2.94 3.14 3.24 3.42 3.54 3.66 3.74 3.78 3.88];
m=8
[p,S]=polyfit(x,y,m);

% 输出多项式y = a0+a1x+a2x^2+a3x^3+...的各项系数
a0 = -0.000000000000000000008005537506
a1 = 0.000000000000000033266049778819
a2 = -0.000000000000056867074237626663
a3 = 0.000000000051554977775031770000
a4 = -0.000000026616876694737194000000
a5= 0.000007795123013970926400000000
a6 = -0.001208466331402414500000000000
a7 = 0.084529113412331797000000000000
a8 = 1.150620386011975900000000000000
%拟合效果和精度检验
Q =
0.3797
SGM =
0.1452
R2 =
0.9804
第2个回答  2012-05-06
用polyfit函数
用法 polyfit(x,y,n ) ;用多项式求过已知点的表达式,其中x为源数据点对应的横坐标,可为 行向量、矩阵,y为源数据点对应的纵坐标,可为 行向量、矩阵,n为你要拟合的阶数,一阶直线拟合,二阶抛物线拟合,并非阶次越高越好,看拟合情况
相似回答