📄 龙贝格积分法.cpp
字号:
? Romberg算法
#include<stdio.h>
#include<math.h>
void main()
{
double a,b,h,T[30][30],eps;
double f(double x),fz,t;
int k,l,m,n,i,j;
printf("Romberg算法求积分\n");
printf("输入积分下上限及控制精度(以空格分隔):");
scanf("%lf %lf %lf",&a,&b,&eps);
h=b-a;
T[0][0]=h*(f(b)+f(a))/2;
for(l=1;l<100;l++)
{
n=pow(2,l-1);
h=h/2;
fz=0;
for(k=0;k<n;k++)
{
t=a+(2*k+1)*h;
fz=fz+f(t);//计算新增插点函数值
}
T[0][l]=(T[0][l-1])/2+h*fz;
for(m=1;m<=l;m++)
{
T[m][l-m]=(pow(4,m)*T[m-1][l-m+1]-T[m-1][l-m])/(pow(4,m)-1);//加速公式
}
if(fabs(T[l][0]-T[l-1][0])<=eps)
break;//判断是否符合精度要求
}
//输出T数表及近似积分值
printf("T数表如下:\n");
printf("—————————————————————————————————————\n");
printf(" T[i][j] ");
for(j=0;j<=l;j++)
if(j<4)
printf("| %d ",j);
printf("| ……\n");
for(i=0;i<=l;i++)
{
printf(" %d ",i);
for(j=0;j<=l-i;j++)
if(j<4)
printf("|%10lf ",T[i][j]);
printf("\n");
}
printf("—————————————————————————————————————\n");
printf("Romberg算法所求近似值为:%lf\n",T[l][0]);
}
double f(double x)//编写被积函数
{
if(x==0)
return(1);
else
return(sin(x)/x);
/*double z,u;
u=cos(x);
z=1-pow(0.1*u,2);
return(sqrt(z));*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -