使用integral2或integral3来计算MATLAB中的CDF

问题描述:

我刚刚遇到了使用integral2integral3在MATLAB中计算CDF的问题。假设我有两个独立的正态随机变量X和Y,平均值向量是mu = [5;50],协方差矩阵是c = [3^2,0; 0,3^2]使用integral2或integral3来计算MATLAB中的CDF

因为它们是独立的,联合PDF是两个PDF的乘法,我用下面的代码来计算的概率在整个域,

integral2(@(x,y) normpdf(x,5,3).*normpdf(y,50,3),-Inf,Inf,-Inf,Inf) 

我觉得应该给我1作为回答,而是,它返回

1.8174e-10 

然后我尝试了mvncdf功能,

mvncdf([Inf,Inf],[5,50],diag([3,3].^2)) 

并返回正确答案,1。我也尝试了一维版本integral,这工作正常。任何人都可以为我解释这个吗?

这是由于numerical imprecision(结合您的分布具有非零均值的事实)而发生的。您可以使用'AbsTol' option for integral2增加溶液精度:

integral2(@(x,y)normpdf(x,5,3).*normpdf(y,50,3),-Inf,Inf,-Inf,Inf,'AbsTol',1e-16) 

回报更接近于1。你可以通过你的发行手段采取对称的优势,例如避免这种情况,

4*integral2(@(x,y)normpdf(x,5,3).*normpdf(y,50,3),5,Inf,50,Inf) 

mvncdf示例使用了完全不同的方法来直接计算是这样的:

normcdf(Inf,5,3)*normcdf(Inf,50,3)