采用离散帕累托分布在Matlab中进行采样

时间:2016-01-17 06:52:44

标签: matlab static discrete-mathematics random-sample

我想在matlab中生成带有离散Pareto分布的10000个数字。

我在R中编写了这段代码,但我想在Matlab中编写它。

离散帕累托的R代码:

N<-5 ##for instance,you need N large enough
i0<-(1:N)
p<-1/(i0^1.98); p<-p/sum(p)
X<-sample(i0,N,replace=TRUE,prob=p)
X

alpha = 1.98并且您在此链接中看到q = 0的离散pPareto分布, https://en.wikipedia.org/wiki/Zipf%E2%80%93Mandelbrot_law

我的问题是:如何在Matlab中编写此代码?

我在matlab中使用randsample并在matlab中翻译了这段代码。

例如:

N=5;
for i0=1:N
    p=1/(i0.^1.98);
    P=p/sum(p);`
    X=randsample(i0,N,true,P);
    X
end

但它有一个错误。

有人可以提出建议吗?

1 个答案:

答案 0 :(得分:0)

以下是一些建议:

  1. 您的代码中包含错误: P = P /总和(P);` 应该 P = P /总和(P);
  2. (这可能只是需要编辑的格式化内容,但不清楚你的错误是什么:所以从这里开始)

    1. 您可能需要统计和机器学习工具箱才能使用randsample,这需要额外的许可证。

    2. 如果这些不能解决问题,请尝试输入 帮助randsample 在MATLAB终端并验证您的设置。

    3. 这看起来是你感兴趣的作品(来自帮助):

        

      Y = randsample(N,K,true,W)或randsample(POPULATION,K,true,W)返回a      加权样本,使用正权重W,采用替换。 W是      通常是概率的向量。此功能不支持加权      没有替换的抽样。

      1. 我认为您的代码可能存在误解。看起来您认为private应该是一个分布,但这意味着P将是一个数组或向量。但是,从你的代码
      2. p

        只是评估标量值(即p=1/(i0.^1.98);,对于i0 = 1,计算结果为1 ^( - 1.98),因此P将等于1.

        也许您正在寻找更像这样的东西?

        p

        (我离开了最后一个N=5; i0=1:N; p=1./(i0.^1.98); P=p/sum(p); X=randsample(i0,N,true,P) ,因此您可以将结果显示给您的终端)