matlab下二重積分的蒙特卡洛算法

%%monte_carlo_ff.m函數

%被積函數(二重)orm

function ff=monte_carlo_ff(x,y)io

ff=x*y^2;%函數定義處function

endform

%%monte_carlo.merror

%蒙特卡洛計算二重積分
function result=monte_carlo(a,b,c,d,n,m)
%先y後x積分,a是x積分下限,b是x積分上限,c是y積分下限,d是y積分上限,n,m是蒙特卡洛參數
sumxff=0;
for i=1:n
sumyff=0;
xff=a+(b-a)*rand();
for j=1:m
yff=c+(d-c)*rand();
sumyff=sumyff+monte_carlo_ff(xff,yff);
end
aversumyff=sumyff/m;
sumxff=sumxff+(b-a)*aversumyff;
end
result=sumxff/n;
enddi

 

%%show.m參數

clear all;
clc;
format long;
%二重積分的int函數法,用於校對蒙特卡洛法
syms x y;
z=x^2*y^2;
x1=1;
x2=2;
y1=3;
y2=4;
disp('int法結果')
ans_int=int(int(z,y,y1,y2),x,x1,x2)
%蒙特卡洛法計算結果
disp('monte_carlo法結果')
ans_monte_carlo=monte_carlo(1,2,3,4,10000,20000)
%兩者偏差
disp('偏差')
error=abs(ans_monte_carlo-ans_int)ab

相關文章
相關標籤/搜索