搜档网
当前位置:搜档网 › 复化梯形公式和simpsion公式

复化梯形公式和simpsion公式

复化梯形公式
#include
#include
#define e
#define a 0 //积分下限a
#define b 1 //积分上限b
#define f(x) (exp(x)); //被积函数f(x)
int main()
{
int i,n;
double h,t0,t,g;
n=1; //赋初值
h=(double)(b-a)/2;
t=h*(f(a)+f(b));
do
{
t0=t;
g=0;
for (i=1;i<=n;i++)
g+=f((a+(2*i-1)*h));
t=(t0/2)+(h*g); //复化梯形公式
n*=2;
h/=2;
}
while (fabs(t-t0)>e); //自定义误差限e
printf("%.8lf",t); //输出积分的近似值

return 0;
}



3)Romberg求积法:

#include
#include
#define e 1e-5
#define a 0 //积分下限a
#define b 1 //积分上限b
#define f(x) (4/(1+(x*x))) //被积函数f(x)
double t[100][100];
int main()
{
int n,k,i,m;
double h,g,p;
h=(double)(b-a)/2;
t[0][0]=h*(f(a)+f(b));
k=1;
n=1;
do //Romberg算法
{
g=0;
for (i=1;i<=n;i++)
g+=f((a+((2*i-1)*h)));
t[k][0]=(t[k-1][0]/2)+(h*g);
for (m=1;m<=k;m++)
{
p=pow(4,(double)(m));
t[k-m][m]=(p*t[k-m+1][m-1]-t[k-m][m-1])/(p-1);
}
m-=1;
h/=2;
n*=2;
k+=1;
}
while (fabs(t[0][m]-t[0][m-1])>e); //自定义误差限e
printf("%.8lf",t[0][m]);

return 0;
}













梯形公式与Simpson公式求积分法的C++程序2008年11月13日 星期四 21:09#include
#include
#include
#include
using namespace std;

const double PI=3.1415926;

double tixingjifen(double (*f)(double),double a,double b,int n);

double Simpson(double (*f)(double),double a,double b,int n);

double f(double x)
{
return 3.0*x*x+5.0*x-1.0;
}

double g(double x)
{
return PI*pow(1.0+pow(x/2.0,2),2);
}

int main()
{
cout<cout<system("pause");
return 0;
}


double tixingjifen(double (*f)(double),double a,double b,int n)
{
double dn=(double)n;
double h=(b-a)/dn;
double sum=0.0;
double x=a+h;
for(int i=1;i{
sum=sum+f(x);
x=x+h;
}
sum=sum*2.0;
sum=sum+f(a)+f(b);
sum=sum*h/2.0;
return sum;
}

double Simpson(double (*f)(double),double a,double b,int n)
{
double dn=(double)n;
double h=(b-a)/dn;
double result=0.0;
double sum=0.0;
int i;
for(i=1;i<=n;++i)
sum=sum+f(a+(2.0*(double)i-1.0)*h/2.0);
result=result+4.0*sum;
sum=0.0;
for

(i=1;i<=(n-1);++i)
sum=sum+f(a+h*(double)i);
result=result+2.0*sum;
result=result+f(a)+f(b);
result=result*h/6.0;
return result;
}


相关主题