3.1.3 快速拟合及结果查看
本节以快速拟合为例,介绍拟合过程中的一些细节及如何查看拟合结果。将下面的命令行复制到命令行窗口并按回车键。
Make/O LorF SetScale/I x, -10,10, LorF SetRandomSeed 0.5 LorF=1/(x∗x+1)+gnoise(0.05) Display LorF ModifyGraph mode=3, marker=8
上面利用Make命令创建了一个名为LorF的wave,由于没有指定长度,wave长度取默认值128。随后调用x函数给LorF赋值,赋值公式为洛伦兹函数。为了模拟实验数据抖动的特点,给每一个数据点加上一个标准偏差为0.05的高斯随机噪声。SetRandomSeed命令用于设置随机数种子,这样可以保证每次产生的随机数是一样的。命令执行后的结果如图3-4所示。
图3-4 模拟洛伦兹线型的实验数据
这里稍微解释一下洛伦兹函数的含义。洛伦兹函数是一类非常重要的函数,它的形式如下:
洛伦兹函数具有很好的性质,如当b趋于无穷小时洛伦兹函数就转化为δ函数,即
在光电子能谱数据中,经常用洛伦兹函数对动量分布曲线(Momentum Distribution Curve, MDC)进行拟合,以获取准粒子的动量和寿命等信息。这是因为描述准粒子态密度分布的谱函数很多情况下可以转化为洛伦兹函数。
在图3-4中右击执行命令【Quick Fit】并选择lor函数,拟合结果如图3-5所示。
图3-5 利用lor函数对实验数据拟合
一条光滑的曲线自动显示在原来的数据之上,可以看到光滑的曲线描述了数据点的演化趋势。Igor将拟合的结果保存在当前目录下,同时在命令行窗口中输出相应的拟合信息,如图3-6所示。
图3-6 拟合的结果
图3-6左边数据浏览器窗口中,除了最初创建的LorF之外,又出现了4个新的wave,这些新的wave由Igor自动创建,它们存放了拟合的结果。
(1)W_coef。
W_coef保存了拟合的参数。在本例中,采用洛伦兹型函数进行拟合,洛伦兹拟合函数的完整表达式为
W_coef里按照顺序保存了这4个参数的拟合结果,如W_coef[0]保存了K0的数值。双击打开W_coef就能查看拟合的结果,在程序里也可以直接访问W_coef来使用拟合结果。W_coef是Igor默认创建的用来保存拟合参数的wave。如果在拟合前手动创建了参数wave,并指定给拟合命令,则拟合的参数保存在该wave中。
(2)fit_LorF。
fit_Lorf是根据拟合参数和被拟合数据的x坐标计算出来的,就是图3-5中光滑曲线对应的wave。前面“fit”是系统自动加上去的,表示拟合曲线。可以在拟合命令中自定义拟合曲线的名字,但一般不需要。fit_LorF的默认长度是200,长度也可以在拟合过程中自定义。如果被拟合数据显示在当前窗口,那么拟合曲线一般都会自动添加到当前窗口,以方便查看拟合效果。
(3)M_Covar。
M_Covar保存了拟合参数的方差。拟合本质上是一个统计学问题,在算法中涉及方差的计算,方差信息有助于用户评价拟合的结果。测量存在误差,被测数据存在误差,通过拟合得到的拟合参数自然也是有误差的,协方差矩阵描述了拟合参数方差的大小。协方差的一般定义如下:
上式中的xi和yi就相当于上面的拟合参数。由于洛伦兹型拟合函数有4个参数,所以协方差一共有16个值(4×4),排成一个4×4的矩阵,其中对角元就是对应拟合参数的标准方差,开平方后就是拟合参数的实验标准偏差,如图3-7所示。这个值可以用来描述参数的误差或不确定度。
图3-7 协方差矩阵
(4)W_sigma。
W_sgima保存了每个拟合参数的“误差”,如果没有指定置信水平(默认68.3%,对应高斯分布),W_sigma保存了每个拟合参数的实验标准偏差。W_sigma数值上等于M_Covar对角元数值的算术平方根。
除了将拟合结果保存成wave之外,Igor还在历史命令行窗口输出拟合的结果,如图3-8所示。
图3-8 历史命令行窗口中的拟合结果信息
第1行CurveFit/M=2/W=0 lor, LorF/D表示执行快速拟合时,Igor实际执行的命令。标记/M=2表示生成协方差矩阵。/W=0表示不显示拟合过程窗口,不设置此参数,在拟合过程中会出现一个显示拟合过程窗口,通过该窗口可以观察拟合过程或者终止拟合。lor参数表示使用lor函数进行拟合。lor是系统内定义的拟合函数模型。LorF参数给出被拟合的实验数据。标记/D表示自动生成拟合曲线,就是上面的fit_LorF。
第2行给出拟合收敛的情况,Fit converged properly表示正常收敛。
第3行是拟合采用的公式。在这里可以看到拟合参数W_coef每一项在拟合函数中的位置和含义。
第4行表示拟合参数的结果,就是W_coef的大小。
第5行和第6行是拟合过程中的一些变量值。
第7行表示拟合参数的“误差”。
第8行到第12行按照拟合数值±标准不确定度的方式给出结果。
命令行窗口输出的信息不是一成不变的,拟合参数不同,输出的信息也会有相应的调整。
对于内置拟合函数,除了W_coef之外,还可以通过使用K0、K1这样的变量来获取拟合参数值。前面描述洛伦兹函数表达式时使用了K0、K1等这样的变量,就表示可以用K0和K 1等去获取它的拟合参数值。KN(N=0,1, …)是Igor内置的系统变量,不需要定义就可以直接访问。在快速拟合时,Igor使用KN作为拟合参数的初始值(Igor自动猜测初始值,不需要手动设置),并将拟合结果也保存到 KN中。可以在命令行窗口中输入print K0来进行验证,如图3-9所示。合理地使用这一特性,可以在编写程序时节约代码量,提高效率。
图3-9 利用系统内置变量查看拟合结果