最小二乘法是一种常用的数学优化技术,它通过最小化误差的平方和来寻找数据的最佳函数匹配。MATLAB 中进行非线性最小二乘拟合的函数为:lsqnonline 函数和 lsqcurvefit 函数。帮助文档中的解释为:
lsqnonlin: Solve nonlinear least-squares (nonlinear data-fitting) problem(非线性最小二乘);
lsqcurvefit: Solve nonlinear curve-fitting (data-fitting) problems in least-squares sense(非线性曲线拟合)。
lsqcurvefit()函数
但是这两个函数本质上是一样的,他们用的默认算法都是:trust-region-reflective,并且都可以修改为:levenberg-marquardt
algorithm(详见MATLAB中的帮助文档)。
[x,resnorm] = lsqcurvefit()fun,x0,xdata,ydata,lb,ub)
输入参数
fun — 要拟合的函数 (函数句柄 | 函数名称)
x0 — 初始点
初始点,指定为实数向量或实数数组。求解器使用 x0 中的元素数量和 x0 的大小来确定 fun 接受的变量数量和大小。
xdata — 模型的输入数据(实数向量 | 实数数组)
ydata — 模型的响应数据(实数向量 | 实数数组)
lb — 下界
ub — 上界
输出参数
x — 解
resnorm — 残差范数的平方
例:
lsqcurvefit() 函数求解函数的最优解
x = [0.25:0.25:1,1.5:0.5:4.5,5:1:16]
y = [30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4]
Matlab代码
x = [0.25:0.25:1,1.5:0.5:4.5,5:1:16];
y = [30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4];
f = @(a,t) (2.*a(3).*(exp(-a(2)*t)-exp(-a(1)*t)));
ff = optimset;
ff.TolFun = 1e-20;ff.TolX = 1e-15; % 修改精确度
[X,fval] = lsqcurvefit(f,[1,1,1],x,y,[],[],ff);
lix = 0:0.01:20;
liy = 2.*57.2163.*(exp(-0.1855*lix)-exp(-2.0079*lix));
plot(lix,liy,x,y,'.red');
legend('拟合曲线','原始数据')
运行结果:
局限性:
在非线性最小二乘辨识和非线性曲线拟合中,初值的选择确实是一个关键问题,它直接影响到辨识结果的准确性和稳定性。
初值选择的重要性
- 局部最优与全局最优:如您所述,当初值接近真实值时,迭代算法(如梯度下降法、牛顿法等)更容易收敛到全局最优解。反之,如果初值远离真实值,算法可能陷入局部最优,导致辨识结果不准确。
- 物理意义:如果数学模型具有明确的物理背景,那么根据物理意义选择初值是一个很好的策略。这不仅可以提高辨识的准确性,还能增加结果的合理性。
基于导数的方法选择初值
当无法直接根据物理意义选择初值时,可以考虑使用基于导数的方法。这种方法的基本思路是利用已知数据点来估计模型参数对数据的敏感度(即导数),从而反推出合适的初值。
-
求导数:首先,需要求出拟合函数关于模型参数的导数。这可能需要一些数学技巧,特别是当模型复杂时。
-
估计导数:使用已知的数据点,通过数值方法(如差分法)来估计这些点处的一阶或高阶导数。
-
求解初值:将估计得到的导数代入到导数表达式中,结合原函数,通过解方程或优化方法求得初值的近似值。
检查初值选取的合适性
- 图形检查:得到辨识结果后,将拟合曲线与原始数据点绘制在同一坐标系中,观察数据点是否紧密围绕在曲线周围。如果偏差较大,说明初值选择可能不合适,需要重新调整。
- 残差分析:计算每个数据点的残差(即观测值与拟合值之差),并分析残差的分布和大小。如果残差分布均匀且较小,说明拟合效果较好;否则,可能需要调整初值或模型结构。
替代方法:智能优化算法
为了避免局部最优解的问题,可以考虑使用智能优化算法(如遗传算法、粒子群优化算法等)进行非线性参数辨识。这些算法不依赖于初值的选择,而是通过模拟自然进化或群体行为来搜索全局最优解。虽然这些算法的计算量通常较大,但它们能够更有效地处理复杂的非线性问题。
结论
综上所述,非线性最小二乘辨识和非线性曲线拟合中的初值选择是一个需要仔细考虑的问题。通过结合物理意义、基于导数的方法和图形检查等手段,可以提高初值选择的合理性和准确性。同时,也可以考虑使用智能优化算法来避免局部最优解的问题。