본문 바로가기

프로그래밍/C++

수치적분 사다리꼴 C 코드


수치적분(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;

}


이 사다리꼴방식의 적분은 쪼개는 횟수가 높으면 높을수록 정확도가 높아지며,

반대로 작을수록 오차가 커진다.


결과를 보면,


103.33993
303.20807
503.18153
1003.16158
5003.14559
10003.14359
50003.14199
100003.14179
500003.14163
1000003.14161
10000003.14159
 



당연히 숫자가 커질수록 실제 수치인 π (3.141592..)에 근접해지는 걸 볼 수 있다.