3.1.5 数据拟合对话框详解
自定义数据拟合对话框是使用Igor进行数据拟合的主要窗口,也是Igor重要且常用的图形用户界面之一。即使是熟练掌握了编程技术,在很多场合利用此对话框完成数据拟合仍然是最有效率的方式。因此,读者应该熟练地掌握自定义数据拟合对话框的使用。
数据拟合窗口一共有4个选项卡,每个选项卡可以详细地设定拟合过程中一个环节。根据被拟合数据的不同(如是一维数据还是二维数据),每个选项卡显示的内容会有所区别。
1.【Function and Data】选项卡
通过这个选项卡可以设定用来拟合的数学公式,指定要拟合的数据及其x坐标,如图3-15所示。
图3-15 【Function and Data】选项卡
【Function】下拉列表框列出了拟合函数,包括内置函数和自定义函数。注意,一般只有使用了Fitfunc关键字的函数才会出现在这里(参看5.2.6节)。【Function】下拉列表框打开后可能如图3-16所示。
图3-16 拟合函数列表
在【Function】下拉列表框的最后有两个选项:Show Multivariate Functions表示列出二维拟合函数,Show Old-Style Functions用来显示旧风格的拟合函数。所谓的Old-Style Function表示没有用Fitfunc关键字指定的Function。
【Y Data】列出当前目录下待拟合的数据。如果【From Target】复选框被选中,则【Y Data】只列出当前Table或是Graph中显示的数据。如果【Function】下列列表框中选中多维拟合函数,【Y Data】还会显示当前目录下的多维数据。
【X Data】设置拟合过程中使用的x坐标。如果使用待拟合wave本身的x坐标属性,可以使用_calculated_默认选项。如果拟合的x坐标存放于单独的wave中,则可以手动指定该wave。注意,存放x坐标的wave长度必须和要拟合的wave长度相等。
如果【Function】下拉列表框中选择了多维拟合函数,根据【Y Data】的不同,【X Data】选项区域会变成如图3-17所示的形式。
图3-17 多维数据拟合坐标选取
图3-17左边表示Y Data为一维wave的情况。此时多维的拟合对象必然是XYZ型wave,即要拟合的数据保存在一个一维wave中,对应的x值和y 值保存在另外两个一维wave中。按【Select X waves】的下三角按钮为Y Data选择两个同样长度的wave以作为x和y 坐标。也可以选择一个两列的矩阵,每一列对应一个坐标。
图3-17右边表示Y Data为二维Matrix wave的情况。此时可以使用wave自身坐标属性,或者手动指定两个一维wave作为坐标。
为了验证这部分内容,读者可以在命令行中输入下列命令创建一个二维wave,然后在【Y Data】下拉列表框中选中w2 d,验证上面的结论。
Make/O/N=(200,200)w2d
【Show】选项区域有【Equation】和【Commands】两个复选框,前者表示显示公式,后者表示显示命令行。
在【Function】下拉列表框下还有一个【New Fit Function】按钮,单击该按钮可以自定义拟合函数,关于该部分内容在3.2.2节介绍。
2.【Data Options】选项卡
通过【Data Options】选项卡设定对拟合数据的限制,如指定拟合的范围、指定每一个参与拟合数据点的权重、指定哪些数据点不参与拟合等,如图3-18所示。
图3-18 【Data Options】选项卡
【Range】选项区域指定拟合的数据范围。【Start】指定起始位置,【End】指定终止位置,这里的位置指数据点顺序。如果拟合的范围为从第100到第200个数据点,则可以将【Start】设置为100, 【End】设置为200。在【Show】选项区域中选中【Commands】,观察对应的命令行形式,如图3-19所示,从中可以看到LorF【100,200】限定了要拟合的数据范围。
图3-19 设置数据的拟合范围
单击【Do It】按钮进行拟合,可以发现只对曲线的指定范围进行了拟合,如图3-20所示。
图3-20 指定数据的拟合范围
注意,如果显示结果和本书不一样,可用下面命令行进行设置。
ModifyGraph lsize(fit_LorF)=2, rgb(fit_LorF)=(0,0,65280)
通过光标可以更方便地(Cursor)指定拟合范围,本例中,保证LorF曲线为显示状态,按Ctrl+I键,窗口下方出现一个光标工具,如图3-21所示。
图3-21 在显示的数据上附着光标
用来设置A光标。将鼠标指针移动到上并按下鼠标左键,保持按住状态拖动光标到某一数据点,可在数据点上附着一个圆形的光标圈,同时对应的行会出现关于该数据点的信息,包括数据点位置、x值和y 值等。按照同样的方法可设置B光标。最终效果如图3-21所示,此时光标A和B全部变黑,表示被使用。
当光标附着在数据点上以后,【Range】中【Cursors】按钮处于可用状态(否则是灰色不可用状态),按下【Cursors】按钮就可以自动填写当前光标对应的数据点位置。注意,这里填写的不是光标所处位置的数据序号,而是光标函数pcsr。在拟合命令执行时Igor会根据该函数获取数据的序号位置,如图3-22所示。
图3-22 使用光标指定数据的拟合范围
如果被拟合的Y Data是一个多维数据(小于或等于四维),则拟合范围除了可以指定x坐标范围之外,还可以指定其他维度的坐标范围,方法完全一样。
【Weighing】用于指定拟合数据点的权重。测量存在误差,Y Data中的每一个数据都存在测量误差。根据误差理论,每一个测量值都可以用一个标准偏差来描述误差大小,标准偏差大小取决于测量仪器、测量方法、测量环境和测量者。一般测量误差并不容易得到,如果根据测量模型或者仪器说明可以得到测量值的误差,那么在拟合时就可以提供给拟合函数。测量误差大的数据点在拟合中的权重应该较小。方法是将每一个数据点的测量误差保存在一个wave中,并在【Weighting】下拉列表框中选择该wave。如果不提供Weighting wave, Igor默认每一个数据点的测量误差都是相同的。
【Wave Contains】选项表示提供的Weighting wave里包含的数据是标准偏差还是标准偏差的倒数,这与Igor的历史有关,读者不必深究,按照实际情况设置即可。
【Data Mask】用于设置Y Data中哪些数据参与拟合,哪些数据不参与拟合。Mask有掩码的意思。在【Data Mask】下拉列表框中选择一个掩码wave,该wave的长度和被拟合的wave相同,如果掩码wave取值为1,表示对应位置数据点将参与拟合,取值为0表示不参与拟合。如果测量的数据中存在个别坏点,可以将该点对应位置的Mask wave中数据值设置为0,这样就可以将坏点排除在拟合之外。
3.【Coefficients】选项卡
【Coefficients】选项卡用来设置拟合参数初始值,如图3-23所示。【Coefficient Wave】下拉列表框选择拟合参数wave:选择_default_表示默认,此时Igor会自动创建一个名为W_coef的wave存放拟合参数;选择_New Wave_表示使用自定义的wave来保存拟合参数,新wave的名字由下面的【New Wave Name】文本框输入指定。Igor会根据指定的名字自动创建一个新的wave。
图3-23 拟合初始参数设置
【Auto guess】下拉列表框选择拟合参数初始值的设置方法。此下拉列表框只有当拟合函数是内置函数时才出现。Auto guess表示自动设定初始参数值,Manual guess表示手动
指定拟合参数初始值,Only guess表示只猜测初始参数值,并不拟合。
【Coef Name】列出当前拟合参数的名称,【Initial Guess】设置初始值,【Hold? 】设置在拟合的过程中是否保持该拟合参数值不变。
【Epsilon】对于系统内置拟合函数不可用。拟合函数为自定义拟合函数时,Epsilon表示迭代时参数变化步长的参考值。
【Constraints】设置是否对拟合参数进行限制,在Manual guess即手动指定初始参数模式下有效。如可以设置拟合参数的拟合范围为2<a<3。
注意,当在【Function and Data】选项卡中选择的是自定义函数时,【Coefficients】选项卡中的【Manual guess】下拉列表框会被【Epsillon Wave】下拉列表框取代,如图3-24所示。
图3-24 Epsion菜单
【Epsillon Wave】下拉列表中wave存放上面提到的Epsilon值。注意,如果指定一个已经存在的wave作为Epsilon wave,该wave必须和参数wave的长度相等。指定一个新名字时,如果该名字对应的wave不存在,Igor会自动创建wave,但用户必须在下面的【Epsilon】列提供相应的取值。
在拟合过程中,每一次迭代如何调整拟合参数步长由Igor自动指定,这在大多数情况下是满足需要的,但是对于特殊的拟合情况,如采用默认步长会使两次计算值相差过小,对应差分值几乎相等,拟合会无法收敛或者收敛很慢。此时可以通过Epsilon值来手动指定步长。这需要用户有一些先验的知识。
指定拟合参数的初始值非常重要。Igor在拟合时,实际上是将拟合参数看作一个N维向量,N是拟合参数的个数。每一次迭代过程的chi_square值相当于N维空间的一个点上的值,这些值在N维空间构成了一个曲面,曲面谷底对应的N维向量就是要拟合的参数值。拟合的过程就是寻找一条通往谷底的路径。在这里读者应该注意到,有时即使拟合收敛了,也不代表是最佳拟合,因为收敛点可能不是最深的谷底,而是最深谷底旁边那个比较深的谷底。换句话说,拟合达到收敛是最佳拟合的必要不充分条件。当使用自定义函数拟合时,必须准确指定初始参数。这是和使用系统内置函数区别的地方,其他设置都一样。
4.【Output Options】选项卡
【Output Options】选项卡指定拟合输出哪些量或者wave,设置对话框如图3-25所示。拟合输出的内容主要有拟合参数wave、残差wave、拟合参数误差wave、拟合参数方差和协方差、拟合曲线、拟合曲线的统计性质(误差和拟合数据点的误差)和对拟合过程的控制等。其中,拟合参数wave和拟合参数误差wave是默认输出,其他的可以选择输出或是不输出。
图3-25 拟合输出设置
【Destination】下拉列表框指定拟合曲线:_auto_表示默认值,此时会自动创建一个wave,名字为被拟合wave的名字加“fit_”前缀;选择_New Wave_并在其后的【New Wave Name】文本框输入新的名字,则Igor将使用该名字作为拟合曲线wave的名字;也可以手动指定一个已经存在的wave作为拟合输出曲线,如果该wave已经存在,将会被覆盖;选择_none_,表示不输出拟合曲线。
请读者注意区分拟合曲线和拟合参数wave的区别,拟合曲线是利用拟合参数并使用被拟合数据的x坐标计算出来的曲线。
默认拟合曲线wave的长度为200,可以在【Number of Points】文本框里修改。选中【X Range Full Width of Graph】单选按钮表示使用当前Graph的x坐标范围作为拟合输出曲线的x坐标范围。
【Residual】下拉列表框表示输出残差。残差wave等于被拟合数据减去拟合曲线数据。如果选择_none_表示不生成,否则生成残差wave。【Residual】设置和上面的【Destination】下拉列表框完全一样。注意,_auto trace_表示将残差添加到Graph窗口,_auto wave_表示只创建不添加。
【Add Textbox To Graph】表示向图中添加一个文本图注以说明拟合的基本信息,可以单击下面的【Textbox Preferences】按钮来设置要输出的信息。
【Covariance Matrix】复选框表示输出协方差矩阵。
【Error Analysis】选项区域用以设置拟合参数误差的输出方式。
【Confidence interval】指定置信水平,也可以通过后面的【Common Choices】下拉列表框选择通常用到的置信水平。置信水平表示拟合参数值的可信程度,置信水平越高,拟合参数也越可信,但置信区间也越大。如果不指定,表示置信水平是68.3%。这里假定误差分布满足高斯分布,误差值取实验标准偏差。
【Confidence Int.for Fit Coefs】复选框表示计算拟合参数置信区间,Igor根据置信水平计算出置信区间,如果取置信水平为68.3,该值就等于拟合标准偏差,也即W_sigma里输出的数值,否则会比该数值大一些,如置信概率是95%时,置信区间大概是W_sigma的2倍。置信区间结果保存在名为W_ParamConfidenceInterval的wave里,其中最后一个数据代表置信概率。
【Confidence Bands】复选框表示计算置信曲线,置信曲线有两条,拟合曲线落在置信曲线所限定的范围内的概率是置信概率设定的数值。
【Prediction Bands】复选框表示计算预测曲线,同样包括两条曲线,含义是每一个拟合的数据点落在该曲线限定范围内的概率是置信水平设定的概率。读者注意仔细体会Confidence Bands和Prediction Bands的区别,前者表示“平均值”的误差,后者表示“单个值”的误差,后者误差一般要比前者大。