몬테카로 방법을 통해 원주율π 획득

4493 단어 몬테카로법C++
개요
하고 싶은 일:
MonteCalro method를 사용하여 원의 원주율을 계산한다.
동기:
대학에서 공부하는 계산물리 수업에 등장했기 때문에 이런 생각을 여기서 정리하고 싶다.
1. 이론적인 곳
반경 r의 원을 준비하다
x^2 + y^2 = r^2
원(중심은 원점, 반지름은 $r$r)입니다.

이 원을 네 부분 중 하나로 나누어 준비하세요.
자른 것을 정사각형에 던지다
우리는 자른 원을 한 변 r의 정사각형에 수납하는 것을 고려하는데, 아래와 같다.

다음은 r=1을 간단하게 설정하기 위해서입니다.
랜덤수를 빼고 생각하다
여기 있다
0 \le x \le 1 \\
0 \le y \le 1
를 참고하십시오.
(반지름이 임의의 $r$r이면 임의의 범위는 $0\lex\ler달러 이내로 제한됩니다.)
이 범위 내에서 무작위 수가 n달러 감소했다고 가정하십시오.그 중에서 엔화 범위 내에서 a달러가 떨어졌다고 가정해 보자.그리고 나서
정사각형 면적: 1/4엔 면적=$n:a$
r^2 : \frac{1}{4}\pi r^2 = n : a \\
\pi = \left(\frac{a}{n}\right)\times 4
위에서 말한 바와 같이 원주율을 계산할 수 있다.우리 이것을 실현합시다.
2. 설치
Mntclo.cpp

#include <iostream>
#include <cstdllib>
#include <cmath>
using namespace std;
//乱数の定義
#define RAND()(float(rand())/(RAND_MAX + 1.0)) 

main() {
  int i;
  int ncout = 0;
  int ntry;
  float x , y , π;
  cout << "ntry=?";
  cin >> ntry;
  for(i = 1; i <= ntry; ++i){
    x = RAND();
    y = RAND();
    if (x*x + y*y <= 1) {
      ncout = ncout + 1;
    }
    π = (float(ncout)/i)*4;
    cout << "i=" << i << "π=" << π << "\n";
  }
}

3. 결과
1만 건의 시행 결과는 다음과 같다.원주율과 상당히 비슷하다.

이런 생각은 실현될 수 있다.

좋은 웹페이지 즐겨찾기