아래의 블로그에 이론적  설명이 아주 잘 소개되어 있다.

문제는 x^5 - x^4 의 식을 0부터 10까지 적분하려면 어떤 방법을 써야 하는가이다.

나는 일단 0 부터 10까지를 잘게 나누었다.
나누어진 값을 하나의 x단위로 사용하였다.

y의 단위는 등분상의 Xi 를 사용할 것인가. X(i+1)를 사용할 것인가에 따라 오차 범위가 달라지는데,
이 문제를 해소하고자 Xi +  [X(i+1)-Xi]/2  즉, Xi와 X(i+1)사이의 x값을 이용하여 y값을 구하였다.

이런식으로 x, y를 구하고 면적을 구한다.
Sum= Sum+(x*y);

이 방식을 등분한 만큼 계속 반복하면 Sum에는 수식의 면적이 누적되고,
나아가 모든 면적을 갖는다.
즉, 적분된다.

사용의 편의성을 위해, 아래의 소스코드에서 핑크색으로 처리된 부분에
미분 식을 대입하면 0부터 10까지 적분되도록 하였다.

물론 0부터 10까지의 범위도 함수를 호출하는 과정에서 조절 할 수 있다.

#include <iostream>

#include <math.h>


#define PI 3.141592

 

using namespace std;

 

/**********************

****    Function   ****

***********************/

void Test_Function(void);

double Rectangle_Method(double First, double Second, int Number);

  

/**********************

****      Main     ****

***********************/

int main(void)

{

        Test_Function();

        return 0;

}

 

void Test_Function(void)

{

        cout <<"**************** TEST ****************"<<endl;

        cout <<"Value of Intergral 0 to 10 -> (x^5-x^4)dX  "<<endl;


        cout <<"Numerical Methods  (TEST) : "

                << Rectangle_Method_for_Test(0, 10, 10000000) <<endl;


        cout <<"True : "<<146666.66666<<endl;

        cout <<"**************** TEST ****************"<<endl;

        cout <<endl;

}

 

double Rectangle_Method_for_Test(double First, double Second, int Number) // 처음 값, 마지막 값, 등분 수

{

    double Sum=0.0;

    double *Division=new double[Number+1];

    double x, y, dX;

 

    x = (Second - First) / Number;

 

    for(int iPoint=0; iPoint<=Number; iPoint++)             

{                                                       

        Division[iPoint]=x*iPoint;

 

        if(iPoint==Number)

               cout <<"Last : Division["<<iPoint<<"] : "

                       <<Division[iPoint]<<endl;

}

 

    for(int iActive=0; iActive<Number; iActive++)

    {

        dX=Division[iActive]+(Division[iActive+1]-Division[iActive])/2;

        y=(dX*dX*dX*dX*dX - dX*dX*dX*dX);

        Sum=Sum+(x*y);

    }

 

    delete []Division;

    return Sum;

}

번호 제목 글쓴이 날짜 조회 수
29 [CPP] file 입출력 : space data file simpled 2013.06.23 5257
28 [CPP] 1차 방정식을 통한 y값 구하기 simpled 2013.06.23 5777
27 [CPP] Vector 계산 클래스 (v2.0) file simpled 2013.06.23 4675
26 [CPP] 자리수 표현 simpled 2013.06.23 5618
25 [CPP] 각도 클래스(+ 아크탄젠트 리턴값 조정) file simpled 2013.06.23 6024
24 [CPP] 벡터 계산 클래스 file simpled 2013.06.23 6090
23 [CPP] file 입출력 simpled 2013.06.23 4964
» [CPP] 수치해석 : Rectangle Method 구분구적분 (적분 프로그래밍) simpled 2013.06.23 8111
21 [CPP] 분포하중 _ Beam의 SFD, BMD 값 simpled 2013.06.23 6471
20 [CPP] OOP6. CPP Programming :: Virtual Banking system PPT [끝] file 심플디 2013.06.23 6607
19 [CPP] OOP6. CPP Programming :: Virtual Banking system v3.8 file simpled 2013.06.23 5920
18 [CPP] OOP6. CPP Programming :: Virtual Banking system 모듈프로그램들 file simpled 2013.06.23 5244
17 [CPP] OOP6. CPP Programming :: Virtual Banking system v3.7 file simpled 2013.06.23 5954
16 [CPP] OOP6. CPP Programming :: Virtual Banking system v3.6 file simpled 2013.06.23 6287
15 [CPP] OOP6. CPP Programming :: Virtual Banking system v3.5.1 file simpled 2013.06.23 6442
14 [CPP] OOP6. CPP Programming :: Virtual Banking system v3.5 file simpled 2013.06.23 6620
13 [CPP] -----------------------------------절취선----------------------------------- simpled 2013.06.23 5830
12 [CPP] Banksys 휴식 simpled 2013.06.23 6496
11 [CPP] OOP5. CPP Programming :: Virtual Banking system v3.0.2 [Class design3. String Sorting] simpled 2013.06.23 5612
10 [CPP] OOP5. CPP Programming :: Virtual Banking system v3.0.2 [Class design2. File I/O] simpled 2013.06.23 6549