例题
最小二乘法解题步骤
显然,该方程组为非线性方程组,考虑用牛顿法求解。
牛顿法解非线性方程组
选取牛顿迭代的初值
牛顿法只具有局部收敛性,因此初始值的选取很重要。观察题中给出的数据,发现原函数 y=ae^{bx},有递增趋势,y值都较小且大于0,可以判断a,b的值应该同时为正且小于1,所以在区间(0,1)内随机选取初始值。又因为随机选取的初始值不能保证结果一定收敛,所以随机选取多组初始值进行多次计算,选取其中均方误差最小的一组结果,也即所有结果中效果最好的一组a,b作为最终结果。
计算结果
在区间(0,1)内随机选取50组初始值,其中能收敛且均方误差最小的一组是:
将所得函数和原始数据进行拟合比较(红线是对数据表中数据描点连线得到)
matlab代码
初始值是随机生成的,所以可能每次运行代码得到的结果都不一样
clear
%最小二乘法
x=1:19;
y=[0.898 2.38 3.07 1.84 2.02 1.94 2.22 2.77 4.02 4.76 6.46 6.53 10.9 16.5 22.5
35.7 50.6 61.6 81.8];
%建立目标函数
syms a b
F=0;
for i=1:length(x)
F=F+(a*exp(b*x(i))-y(i))^2