Cài đặt chương trình tổng quát trong MATLAB

Một phần của tài liệu BÀI GIẢNG-PPTTS-2012 (Trang 72 - 73)

II. CHỮA BÀI TẬP

E h I I h ba h

4.4.1 Cài đặt chương trình tổng quát trong MATLAB

Trong phần này, chúng tôi giới thiệu một chương trình MATLAB đã được cài đặt để thực hiện phương pháp Monte-Carlo tính tích phân có dạng:

... ( )

IF x dx

  ,

trong đó F(x) là hàm của xRn và miền lấy tích phân  được mô tả bằng một bất phương trình có dạng  x G x|  0 . Nếu  được biểu diễn bởi một hệ bất phương trình có dạng

x G x| i( 0,i I

    thì có thể đưa về dạng trên bằng cách đặt G(x)= i

i I

max G ( x )

. Giả thiết

thêm là miền  nằm trong một hình hộp n-chiều {x | a≤ x ≤ b} và hàm F(x) là hàm bị chặn trong hình hộp đó: A ≤ F(x) ≤ B.

Nếu A  0 thì đây chính là bài toán tính thể tích của một siêu hình trụ cong (n+1)- chiều. Ngược lại nếu A<0 thì có thể thay thế nó bằng hiệu hai tích phân:

1 2 ... ( ) ... ( ) ... ( ) IF x dxF x dxF x dx          , trong đó: F1(x) =  ( ) nê'u ( ) 0 0 nê'u ( ) 0 F x F x F x   và F2(x) = 0 nê'u ( ) 0 ( ) nê'u ( ) 0 F x F x F x    .

Đặt Bound=[A B] và Box=[a b] là siêu hộp n-chiều và N là số điểm ngẫu nhiên cần gieo, mặc định của N =200000. Khi đó hàm để tính tích phân trên có thể cài đặt trong MATLAB như sau:

% MonteCarlo(F, Bound, G, Box, N) is a MATLAB function for % Intergration by Monte-Carlo Method;

function Tp=MonteCarlo(F, Bound, G,Box,N) if nargin == 4 N=200000; end V= Bound(2)-Bound(1); n=length(Box); M=0 ; for k=1: n V=V*(Box(k,2)-Box(k,1)); end for j =1:N

x = Box(:,1) + rand(n,1).*(Box(:,2)-Box(:,1)); %% Move x into Box y = Bound(1) + rand(1)*( Bound(2)-Bound(1));

if feval(G,x)<=0

if ( y >= 0) &( y <= feval(F,x)) %% y <=F1(x) M = M+1;

elseif (y < 0) &( y >=feval(F,x)) %% y >= F2(x) M= M -1;

end end end

Tp = V*M/N;

Kết quả thử nghiệm tính một số tích phân bội đã cho thấy sai số của phương pháp Monte-Carlo có thể “chấp nhận được”.

Một phần của tài liệu BÀI GIẢNG-PPTTS-2012 (Trang 72 - 73)

Tải bản đầy đủ (PDF)

(103 trang)