我正在使用以下函数计算两个正常双变量分布的重叠
function [ oa ] = bivariate_overlap_integral(mu_x1,mu_y1,mu_x2,mu_y2)
%calculating pdf. Using x as vector because of MATLAB requirements for integration
bpdf_vec1=@(x,y,mu_x,mu_y)(exp(-((x-mu_x).^2)./2.-((y-mu_y)^2)/2)./(2*pi));
%calcualting overlap of two distributions at the point x,y
overlap_point = @(x,y) min(bpdf_vec1(x,y,mu_x1,mu_y1),bpdf_vec1(x,y,mu_x2,mu_y2));
%calculating overall overlap area
oa=dblquad(overlap_point,-100,100,-100,100);
你可以看到这涉及从函数overlap_point获取双积分(x:-100到100,y:-100到100,理想情况下-inf到inf但目前就足够了),该函数至少为2 pdf- s由点x,y的两个分布的函数bpdf_vec1给出。
现在,PDF从不为0,所以我预计区间的面积越大,最终结果就越大,显然在某一点之后可以忽略不计。但是,有时候,当我减小间隔的大小时,结果会增加。例如:
>> mu_x1=0;mu_y1=0;mu_x2=5;mu_y2=0;
>> bpdf_vec1=@(x,y,mu_x,mu_y)(exp(-((x-mu_x).^2)./2.-((y-mu_y)^2)/2)./(2*pi));
>> overlap_point = @(x,y) min(bpdf_vec1(x,y,mu_x1,mu_y1),bpdf_vec1(x,y,mu_x2,mu_y2));
>> dblquad(overlap_point,-10,10,-10,10)
ans =
0.0124
>> dblquad(overlap_point,-100,100,-100,100)
ans =
1.4976e-005 -----> strange, as theoretically cannot be smaller then the first answer
>> dblquad(overlap_point,-3,3,-3,3)
ans =
0.0110 -----> makes sense that the result is less than the first answer as the
interval is decreased
这里我们可以检查间隔边界点处的重叠是否(接近)0。
>> overlap_point (100,100)
ans =
0
>> overlap_point (-100,100)
ans =
0
>> overlap_point (-100,-100)
ans =
0
>> overlap_point (100,-100)
ans =
0
这可能与dblquad的实现有关,还是我在某处犯了错误?我使用MATLAB R2011a。
由于
答案 0 :(得分:1)
好的,这是我的八度结果。
>fomat long
>z10 = dblquad(overlap_point,-10,10,-10,10)
z10 = 0.0124193303284589
>z100 = dblquad(overlap_point,-100,100,-100,100)
z100 = 0.0124193303245106
>z100 - z10
ans = -3.94835379669001e-012
>z10a = dblquad(overlap_point,-10,10,-10,10,1e-8)
z10a = 0.0124193306514996
>z100a = dblquad(overlap_point,-100,100,-100,100,1e-8)
z100a = 0.0124193306527155
>z100a-z10a
ans = 1.21588676627038e-012
顺便说一句。在使用数值解法之前我已经注意到了这种类型的问题。有时你做出一个你期望的改变会提高结果的准确性(在这种情况下,通过使你的极限更接近完整平面的理想情况),但是你会得到相反的效果,结果变得不那么准确。在这种情况下发生的事情是,通过走出“更宽”,到-100..100,你将焦点从功能中发生真正重要动作的位置转移到接近原点的位置。在某些时候,你正在使用的dblquad的实现必须在增加限制时开始增加样本间距离,然后它开始丢失一些靠近原点的重要内容。
也许运行更高版本的matlab的人可以检查一下,看看它是否有所改进。
答案 1 :(得分:1)
恭喜!作为第12百万人,基本上可以提出这个问题,你赢得了奖项。 :)我想说的是这是一个每个人最初都会绊倒的问题。老实说,这个问题一遍又一遍地被问到,所以真的,这个问题应该被标记为重复。
这些事情发生的事情是,从足够远的地方观察,双变量法线基本上是一个delta函数。而且您不需要将该区域真正地扩散太远,因为正常密度会快速下降。对于您尝试整合的大多数域,它基本上为零,至少在所采用的容差范围内。
那么如果正交恰好碰到了质量区域附近的一些采样点,那么你可能会得到一些关于积分的实际估计。但是,如果所有工具看到的数字在整个域中基本上为零,则结论积分为零。请记住,自适应集成工具并非无所不知。他们对你的功能一无所知。这是他们的黑匣子。这些不是象征性的工具。
顺便说一下,对于Octave和MATLAB,这并不是我所期望的。这只是自适应积分器的一个问题,它选择设置其采样点。