數值積分算法

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 }
View Code
相關文章
相關標籤/搜索