📄 romberg.cpp
字号:
#define PI 3.14159265
#define E 2.718281828
#include <math.h>
#include <iostream>
using namespace std;
double a, //积分上限
b, //积分下限
h, //上下限差
pre; //精度要求
double T[50][50];//复合梯形公式
int main()
{
int k=0,r,s;
double getmethod(double x);//获取被积函数
double sum(int m); //累加函数
cout<<"请分别输入积分上下限:";
cin>>a>>b;
cout<<"请输入精度要求:";
cin>>pre;
h=b-a;
cout<<"***************"<<endl;
T[0][0]=h*(getmethod(a)+getmethod(b))/2;
cout<<"T(0,0)="<<T[0][0]<<endl;
do{
k++;
h=h/2;
T[0][k]=T[0][k-1]/2+h*sum(k);
cout<<"T(0,"<<k<<")="<<T[0][k]<<endl;
for(s=1;s<=k;s++)
{
r=k-s;
T[s][r]=(pow(4,s)*T[s-1][r+1]-T[s-1][r])/(pow(4,s)-1);
cout<<"T("<<s<<","<<r<<")="<<T[s][r]<<endl;
}
}while(fabs(T[k][0]-T[k-1][0])>=pre);
cout<<"***************"<<endl;
cout<<"积分结果是:"<<sqrt(2/PI)*T[k][0]<<endl<<endl;
return 0;
}
double getmethod(double x)//获取被积函数
{
return (pow(E,-0.5*x*x));
}
double sum(int m)//累加函数
{
double temp=0;
for(int i=1;i<=pow(2,m-1);i++)
temp+=getmethod(a+(2*i-1)*h);
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -