DownRG

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

p.s. 위의 올리는 matlab 글들은 과학계산프로그래밍 수업때 교수님께서 사용하신 강의노트 내용입니다.
앞으로도 내용을 정리하고, 제가 주석을 달아서 올릴 예정입니다.
Exit mobile version