Matlab R2009a
matlab 曲线拟合分为多项式拟合和一般曲线拟合
一、多项式拟合
用到的函数为:
a=polyfit(xdata,ydata,n);
n表示多项式的最高阶数;
(我遇到的问题是要拟合一般曲线,因此多项式拟合带过);
二、一般曲线拟合
[para,resnorm] = lsqcurvefit(fun, x0, xdata, ydata);
其中para便是我想要的一般曲线中的系数;
比方说我要拟合如下函数的系数,a,b,c,d
y = (a + b*x + c*x2)/(x + d)
那么para=[a,b,c,d];
x0: 是给定的一个para的初始值;这里有自己来定,我看有人给的全是1,我也照此做,是可行的。
xdata:就是自变量x的已知系数;
ydata:就是自变量y的已知系数;
举例:
%myfun.m
function SNR
=
myfun(a,bit)
SNR = (a( 1 ) + a( 2 ) * bit + a( 3 ) * (bit. ^ 2 )). / (bit + a( 4 ));
SNR = (a( 1 ) + a( 2 ) * bit + a( 3 ) * (bit. ^ 2 )). / (bit + a( 4 ));
%curve.m
bs_bit=[47304.38,19553.66,8973.04,4603.99];
bs_SNR
=
[
47.661
,
45.280
,
43.107
,
40.882
];
lb = [];
ub = [];
[para,res] = lsqcurvefit(@myfun,ones( 1 , 4 ),bs_bit,bs_SNR,lb,ub,optimset( ' MaxFunEvals ' , 16000 , ' MaxIter ' , 800 ));
lb = [];
ub = [];
[para,res] = lsqcurvefit(@myfun,ones( 1 , 4 ),bs_bit,bs_SNR,lb,ub,optimset( ' MaxFunEvals ' , 16000 , ' MaxIter ' , 800 ));
这里我们看到需要为lsqcurvefit定义两个option;
MaxFunEvals和MaxIter
这里我认为算法用来拟合数据所需要的迭代次数;