Я вычисляю перекрытие двух нормальных двумерных распределений, используя следующую функцию
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);
Вы можете видеть, что это включает в себя получение двойного интеграла (x: -100 до 100, y: -100 до 100, в идеале -inf до inf, но достаточно на данный момент) от функции перекрытия_точки, которая составляет минимум 2 pdf-s, заданных функция bpdf_vec1 двух распределений в точке x,y.
Теперь 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.
Спасибо
>> dblquad(overlap_point,-9,9,-9,9) ans = 0.012434302954144
>> dblquad(overlap_point,-10,10,-10,10) ans = 0.012426083045525
. Указание (достаточно большого) параметра точности, похоже, имеет положительный эффект, но не решает проблему полностью, например:>> dblquad(-9,9,-9,9,1e-10) ans = 0.012419331486452
,dblquad(-10,10,-10,10,1e-10) ans = 0.012419330851169
,dblquad(-100,100,-100,100,1e-10) ans = 0.012415587111195
Результаты намного ближе друг к другу, но все же уменьшаются от [-10,10, -10,10]. - person shiftyscales   schedule 16.04.2013