몬테카로 방법을 통해 원주율π 획득
하고 싶은 일:
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만 건의 시행 결과는 다음과 같다.원주율과 상당히 비슷하다.
이런 생각은 실현될 수 있다.
Reference
이 문제에 관하여(몬테카로 방법을 통해 원주율π 획득), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MizutoKadowaki0312/items/7b8d6343697ef63ec611텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)