龙贝格算法就积分的c语言程序

Python024

龙贝格算法就积分的c语言程序,第1张

C++实现如下:

#include<iostream>

#include<cmath>

using namespace std

const int MAXRepeat = 100 //最大允许重复

double function(double x)//被积函数,根据自己的需要手工输入

{

double s

s = 1.0 / (1 + x)

return s

}

void Romberg(double a, double b, double epsion, double f(double x))

{

int m = 1

int n = 1

int k

double h

double ep

double p

double xk

double s

double q

double T[MAXRepeat]

h = b - a

T[0] = 0.5 * h * (f(a) + f(b))

ep = epsion + 1.0

while ((ep >= epsion) &&(m <MAXRepeat))

{

p = 0.0

for (k = 0k <nk++)

{

xk = a + (k + 0.5) * h// n-1

p = p + f(xk) //计算∑f(xk+h/2),T

} // k=0

p = (T[0] + h * p) / 2.0 //T`m`(h/2),变步长梯形求积公式

s = 1.0

for (k = 1k <= mk++)

{

s = 4.0 * s //[pwww.hbbz08.com ow(4,m)T`m`(h/2)-T`m`(h)]/[pow(4,m)-1],2m阶牛顿柯斯特公式,即龙贝格公式

q = (s * p - T[k - 1]) / (s - 1.0)

T[k-1] = p

p = q

}

ep = fabs(q - T[m - 1])

m++

T[m - 1] = q

n++// 2 4 8 16

h /= 2.0

}

for (int i = 0i <mi++)

{

int j

if (!(i % j))

{

cout<<T[i]<<endl

}

else

{

cout<<T[i]<<" "

}

j++

这是我在vc++6.0上测试你的程序输出的结果,我不知道这个结果对不对,但至少不是0,我建议你在定义double T[limit][limit];把T数组初始化一下。