MATLAB随机模拟
生活随笔
收集整理的這篇文章主要介紹了
MATLAB随机模拟
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
隨機數(shù)的產(chǎn)生
常用函數(shù)
A=rand(m,n); %生成m*n隨機數(shù)矩陣,每個元素的選取服從[0,1]上的平均分布 B=randn(m,n); %生成m*n隨機數(shù)矩陣,每個元素的選取服從標(biāo)準(zhǔn)正態(tài)分布 C=randi(nmax,m,n); %生成m*n隨機數(shù)矩陣,每個元素是1和nmax之間的隨機選取的正整數(shù) D=randi([a,b],m,n); %m*n隨機數(shù)矩陣,每個元素是[a,b]上的隨機選取的正整數(shù)一般隨機數(shù)的產(chǎn)生
y=random('name',A,m,n) %單參數(shù)分布的隨機數(shù)數(shù)組產(chǎn)生 y=random('name',A,B,m,n) %雙參數(shù)分布的隨機數(shù)數(shù)組產(chǎn)生例1:生成4行5列的標(biāo)準(zhǔn)正態(tài)分布的隨機數(shù)數(shù)組
A=random('Norm',0,1,4,5)例2:生成1-10的4*5離散均勻分布數(shù)組
B=random('unid', 10, 4,5)利用蒙特卡洛方法計算積分
考慮二重積分
公式可以理解為:(落在圖形內(nèi)的點數(shù)) / (總的點數(shù)) * (總的面積)?
例:計算積分?
解一:
x=rand(1,1000000); y=rand(1,1000000); z=rand(1,1000000); idx1=find(x.^2+y.^2<1); idx2=find(z(idx1)<=sqrt(1- … x(idx1).^2-y(idx1).^2)); V=4*length(idx2)/length(idx1)*pi/4; %因為隨機數(shù)生成的點只在第一象限,所以最后的答案需要乘以4 disp(V); % avoid cplx number calculation.解二:
x=rand(1,1e6); y=rand(1,1e6); z=rand(1,1e6); R=x.^2+y.^2<=1 & z<=sqrt(1- x.^2-y.^2); % cplx number comparation is the comparation of its real part. n=sum(R(:)); V=4* n/1e6* 1; disp(V); % cplx calculation is used here.向量的隨機打亂
S=randperm(n) %把1至n這n個數(shù)隨機打亂次序得到的序列利用隨機數(shù)計算概率
例:在4張K3張Q3張J中任選3張,求K的張數(shù)多于Q,而Q的張數(shù)多于J的概率。
解:引入10個數(shù)1~10,其中1~4表示K,5~7表示Q,8~10表示J。將這10個數(shù)組成的向量隨機打亂1e+5次,形成一個(1e+5)*10的數(shù)組。在這個數(shù)組中任意選取3列,(不妨選前三列)設(shè)其中滿足1~4的個數(shù)>5~7的個數(shù)>8~10的個數(shù)的有M組,則所求的概率為P=M/100000
s=zeros(1e+5,3); for k=1:1e+5s(k,:)=randperm(10,3); end A1=sum(s<=4,2); A2=sum(s>4&s<=7,2); A3=sum(s>7,2); C=A1>A2 & A2>A3; P=sum(C)/100000?
總結(jié)
以上是生活随笔為你收集整理的MATLAB随机模拟的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客 - 张老师的旅行(dp)
- 下一篇: MATLAB优化问题