用龙贝格算法计算积分
#include
<iostream>
#include<cmath>
#include
<iomanip>
using
namespace std;
int power(int a, int
b)
{
int
result = 1;
if
(b == 0)
return
result;
while
(b != 0)
{
result
*= a;
b--;
}
return
result;
}
int main()
{
int
M =
5; //M表示二分的次数
double**
T = new double*[M + 1];
for
(int i = 0; i < M + 1; i++)
T[i]
= new double[i + 1];
double a
= 0, b =
1; //a表示积分下限,b表示积分上限
double
fa = pow(a, 1.5), fb = pow(b,
1.5); //fa表示在a点处被积函数的函数值,fb表示在b点处被积函数的函数值
double
h = b -
a; //h表示迭代的步长
double
sum; //用于计算积分内循环累加的部分
T[0][0]
= (fa + fb)*h /
2; //用梯形公式进行初始化
for
(int i = 1; i < M + 1; i++)
{
h
/= 2;
sum
= 0;
for
(int j = 1; j <= power(2, i - 1); j++)
sum
+= pow(a + (2 * j -
1)*h, 1.5); //计算产生的新的结点部分的和
T[i][0]
= T[i - 1][0] / 2 +
h*sum; //利用原来计算得到的积分值和新的节点计算得到新的积分值
for
(int k = 1; k <= i; k++)
T[i][k]
= T[i][k - 1] + (T[i][k - 1] - T[i - 1][k - 1]) / (power(4, k) -
1); //利用龙贝格积分公式计算后面的积分
}
cout << setiosflags(ios::left)
<< setw(10)
<< "T0"
<< setw(10)
<< "T1"
<< setw(10)
<< "T2"
<< setw(10)
<< "T3"
<< setw(10)
<< "T4"
<< setw(10)
<< "T5"
<< endl;
for
(int i = 0; i < M + 1; i++)
{
for
(int j = 0; j <= i; j++)
cout << setw(10)
<< T[i][j];
cout << endl;
}
cout << endl << endl;
cout <<
"最后计算得到的积分值为:" << T[M][M]
<< endl;
for
(int i = 0; i < M + 1; i++)
delete[]
T[i];
delete[]
T;
return
0;
}