#title 몬테카를로법으로 원주율 구하기 [[TableOfContents]] ==== 문제 ==== 반지름이 100인 원이 있다. 원에 십자가를 그어 1/4의 호를 만든다. (2사분면) 난수 2개(x,y)를 발생시켜 0점으로부터 호를 벗어나는지 벗어나지 않는지를 좌표를 찍는다. 피타고라스 정리에 의해 x^2 + y^2 = z^2 이니까 sqrt(z^2)을 하면 점이 원점으로부터 100을 넘어가는지 안넘어가는지 알 수 있다. 이를 10000회 반복하여 대충의 원주율을 구한다. attachment:몬테카를로법으로원주율구하기/pi.png ==== T-SQL로 구현 ==== {{{ declare @i int , @x float , @y float , @r int , @in_count float , @out_count float set @r = 100 set @i = 1 set @in_count = 0 set @out_count = 0 while(@i <= 10000) begin set @x = rand() * @r set @y = rand() * @r if sqrt(@x*@x + @y*@y) > @r set @out_count += 1 else set @in_count += 1 set @i += 1 end print @in_count/@i * 4 --2사분면만 사용했으므로 4를 곱해준다. }}} 난 3.16128 나왔다. 우리가 알고 있는 pi값인 3.141592와 비스무리하다. ==== 참고자료 ==== * [attachment:Monte_Carlo_simulation.pdf 몬테카를로 시뮬레이션]