📄 int.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 + -