復(fù)化梯形法復(fù)化矩形法變步長梯形變步長辛普森_第1頁
復(fù)化梯形法復(fù)化矩形法變步長梯形變步長辛普森_第2頁
復(fù)化梯形法復(fù)化矩形法變步長梯形變步長辛普森_第3頁
復(fù)化梯形法復(fù)化矩形法變步長梯形變步長辛普森_第4頁
復(fù)化梯形法復(fù)化矩形法變步長梯形變步長辛普森_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、陜西科技大學(xué) 機械教改班用C+的積分 其實積分的思想就是,微分求和取極限,如果是用純手工法那就是先對一個函數(shù)微分,再求出它的面積,在取極限,因為我們的計算速度和計算量有限,現(xiàn)在有了計算機這個速度很快的機器,我們可以把微分后的每個小的面積加起來,為了滿足精度,我們可以加大分區(qū),即使實現(xiàn)不了微分出無限小的極限情況,我們也至少可以用有限次去接近他,下面我分析了四種不同的積分方法,和一個綜合通用程序。一積分的基本思想1、思路:微分求和取極限。2、NewtonLeibniz公式其中,被積函數(shù)的原函數(shù)。3、用計算機積分的思路在積分區(qū)間內(nèi)“微分求和控制精度”。因為計算機求和不可以取極限,也就是不可以無限次的

2、加下去,所以要控制精度。二現(xiàn)有的理論1、一階求積公式-梯形公式他只能精確計算被積函數(shù)為0、1次多項式時的積分。2、二階求積分公式牛頓、科特斯公式他只能精確計算被積函數(shù)為0、1、2、3次多項式時的積分。3 四種實現(xiàn)方法1. 復(fù)化矩形法 將積分區(qū)間a,b等分成n個子區(qū)間:則h=(b-a)/n,區(qū)間端點值=a+kh.源程序:#include #includedouble f(double x) /計算被積函數(shù)double y;y=log(1+x)/(1+x*x); /被積函數(shù)return y;double Tn(double a,double b,int n) /求Tndouble t=0.0;do

3、uble xk; /區(qū)間端點值double t1,t2; /用來判斷精度dodouble h=(b-a)/n;for(int k=1;k=n-1;k+) /每一小段的矩形疊加 t1=t;xk=a+k*h;t+=h*f(xk);t2=t;n+; /如果精度不夠就對區(qū)間再次細分,直到達到精度要求while(fabs(t1-t2)=1e-7); /判斷計算精度return t;void main()double a=0.0; /積分下線double b=2.0; /積分上限int n=1024; /把區(qū)間分為1024段coutTn(a,b,n)endl; /輸出積分結(jié)果執(zhí)行結(jié)果:2. 復(fù)化梯形法 方

4、法和復(fù)化矩形法類似,只是把原來的矩形小面積變成了梯形小面積,但是精確度明顯提高了,也就是說達到同樣的精度需要的時間少了。變形一下:源程序:#include #includedouble f(double x) /計算被積函數(shù)double y;y=log(1+x)/(1+x*x); /被積函數(shù)return y;double Tn(double a,double b,int n) /求Tndouble t=0.0;double xk; /區(qū)間端點值double t1,t2,h=(b-a)/n; /用來判斷精度doh=(b-a)/n;for(int k=1;k=n-1;k+) /余項疊加,相當于每一

5、個小梯形相加 t1=t;xk=a+k*h;t+=f(xk);t2=t;n+; /如果精度不夠就對區(qū)間再次細分,直到達到精度要求while(fabs(t1-t2)=1e-7); /判斷計算精度 t=h*(f(a)+f(b)/2+t*h; /加上初項就是積分結(jié)果了 return t;void main()double a=0.0; /積分下線double b=2.0; /積分上線int n=1024; /把區(qū)間分為1024段coutTn(a,b,n)endl; /輸出積分結(jié)果執(zhí)行結(jié)果:3. 變步長梯形法上面我們在應(yīng)用復(fù)化積分法的時候會對區(qū)間進行分割,但是在要求精度是我們也不知道事先應(yīng)該分割成多少段

6、,分的少了精度達不到,分的多了計算量太大,為了解決這個問題我在上面加了一個循環(huán),來不斷地對區(qū)間進行再次劃分,直到達到精度要求,變步長積分法與我用的方法類似,只不過變步長積分法的區(qū)間劃分時成倍增加的。實現(xiàn)方法;由復(fù)化梯形法知道;步長h=(b-a)/n現(xiàn)在將步長分半,即在相鄰兩節(jié)點的中點處增加一個求積節(jié)點,那么變形一下:源程序:#include #include double f(double x) /計算被積函數(shù)的值double y;y=log(1+x)/(1+x*x); return y;double t2ntn(double a,double b)int n=1;double hn=b-a;

7、 /原步長double tn=0.0;double t2n=(f(a)+f(b)*hn/2.0;while(fabs(t2n-tn)1e-7) /判斷精度tn=t2n;t2n=0.0;for(int k=0;k=n-1;k+) /循環(huán)疊加t2n+=f(a+hn/2.0+k*hn);t2n=tn/2.0+t2n*hn/2.0;n=n*2; hn=hn/2.0; /步長分半return t2n;void main()double a=0.0;double b=2.0;coutt2ntn(a,b)endl;執(zhí)行結(jié)果:4. 變步長辛普森法之前的積分斜邊都是直線,如果用拋物線接近就會更準確復(fù)化辛普森求積

8、公式然后就只要每次讓他的積分區(qū)間加倍就行直到達到要求的精度#include #include #include double a=0.0,b=2.0,e=1e-7; /積分上下線,和精度要求int n=1024;double f(double x) Double y;y=log(1+x)/(1+x*x); /被積函數(shù)return y;float simpson() int i;double s,sn,s2n,p,x,h;h=(b-a)/n; /步長 s=f(a)+f(b); p=0;x=a+h; /積分端點for(i=1;i=n-1;i+)if(i%2)!=0) p=p+4*f(x); /在區(qū)

9、間中間時乘4x=x+h;elses=s+2*f(x); /積分端點時乘2x=x+h;s=s+p; /第一次求和s2n=s*h/3; /積分值dosn=s2n;x=a+h/2; /變步長s=s-p/2; p=0;for(i=1;ie); /控制精度return s2n;void main()coutsimpson()endl;執(zhí)行結(jié)果:4 用C+寫的綜合程序#include #include #include class Bjhs /抽象類public: virtual double f(double x)=0; /虛計算被積函數(shù) virtual void print()=0; /輸出函數(shù) vi

10、rtual double Tn()=0; /虛函數(shù);class Fhjx:public Bjhs /復(fù)化矩形法類public:Fhjx()a=0;b=2;e=1e-7;n=1024; /構(gòu)造函數(shù)付初值double f(double x); /計算被積函數(shù)double Tn() /求Tndouble t=0.0;double xk; /區(qū)間端點值double t1,t2; /用來判斷精度dodouble h=(b-a)/n;for(int k=1;k=n-1;k+) /每一小段的矩形疊加 t1=t;xk=a+k*h;t+=h*f(xk);t2=t;n+; /如果精度不夠就對區(qū)間再次細分,直到達到

11、精度要求while(fabs(t1-t2)=e); /判斷計算精度return t;void print() /輸出cout用復(fù)化矩形法計算的結(jié)果Tn()endl;private:double a,b,e;int n;double Fhjx:f(double x) /外聯(lián)函數(shù)double y;y=log(1+x)/(1+x*x); /被積函數(shù)return y;class Fhtx:public Bjhs /復(fù)化梯形法public:Fhtx()a=0;b=2;e=1e-7;n=1024; double f(double x); /計算被積函數(shù) double Tn() /求Tndouble t=0

12、.0;double xk; /區(qū)間端點值double t1,t2,h=(b-a)/n; /用來判斷精度 doh=(b-a)/n;for(int k=1;k=n-1;k+) /余項疊加,相當于每一個小梯形相加 t1=t;xk=a+k*h;t+=f(xk);t2=t;n+; /如果精度不夠就對區(qū)間再次細分,直到達到精度要求while(fabs(t1-t2)=1e-7); /判斷計算精度t=h*(f(a)+f(b)/2+t*h; /加上初項就是積分結(jié)果了 return t;void print()cout用復(fù)化梯形法計算的結(jié)果Tn()e) /判斷精度tn=t2n;t2n=0.0;for(int k=

13、0;k=n-1;k+) /循環(huán)疊加t2n+=f(a+hn/2.0+k*hn);t2n=tn/2.0+t2n*hn/2.0;n=n*2; hn=hn/2.0; /步長分半return t2n;void print()cout用變步長梯形法計算的結(jié)果Tn()endl;private:double a,b,e;double tn;int n;double Bbctx:f(double x)double y;y=log(1+x)/(1+x*x); /被積函數(shù)return y;class Bbcxps:public Bjhs /變步長辛普森法public:Bbcxps()n=1024;a=0;b=2;e

14、=1e-7; /積分上下線,和精度要求double f(double x); double Tn() int i;double s,sn,s2n,p,x,h;h=(b-a)/n; /步長 s=f(a)+f(b);p=0;x=a+h; /積分端點for(i=1;i=n-1;i+)if(i%2)!=0) /判奇偶,也就是看哪點乘幾p=p+4*f(x); /在區(qū)間中間時乘4x=x+h;elses=s+2*f(x); /積分端點時乘2x=x+h;s=s+p; /第一次求和s2n=s*h/3; /積分值dosn=s2n;x=a+h/2; /變步長s=s-p/2; p=0;for(i=1;i=n;i+)

15、/變步長只需要加就行了p=p+4*f(x); x=x+h;s=s+p;n=n*2;h=h/2;s2n=s*h/3;while(fabs(s2n-sn)=e); /控制精度return s2n;void print()cout用變步長辛普森法計算的結(jié)果Tn()endl;private:double a,b,e,p;int n;double Bbcxps:f(double x)double y;y=log(1+x)/(1+x*x); /被積函數(shù)return y;void display(Bjhs&q) /輸出函數(shù)q.Tn();q.print();void main() /選擇你想要的方法,用switch語句char a; Fhjx b;Fhtx c;Bbctx d;Bbcxps e;cout

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論