Matlab:以给定的概率从正态分布生成随机数

时间:2014-02-25 13:14:09

标签: matlab random

如下面的代码所示,我目前正在random生成Normal Distribution个号码,并选择-3*sigma3*sigma间隔内的号码。但是,我现在想要生成数字,以便从-3*sigma3*sigma区间之外选择数字的概率更高。例如。来自[-4*sigma -3*sigma)的数字应该35%被选中的概率和[3*sigma 4*sigma)相同。 基本上,我会多次调用这个函数,并且想知道我是否有办法从正态分布的“尾部”中选择更高比例的随机数,而不是实际改变正常形状的形状分发。我很难做到这一点。

function [new_E11, new_E22] = elasticmodulusrng()

new_E11 = normrnd(136e9,9.067e9,[1 1]);

new_E22 = normrnd(8.9e9,2.373e9,[1 1]);

while new_E11<=-3*9.067e9 && new_E11>=3*9.067e9
        new_E11 = normrnd(136e9,9.067e9,[1 1]);
end

while new_E11<=-3*2.373e9 && new_E11>=3*2.373e9
        new_E22 = normrnd(8.9e9,2.373e9,[1 1]);
end

由于

1 个答案:

答案 0 :(得分:1)

正如乔乔所指出的那样,问题没有多大意义:这不再是正常的分布。

您可以做的是创建自己的概率密度函数pdf并从中绘制。

例如,

N = pdf('Normal',-5:0.2:5,0,1);

为您提供具有良好分辨率的普通PDF。 你可以改变它,比如说

Z = N;
Z(5:15)=3*Z(5:15);
Z(35:45)=3*Z(35:45);

并使用直接方法,反演方法或接受拒绝方法,如here所述

FileExchange中有一个实现: http://www.mathworks.com/matlabcentral/fileexchange/27590-simple-rejection-sampling