我想在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
但它有一个错误。
有人可以提出建议吗?
答案 0 :(得分:0)
以下是一些建议:
(这可能只是需要编辑的格式化内容,但不清楚你的错误是什么:所以从这里开始)
您可能需要统计和机器学习工具箱才能使用randsample,这需要额外的许可证。
如果这些不能解决问题,请尝试输入 帮助randsample 在MATLAB终端并验证您的设置。
这看起来是你感兴趣的作品(来自帮助):
Y = randsample(N,K,true,W)或randsample(POPULATION,K,true,W)返回a 加权样本,使用正权重W,采用替换。 W是 通常是概率的向量。此功能不支持加权 没有替换的抽样。
private
应该是一个分布,但这意味着P
将是一个数组或向量。但是,从你的代码 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)
,因此您可以将结果显示给您的终端)