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 글들은 과학계산프로그래밍 수업때 교수님께서 사용하신 강의노트 내용입니다.
앞으로도 내용을 정리하고, 제가 주석을 달아서 올릴 예정입니다.

You may also like...

댓글 남기기