数值分析—龙贝格算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}
运行结果: