목차
trapezoidal rule
Simpson's 1/3 Rule
Simpson's 1/3 Rule
본문내용
and Simpson's Rules" << "\n";
cout << "\n" << "Number of data : ";
cin >> n;
cout << "Input the data of x : " ;
for(i=0;i
cin >> x[i] ;
cout << "Input the data of f(x) : " ;
for(i=0;i
cin >> f[i] ;
double sum = 0.;
double ea;
double h=x[1]-x[0];
double k=1;
double hf;
for(i=0;i<=n-1;i++)
{
hf=x[i+1]-x[i];
if(hf<0.000001)
{
if(k==3)
{
sum=sum+2*h*(f[i-3]+4*f[i-2]+f[i-1])/6;
k=k-1;
}
else
{
k=k+1;
}
}
else
{
if(k==1)
{
sum=sum+h*(f[i-1]+f[i])/2;
}
else
{
if(k==2)
{
sum=sum+2*h*(f[i-2]+4*f[i-1]+f[i])/6;
}
else
{
sum=3*h*(f[i-3]+3*(f[i-2]+f[i-1])+f[i])/8;
}
k=1;
}
}
h=hf;
}
ea=((0.7912405-sum)/0.7912405)*100;
cout << "\n";
cout << " The result of the integration I = " << sum << "\n";
cout << " The exact value of the integral is 0.7912405 " << "\n";
cout << "error = " << ea <<"%"<<"\n";
return ;
}
◆ Problem 22.2
Use order of h8 Romberg integration to evaluate
Compare εa, εt .
◆ Problem 22.8
Employ two - through six-point Gauss - Legendre formulas to solve
interpret your results in light of Eq.(22.26).
◎ Comments ◎
Gauss quadrature 의 한 방법인 Gauss-Legendre formula를 이용해서 위 적분을 구하였다. Trapezoidal rule에서와 같이 two point를 연결하는 직선으로, 함수를 근사하여 적분을 하지만 Gauss-Legendre formula는 적분구간이 two point에 closed 돼있지 않고 범위를 확장하여 positive, negative error를 통해 더 정확한 적분 값을 얻을 수 있다.
Gauss-Legendre formula를 two point 사이에서 적용할 때, 적절한 조치가 필요하다. 먼저 적분구간을 -1에서 1사이로 바꿔주고, 원래 함수의 변수 x를 적분구간 끝점들의 수식으로 이루어진 계수와 xd 의 함수로 바꿔주어야 한다. [x=(b+a)/2 + (b-a)/2 * xd].
그리고 xd에 function arguments를 각각 대입하여 그 값들을 더해서 최종 적분값을 구할 수 있다. 책에서 주어진 table에 의해 two-point ~ six-point 의 각각의 경우의 적분값을 구해보았다. Trapezoidal rule을 사용했을 때 적분구간을 다수의 segment로 나눴을 때 true value에 근사한 값을 구할 수 있는데 비하면 Gauss-Legendre formula은 훨씬 효율적임을 알 수 있다.
◎ Comments ◎
Romberg integration을 통해 문제의 적분을 수행하고자 한다. Romberg integration은 일반적으로 다음과 같이 나타낼 수 있다.
O(h2)는 multiple-application의 segments n = 1,2,4,8을 적용해 Trapezoidal rule을 통해 구해진 값이다. 이 값을 적절히 이용해 다음 order의 I값을 더 적은 오차를 갖도록 구할 수 있다. 첫 번째 O(h2)의 경우, 기존의 프로그램으로 구했고, 위의 식을 통해 O(h8)까지 실행하였다. order가 증가할수록 오차[ ]가 약 26%에서 0.3 %, 0.0015 %로 상당히 빠르게 감소하고 있음을 보인다.
O(h8)의 오차는 0.001583 %로 왼쪽의 프로그램으로 실행한 Trapezoidal Rule의 segments가 100일 때보다 훨씬 작은 값이다. 이것으로 Romberg integration이 상당히 유용하게 사용될 수 있음을 확인할 수 있었다.
cout << "\n" << "Number of data : ";
cin >> n;
cout << "Input the data of x : " ;
for(i=0;i
cout << "Input the data of f(x) : " ;
for(i=0;i
double sum = 0.;
double ea;
double h=x[1]-x[0];
double k=1;
double hf;
for(i=0;i<=n-1;i++)
{
hf=x[i+1]-x[i];
if(hf<0.000001)
{
if(k==3)
{
sum=sum+2*h*(f[i-3]+4*f[i-2]+f[i-1])/6;
k=k-1;
}
else
{
k=k+1;
}
}
else
{
if(k==1)
{
sum=sum+h*(f[i-1]+f[i])/2;
}
else
{
if(k==2)
{
sum=sum+2*h*(f[i-2]+4*f[i-1]+f[i])/6;
}
else
{
sum=3*h*(f[i-3]+3*(f[i-2]+f[i-1])+f[i])/8;
}
k=1;
}
}
h=hf;
}
ea=((0.7912405-sum)/0.7912405)*100;
cout << "\n";
cout << " The result of the integration I = " << sum << "\n";
cout << " The exact value of the integral is 0.7912405 " << "\n";
cout << "error = " << ea <<"%"<<"\n";
return ;
}
◆ Problem 22.2
Use order of h8 Romberg integration to evaluate
Compare εa, εt .
◆ Problem 22.8
Employ two - through six-point Gauss - Legendre formulas to solve
interpret your results in light of Eq.(22.26).
◎ Comments ◎
Gauss quadrature 의 한 방법인 Gauss-Legendre formula를 이용해서 위 적분을 구하였다. Trapezoidal rule에서와 같이 two point를 연결하는 직선으로, 함수를 근사하여 적분을 하지만 Gauss-Legendre formula는 적분구간이 two point에 closed 돼있지 않고 범위를 확장하여 positive, negative error를 통해 더 정확한 적분 값을 얻을 수 있다.
Gauss-Legendre formula를 two point 사이에서 적용할 때, 적절한 조치가 필요하다. 먼저 적분구간을 -1에서 1사이로 바꿔주고, 원래 함수의 변수 x를 적분구간 끝점들의 수식으로 이루어진 계수와 xd 의 함수로 바꿔주어야 한다. [x=(b+a)/2 + (b-a)/2 * xd].
그리고 xd에 function arguments를 각각 대입하여 그 값들을 더해서 최종 적분값을 구할 수 있다. 책에서 주어진 table에 의해 two-point ~ six-point 의 각각의 경우의 적분값을 구해보았다. Trapezoidal rule을 사용했을 때 적분구간을 다수의 segment로 나눴을 때 true value에 근사한 값을 구할 수 있는데 비하면 Gauss-Legendre formula은 훨씬 효율적임을 알 수 있다.
◎ Comments ◎
Romberg integration을 통해 문제의 적분을 수행하고자 한다. Romberg integration은 일반적으로 다음과 같이 나타낼 수 있다.
O(h2)는 multiple-application의 segments n = 1,2,4,8을 적용해 Trapezoidal rule을 통해 구해진 값이다. 이 값을 적절히 이용해 다음 order의 I값을 더 적은 오차를 갖도록 구할 수 있다. 첫 번째 O(h2)의 경우, 기존의 프로그램으로 구했고, 위의 식을 통해 O(h8)까지 실행하였다. order가 증가할수록 오차[ ]가 약 26%에서 0.3 %, 0.0015 %로 상당히 빠르게 감소하고 있음을 보인다.
O(h8)의 오차는 0.001583 %로 왼쪽의 프로그램으로 실행한 Trapezoidal Rule의 segments가 100일 때보다 훨씬 작은 값이다. 이것으로 Romberg integration이 상당히 유용하게 사용될 수 있음을 확인할 수 있었다.
소개글