matlab - 在 Matlab 中生成三角分布

标签 matlab random distribution probability

我尝试在Matlab中生成三角概率分布,但没有成功。我使用了http://en.wikipedia.org/wiki/Triangular_distribution中的公式.

n = 10000000;

a = 0.2;
b = 0.7;
c = 0.5;

u = sqrt(rand(n, 1));

x = zeros(n, 1);
for i = 1:n
    U = u(i);
    if U < (c-a)/(b-a)
        X = a + sqrt(U*(b-a)*(c-a));
    else
        X = b - sqrt((1-U)*(b-a)*(b-c));        
    end
    x(i) = X;
end

hist(x, 100);

直方图如下所示:

enter image description here

对我来说看起来不太像三角形。有什么问题?我是否滥用了rand(n)

最佳答案

您可以将两个均匀分布相加,分布图进行卷积,得到一个三角形分布。

简单易懂的例子:掷两个骰子,每个 Action 均匀分布,得出1-6的数字,组合 Action 呈三角形分布,得出2-12的数字

编辑:最小工作示例:

a=randint(10000,1,10);
b=randint(10000,1,10);

c=a+b;

hist(c,max(c)-min(c)+1)

edit2:再次查看你的脚本。它正在工作,但您犯了一个错误:

u = sqrt(rand(n, 1));

应该是

u = rand(n, 1);

edit3:优化代码

n = 10000000;

a = 0.2;
b = 0.7;
c = 0.5;

u = rand(n, 1);
x = zeros(n, 1);

idx = find(u < (c-a)/(b-a));
x(idx) = a + sqrt(u(idx)*(b-a)*(c-a));
idx =setdiff(1:n,idx);
x(idx) = b - sqrt((1-u(idx))*(b-a)*(b-c));
hist(x, 100);

<罢工>

关于matlab - 在 Matlab 中生成三角分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9241904/

相关文章:

matlab - 有没有实现多输出高斯过程的软件?

matlab - 写在边上,treeplot MATLAB

random - LibGDX 内部调用 MathUtils.random() 干扰生成的随机数序列

Node.js:Mongoose 模式默认随机标记不是随机的

python - 是否有 Python 的 GUI 库允许您编译为 EXE(windows)和 APP(Mac)?

c++ - libDAI 编译错误

algorithm - 具有非均匀网格的matlab中的双积分

random - 如何在 CUDA FORTRAN 中生成随机数?

r - 将 rnorm 参数设置为等于向量

python - 如何提取 Python 列表中一定比例的均匀分布的元素?