最小二乘法

             

预备知识 二元函数的极值

1. 直线拟合

   在许多情况下,我们需要将一组散点数据 $x_i, y_i \ \ (i = 1\dots N)$ 拟合成特定形式的函数曲线.其中最常见的情况之一是拟合一条直线,形式为 $y = ax + b$.例如给出(图 1),如何确定直线方程的两个最佳系数 $a$ 和 $b$ 呢?

   我们可以通过方差来计算拟合的误差,方差越小则说明拟合得越好.

\begin{equation} S_2 = \sum_{i = 1}^N (a x_i + b - y_i)^2 \end{equation}
对于给定的 $N$ 个 $x_i, y_i$,方差是 $a$ 和 $b$ 的二元函数.我们只需找到这个二元函数的最小值点即可.由于函数处处光滑,最小值点必定满足 $ \partial S_2/\partial a = \partial S_2/\partial b = 0$.将式 1 代入,得到一个线性方程组.
\begin{equation} \left\{\begin{aligned} & \left(\sum_i x_i^2 \right) a + \left(\sum_i x_i \right) b = \sum_i x_i y_i \\ & \left(\sum_i x_i \right) a + N b = \sum_i y_i \end{aligned}\right. \end{equation}
我们来计算系数行列式,如果能证明行列式恒大于零,则方程组必有唯一解.若令 $\bar x$ 为 $N$ 个 $x_i$ 的平均值,考虑到 $x_i$ 互不相等,容易证明
\begin{equation} N\sum_i x_i^2 - \left(\sum_i x_i \right) ^2 = N\sum_i (x_i - \bar x)^2 > 0 \end{equation}
证毕.由于方差恒大于零,可知其必定存在最小值,所以系数的唯一解必定是方差函数的极小值点.接下来解线性方程组即可得到系数 $a, b$.将解出的 $a,b$ 重新代入式 1 可以得出最小方差的值,用于判断拟合结果的好坏.

2. 多项式拟合

   以二次多项式 $c_2 x^2 + c_1 x + c_0$ 为例,方差为

\begin{equation} S_2 = \sum_{i = 1}^N (c_2 x_i^2 + c_1 x_i + c_0 - y_i)^2 \end{equation}
分别令方差对 $c_2, c_1, c_0$ 的偏导为零,得线性方程组
\begin{equation} \left\{\begin{aligned} & \left(\sum_i x_i^4 \right) c_2 + \left(\sum_i x_i^3 \right) c_1 + \left(\sum_i x_i^2 \right) c_0 & &= \sum_i y_i x_i^2 \\ & \left(\sum_i x_i^3 \right) c_2 + \left(\sum_i x_i^2 \right) c_1 + \left(\sum_i x_i \right) c_0 & &= \sum_i y_i x_i \\ & \left(\sum_i x_i^2 \right) c_2 + \left(\sum_i x_i \right) c_1 + \quad N c_0 & &= \sum_i y_i \end{aligned}\right. \end{equation}
观察系数矩阵可以看出它是一个方阵,每条斜线上 $x_i$ 的指数相等,且相邻斜线上 $x_i$ 的指数依次递减.按照此规律容易写出 $N$ 次多项式拟合的方程组.这里不证明系数行列式大于零,但实际应用中方程组几乎都有唯一解.Matlab 代码见 “最小二乘法数值拟合(多项式)”.

   根据魏尔施特拉斯逼近定理,闭区间上的连续函数都可以使用多项式拟合,阶数越高结果越精确.

3. 简谐波拟合

   若要拟合 $A \cos\left(x + \varphi_0\right) + C$ 形式的函数,可以先利用两角和公式把函数化为 $c_1 \cos x + c_2 \sin x + c_3$ 的等效形式(因为前者并不是待定系数的线性组合,得到的方程组也不是线性方程组),方差公式为

\begin{equation} S_2 = \sum_i (c_1 \cos x_i + c_2 \sin x_i + c_3 - y_i)^2 \end{equation}
分别令方差对 $c_1, c_2, c_3$ 的偏导为零,得线性方程组
\begin{equation} \left\{\begin{aligned} & \left(\sum_i \cos^2 x_i \right) c_1 + \left(\sum_i \sin x_i \cos x_i \right) c_2 + \left(\sum_i \cos x_i \right) c_3 & &= \sum_i y_i \cos x_i\\ & \left(\sum_i \sin x_i \cos x_i \right) c_1 + \left(\sum_i \sin^2 x_i \right) c_2 + \left(\sum_i \sin x_i \right) c_3 & &= \sum_i y_i \sin x_i\\ & \left(\sum_i \cos x_i \right) c_1 \quad + \quad \left(\sum_i \sin x_i \right) c_2 \quad + \quad N c_3 & &= \sum_i y_i\\ \end{aligned}\right. \end{equation}
实际应用中,该方程组同样几乎都有唯一解.

致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择会员制,大量广告,内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证网站能在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

         

© 小时科技 保留一切权利