Monte Carlo 적분
% Monte Carlo 적분 – 임의 수에 대해 반원 내에 들어가는 수를 측정하여 면적 계산
Nshoot=1000; % 발생시킬 임의 수의 개수
square=[0 0 1 1 0;0 1 1 0 0]; % 1행은 x좌표, 2행은 y좌표로 쓰일 예정
cla reset; % 축 재설정(초기화)
hold on % Figure 유지
fill(square(1,:),square(2,:),’y’); % (0.0)부터 (1.1)을 지나 다시 돌아오는 영역, 노란색
t=0:0.1:pi/2;
[x,y]=pol2cart(t,repmat(1,size(t))); % 각좌표계로 표현된 반원을 직각좌표계로 변환
plot(x,y,’r’) % 반원 그리기
sum=0;
for m=1:Nshoot % 임의수를 지정한 수만큼 반복
x=rand; y=rand; % 임의수
if norm([x y]) < 1 % x나 y에서 가장 큰 값이 1보다 작음, 반원내의 값 의미
sum=sum+1; % 조건 만족시에 sum 값을 증가시킴
plot(x,y,’.’,’MarkerSize’,8) % 마커크기를 8로 좌표 표시
end
end
area=sum/Nshoot; % 전체 임의 수의 개수에 대한 sum의 값으로 면적 계산
text(0.6,0.9,sprintf(‘Area (exact) = %.3g’,pi/4));
text(0.6,0.95,sprintf(‘Area (Monte) = %.3g’,area));
set(gca,’xlim’,[0 1]) % x축 제한
axis equal off
hold off
앞으로도 내용을 정리하고, 제가 주석을 달아서 올릴 예정입니다.