p=f(\theta)對于和\theta之間的給定 PMF ,我將 Matlab 中的 CDF 計算為02\pi
theta=0:2*pi/n:2*pi
for i=1:n
cdf(i)=trapz(theta(1:i),p(1:i));
end
結果得到驗證。
我試圖用
cumsumas做同樣的事情,cdf=cumsum(p)*(2*pi)/n但結果是錯誤的。為什么?如果給定的 PMF 是二維的,我如何計算 CDF
p=f(\theta,\phi)?我可以在不詳細說明的情況下這樣做嗎?
uj5u.com熱心網友回復:
在 1D 情況下,您可以使用cumsum來獲取回圈的矢量化版本(假設theta和p都是列向量):
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/426544.html
