⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 龙贝格积分法.cpp

📁 实现了龙贝格算法
💻 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 + -