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

📄 int.cpp

📁 Romberg积分
💻 CPP
字号:
#include<iostream.h>
#include<stdlib.h>
#include<math.h>

/////////////////////
//函数f(x)
////////////////////
double func(double x)
{
	double y=4/(1+x*x);
	return y;
}

//////////////////////////////////////////////////////
//在区间[a,b],等分区间数xjs,精度eps下求积分
/////////////////////////////////////////////////////
double Int(double a, double b, int xjs, double eps)
{
	double t[50][50], h,evalf, evalf0, evalf1;
	int i, j, m;
	t[0][0]=((b-a)/2) * (func(a)+func(b));
	evalf0=0.0;
/////////////////////////////////////////////////////////////////////////////
	for(i=1; i<=xjs ; i++)                     //
	{                                          //
		evalf1=0.0;                            //
	    h=(b-a)/pow(2,i);                      //求新分点的函数值之和.
		for(j=1; j<=pow(2,i)-1; j++)           //
		{                                      //
			evalf1+=func(a+h*j);               //
		}                                      // 
		evalf=evalf1-evalf0;                   // 
		evalf0=evalf1;                         //
/////////////////////////////////////////////////////////////////////////////
		t[i][0]=t[i-1][0] / 2 + evalf * h;
		for(m=1; m<=i; m++)
		{
			t[i][m]=(pow(4,m)*t[i][m-1]-t[i-1][m-1])/(pow(4,m)-1);
		}

		if(fabs(t[i][i]-t[i-1][i-1])<eps)
		{
			cout<<"等分次数:"<<i<<"次\n";
			return t[i][i];
		}
	}
	if(i>=xjs)
	{
		cout<<"等分次数:"<<xjs<<"次\n";
		return t[xjs][xjs];
	}

	if(xjs==0)
	{
		cout<<"等分次数:0 次\n";
		return t[0][0];
	}
    return t[xjs][xjs];
}

void main()
{
	int xjs;
	double  ans, a, b, eps;
	cout<<"输入积分区间[a,b]:";
	cin>>a>>b;
	cout<<"\n";
	cout<<"输入等分区间数: \n";
	cin>>xjs;
	cout<<"输入精度:";
	cin>>eps;
	cout<<"\n";
	ans=Int(a, b, xjs, eps);
	cout<<"f(x)在["<<a<<","<<b<<"]的积分为: ";
	cout<<ans<<endl;
}

⌨️ 快捷键说明

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