lsqcurvefit函数使用最小二乘法拟合曲线,比如
x=1:10;
y=2*x+rand(1,10);
k=lsqcurvefit(@(a,x) a*x, 1, x, y);
用函数形式 y = f(x) = a*x 来拟合x, y两组数据,返回拟合的系数a。
其中,@(a,x) a*x 用来定义拟合函数,也可以用内部函数或者自定义函数,比如 @(a,x) sin(a*x) 或者 @(a,x) myfun(a,x)。需要注意的是,@(a,x)表示函数表达式的参数列表,第一个参数必须是拟合系数,也就是曲线拟合需要得到的结果。
1表示程序搜寻拟合系数a时所用的初值,越接近真实值,拟合越快,结果越可靠。需要自己估计。
函数也可以在指定范围内搜寻拟合系数,比如
k=lsqcurvefit(@(a,x) a*x, 1, x, y, lb, ub);
限定a只可能在[lb, ub]区间内。
函数更多的参数在option里设置,比如
options = optimset('TolFun',1e-8);
k=lsqcurvefit(@(a,x) a*x, 1, x, y, lb, ub, options);
拟合残差要求为1e-8。
除了拟合系数外还可以返回更多信息,列表如下
RESNORM为拟合残差平方和,sum[(f(a,x)-y)^2]
RESIDUAL为拟合残差,f(a,x)-y
EXITFLAG为迭代退出标识
OUTPUT包含迭代过程信息
LAMBDA包含拟合条件信息
JACOBIAN为拟合函数关于拟合系数的雅克比矩阵。