How can I make an Gaussian random array with a constraint?

I'm trying to create an array with size of nPopulation=100. I want all the values to be driven from the standard normal distribution and positive. but sum of the values should be landaT=25000. I've written the code below
flag=0;
while (flag==0)
landa=(randn(1,nPopulation))*(landaT./nPopulation);
landa(1,nPopulation)=landaT-sum(landa)-landa(1,nPopulation);
if sum (landa)==landaT
flag=1;
end
end
But it doesn't seem to work. If you have any better Ideas, it would be great to hear from.

回答 (1 件)

Orion
Orion 2014 年 11 月 5 日
編集済み: Orion 2014 年 11 月 5 日

1 投票

Your criteria is too strict.
it's allways risky to compare 2 doubles, because of the numerical precision.
yo should do something like :
flag=0;
landaT = 25000;
nPopulation=100;
NbIter = 0;
while (flag==0)
NbIter = NbIter + 1;
landa=(randn(1,nPopulation))*(landaT./nPopulation);
landa(1,nPopulation)=landaT-sum(landa)-landa(1,nPopulation);
if abs(sum(landa)-landaT)<0.01
flag=1;
end
end
disp('Number of Iteration to convergence');NbIter
Here, you compare the difference of the 2 parameters you want, in absolute value, to a epsilon you defined (0.01)

2 件のコメント

shima rashidi
shima rashidi 2014 年 11 月 5 日
Thanks for the answer, its helpful. but my another problem is making the values positive. how can I make them positive and be sure that they still are Gaussian rand numbers.
Torsten
Torsten 2014 年 11 月 5 日
You can't because the standard normal distribution takes positive and negative values.
Maybe you mean
or
Best wishes
Torsten.

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeMultidimensional Arrays についてさらに検索

質問済み:

2014 年 11 月 5 日

コメント済み:

2014 年 11 月 5 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by