1.自動選取步長梯形法算法:ios
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 }