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

📄 romberg.txt

📁 用于求数值积分的龙贝格求积公式!!!程序经过优化处理
💻 TXT
字号:
#include<iostream.h>//Romberg求积公式
#include<cmath>
double **BuildMatrix(int m,int n);
void FreeMatrix(double **A,int m);
double f(double x);
double sum(int k);
double ABS(double x);
double power(double x,int n);
double a,b,h;	
void main()
{
	cout<<"请输入积分区间:"<<endl;
	cout<<"积分下限a=";
	cin>>a;
	cout<<"积分上限b=";
	cin>>b;
	h=b-a;
	int n=2;
	while(1)
	{
		double **T=BuildMatrix(n,n);
		T[0][0]=h/2*(f(a)+f(b));
		for(int k=1;k<n;k++)
			T[k][0]=0.5*T[k-1][0]+h/power(2,k)*sum(k);
		for(int l=1;l<n;l++)
			T[0][l]=0;
		for(int i=1;i<n;i++)
		{
			for(int j=1;j<n;j++)
			{
				if(i<j)
					T[i][j]=0;
				else
					T[i][j]=(power(4,j)*T[i][j-1]-T[i-1][j-1])/(power(4,j)-1);
			}
		}
		if(ABS(T[n-1][n-1]-T[n-2][n-2])<=1e-5)
		{
			cout<<"所求定积分值为:"<<T[n-1][n-1];
			FreeMatrix(T,n);
			break;
		}
		else
		{
			FreeMatrix(T,n);
			n++;
		}
	}
}
double **BuildMatrix(int m,int n)
{
	double **A;
	A=new double *[m];
	for(int i=0;i<m;i++)
		A[i]=new double [n];
	return A;
}
void FreeMatrix(double **A,int m)
{
	for(int i=0;i<m;i++)
		delete[] A[i];
	delete[] A;
}
double sum(int k)
{
	double s=0;
	for(int i=1;i<power(2,k);i+=2)
		s+=f((b-a)*i/power(2,k));
	return s;
}
double ABS(double x)
{
	if(x>=0)
		x=x;
	else
		x=-x;
	return x;
}
double f(double x)
{
	double y;
	if(x==0)
		y=1;
	else
		y=sin(x)/x;
	return y;
}
double power(double x,int n)
{
	double val=1;
	while(n--)
		val*=x;
	return val;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -