次の関数を使用して、2 つの正規二変量分布の重なりを計算しています
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);
これには、次の式で与えられる 2 つの pdf-s の最小値である関数 overlay_point から二重積分 (x: -100 から 100、y: -100 から 100、理想的には -inf から inf ですが、現時点では十分です) を取得することが含まれていることがわかります。点 x、y における 2 つの分布の関数 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 を使用しています。
ありがとう