积分2不应该返回0

时间:2019-11-19 19:43:54

标签: matlab integral

我遇到以下问题。我正在尝试在整个支持范围内整合双变量正态的pdf函数。但是,Matlab对于d返回0,实际情况并非如此。我的方法有什么问题?

代码如下:

mu1=100;
mu2=500;
sigma1=1;
sigma2=2;
rho=0.5;
var1=sigma1^2;
var2=sigma2^2;

pdf = @(x,y) (1/(2*pi*sigma1*sigma2*sqrt(1-rho^2))).*exp((-1/(2*(1-rho^2)))*(((x-mu1).^2/var1)+((y-mu2).^2/var2)-((2*rho*(x-mu1).*(y-mu2))/(sigma1*sigma2))));

d = integral2(pdf,-Inf,Inf,-Inf,Inf)

1 个答案:

答案 0 :(得分:2)

正如@Andras Deak所评论的那样,“指数从峰顶迅速切断”。 实际上,您可以将其可视化:

mu1=100;
mu2=500;
sigma1=1;
sigma2=2;
rho=0.5;
var1=sigma1^2;
var2=sigma2^2;

pdf = @(x,y) (1/(2*pi*sigma1*sigma2*sqrt(1-rho^2))).*exp((-1/(2*(1-rho^2)))*(((x-mu1).^2/var1)+((y-mu2).^2/var2)-((2*rho*(x-mu1).*(y-mu2))/(sigma1*sigma2))));
figure
fsurf(pdf,[90 110 490 510])
figure
fsurf(pdf,[0 200 400 600])

在第一个图中,限制接近于您提供的均值。您可以看到二元法线的形状: enter image description here

如果扩展限制,您将看到不连续的样子: enter image description here

内置积分函数试图求积分,但是如果您的极限是-infinf,则您的函数几乎在任何地方都为零,且不均值接近均值。

To treat singularities,您应该按照MATLAB的建议中断域。由于该函数几乎在任何地方都为零,因此您只能在以下均值附近进行积分:

d = integral2(pdf,90,110,490,510)

> d =
> 
>     1.0000

您也可以将其编写为变量的函数。 empirical rule指出,您的数据的99.7%与均值相差3个标准差以内,因此:

d = integral2(pdf,mu1-3*sigma1,mu1+3*sigma1,mu2-3*sigma2,mu2+3*sigma2)

> d =
> 
>     0.9948

这将为您带来很好的结果。 我们可以详细说明。在经验规则的维基百科页面中,表达式

erf(x/sqrt(2))

将给出“ mu+-x*sigma范围内的预期人口比例”。对于MATLAB中作为标准显示的短精度,如果选择x = 5,则将得到:

x = 5;
erf(x/sqrt(2))

> ans =
> 
>     1.0000

几乎每个数据都包含在5个标准偏差内。因此,在双重积分中您可能会忽略此范围之外的域,从而避免(几乎)奇异。

d = integral2(pdf,mu1-x*sigma1,mu1+x*sigma1,mu2-x*sigma2,mu2+x*sigma2)

> d =
> 
>     1.0000