如下面的代码所示,我目前正在random
生成Normal Distribution
个号码,并选择-3*sigma
和3*sigma
间隔内的号码。但是,我现在想要生成数字,以便从-3*sigma
和3*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
由于
答案 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