当前位置:文档之家› 数值分析—龙贝格算法

数值分析—龙贝格算法

数值分析




专业:信息与计算科学
班级: 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<stdio.h>
#include<math.h>
#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<b)
{
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;
}
运行结果:。

相关主题