1.自动选取步长梯形法算法:
1 /************************************************************************/ 2 /* 自动选取步长梯形法算法 3 /* 课本P83页 4 /* 可以通过freopen方法从文本读入数据 5 /************************************************************************/ 6 #include<iostream> 7 #include<cmath> 8 #include<string> 9 using namespace std; 10 //积分函数 11 double f(double x) 12 { 13 //要求积分的函数,返回在x出的函数值 14 return 2/(1+x*x); 15 } 16 //自动选取步长梯形法算法:返回积分近似值,积分区间为[a,b],精度为e 17 double autoStepTrapezoidalMethod(double a,double b,double e) 18 { 19 double h=(b-a)/2; 20 double T0=0,T1=0,S=0;//T0表示前次积分近似值,T1表示后次积分近似值 21 int n=1; //把积分区间[a,b]n等分 22 T1=(f(a)+f(b))*h; 23 int k=0; 24 do 25 { 26 T0=T1; 27 S=0; 28 for (k=1;k<=n;k++) 29 { 30 S=S+f(a+(2*k-1)*(h/n)); 31 } 32 T1=T0/2+S*h/n; 33 n=2*n; 34 }while(T1-T0>=3*e); 35 return T1; 36 } 37 38 int main() 39 { 40 //freopen("in.txt","r",stdin); 41 cout<<autoStepTrapezoidalMethod(0,1,0.00001)<<endl; 42 system("pause"); 43 44 }