首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Matlab中计算给定的PMF

如何在Matlab中计算给定的PMF
EN

Stack Overflow用户
提问于 2022-02-06 14:55:27
回答 1查看 75关注 0票数 0

对于给定的用于p=f(\theta)2\pi之间的\theta的PMF,我在Matlab中计算了

代码语言:javascript
复制
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进行同样的处理,但是结果是错误的。为什么?

如果给定的PMF以2D形式表示为

  1. ,那么如何计算p=f(\theta,\phi)?我能不详细解释一下here ?

吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-06 17:01:22

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

代码语言:javascript
复制
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将在垂直和水平方向上应用两次:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71008366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档