how to compute cdf from a given pmf in matlab?

In 1D case you can use cumsum to get the vectorized version of loop (assuming that both theta and p are column vectors):

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)))];

In 2D case the function cumsum will be applied two times, in vertical and horizontal directions:

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;

CLICK HERE to find out more related problems solutions.

Leave a Comment

Your email address will not be published.

Scroll to Top