数值分析—龙贝格算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析

专业:信息与计算科学

班级: 10***班

学号: 1008060**** 姓名: ******

实验目的:

用龙贝格积分算法进行积分计算。

算法要求:

龙贝格积分利用外推方法,提高了计算精度,加快了收敛速度。 1--4R R R R 1-j 1-j 1-k 1-j k 1-j k j k ,,,,+= ,k=2,3,…

对每一个k ,j 从2做到k ,一直做到|R R 1-k 1-k k k -,,| 小于给定控制精

度时停止计算。

其中:

T R h k 1k =,(复化梯形求积公式),2h 1-k k a -b =

程序代码:

#include

#include

#define M 10

static float a, b, T[M], S[M], C[M], R[M];

float f(float x)

{

float y;

if(0.0 == x)

{

x = 0.0000001f;

}

y = (float)1/sqrt(1-x*x);

return y;

}

int p(int n)

{

int i=0,t=1;

while(t!=n)

{

t*=2;

++i;

}

return i;

}

float t(int n)

{

float g,h,q=0;

if(1==n)

{

h = (float)fabs(b-a);

q = (f(a)+f(b))*h/2;

}

else

{

float x = a;

g = 0;

h = (float)fabs(b-a)*2/n;

x = x+h/2;

while(x

{

g += f(x);

x += h;

}

q = t(n/2)/2+g*h/2;

}

return (T[p(n)] = q);

}

float s(int n)

{

return S[p(n)+1] = (float)t(2*n)+(t(2*n)-t(n))/3; }

float c(int n)

{

return C[p(n)+2] = (float)s(2*n)+(s(2*n)-s(n))/15; }

float r(int n)

{

return R[p(n)+3] = (float)c(2*n)+(c(2*n)-c(n))/63;

}

int main(void)

{

float e,r1 ,r2;

int i = 1 ;

printf("请输入a,b,e的值(形如1,2,3):");

scanf("%f,%f,%f",&a,&b,&e);

do{

if (i==1)

{

r1 = r(i+1);

r2 = r(i);

}

else

{

r1 = r(i+1);

r2 = r(i-1);

}

i += 2;

}

while(fabs(r2-r1)>e);

printf("*************************\n");

i = 0;

while(T[i]!=0.0)

{

printf("%d%10.7f%10.7f%10.7f%10.7f\n",i,T[i],S[i],C[i],R[i]);

++i;

}

return 0;

}

运行结果:

相关文档
最新文档