matlab隨機模擬,各種概率論中的離,連續的函數 典型分佈函數 以及利用隨機模擬的方法進行積分運算,隨機打亂數組,蒙特卡洛方法

1.

(1)隨機數的產生

A=rand(m,n);                      %生成m´n隨機數矩陣,每個元素的選

                                 取服從[0,1]上的平均分佈

B=randn(m,n);                  %生成m´n隨機數矩陣,每個元素的選

                                 取服從標準正態分佈

 

C=randi(nmax,m,n);           %生成m´n隨機數矩陣,每個元素是1和

                                  nmax之間的隨機選取的正整數

D=randi([a,b],m,n);           %m´n隨機數矩陣,每個元素是[a,b]

                                上的隨機選取的正整數

  1. 一般的隨機數產生函數 random

函數使用方法

           y=random(‘name’,A,m,n)          %單參數分佈的隨機數數組產生

           y=random(‘name’,A,B,m,n)      %雙參數分佈的隨機數數組產生

常用的幾種分佈的隨機數產生

 

     分        布

name

參數A

參數B

正態分佈

Norm 或normal

mu

sdeta

泊松分佈

Poiss或poisson

llanbuda

 

連續均勻分佈

unif

a

b

離散均勻分佈

unid

N

 

t分佈

t

n(自由度個數)

 

c2分佈

chi2

n(自由度個數)

 

F分佈

F

n1(自由度個數)

 

n2(分母自由度個數)

 

 

 

 

 

 

  1. 驗證隨機性

s=zeros(1,10);

for k=1:100000

    s=s+rand(1,10);

end

s/100000

結果:ans =

 

    0.5002    0.5003    0.4993    0.4988       0.4999    0.4990    0.5005    0.4991       0.4999    0.4995

  1. 隨機模擬求解問題:

(1)例4:求圓的面積

x=rand(10000,10000);

y=rand(10000,10000);

z=x.^2+y.^2;

m=find(z<=1);

s=4*length(m)/(10000*10000)*1   (後面這個1是矩形面積)

10000*10000個x和y然後符合條件的數目除以總數目

都是[0,1]上的點所以要乘4

這是半徑爲1的圓的面積

半徑爲3的此時就要用到

D=randi([a,b],m,n);

此時要乘的矩形面積爲9

 x=random('unif',0,3,10000,10000);

>> y=random('unif',0,3,10000,10000);

>> n=find(x.^2+y.^2<=9);

>> s=4*length(n)/(10000*10000)*9

 

(2)例5:利用蒙特卡洛方法計算積分   

考慮二重積分

圖片放不出來臆測吧

 

設   WÍ[a,b]´[c,d],0£f(x,y)£M

在區域[a,b]´[c,d]´[0,M]上選取N個隨機數,如果落在區域

                            0=<z<=f(x,y)      (x,y)ÎW

中的點數爲S,則

圖片放不出來臆測吧

二重積分幾何意義f(x,y)是一個高度信息只要我的隨機點的代入高度函數後小於等於標準就在他之內就可以算體積佔比再乘以總體積即可求出大致積分值,一開始就是算一個比例一般就選[0,1]

 

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;

disp(V);

% avoid cplx number calculation.

4.向量的隨機打亂

S=randperm(n)     %把1至n這n個數隨機打亂次序得到的序列   

練習:將向量

x=[1 3 6 4 7 10  2 4 3 6 40 12 2 2 7 3 7 12 13 15 8 7 6 12 2 2 4 6 3 1 ]

隨機打亂

x=[1 2 3;4 5 6 ];

%i的末端爲行數

for i=1:2

a=randperm(length(x));

x(i,:)=x(i,a);

disp(x);

end