物理实验中,数据处理经常用到最小二乘法。当然最小二乘法用手算的话好麻烦啊。 大家可能已经知道最小二乘法是什么了,这里也不多说了,就简单提一下。 一、最小二乘法原理 线性的最小二乘法是用来产生最能代表一组数据的一个一次函数,这里说的是最好的拟合,而不是完美的拟合。 例如这样一个例子: 这里有三个数据点,A(x1,y1),B(x2,y2),C(x3,y3)。我们要找一条最能够代表这三个点的直线。那如何找呢? 我们的想法是要使得误差最小。可是什么是误差?怎么代表误差? 假设我们现在已经把这条线找到了,比如是 y = f(x)。那么如果 A 点相对于直线的误差是不是可以用 A' 和 A 的纵坐标之差来表示?这样我们把所有的三个点的这些误差加起来,是不是就可以代表所有点的总的误差呢? 这里有个问题,但看一个点,这个方法没有问题,但是如果是很多点,那么这个差值有正有负,加起来就可能会有相互抵消的。所有呢,我们的办法是求这些误差的平方和。 那么最小二乘法就是要这个误差最小。Least squares 就是说要这个带 squares 的式子最小。 至于如何使得这个最小,至少有两种方法。一种是直接用微积分的知识,对所有未知的参量求偏导数并设为零,就可以求出参量了。另一种方法是用线性代数的方法,就是利用往空间上投影的方法。 当然,两种方法都是课本上的公式了,具体求解的话,也就是要带公式了。 不过呢,要是这个帖子只说这点内容,就没啥意义了对吧。 所以最好能讨论一下从线性代数的角度,或者说从几何的角度来看最小二乘法。 最小二乘法是要找到一条直线, y = c + d x。这样的话,我们把数据带进去,就会形成系列方程组,可以写成矩阵的样子: 但是,要知道,我们只有两个待定系数,所以这是过度确定的。一般是无解的。这就是我们前面说最小二乘法是在找最好的拟合,而不是完美的拟合的原因。 那么我们要怎么做呢? 现在有一组纵轴的数据, 但,这不能算啊?我们要找到的是 c,d 的值啊?怎么算呢? 我们还有个 里面我们给 c 和 d 加了帽了~ 有帽表示这个只是个最好的拟合,但不一定是完美的~ 那这些之间有什么关系呢?我们可以看前面的等式,比如用 A 表示系数矩阵,用 M 表示要求解的两个参数(戴帽子哦)矩阵,还有一个 b 表示所有的代表纵坐标的数据矩阵。 好啦,书上说我们要求解的方程是
二、软件处理
我想大学里面可能教大家最多的是用 Origin,Sigmaplot 甚至 Excel 之类的软件来做的。挺好的,总之能做出来就成。这些软件里面呢,用的最广的应该是 Origin,但是我更喜欢 Sigmaplot,因为 Sigmaplot 做出来的图不需要做很大的调整就挺好看的,多图排版什么的也很容易。作图嘛,漂亮太重要了。 但是这里我们要说的不是 Sigmaplot,而是一款很多人听说过但是没用过的软件,Mathematica。 可能有人要问,为什么我要用 Mathematica 这么专业的软件啊? 说实话,Mathematica 这几年发展下来,已经不算是一款专业软件了,它上手快,用起来简单而优雅。甚至 Mathematica 都有了 Home 版了!(这…… ) 关于 Mathematica 的函数f作图呢?参考 高数也要用 Mathematica —— 作图一 这篇文章。 但数据处理这部分需要比较长的篇幅,所以请看怎样学高数小组的这篇吧:
|
|