Generating random numbers
古いコメントを表示
I want to write a Matlab code for generating “m” numbers from N(0,1) using following algorithm. My code should be a general code for “m”, “mu” & “sigma”.
1.Generate u1, u2 from UNIF(0,1), then set y=tan(pi*(u1-1/2))
2.If u2 <= (sqrt(e)/2)*(1+y^2)*e^((-y^2)/2) then set x=y, otherwise go to step 1
3.Repeat 1-2 until you generate m numbers.
this is my code:
function [randnormal]=atakan(a,b,m) randnormal=[];
count=1;
while (count<=m) R = normrnd(a,b);
u1=unifrnd(0,1);
u2=unifrnd(0,1);
y=tan(pi*(u1-1/2));
if (u2<=((sqrt(exp(1))/2)*(1+y^2)*(exp(1)^(-y^2/2))))
randnormal=[R;y];
end
count=count+1;
end
1 件のコメント
Jan
2012 年 1 月 22 日
You forgot to ask a question.
Please format the code correctly using the information provided at the "Markup help" link.
採用された回答
その他の回答 (1 件)
the cyclist
2012 年 1 月 23 日
You were overwriting your random numbers, rather than storing all "m" of them, and you were not tracking the counting of successes properly. Does this work better? (I did not check any other part of your algorithm.)
function [randnormal]=atakan(a,b,m)
randnormal=zeros(2,m);
count=1;
while (count<=m)
R = normrnd(a,b);
u1=unifrnd(0,1);
u2=unifrnd(0,1);
y=tan(pi*(u1-1/2));
if (u2<=((sqrt(exp(1))/2)*(1+y^2)*(exp(1)^(-y^2/2))))
randnormal(:,count)=[R;y];
count=count+1;
end
end
end
2 件のコメント
Atakan
2012 年 1 月 23 日
James Tursa
2012 年 1 月 23 日
What way? Can you post your method so others can see and not leave this thread dangling?
カテゴリ
ヘルプ センター および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!