使用integral2或integral3来计算MATLAB中的CDF
问题描述:
我刚刚遇到了使用integral2
或integral3
在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)