2014-02-25 289 views
1

如下面的代码所示,我目前正在生成数字,从Normal Distribution开始,并选择-3*sigma3*sigma区间内的数字。但是,我现在想要生成数字,以便选择-3*sigma3*sigma区间以外的数字的概率较高。例如。 [-4*sigma -3*sigma)中的数字应具有35%被选中的概率,并且对于[3*sigma 4*sigma)应该具有相同的概率。 基本上,我会多次调用这个函数,并且想知道是否有一种方法可以让我从正态分布的“尾部”中选择更高比例的随机数,而不会实际改变正态分布的形状。我正在努力做到这一点。Matlab:从给定概率的正态分布中生成随机数

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

我基本上想要为'new_E11'生成正态分布,例如,使用均值136e9和S.D. 9.067e9,然后我想从间隔[-4 * sigma -3 * sigma)和[3 * sigma 4 * sigma)中选择一个概率为35%的点。这可能吗? – Jojo

+1

这些点的概率由分布的形状决定,并且比这小得多。 –

回答

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

+0

我明白你的意思了。我一直在考虑在获得N的“目标分配”时使用Acceptance-Rejection Method。但是,我不明白我怎么可能对“正态分布”尾部的“拟议分布”建模?谢谢 – Jojo