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]
上的隨機選取的正整數
函數使用方法
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(分母自由度個數) |
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)例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