最小二乘法-线性拟合

1、概述

最小二乘法是曲线拟合的常用方法,使用该方法对匹配函数的选取非常重要。

2、理论

  • 假设拟合的多项式为:

y=a0+a1x+a2x2+...+amxm y = a_0 + a_1*x +a_2*x^2 + ...+a_m*x^m
其中,m代表多项式的阶数。

  • 离散点与该多项式的平方和F(a0,a1,,am)F(a_0,a_1,,a_m)为,其中n代表采样点数:
    F(a0,a1,,am)=i=0n[yi(a0+a1xi+a2xi2+...+amxim)]2 F(a_0,a_1,,a_m) = \sum_{i=0}^n[y_i - (a_0 + a_1*x_i +a_2*x_i^2 + ...+a_m*x_i^m)]^2
  • 最小二乘法的思想是求平方和函数F(a0,a1,,am)F(a_0,a_1,,a_m)的最小值,而对于二次方程求最小值的问题,常见的思路就是对方程求导,倒数为零的点,及为方程的极值点。
  • 下面对F(a0,a1,,am)F(a_0,a_1,,a_m)分别求aia_i偏导数,得:
    2i=0n[yi(a0+a1xi+a2xi2+...+amxim)]=02i=0n[yi(a0+a1xi+a2xi2+...+amxim)]xi=02i=0n[yi(a0+a1xi+a2xi2+...+amxim)]xi2=02i=0n[yi(a0+a1xi+a2xi2+...+amxim)]xim=0 -2 \sum_{i=0}^n[y_i - (a_0 + a_1*x_i +a_2*x_i^2 + ...+a_m*x_i^m)] = 0 \\ -2 \sum_{i=0}^n[y_i - (a_0 + a_1*x_i +a_2*x_i^2 + ...+a_m*x_i^m)] x_i= 0\\ -2 \sum_{i=0}^n[y_i - (a_0 + a_1*x_i +a_2*x_i^2 + ...+a_m*x_i^m)] x_i^2= 0\\ \ldots\\ -2 \sum_{i=0}^n[y_i - (a_0 + a_1*x_i +a_2*x_i^2 + ...+a_m*x_i^m)] x_i^m= 0
  • 整理得
    a0i=0n+a1i=0nxi+a2i=0nxi2+...+ami=0nxim=i=0nyia0i=0nxi+a1i=0nxi2+a2i=0nxi3+...+ami=0nxim+1=i=0nyixia0i=0nxim+a1i=0nxim+1+a2i=0nxim+2+...+ami=0nxi2m=i=0nyixim a_0\sum_{i=0}^{n}+a_1\sum_{i=0}^{n} x_i+ a_2\sum_{i=0}^{n} x_i^2+...+a_m\sum_{i=0}^{n}x_i^m = \sum_{i=0}^{n}y_i\\ a_0\sum_{i=0}^{n} x_i+a_1\sum_{i=0}^{n} x_i^2+ a_2\sum_{i=0}^{n} x_i^3+...+a_m\sum_{i=0}^{n}x_i^{m+1} = \sum_{i=0}^{n}y_ix_i\\ \ldots\\ a_0\sum_{i=0}^{n} x_i^m+a_1\sum_{i=0}^{n} x_i^{m+1}+ a_2\sum_{i=0}^{n} x_i^{m+2}+...+a_m\sum_{i=0}^{n}x_i^{2m} = \sum_{i=0}^{n}y_ix_i^m
  • 使用矩阵形式表示为:
    [i=0ni=0nxii=0nxi2i=0nximi=0nxii=0nxi2i=0nxi3i=0nxim+1i=0nxi2i=0nxi3i=0nxi4i=0nxim+2i=0nximi=0nxim+1i=0nxim+2i=0nxi2m][a0a1a2am]=[i=0nyii=0nyixii=0nyixi2i=0nyixim] \left[ \begin{matrix} \sum_{i=0}^{n} & \sum_{i=0}^{n}x_i&\sum_{i=0}^{n}x_i^2&\ldots&\sum_{i=0}^{n}x_i^m\\ \sum_{i=0}^{n}x_i&\sum_{i=0}^{n}x_i^2&\sum_{i=0}^{n}x_i^3&\ldots&\sum_{i=0}^{n}x_i^{m+1}\\ \sum_{i=0}^{n}x_i^2&\sum_{i=0}^{n}x_i^3&\sum_{i=0}^{n}x_i^4&\ldots&\sum_{i=0}^{n}x_i^{m+2}\\ \ldots&\ldots&\ldots&\ldots&\ldots\\ \sum_{i=0}^{n}x_i^{m}&\sum_{i=0}^{n}x_i^{m+1}&\sum_{i=0}^{n}x_i^{m+2}&\ldots&\sum_{i=0}^{n}x_i^{2m} \end{matrix} \right] \left[ \begin{matrix} a_0\\ a_1\\ a_2\\ \ldots\\ a_m \end{matrix} \right]=\\ \left[ \begin{matrix} \sum_{i=0}^{n}y_i\\ \sum_{i=0}^{n}y_ix_i\\ \sum_{i=0}^{n}y_ix_i^2\\ \ldots\\ \sum_{i=0}^{n}y_ix_i^m\\ \end{matrix} \right]
  • 下面就是求解一次线性方程,常用的方法是使用高斯消元法,也可以使用求矩阵的秩或者求解逆矩阵等方式求解。

3、高斯消元法求解线性方程

3.1、原则

  • 两个方程互换解不变
  • 一个方程乘以非零K,解不变
  • 一个方程乘以非零K,加上另一个方程解不变

3.2、一阶线性函数

假设多项式得阶数m为2,则上述矩阵方程为:
[i=0ni=0nxii=0nxii=0nxi2][a0a1]=[i=0nyii=0nyixi] \left[ \begin{matrix} \sum_{i=0}^{n} & \sum_{i=0}^{n}x_i\\ \sum_{i=0}^{n}x_i&\sum_{i=0}^{n}x_i^2& \end{matrix} \right] \left[ \begin{matrix} a_0\\ a_1 \end{matrix} \right]=\\ \left[ \begin{matrix} \sum_{i=0}^{n}y_i\\ \sum_{i=0}^{n}y_ix_i \end{matrix} \right]
写成行列式的形式为:
i=0ni=0nxii=0nyii=0nxii=0nxi2i=0nyixi \begin{vmatrix} \sum_{i=0}^{n} & \sum_{i=0}^{n}x_i&\sum_{i=0}^{n}y_i\\ \sum_{i=0}^{n}x_i & \sum_{i=0}^{n}x_i^2&\sum_{i=0}^{n}y_ix_i\\ \end{vmatrix}
第一行乘以系数i=0n\sum_{i=0}^{n},第二行乘以系数i=0nxi\sum_{i=0}^{n}x_i

1i=0nxii=0ni=0nyii=0n1i=0nxi2i=0nxii=0nyixii=0nxi \begin{vmatrix} 1 & \frac{\sum_{i=0}^{n}x_i}{\sum_{i=0}^{n}} & \frac{\sum_{i=0}^{n}y_i}{\sum_{i=0}^{n}}\\ 1 & \frac{\sum_{i=0}^{n}x_i^2}{\sum_{i=0}^{n}x_i} & \frac{\sum_{i=0}^{n}y_ix_i}{\sum_{i=0}^{n}x_i} \end{vmatrix}
第二行减去第一行得
1i=0nxii=0ni=0nyii=0n0i=0nxi2i=0nxii=0nxii=0ni=0nyixii=0nxii=0nyii=0n \begin{vmatrix} 1 & \frac{\sum_{i=0}^{n}x_i}{\sum_{i=0}^{n}} & \frac{\sum_{i=0}^{n}y_i}{\sum_{i=0}^{n}}\\ 0 & \frac{\sum_{i=0}^{n}x_i^2}{\sum_{i=0}^{n}x_i} -\frac{\sum_{i=0}^{n}x_i}{\sum_{i=0}^{n}} & \frac{\sum_{i=0}^{n}y_ix_i}{\sum_{i=0}^{n}x_i} - \frac{\sum_{i=0}^{n}y_i}{\sum_{i=0}^{n}} \end{vmatrix}
通过上式可得a1a_1
a1=i=0nyixii=0nxii=0nyii=0ni=0nxi2i=0nxii=0nxii=0n=i=0nyixii=0ni=0nyii=0nxii=0nxi2i=0ni=0nxii=0nxi a_1 = \frac{\frac{\sum_{i=0}^{n}y_ix_i}{\sum_{i=0}^{n}x_i} - \frac{\sum_{i=0}^{n}y_i}{\sum_{i=0}^{n}}}{\frac{\sum_{i=0}^{n}x_i^2}{\sum_{i=0}^{n}x_i} -\frac{\sum_{i=0}^{n}x_i}{\sum_{i=0}^{n}}} =\frac{\sum_{i=0}^{n}y_ix_i*\sum_{i=0}^{n}-\sum_{i=0}^{n}y_i*\sum_{i=0}^{n}x_i}{\sum_{i=0}^{n}x_i^2*\sum_{i=0}^{n} - \sum_{i=0}^{n}x_i*\sum_{i=0}^{n}x_i}
同理将a1a_1回代入得:
a0=i=0nyii=0n(i=0nyixii=0ni=0nyii=0nxi)i=0nxi(i=0nxi2i=0ni=0nxii=0nxi)i=0n=(i=0nxi2i=0ni=0nxii=0nxi)i=0nyi(i=0nyixii=0ni=0nyii=0nxi)i=0nxi(i=0nxi2i=0ni=0nxii=0nxi)i=0n=i=0nxi2i=0ni=0nyii=0nyixii=0ni=0nxi(i=0nxi2i=0ni=0nxii=0nxi)i=0n=i=0nxi2i=0nyii=0nyixii=0nxii=0nxi2i=0ni=0nxii=0nxi a_0 = \frac{\sum_{i=0}^{n}y_i}{\sum_{i=0}^{n}} - \frac{(\sum_{i=0}^{n}y_ix_i*\sum_{i=0}^{n}-\sum_{i=0}^{n}y_i*\sum_{i=0}^{n}x_i)*\sum_{i=0}^{n}x_i}{(\sum_{i=0}^{n}x_i^2*\sum_{i=0}^{n} - \sum_{i=0}^{n}x_i*\sum_{i=0}^{n}x_i)*\sum_{i=0}^{n}}\\ =\frac{(\sum_{i=0}^{n}x_i^2*\sum_{i=0}^{n} - \sum_{i=0}^{n}x_i*\sum_{i=0}^{n}x_i)*\sum_{i=0}^{n}y_i -(\sum_{i=0}^{n}y_ix_i*\sum_{i=0}^{n}-\sum_{i=0}^{n}y_i*\sum_{i=0}^{n}x_i)*\sum_{i=0}^{n}x_i}{(\sum_{i=0}^{n}x_i^2*\sum_{i=0}^{n} - \sum_{i=0}^{n}x_i*\sum_{i=0}^{n}x_i)*\sum_{i=0}^{n}}\\ =\frac{\sum_{i=0}^{n}x_i^2*\sum_{i=0}^{n}\sum_{i=0}^{n}y_i -\sum_{i=0}^{n}y_ix_i*\sum_{i=0}^{n}\sum_{i=0}^{n}x_i}{(\sum_{i=0}^{n}x_i^2*\sum_{i=0}^{n} - \sum_{i=0}^{n}x_i*\sum_{i=0}^{n}x_i)*\sum_{i=0}^{n}}\\ =\frac{\sum_{i=0}^{n}x_i^2\sum_{i=0}^{n}y_i -\sum_{i=0}^{n}y_ix_i\sum_{i=0}^{n}x_i}{\sum_{i=0}^{n}x_i^2*\sum_{i=0}^{n} - \sum_{i=0}^{n}x_i*\sum_{i=0}^{n}x_i}
故最终可得
a0=i=0nxi2i=0nyii=0nyixii=0nxii=0nxi2i=0ni=0nxii=0nxi a_0 =\frac{\sum_{i=0}^{n}x_i^2\sum_{i=0}^{n}y_i -\sum_{i=0}^{n}y_ix_i\sum_{i=0}^{n}x_i}{\sum_{i=0}^{n}x_i^2*\sum_{i=0}^{n} - \sum_{i=0}^{n}x_i*\sum_{i=0}^{n}x_i}
a1=i=0nyixii=0ni=0nyii=0nxii=0nxi2i=0ni=0nxii=0nxi a_1 =\frac{\sum_{i=0}^{n}y_ix_i*\sum_{i=0}^{n}-\sum_{i=0}^{n}y_i*\sum_{i=0}^{n}x_i}{\sum_{i=0}^{n}x_i^2*\sum_{i=0}^{n} - \sum_{i=0}^{n}x_i*\sum_{i=0}^{n}x_i}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章