用 lsqcurvefit 进行非线性曲线拟合
lsqcurvefit 使您能够轻松地对数据进行参数化非线性函数拟合。您也可以使用 lsqnonlin;lsqcurvefit 只是调用 lsqnonlin 进行曲线拟合的便捷方法。
在此示例中,向量 xdata 表示 100 个数据点,向量 ydata 表示相关联的测量值。生成问题的数据。
rng(5489,'twister') % reproducible xdata = -2*log(rand(100,1)); ydata = (ones(100,1) + .1*randn(100,1)) + (3*ones(100,1)+... 0.5*randn(100,1)).*exp((-(2*ones(100,1)+... .5*randn(100,1))).*xdata);
xdata 和 ydata 之间的建模关系是
该代码基于 100 个独立样本(服从均值为 2 的指数分布)生成 xdata。该代码使用 a = [1;3;2] 从其定义方程生成 ydata,并通过添加具有标准差 [0.1;0.5;0.5] 的正态偏差进行扰动。
目标是为与数据拟合最佳的模型找到参数 , = 1、2、3。
为了使用 lsqcurvefit 对数据进行参数拟合,您需要定义拟合函数。将拟合函数 predicted 定义为匿名函数。
predicted = @(a,xdata) a(1)*ones(100,1)+a(2)*exp(-a(3)*xdata);
为了对数据进行模型拟合,lsqcurvefit 需要参数的初始估计值 a0。
a0 = [2;2;2];
调用 lsqcurvefit 以找到最佳拟合参数 。
[ahat,resnorm,residual,exitflag,output,lambda,jacobian] =...
lsqcurvefit(predicted,a0,xdata,ydata);Local minimum possible. lsqcurvefit stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance. <stopping criteria details>
检查生成的参数。
disp(ahat)
1.0169
3.1444
2.1596
ahat 的拟合值与 a = [1;3;2] 相差不超过 8%。
如果您有 Statistics and Machine Learning Toolbox™ 软件,请使用 nlparci 函数为 ahat 估计值生成置信区间。
另请参阅
lsqcurvefit | nlparci (Statistics and Machine Learning Toolbox)