이러한 관계가 성립되지요 그럼 이를 염두해 보고 문제를 풀어보겠습니다. 처음이니 차례차례 갈께요. 1. 우선 정사각형 내에서 난수제조기를 이용해서 한 점을 뽑는다 참 쉽지요? 그럼 한줄한줄 가보겠습니다. 1. 우선 정사각형을 정의해야합니다. xy좌표계에 가장 쉽게 할 수 있는 것은 x, y각각 -1에서 1까지 이지요. 그러면 난수제조기로 -1에서 1 사이에 균일분포된 점들을 뽑아야합니다 두개를 뽑아 하나는 x 하나를 y라고 부르면 됩니다. 그럼 첫번째 문제: 이렇게 균일분포된 (x,y)행 벡터를 만들어보세요 (rand를
이용해야 합니다. rand는 0에서 1까지 균일분포되어있기 때문에 (답은 아래에 흰글씨로 써놓았습니다.) >> xy=2*rand(1,2)-1 2. 1에서 뽑은 이 (x,y)가
원 안에 들어가는지 판단하는 function을 쓰시오 (function [check]=함수이름(x,y) 로 시작합니다) function [check]=circle_check(x,y) 3. 새로운 script파일을 작성해 이 무작위로 정사각형 내에서 점을 100번 뽑은 후 count=0; 자 이부분이 다소 난해합니다. 우선 count=0으로 정의했는데요 그리고 for 문을 이용해 i=1:100, 즉 100번 돌립니다. xy=2*rand(1,2)-1은 (1)에서 썼던 것이지요 circle_result = circle_check(xy(1), xy(2))에서는 (2)에서 작성한 함수를 이용하고 xy라는 행벡터의 첫번쨰 요소를x, 두번째 요소를 y에 넣습니다. 그리고 함수의 결과값을 circle_result에 일단 저장합니다. 원에 들어갔으면 circle_result가 1, 들어가지 않았으면 0이겠지요? 이것을 count=count+cirle_result을 이용해 원에 들어갈때마다 count에 1씩 더해줍니다. 0일경우에도 더하기는 하지만 0을 더하니 똑같겠지요? 그리고 마지막에 count를 입력해주어 결과값을 출력합니다 count = 76 저의경우엔 76번 들어갔네요 4. (3)에서 쓴 script를 고쳐 몇번 들어갔는가가 아니라 (마지막줄만 고치시면 됩니다) count=0; 마지막줄에 my_pi라는 새로운 변수로 정의했습니다. 간단하게 횟수/100*4를 이용했습니다. 한번 돌려볼께요 my_pi = 3.2400 5. (4)에서 쓴 script를 고쳐 100번이 아닌 n번 반복하게 하며 n=1000; 보시면 첫째줄에 n=1000이라고 정의할 수 있는 행을 넣었고 그리고 my_pi=count/n*4로 바꾸어주었습니다. 이렇게하면 처음에 n을 원하는 숫자로 바꾸어 매트랩이 몇번 반복할지 정할 수 있습니다. 한번 실행해보겠습니다. my_pi = 3.1240 횟수가 많아지니 원주율에 조금 가까워졌네요 6. n을 백만으로 돌려서 파이의 근사값을 구하시오 n=1000000; 자 편리하게 n만 1,000,000으로 바꾸었습니다. 돌려보면 조금 시간이 걸립니다. my_pi = 3.1418 원주율의 실제갑은 3.14159265정도 되니 제법 가깝습니다. -- 굉장히 간단한 첫번째 문제를 풀어봤는데요 어때요 어렵지 않죠? 실제로 이러한 방식으로 파이를 구하는 것은 매우 비효율적이며 for문과 rand를 써보기 위해 예제를 만들었습니다 (사실 난수만으로 이루어진 10000*2의 벡터를 이용하는게 훨씬 계산이 빠르지만 앞으로 조금씩 난이도를 올려가면서 예제를 준비해보려 하겠습니다 읽어주시는분께 감사드립니다. |