图片缩略图

蒙特卡罗误差传播

版本1.0 (6.5 KB) CarstenRobens
具有不同误差类型的任意解析函数的误差传播方法

783下载

更新2016年6月15日

查看许可协议

误差传播是现代科学的核心兴趣,在大多数情况下,通过假设参数的高斯误差和计算偏导数(见https://en.wikipedia.org/wiki/Propagation_of_uncertainty#Simplification).
然而,这种方法有三个主要缺点:
A)它只适用于线性函数或可以很好地用线性函数逼近的函数,但完全不适用,例如f(A,b) = A /b时,当比例变小,但误差仍然很大(见例2)。
B)在简单的版本中,不可能将具有不同误差分布的参数组合成高斯分布(例如二项分布)。
对于复杂函数,偏导数的计算可能是乏味的
我们编写了一个简单的基于蒙特卡罗的错误传播,它允许防止所有这些缺点。文件的例子。m包含了各种不同的具体例子,如何使用该方法,并显示了简单的高斯误差传播方法的故障。由于现代计算机,这种方法允许精确的误差传播数值蒙特卡罗参数生成。
该方法本质上由两个函数组成:generateMCparameters和propagateErrorWithMC
第一部分生成MC参数值的分布,选项如下:
% errorType: gaussian, binomial, bootstrapMean, bootstrapDistribution
% params:依赖于errorType(高斯:x,dx;二项:n, k;引导:数组测量值
%地块:(可选)地块最终分布
% numSamples:(可选)MC样品数量

在当前状态下,可以生成以下四种分布:
-高斯:由平均值和标准差指定
-二项式:由n和k定义
- bootstrapMean:这是实现,因为很多时候人衡量一个信号,知道它有一个平均值,但读数波动,在这种情况下,用户可以输入测量值(x_1、x_2…x_n)和使用引导一个分布围绕均值生成(见也# Estimating_the_distribution_of_sample_mean https://en.wikipedia.org/wiki/Bootstrapping_(统计)).
- bootstrapDistribution:在测量值本身波动的情况下(不仅仅是读取),该方法允许直接从测量值生成MC数组(x_1,x_2,....x_n)。

一旦生成了参数的分布,就可以传播它们了。例如函数f(a,b) = a/b:
一个= generateMCparameters(“高斯”,[2,0.2]);
B = generateMCparameters(“高斯”,[0.5,0.2]);
paramMatrix = [A, B];
funToProp = @(x) x(1)./x(2);
[funValue,funCI,funSamples] = propagateErrorWithMC(funToProp, paramMatrix);

有下列选项:
% funnofinterest函数应该被评估
% params:列向量矩阵,每一行表示抽样参数
% CIthreshold:(可选)置信区间阈值,默认值:0.68
%地块:(可选)地块最终分布
%方法:(可选)确定funValue(中值(默认),平均值,最大值)的方法

置信区间的默认值是CIthreshold = 0.68。然后通过对函数值分布从+/- inf积分直到值达到(1-CIthreshold)/2来确定CI。

最后的图显示了CI内的绿色值和外部的蓝色值,还执行了指数拟合,以将最终分布与高斯分布进行比较。

==== Version 1.0 (2016-07-14) ====
最初版本的上传:
Carsten Robens和Stefan Brakhane

已知bug /需要改进:
-对于n较小的纯二项分布,从propagateErrorWithMC得到的CI不能再现众所周知的Clopper Pearson CI(见https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval#Clopper-Pearson_interval).

引用作为

CarstenRobens(2021)。蒙特卡罗误差传播(//www.tianjin-qmedu.com/matlabcentral/fileexchange/57672-monte-carlo-error-propagation), MATLAB中央文件交换。检索

MATLAB版本兼容性
创建R2015a
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!