作者:dongquchunlaizv_123 | 来源:互联网 | 2023-07-20 10:25
最小二乘法拟合注意的问题使用类似yax+b这样的函数做曲线拟合可以很方便通过最小二乘法转换为线性方程组,继而通过矩阵操作求解。相关的教程可见:http:mathworld
最小二乘法拟合注意的问题
使用类似y=ax+b这样的函数做曲线拟合可以很方便通过最小二乘法转换为线性方程组,继而通过矩阵操作求解。
相关的教程可见:
http://mathworld.wolfram.com/LeastSquaresFitting.html
http://blog.csdn.net/yang6464158/article/details/24477547
对于类似y=aexp(bx)这样的函数用作曲线拟合,教科书往往会告诉你可以转换为log(y)=log(a)+bt,然后即转换成了上述线性的形式求解。
但我并不建议这样做,而是建议直接使用非线性最优化算法优化原始函数平方误差和的方式求解a 和b。
这主要是由于噪声的影响会导致两种方法有不一样的拟合结果。
例如这样一组数据:
X= [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14];
Y=[ 0.4959 0.2616 0.1208 0.0553 0.0282 0.0151 0.0082 0.0053 0.0025 0.0024 0.0013 0.0009 0.0005 0.0002 0.0003];
Matlab中使用指数拟合的结果如下:
y= 0.4995*exp(-0.6916*x)
而通过取对数用线性拟合的结果如下:
Log(y)= -0.5462 *x + -1.161
y=0.3132*exp(-0.5462 *x)
可见两者差别非常之大
这主要是最小二乘法同等对待每个采样点的噪声,而且噪声往往跟函数值有关。直接采用最优化拟合时,每个点的噪声被同等对待,而取对数后,不同位置的噪声存在放大和缩小的效应,导致了这样的拟合误差。
图 1 直接最优化拟合
图 2取对数通过线性拟合
图 3线性拟合的最终拟合结果