С учетом непрерывных функций плотности вероятности F X и F Y с совместной функцией плотности вероятности F X, Y , мы можем вычислить F X + Y как интеграл от F X, Y по линии z = x + y . Если функции плотности вероятности являются дискретными, вышеприведенный интеграл должен быть записан как производная интеграла по части плоскости, заданная как z <= <em>x + y .
Это довольно просто сделать в MATLAB. Начнем с данных ОП:
F_x = [0.0833,0.0833,0.25,0.25,0.33,0.33,0.5833,0.5833,1]; % CDF
F_x = diff([0,F_x]); % PDF
F_y = [0,0,0,0,0.2857,0.2857,0.2857,0.2857,0.5714,0.7143,0.7143,0.8571,1]; % CDF
F_y = diff([0,F_y]); % PDF
H = F_x.' .* F_y; % example joint PDF
Теперь мы суммируем F_cum(z) = sum(H(x,y))
для всех значений z<=x+y
, а затем берем производную F = diff([0,F_cum])
:
[m,n] = size(H);
F_cum = zeros(1,m+n-1);
for z = 1:numel(F_cum)
s = 0;
for x = 1:numel(F_x)
y = z-x+1;
y = max(min(y,n),1); % avoid out of bounds indexing
s = s + sum(H(x,1:y));
end
F_cum(z) = s;
end
F = diff([0,F_cum]);
Обратите внимание, что мы определили y=z-x+1
, что означает z=y+x-1
. Таким образом, F(1)
соответствует z=2
. Это наименьшее возможное значение, которое может получиться из суммы двух распределений, которые мы определили, чтобы начать с 1.
Вышесказанное можно упростить, добавив к нулю H
и сдвинув каждую строку на один дополнительный элемент. Это выстраивает линию z = x + y в столбце матрицы, что позволяет нам использовать тривиальную проекцию sum
:
H = [H,zeros(m)];
for ii=2:m
H(ii,:) = circshift(H(ii,:),ii-1);
end
F_cum = cumsum(sum(H,1));
F_cum = F_cum(1:end-1); % last element we don't need
F2 = diff([0,F_cum]);
Но поскольку diff([0,cumsum(F)]) == F
(с точностью до чисел), мы можем пропустить эти две операции:
F3 = sum(H,1);
F3 = F3(1:end-1); % last element we don't need
(all(abs(F-F2)<1e-15)
и all(abs(F-F3)<1e-16)
)