수치적분(Trapezoidal Approximations) 의 사다리꼴 방식을 이용하여 면적을 구하는 방법은 다음과 같다.
A~B 사이의 구간을 사다리꼴 모양으로 쪼개어 더하면 되는데,
사다리꼴 면적을 구하는 공식은 초등학교 산수책에도 나와 있다.
{(밑변 + 윗변) * h} / 2, ( h: 높이 )
이것을 이용하여 A~B 구간의 면적을 구할려면
이와 같이 표시할 수 있다.
그럼 하나의 예제를 들어보자.
다음과 같이 반지름의 길이가 2인 원의 1/4 면적을 구하는 공식은 다음과 같다.
S = (π / 4) * r * r = (π / 4) * 4 = π
면적이 원주율로 나오게 되는데 원주율 구하는 방정식을 코드로 표시하면
#include <math.h>
#include <iostream>
#include <cstdint>
using namespace std;
//#define f(x) (sqrt(4-(x)*(x))) // 0~2
#define f(x) (4/(1+(x*x))) // 0~1
// 위 원의 면적은 첫번째 방정식이지만, 여기서는 다른 방정식으로 π 를 구한다
int main()
{
double x, s;
__int64 count = 100;
double a = 0;
double b = 1;
// 적분구간
double h = (b - a) / count; // 구간폭
x = a; s = 0;
for (int i=0; i< count; i++)
{
x = x + h;
s = s + f(x);
}
double sum = h * ((f(a) + f(b)) / 2 + s);
cout << sum << endl;
return 0;
}
이 사다리꼴방식의 적분은 쪼개는 횟수가 높으면 높을수록 정확도가 높아지며,
반대로 작을수록 오차가 커진다.
결과를 보면,
10 | 3.33993 |
30 | 3.20807 |
50 | 3.18153 |
100 | 3.16158 |
500 | 3.14559 |
1000 | 3.14359 |
5000 | 3.14199 |
10000 | 3.14179 |
50000 | 3.14163 |
100000 | 3.14161 |
1000000 | 3.14159 |
당연히 숫자가 커질수록 실제 수치인 π (3.141592..)에 근접해지는 걸 볼 수 있다.
'프로그래밍 > C++' 카테고리의 다른 글
C++ 시스템 환경변수 읽어오기 (0) | 2017.01.06 |
---|---|
GetLastError() - 리턴코드 (에러값) (0) | 2017.01.06 |
char 배열 초기화 방법 (0) | 2016.09.29 |
printf 류 함수에서 int64 형 데이터 사용방법 (0) | 2016.09.22 |
C++11 스마트포인터 (0) | 2016.07.20 |