如何在 Matlab 中从给定的 PMF 计算 CDF

How to compute CDF from a given PMF in Matlab

对于 02\pi 之间 \theta 的给定 PMF p=f(\theta),我在 Matlab 中计算的 CDF 为

theta=0:2*pi/n:2*pi
for i=1:n
cdf(i)=trapz(theta(1:i),p(1:i));
end

结果得到验证

  1. 我试着用 cumsumcdf=cumsum(p)*(2*pi)/n 做同样的事情,但结果是错误的。为什么?

  2. 如果给定的 PMF 是二维的 p=f(\theta,\phi),我如何计算 CDF?我可以不按照解释的那样详细说明吗 here

在一维情况下,您可以使用 cumsum 获取循环的矢量化版本(假设 thetap 都是列向量):

n = 10;
theta = linspace(0, 2*pi, n).';
p = rand(n,1);
cdf = [0; 0.5 * cumsum((p(1:n-1) + p(2:n)) .* diff(theta(1:n)))];

在 2D 情况下,函数 cumsum 将在垂直和水平方向应用两次:

nthet = 10;
nphi = 10;
theta = linspace(0, 2*pi, nthet).';     % as column vector
phi = linspace(0, pi, nphi);            % as row vector
p = rand(nthet, nphi);
cdf1 =  0.5 * cumsum((p(1:end-1, :) + p(2:end, :)) .* diff(theta), 1);
cdf2 =  0.5 * cumsum((cdf1(:, 1:end-1) + cdf1(:, 2:end)) .* diff(phi), 2);
cdf = zeros(nthet, nphi);
cdf(2:end, 2:end) = cdf2;