时间:2024-05-22
王舵
(辽宁省计量科学研究院,沈阳 110004)
蒙特卡洛法(MCM)作为《测量不确定度表示指南》(GUM)的重要补充方法,可有效地解决测量模型非线性等诸多不确定度评定问题[1]。近年来,国内外对MCM评定不确定度做了许多研究,在物理学、生物学、工程科学等领域MCM得到了广泛的应用[2]。研究结果表明,与GUM相比,MCM没有明显的不同,具有很好的评定效果[3–6]。但MCM计算简单,不用考虑各分量之间的相关性,不需为简化评定过程而忽略某些影响因素,评定过程更加方便易行[7]。目前,相关的研究主要实施在MATLAB计算平台上[8–11]。MATLAB作为一款商业软件在各个方面都十分完善,但其使用费用并不能被人们广泛接受。随着人工智能的飞速发展,Python软件作为一款开源软件在科学计算领域占据了主导地位。与商业软件MATLAB相比,Python具有免费、跨平台、函数库完善等诸多优点,非常适用于科学计算[12]。毛细管电泳是一种效率极高的分离分析技术,在很多领域都有广泛的应用[13]。多数的研究都集中在分析毛细管电泳分离过程中各因素对实验结果不确定度的影响[14],但对毛细管电泳法检出限的不确定度评定却鲜有报道。与直接以标准物质为研究对象的检出限不确定度评定不同,毛细管电泳仪检定规程[15]中的计量方法需要采用多级稀释的方式配制溶液,这为检出限不确定度的评定引入了更多的影响因素。笔者以毛细管电泳仪检出限的不确定评定为例,以GUM评定过程为对照,详细讨论了Python在MCM上的具体应用与分析。
GUM是采用“不确定度传播率”计算合成被测量估计值的测量不确定度评定方法。通过建立测量模型,分析不确定度来源,计算传播系数,评定输入量的标准不确定度,计算合成标准不确定度,确定扩展不确定度等步骤完成不确定度的评定。
MCM为Monte Carlo Method 的简写,是采用“概率分布传播”的通用方法来评估被测量的测量不确定度。MCM要求建立测量模型,确定输入量的概率密度函数(PDF),并通过随机抽取每个输入量的值,重复计算多次(通常为1×105到1×106次),分析计算结果,确定被测量的估计值及其包含区间。
毛细管电泳仪:K1050型,北京凯奥科技发展有限公司。
维生素B6纯度标准物质:纯度为99.9%,扩展不确定度为0.4%(k=2),编号为GBW(E) 100183,中国计量科学研究院。
对于2×10–6g/mL的维生素B6溶液的配制,JJG 964–2001 《毛细管电泳仪》检定规程中给出了具体方法。
采用两级稀释的方式配制维生素B6溶液:首先,称取10.0 mg溶于100 mL容量瓶中,配制1.0×10–4g/mL维生素B6溶液溶液。然后,取2 mL 1.0×10–4g/mL维生素B6溶液溶液稀释到100 mL容量瓶中,配制成2.0×10–6g/mL维生素B6溶液。按式(1)计算维生素B6溶液的质量浓度。
式中:ρ——维生素B6标准溶液的质量浓度,g/mL;
m——维生素B6的质量,mg;
P——维生素B6的纯度;
V——溶液定容体积,mL;
1 000——单位换算系数。
依据毛细管电泳仪检定规程,采用质量浓度为2×10–6g/mL的维生素B6溶液,连续进样3次测定峰高,按式(2)计算检出限。
式中:D——检出限,g/mL;
HN——噪声峰高;
ρ——维生素B6标准溶液的质量浓度;
H——样品峰高。
采用《化学分析中不确定度的评估指南》[16]中的方法,按式(3)以相对不确定度计算传播率:
以毛细管电泳仪检出限的测量不确定度为例,对GUM与MCM在不确定度评定中的应用进行比较,结果列于表1。
表1 GUM与MCM不确定度评定应用比较
续表1
MCM法不确定度评定的完整程序代码如下。
以上代码可直接输入Python编译器中运行。注意代码中的缩进不可省略。
MCM的计算结果与GUM结果相同,表明MCM的评估方法具有很好的效果。采用Python进行MCM计算分析,与传统的GUM相比,代码实现更加简单,且无关数学模型的复杂性,不需求导不确定度传播系数,可直接通过计算获得结果,计算速度快,计算精度高。
对计算结果做进一步分析。图1为MCM计算结果的概率分布。从图1可以看出,毛细管电泳仪检出限的计算结果具有正态分布的形态,符合线性模型下GUM分析的理论基础,是对GUM分析结果的进一步验证。由于计算结果具有对称的分布形态,可以依据需求选取概率范围,确定正确的k值用于计算扩展不确定度。
图1 检出限MCM计算结果的PDF和CDF
图2为计算结果与计算次数的关系展示。由图2可以看出,随着计算次数的增加,计算结果的平均值(检出限)与标准偏差(标准不确定度)越接近理论计算值。当计算次数大于1×104次试验时,计算结果足够稳定。更大数量的试验能够提供更平滑的PDF,得到更准确的结果。
以上是基于理想条件下的分析,直接将峰高的测量值理论化为正态分布,但实际的测量为有限次的测量,不可能获取到正态分布内的全部值,因此,需要分析在实际采样条件下计算结果的分布情况。
在Python中提供了random.choices()的方法,即在已知采样序列中随机选取数值的方法。将11次测量的样本作为研究对象,每次从中随机取出3个数值作为一次试验的可能取值用于计算。将相关代码更改如下:
图2 检出限MCM计算结果与计算次数的关系
经过M=1×106次循环计算,得出计算结果:
检出限(计算结果平均值):1.13×10–8g/mL。
检出限的标准不确定度(计算结果标准偏差):1.83×10–9g/mL。
基于实际采样计算结果与理论计算结果相同。
图3为基于采样值模拟计算后的PDF和CDF。可以看出,基于实际采样进行计算的结果,尽管得到的检出限和标准不确定度与原计算相同,但计算结果的分布却非常不同,不再完全符合正态分布。由于计算结果不再有对称分布,则不能直接确定k值计算扩展不确定度。扩展不确定度应采用区间的表示方式,结合累计概率密度分布函数(CDF),通过百分位点获取扩展不确定度的上限和下限。
图3 基于采样值的MCM计算结果的PDF和CDF
实际上对从11次测量值随机选取3个测量值这种方式做进一步分析表明,经过1×106次循环计算可以得到与正态分布相同的平均值和标准偏差。平均值与标准偏差相同,而计算结果的分布有巨大差异的原因是数据的有限性,即有限的数据未能正确地反应正态分布特性。多数仪器的重复测量在理论上应符合正态分布,但如果不符合正态分布,应采用实际数据进行计算,这样才能获得正确的不确定度评定结果。
从计算结果可以看出,MCM能够获得与GUM相同的结果。但MCM不需计算传播系数,不需精简模型,能够获得包含实际采样信息在内的更为全面准确的计算结果。该方法基本涵盖了Python软件在不确定度计算时所需的全部代码,方便在其它研究中参考使用。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!