0

範囲が[0.42,1.19]の対数正規分布を作成したいと思います。そのいくつかの要素は、として与えられD=[1.19,1.00,0.84,0.71,0.59,0.50,0.42]ます。平均は0.84、標準偏差をできるだけ小さくする必要があります。また、累積分布関数の90%(=粒子の90%)がの間にあることも示されています0.59 and 1.19

与えられた条件を組み込んだこの対数正規分布のすべての要素を知ったら、そのpdfを見つけることができます。これは私が必要としているものです。これが私が試した簡単なステップです:

D=[1.19,1.00,0.84,0.71,0.59,0.50,0.42];

s=0.30; % std dev of the lognormal distribution

m=0.84; % mean of the lognormal distribution

mu=log(m^2/sqrt(s^2+m^2)); % mean of the associated normal dist.

sigma=sqrt(log((s^2/m^2)+1)); % std dev of the associated normal dist.

[r,c]=size(D);

for i=1:c

D_normal(i)=mu+(sigma.*randn(1));

w(i)=(D_normal(i)-mu)/sigma; % the probability or the wt. percentage

end

sizes=exp(D_normal);
4

2 に答える 2

1

統計ツールボックスがあり、対数正規分布からランダムな値を引き出したい場合は、LOGNRNDを呼び出すだけです。特定の値で特定の平均とシグマを持つ対数正規分布の密度を知りたい場合は、LOGNPDFを使用します。

重みを計算しているので、密度を探している可能性があります。あなたの例では、これらは次のようになります。

weights = lognpdf([1.19,1.00,0.84,0.71,0.59,0.50,0.42],0.84,0.3)

weights =
     0.095039     0.026385     0.005212   0.00079218   6.9197e-05   5.6697e-06   2.9244e-07

編集

穀物の何パーセントが0.59から1.19の範囲にあるかを知りたい場合は、LOGNCDFを使用します。

100*diff(logncdf([0.59,1.19],0.84,0.3))
ans =
       1.3202

それほど多くはありません。分布をプロットすると、値の対数正規分布が2より少し上にピークに達することがわかります。

x = 0:0.01:10;
figure
plot(x,lognpdf(x,0.84,0.3))
于 2010-06-18T14:50:26.343 に答える
0

切り捨てられた対数正規乱数を生成しようとしているようです。私の仮定が正しければ、棄却サンプリングまたは逆変換サンプリングのいずれかを使用して、必要なサンプルを生成できます。警告:範囲が平均から非常に離れている場合、棄却サンプリングは非常に非効率的です。

棄却サンプリング

x〜LogNormal(mu、sigma)I(lb <x <ub)の場合

次に、x〜LogNormal(mu、sigma)を生成し、lb<x<ubの場合に描画を受け入れます。

逆変換サンプリング

x〜LogNormal(mu、sigma)I(lb <x <ub)の場合

CDF(x)= phi((log(x)-mu)/ sigma)/(phi((log(ub)-mu)/ sigma)-phi((log(lb)-mu)/ sigma))

生成、u〜Uniform(0,1)。

CDF(x)= uに設定し、xを反転します。

言い換えると、

x = exp(mu + sigma * phi_inverse(u *(phi((log(ub)-mu)/ sigma)-phi((log(lb)-mu)/ sigma))))

于 2010-06-18T14:43:18.187 に答える