lsqcurvefit是matlab中用于非线性函数的最小二乘拟合的函数,但在官方给出的教程文档里只提供了单变量下的拟合计算,即xdata仅是一维的,而事实上也可以用它来进行多变量函数的最小二乘拟合,以如下函数为例:
$f=3x_1+e^{x_2}+4$
其中有两个变量:$x_1$和$x_2$,于是我们可以把他们分别作为xdata的两行,并在写输入函数时以xdata的行数来代替。
测试代码如下
clear;
x1=mod(100*rand(1,1000),1);
x2=mod(100*rand(1,1000),1);
xdata=[x1;x2];
ydata=3.*x1+exp(x2)+4;
fun=@(k,xdata)k(1).*xdata(1,:)+exp(k(2)*xdata(2,:))+k(3);
k=lsqcurvefit(fun,[1,1,1],xdata,ydata)
可以得到结果与实际相符
这里的输入较为简单,都是整数,所以对初值的选择也比较随意。由于计算误差,实际在用这种方式进行非线性多变量函数的最小二乘拟合时,需要对计算参数进行谨慎选择。