Tìm hiểu về số ngẫu nhiên và ứng dụng
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘI
BÀI TẬP LỚN
QUÁ TRÌNH NGẪU NHIÊN ỨNG DỤNG
Đề số 5: Tìm hiểu về số ngẫu nhiên và ứng dụng
Giảng viên hướng dẫn:
PGS TS Nguyễn Thị Hoàng Lan
Hà Nội 11/2014
Trang 3Mục lục
CHƯƠNG I: Ý NGHĨA CỦA SỐ NGẪU NHIÊN 4
1 Bắt đầu từ lớp bài toán quen thuộc 4
2 Khái niệm số ngẫu nhiên 5
3 Khởi tạo số ngẫu nhiên 6
3.1 Thuật toán Lehmer: 6
3.2 Số ngẫu nhiên với phân phối bất kỳ 6
3.3 Phương pháp chuyển đổi phân vị 7
3.4 Phương pháp loại trừ 7
3.5 Phương pháp trộn 9
CHƯƠNG 2: SỬ DỤNG MATLAB TẠO SỐ NGẪU NHIÊN 10
1 Các hàm sử dụng để sinh số ngẫu nhiên 10
1.1 Hàm rand hàm trả về số giả ngẫu nhiên từ phân phối đều 10
1.2 Hàm randn hàm trả về số giải ngẫu nhiên có phân phối chuẩn Gauss 11 1.3 Hàm randi hàm trả về số giả ngẫu nhiên có phân phối đều rời rạc 11
1.4 Hàm random 12
2 Số ngẫu nhiên Lognormal 14
2.1 Lý thuyết 14
2.2 Sinh số ngẫu nhiên Lognormal bằng matlab 15
3 Số ngẫu nhiên nhị thức (Binomial random numbers) 16
4 Số ngẫu nhiên Chi-square (Chi-square random numbers) 18
Trang 4CHƯƠNG I: Ý NGHĨA CỦA SỐ NGẪU NHIÊN
1 Bắt đầu từ lớp bài toán quen thuộc
Trong số các phương pháp để giải quyết những bài toán tất định, các phương pháp Monte Carlo là lời giải thích hợp để tính toán bằng máy tính, nhất
là khi các thuật toán tất định không thể đưa ra được kết quả chính xác Chúng ta quan tâm đến các phương pháp này vì lời giải của chúng sử dụng đến lý thuyết
số ngẫu nhiên
Một ví dụ điển hình là ước lượng giá trị của tích phân Monte Carlo có dạng tổng quát:
I = ∫
V
f (⃗x )d ⃗x
Dạng cơ bản của tích phân này trong không gian một chiều, xét trong khoảng (0,1)
I = ∫
0
1
f (x )dx
Như ta đã biết, giả sử có một biến ngẫu nhiên X ~ U(0,1), Y là một hàm của X có dạng y = g(x), khi đó tính được
E{g(x)} = ∫
0
1
g ( x ) f X ( x ) dx
= ∫
0
1
g ( x ) dx
Giả sử biến ngẫu nhiên X mô hình hóa cho một đai lượng vât lý nào đó trong thực tế, khi đó ta có thể ước lượng giá trị kỳ vọng E{g(x)} bằng tần suất tương đối:
I=E{g ( x )}= 1
n∑g (x i)
Trang 5Nhận xét rằng, cho dù những dữ liệu xi được tạo bằng cách nào đi nữa, chúng vẫn là những số ngẫu nhiên có đặc trưng nhất định Do đó, nếu có một cách nào đó có thể tạo ra những số như vậy thì ta có thể tính được giá trị tích
phân I Từ đó dẫn đến nhu cầu thiết lập một phương pháp số để khởi tạo số
ngẫu nhiên Để thực hiện được điều đó, trước tiên ta cần trả lời các vấn đề sau:
- Số ngẫu nhiên là gì?
- Có thể khởi tạo số ngẫu nhiên bằng máy tính không?
- Có thể tạo ra số thực sự “ngẫu nhiên”?
2 Khái niệm số ngẫu nhiên
Khái niệm số ngẫu nhiên được rút ra từ hai quá trình nghiên cứu: lý thuyết và thực nghiệm
- Khái niệm lý thuyết: Một chuỗi số xi được gọi là ngẫu nhiên nếu các phần tử của nó bằng với những mẫu xi = Xi(ζ) của một biến ngẫu nhiên độc lập có phân phối đều
Biến ngẫu nhiên ở đây có phân phối đều vì số ngẫu nhiên cũng được hiểu theo nghĩa tương tự, tức là xác suất tạo ra một số ngẫu nhiên là như nhau trong cả chuỗi ngẫu nhiên
- Khái niệm thực nghiệm: Một chuỗi số xi được gọi là ngẫu nhiên nếu các thuộc tính thống kê của nó giống với những thuộc tính của dữ liệu ngẫu nhiên thu được từ một thử nghiệm ngẫu nhiên
Để kết quả thu được từ thực nghiệm phù hợp với lý thuyết xác suất:
o Các phép thử phải độc lập
o Mẫu thử thu được chi coi là gần đúng
Vì số liệu không chắc chắn như vậy
Khó xác định bản chất của các số được tạo
Lợi thế là có thể chuyển những vấn đề thiết lập tính ngẫu nhiên của chuỗi số về những bài toán quen thuộc
Trang 63 Khởi tạo số ngẫu nhiên
Thuật toán chung nhất để khởi tạo một dãy số ngẫu nhiên zi là:
zn = f(zn-1,…,zn-r) mod m Trên đây là 1 biểu thức đệ quy phi tuyến thể hiện z n với điều kiện m là hằng
số, f là hàm với các điều kiện ban đầu z n-1 ,…,z n-r Chất lượng của bộ khởi tạo
phụ thuộc vào dạng hàm f.
3.1 Thuật toán Lehmer: là bộ khởi tạo lâu đời nhất và đơn giản nhất.
z 0 = 1
z n = az n-1 mod m ≥ 1 m là số nguyên tố, a là số nguyên
Qua nhiều năm, một số thuật toán đã được đưa ra để tạo ra 1 dãy số ngẫu nhiên đẹp Tuy nhiên không phải tất cả đều được kiểm chứng và đứng vững với thời gian Một ví dụ về chuỗi zn co thể đáp ứng hầu hết đc các yêu cầu thu
được từ (8-134) với a = 27 – 1 và m = 231 -1 :
zn = 16.807zn-1 mod 2.147.483.647
Dãy này được xem là chuẩn nhất khi thỏa mãn các tiêu chuẩn kiểm tra về tính ngẫu nhiên và đã được áp dụng trong rất nhiều trường hợp
3.2 Số ngẫu nhiên với phân phối bất kỳ
- Gọi U là một biến ngẫu nhiên có phân phối đều trong khoảng (0, 1) tương ứng sẽ có các số ngẫu nhiên ui
- Nếu xi là các mẫu của BNN x, yi =g(xi ) là thể hiện của BNN y=g(x)
Ta chứng minh được:
nếu xi có phân phối Fx (x), thì yi có phân phối
Fx ((y-a)/b) nếu b>0
Fx ((y-a)/b) nếu b<0
Trang 7Ta sẽ sử dụng những bổ đề trên để trình bày những phương pháp tạo ra số ngẫu nhiên với phân phối bất kỳ
Trang 83.3 Phương pháp chuyển đổi phân vị
Trước hết ta chứng minh được:
- Giả sử biến ngẫu nhiên X có phân phối bất kỳ Fx(X)
thì U = Fx(X) là biến ngẫu nhiên có phân phối đều trong khoảng (0,1) Suy ra:
X = Fx (-1)(U) với Fx(-1)(U) là hàm ngược của Fx(X)
Phương pháp khởi tạo: Như vậy để tạo một chuỗi có phân phối Fx(X)
ta chỉ cần tính hàm ngược của hàm phân phối đó và tính Fx(-1)(ui) Lưu ý rằng dãy xi là phân vị ui của Fx(x)
- Nhược điểm: Tìm hàm ngược không dễ dàng
3.4 Phương pháp loại trừ
Để tránh phải sử dụng hàm ngược như phương pháp chuyển đổi phân vị, ta xây dựng một phương pháp khác dựa trên trên khái niệm tần suất tương đối của hàm mật độ có điều kiện của BNN X với sự kiện giả định ω:
fx(X|ω)dx = ω)dx = )dx = P { x< X ≤ x+ dx ,ω } P {ω} (1)
Sự kiện ω xảy ra với điều kiện theo biến x và u, và được chọn sao cho:
fx(X|ω)dx = ω)dx = )dx = fy(Y)
Tạo chuỗi yi bằng cách đặt yi = xi nếu ω xảy ra, loại bỏ xi nếu ngược lại Lời giải là thỏa mãn nếu fy(X) bằng 0 trong mọi khoảng fx(X) bằng 0
Ta có thể giả định, mà ko cần làm mất đi tầm quan trọng của dạng tổng quát, tỷ
lệ fx(X)/fy(X) bị chặn dưới bởi một hằng số a dương
f x(X )
f y(X) ≥ a > 0 với mọi x
Trang 9Định lý loại trừ: nếu BNN X và U là độc lập và
ω={u ≤ r(x)} với r(x) =a f y(X)
f x(X ) ≤ 1
Chứng minh: Hàm mật độ chung của hai BNN X và U bằng fx(X) trong dải 0<u<1 của mặt phẳng xu, các trường hợp còn lại bằng 0 Sự kiện µ bao gồm tất
cả các kết quả mà điểm (X,U) là vùng bị che dưới đường cong u=r(x) của hình bên dưới
Do đó
P(ω) = ∫
−∞
∞
r ( x ) f x ( x ) dx=a∫
−∞
∞
f y ( x ) dx=a
Sự kiện {x< X≤ x+dx,ω} bao gồm tất cả các điểm (x,u) nằm trong dải
x<X≤ x+dx nằm dưới đường cong u=r(x) Các khối xác suất trong dải
fx(x)r(x)dx như nhau Do đó
P{ x< X≤ x+dx,ω } = fx(x)r(x)dx
Thay vào (1) ta có (2), (đpcm)
Từ định lý loại trừ suy ra một chuỗi con của chuỗi xi thỏa mãn điều kiện ui≤r(xi) xác định một chuỗi số ngẫu nhiên có hàm mật độ fx(y|ω) = fy(y)
Ta có kết quả như sau:
Phương pháp khởi tạo:
Trang 10Đặt yi=xi nếu ui ≤ af
x(X ); loại bỏ xi trong các trường hợp còn lại
3.5 Phương pháp trộn
Ta tạo một chuỗi số có hàm mật độ là tổng trọng số của m hàm mật độ khác
f(x) = p1f1(x) + … + pmfm(x) pk > 0 (3)
với mỗi fk là hàm mật độ của một chuỗi đã biết xik
Chuỗi xi được tạo theo quá trình trộn m chuỗi xikđược chọn ra theo quy tắc sau:
Đặt xi = x i k nếu p1 + … + pk-1 ≤ ui<pi +…+ pk (4)
Định lý trộn: nếu các chuỗi ui và x i1 ,……,x i m là độc lập đôi một lẫn nhau thì hàm mật độ fx(x) của chuỗi xi được quy định bởi (4) có dạng như sau :
fx(x) = p1f1(x) + … + pmfm(x) (5)
Chứng minh: chuỗi xi là hỗn hợp của m m chuỗi khác.Gọi hàm mật độ của chuỗi con của chuỗi thứ k là xik chính là fk(x) Chuỗi này cũng là một chuỗi con của xi với điều kiện phụ thuộc vào sự kiện:
Ak = { p1 + … + pk-1 ≤u< p1 +…+pk }
Do đó hàm mật độ của nó cũng bằng fx(x|Ak) Điều đó dẫn tới kết luận rằng : fx(x|Ak) = fk(x)
Từ định lý tổng xác suất, suy ra:
fx(x) = fx(x|A1)P(A1) + …+fx(x|Am)P(Am) Mặt khác ta có P(Ak)=pk , suy ra đpcm
Kết luận: hàm mật độ fx(x) tạo ra bởi (5) bằng với hàm f(x) của (3) Như vậy ta có phương pháp khởi tạo số như sau:
Đặt xi = x i k nếu p1 + … + pk-1 ≤ ui<pi +…+ pk
Trang 11CHƯƠNG 2: SỬ DỤNG MATLAB TẠO SỐ NGẪU NHIÊN
1 Các hàm sử dụng để sinh số ngẫu nhiên (Genrating random number)
1.1 Hàm rand hàm trả về số giả ngẫu nhiên từ phân phối đều
- rand: trả về số ngẫu nhiên có phân phối đều trong khoảng (0, 1)
- m + (n-m)*rand: trả về số ngẫu nhiên có phân phối đều trong khoảng
(m, n)
- rand (1, n) : trả về n số ngẫu nhiên có phân phối đều (0,1)
- m + (n-m)*rand (1, k): trả về k số ngẫu nhiên có phân phối đều (m, n)
Hình 1: Code và kết quả hàm rand
Trang 121.2 Hàm randn hàm trả về số giả ngẫu nhiên có phân phối chuẩn Gauss
- randn: trả về 1 số ngẫu nhiên có phân phối chuẩn Gauss
- randn (1, n): trả về n số ngẫu nhiên có phân phối chuẩn Gauss
Hình 2: Code và kết quả chạy hàm randn
1.3 Hàm randi hàm trả về số giả ngẫu nhiên có phân phối đều rời rạc
Cú pháp: randi(n, 1, m) Trong đó:
- n: là giá trị lớn nhất của số ngẫu nhiên
- m cho biết số phần tử tạo ra
Hình 3: Kết quả chạy hàm randi
1.4 Hàm random
Y =random(name , A) Trả về Y là số ngẫu nhiên có phân phối
Trang 13name Tham số được giới hạn bởi A Y có
cùng kích thước với A
Y =random(name , A , B) Trả về Y là số ngẫu nhiên có phân phối
name Tham số được giới hạn trong khoảng
(A, B)
Y =random(name , A , m , n , ) Trả về Y là mảng có kích thước [m n …]
chứa các số ngẫu nhiên có phân phối name.Tham số được giới hạn bởi A Các name trong hàm random
Trang 14Hình 4: Các name trong hàm random
Bài tập: Sinh dãy số ngẫu nhiên có phân phối chuẩn, phân phối poission, phân
phối Gamma, phân phối Beta, phân phối Rayleigh, phân phối student-t, phân phối nhị thức
Code:
Trang 15Kết quả:
Hình 6: Kết quả
2 Số ngẫu nhiên Lognormal
2.1 Lý thuyết
Nếu z là phân phối chuẩn N(0, 1) thì w = e a+ bz có phân phối Lognormal
fw(w) = 1
bw√2∗π∗exp{−(lnw−a)2
2 b2 }
Trang 16phân phối Lognormal
z có phân phối chuẩn N(0, 1) → w có phân phối Lognormal với kỳ vọng μ
và độ lệch chuẩn σ
μ=log( √v +m m2 2)σ=√log(m v2+1)
Trong đó m, v lần lượt là kì vọng, độ lệch chuẩn của phân phối chuẩn tương ứng
2.2 Sinh số ngẫu nhiên Lognormal bằng matlab
Cú pháp:
- R= lognrnd(mu,sigma): trả về một mảng các số ngẫu nhiên được sinh
ra từ phân phối Lognormal với các thông số mu và sigma mu và sigma là trung bình và độ lệch chuẩn tương ứng với phân phối chuẩn miên quan
- R=lognrnd(mu,sigma,m,n) hoặc R=lognrnd(mu,sigma,[m,n, ]): trả về
một mảng có kích thước m, n
Đề bài: Sinh 8 số ngẫu nhiên Lognormal có kì vọng là 1 và độ lệch chuẩn là 2
Code:
Hình 7: Code sinh số ngẫu nhiên Lognormal
Trang 17Kết quả:
Hình 8: Kết quả sinh số ngẫu nhiên Lognormal
3 Số ngẫu nhiên nhị thức (Binomial random numbers)
Cú pháp:
- R=binornd ( N , P)
- R=binornd ( N , P , n , m, )
- R=binornd(N , P ,[n m ])
Mô tả:
- R=binornd ( N , P) :tạo ra các số ngẫu nhiên phân phân phối nhi thức N
là số lượng các thử nghiệm, P là xác suất thành công cho mỗi thử nghiệm
- R=binornd ( N , P , m ,n , … ) và R=binornd (N , P ,[m n ]): tạo ra một mảng m,
n các số ngẫu nhiên phân phối nhị thức với N là số lượng các thử nghiệm, P là xác suất thành công cho mỗi thử nghiệm
Trang 18Code:
Hình 9: Code sinh số ngẫu nhiên nhị thức
Kết quả:
Hình 10: Kết quả sinh số ngẫu nhiên nhị thức
Trang 194 Số ngẫu nhiên Chi-square (Chi-square random numbers)
Cú pháp:
- R=chi2 rnd (V )
- R=chi2 rnd (V ,m , n , )
- R=chi2 rnd(V ,[m n …]
Mô tả:
- R=chi2 rnd (V ): tạo ra các số ngẫu nhiên phân phối chi-square trong miền giới hạn V
- R=chi2 rnd (V ,m , n , …) và R=chi2 rnd(V ,[m n …]): tạo ra mảng m, n,… chứa các số ngẫu nhiên phân phối chi-square trong miền giới hạn V
Bài tập: Sinh 10 số ngẫu nhiên chi-square trong miền giới hạn V nhập vào từ
bàn phím
Code:
Hình 11: Code sinh số ngẫu nhiên Chi-square
Kết quả:
Hình 12: Kết quả sinh số ngẫu nhiên Chi-square
Trang 205.1 Các file nguồn kèm theo
- CHISQUARE.m: Chương trình nguồn sinh số ngẫu nhiên Chi-square
- NHITHUC.m: Chương trình nguồn sinh số ngẫu nhiên nhị thức
- RAND.m: Chương trình nguồn sinh số ngẫu nhiên bằng hàm rand
- RANDN.m: Chương trình nguồn sinh số ngẫu nhiên bằng hàm randn
- RANDOM.m: Chương trình nguồn sinh số ngẫu nhiên bằng hàm random
- LOG.m: Chương trình nguồn sinh số ngẫu nhiên Lognormal
- RANDI.m: Chương trình nguồn sinh số ngẫu nhiên bằng hàm randi
5.2 Cách sử dụng
- Giải nén
- Mở Matlab->Open->chọn chương trình nguồn -> run( ) Xem kết quả bên giao diện chính