이 글의 내용은 몬테카를로 방식(코드 예제)을 파이썬으로 구현한 내용입니다. 참고할 만한 가치가 있으니 도움이 필요한 분들에게 도움이 되었으면 좋겠습니다.
몬테카를로법은 폰 노이만(Von Neumann)과 울람(Ulam)이 제안한 통계적 시뮬레이션 방법으로, 확률 추정 결과를 바탕으로 다수의 난수를 바탕으로 무작위 데이터가 많을수록 더 정확한 결과를 얻을 수 있습니다. 아래에서는 Python을 사용하여 Monte Carlo 방법을 구현해 보겠습니다.
1. 먼저 pi에 대한 간단한 대략적인 계산을 수행합니다. 이 과정에서는 난수를 사용해야 하므로 import numpy as np
를 사용하여 먼저 numpy 라이브러리를 가져와야 합니다.
2. 코드 구현:
import numpy as np total = 8000000 count = 0 for i in range(total): x = np.random.rand() y = np.random.rand() dis = (x**2+y**2)**0.5 if dis <p>3 위 프로그램에서는 전달을 위해 8,000,000개의 난수를 사용하므로 프로그램을 실행하는 데 일정 시간이 걸리고 최종 결과가 나옵니다. </p><p><span class="img-wrap"> <img src="https://img.php.cn//upload/image/549/675/172/1547436392667253.png" title="1547436392667253.png" alt="Python은 Monte Carlo 방법을 구현합니다(코드 예)"></span></p><p>4. 아래 그림은 제가 그리기 도구에서 임의로 그린 그림으로, 검은색 부분의 면적을 추정해 볼 수 있습니다. 그림에서. </p><p style="max-width:90%"><span class="img-wrap"><img src="https://img.php.cn//upload/image/583/174/740/1547436406520588.png" title="1547436406520588.png" alt="Python은 Monte Carlo 방법을 구현합니다(코드 예)"></span></p><p>5. 위 그래프는 불규칙합니다. 난수를 많이 넣었을 때 검은색 부분에 난수가 나타날 확률만 알면 됩니다. 그런 다음 전체 면적을 곱하여 검은색을 추정합니다. 부분. 검은색 RGB 코드가 (0,0,0)이라는 것을 알고 있으므로 RGB 코드가 (0,0,0)일 때 난수가 나올 확률을 계산해야 합니다. </p><p>6. 코드 구현: </p><pre class="brush:php;toolbar:false">from PIL import Image import numpy as np im = Image.open("C:/Users/21974/Desktop/handwrite2.PNG") total = 9000000 count = 0 defin = 0 width = im.size[0] height = im.size[1] for i in range(total): #用蒙特卡罗方法获得估计值 x = np.random.randint(0, width-1) y = np.random.randint(0, height-1) k = im.getpixel((x, y)) if k[0]+k[1]+k[2] == 0: count += 1 print(int(width*height*count/total)) for i in range(width): #用遍历获得准确值 for j in range(height): k = im.getpixel((i, j)) if k[0] + k[1] + k[2] == 0: defin += 1 print(defin)
위 코드는 두 부분으로 나눌 수 있습니다. 첫 번째 for는 몬테카를로 방법으로 구한 면적의 추정값이고, 두 번째 for는 횡단하는 방법입니다. 모든 픽셀. 두 개의 출력을 얻은 후 얻은 영역의 정확한 값을 비교합니다.
위 프로그램에서는 9000000개의 난수를 사용했는데 두 출력 결과가 크게 다르지 않은 것을 볼 수 있습니다.
위 내용은 Python은 Monte Carlo 방법을 구현합니다(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!