C語言--用六種方法求定積分_第1頁
C語言--用六種方法求定積分_第2頁
C語言--用六種方法求定積分_第3頁
C語言--用六種方法求定積分_第4頁
C語言--用六種方法求定積分_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、文檔可能無法思考全面,請(qǐng)瀏覽后下載! C語言實(shí)驗(yàn)報(bào)告求定積分 班級(jí) 10信息與計(jì)算科學(xué)一班 姓名 戴良偉 學(xué)號(hào) 2010750221 14 / 141. 描述問題利用左矩形公式,中矩形公式,右矩形公式 ,梯形公式,simpson公式,Gauss積分公式求解定積分。2. 分析問題2.1定積分21.1定積分的定義定積分就是求函數(shù)在區(qū)間中圖線下包圍的面積。即所包圍的面積。這個(gè)圖形稱為曲邊梯形,特例是曲邊梯形。如下圖:(圖1)設(shè)一元函數(shù),在區(qū)間內(nèi)有定義。將區(qū)間分成個(gè)小區(qū)間。設(shè),取區(qū)間中曲線上任意一點(diǎn)記做,作和式:若記為這些小區(qū)間中的最長者。當(dāng)時(shí),若此和式的極限存在,則稱這個(gè)和式是函數(shù) 在區(qū)間上的定積分

2、。記作:其中稱為積分下限,為積分上限,為被積函數(shù), 為被積式, 為積分號(hào)。之所以稱其為定積分,是因?yàn)樗e分后得出的值是確定的,是一個(gè)數(shù),而不是一個(gè)函數(shù)。21.2定積分的幾何意義1它是介于x軸、函數(shù)f(x)的圖形及兩條直線x=a,x=b之間的各個(gè)部分面積的代數(shù)和。在x軸上方的面積取正號(hào);在x軸下方的面積取負(fù)號(hào)。如圖2.2言實(shí)現(xiàn)定積分計(jì)算的算法22.1利用復(fù)合梯形公式實(shí)現(xiàn)定積分的計(jì)算假設(shè)被積函數(shù)為,積分區(qū)間為,把區(qū)間等分成個(gè)小區(qū)間,各個(gè)區(qū)間的長度為,即,稱之為“步長”。根據(jù)定積分的定義及幾何意義,定積分就是求函數(shù)在區(qū)間中圖線下包圍的面積。將積分區(qū)間等分,各子區(qū)間的面積近似等于梯形的面積,面積的計(jì)算

3、運(yùn)用梯形公式求解,再累加各區(qū)間的面積,所得的和近似等于被積函數(shù)的積分值,越大,所得結(jié)果越精確。以上就是利用復(fù)合梯形公式實(shí)現(xiàn)定積分的計(jì)算的算法思想。復(fù)合梯形公式:2具體算法如下:算法一1:輸入積分區(qū)間的端點(diǎn)值和;2:輸入?yún)^(qū)間的等分個(gè)數(shù)(要求盡可能大,以保證程序運(yùn)行結(jié)果有較高的精確度);3:計(jì)算步長;4:對(duì)累加和賦初值;5:計(jì)算累加和6:算出積分值;7:輸出積分近似值,完畢。1.2.2利用Smpson公式實(shí)現(xiàn)定積分的計(jì)算假設(shè)被積函數(shù)為,積分區(qū)間為,把區(qū)間等分成個(gè)小區(qū)間,各個(gè)區(qū)間的長度為。在復(fù)合梯形公式的基礎(chǔ)上,構(gòu)造出一種加速計(jì)算積分的方法。作為一種外推算法, 它在不增加計(jì)算量的前提下提高了誤差的精

4、度。具體算法如下:算法二1:輸入積分上限和下限;2:輸入?yún)^(qū)間的等分個(gè)數(shù)(要求盡可能大,以保證程序運(yùn)行結(jié)果有較高的精確度);3:利用辛甫生公式:2,實(shí)現(xiàn)對(duì)定積分的求解(其中,均為梯形公式計(jì)算所得的結(jié)果,由此可見辛甫生公式是以梯形公式為基礎(chǔ)的);4:算出積分值;5:輸出積分近似值,完畢。1.2.3利用Guass公式實(shí)現(xiàn)定積分計(jì)算 Guass型求積公式是構(gòu)造高精度差值積分的最好方法之一。他是通過讓節(jié)點(diǎn)和積分系數(shù)待定讓函數(shù)f(x)以此取i=0,1,2.n次多項(xiàng)式使其盡可能多的能夠精確成立來求出積分節(jié)點(diǎn)和積分系數(shù)。高斯積分的代數(shù)精度是2n-1,而且是最高的。通常運(yùn)用的是-1-+1的積分節(jié)點(diǎn)和積分系數(shù),其

5、他積分域是通過變換x=(b-a)t/2 +(a+b)/2 變換到-1到1之間積分。算法三1:輸入積分上限和下限;2:利用Guass公式,求定積分 4:算出積分值;5:輸出積分近似值,完畢。3. 程序的編寫3.1程序一(左矩形公式)3.1.1源程序#include<stdio.h>#include<math.h>void main()double f(double x);/*f(x)為函數(shù)舉例,即被積函數(shù)*/int i,n;/*n為區(qū)間等分的個(gè)數(shù),應(yīng)盡可能大*/double a,b,h,s;/*a為積分下限,b為積分上限,h為步長*/printf("積分下限 a

6、:n");scanf("%lf",&a);printf("積分上限 b:n");scanf("%lf",&b);printf("區(qū)間等分個(gè)數(shù) n :n");scanf("%d",&n);h=(b-a)/n; /*步長的計(jì)算*/s=f(a)*h;for(i=1;i<n;i+)s=s+f(a+i*h)*h;printf("函數(shù) f(x) 的積分值為 s=%10.6fn",s);/*以下為被積函數(shù)的定義,即函數(shù)舉例*/double f(dou

7、ble x)double y;y=sqrt(4-x*x);return (y);3.1.2程序一的編譯運(yùn)行 被積函數(shù)為f(x)=sqrt4-(x*x)的情況先編譯,再運(yùn)行,屏幕顯示及操作如下:輸入0+回車輸入2+回車輸入1000+回車3.2程序二(中矩形公式)3.2.1源程序#include<stdio.h>#include<math.h>void main()double f(double x);/*f(x)為函數(shù)舉例,即被積函數(shù)*/int i,n;/*n為區(qū)間等分的個(gè)數(shù),應(yīng)盡可能大*/double a,b,h,s;/*a為積分下限,b為積分上限,h為步長*/prin

8、tf("積分下限 a:n");scanf("%lf",&a);printf("積分上限 b:n");scanf("%lf",&b);printf("區(qū)間等分個(gè)數(shù) n :n");scanf("%d",&n);h=(b-a)/n; /*步長的計(jì)算*/s=0.5*(f(a)+f(a+h)*h;for(i=1;i<n;i+)s=s+0.5*(f(a+i*h)+f(a+(i+1)*h)*h;printf("函數(shù) f(x) 的積分值為 s=%10.

9、6fn",s);/*以下為被積函數(shù)的定義,即函數(shù)舉例*/double f(double x)double y;y=sqrt(4-x*x);return (y);3.2.2程序二的編譯運(yùn)行 被積函數(shù)為f(x)=sqrt4-(x*x)的情況先編譯,再運(yùn)行,屏幕顯示及操作如下:輸入0+回車輸入2+回車輸入1000+回車3.3程序三(右矩形公式)3.3.1源程序#include<stdio.h>#include<math.h>void main()double f(double x);/*f(x)為函數(shù)舉例,即被積函數(shù)*/int i,n;/*n為區(qū)間等分的個(gè)數(shù),應(yīng)盡可

10、能大*/double a,b,h,s;/*a為積分下限,b為積分上限,h為步長*/printf("積分下限 a:n");scanf("%lf",&a);printf("積分上限 b:n");scanf("%lf",&b);printf("區(qū)間等分個(gè)數(shù) n :n");scanf("%d",&n);h=(b-a)/n; /*步長的計(jì)算*/s=f(a+h)*h;for(i=1;i<n-1;i+)s=s+f(a+(i+1*h)*h;printf(&quo

11、t;函數(shù) f(x) 的積分值為 s=%10.6fn",s);/*以下為被積函數(shù)的定義,即函數(shù)舉例*/double f(double x)double y;y=sqrt(4-x*x);return (y);3.3.2程序三的編譯運(yùn)行 被積函數(shù)為f(x)=sqrt4-(x*x)的情況先編譯,再運(yùn)行,屏幕顯示及操作如下:輸入0+回車輸入2+回車輸入1000+回車3.4程序四(梯形公式)3.4.1源程序#include<stdio.h>#include<math.h>void main()double f(double x);/*f(x)為函數(shù)舉例,即被積函數(shù)*/in

12、t i,n;/*n為區(qū)間等分的個(gè)數(shù),應(yīng)盡可能大*/double a,b,h,s;/*a為積分下限,b為積分上限,h為步長*/printf("積分下限 a:n");scanf("%lf",&a);printf("積分上限 b:n");scanf("%lf",&b);printf("區(qū)間等分個(gè)數(shù) n :n");scanf("%d",&n);h=(b-a)/n; /*步長的計(jì)算*/s=0.5*(f(a)+f(a+h)*h;for(i=1;i<n;i+)

13、s=s+0.5*(f(a+i*h)+f(a+(i+1)*h)*h;printf("函數(shù) f(x) 的積分值為 s=%10.6fn",s);/*以下為被積函數(shù)的定義,即函數(shù)舉例*/double f(double x)double y;y=sqrt(4-x*x);return (y);3.4.2程序四的編譯運(yùn)行 被積函數(shù)為f(x)=sqrt4-(x*x)的情況先編譯,再運(yùn)行,屏幕顯示及操作如下:輸入0+回車輸入2+回車輸入1000+回車3.5程序五(Simpson公式)3.5.1源程序#include<stdio.h>#include<math.h>vo

14、id main()double T(double x,double y,int z);double a,b,s;int n;printf("積分下限 a:n");scanf("%lf",&a);printf("積分上限 b:n");scanf("%lf",&b);printf("區(qū)間等分個(gè)數(shù) n :n");scanf("%d",&n);s=(4*T(a,b,2*n)-T(a,b,n)/3;/*利用辛甫生公式求解定積分*/printf("函數(shù)

15、f(x) 的積分值為 s=%fn",s);/*以下為復(fù)合梯形公式的定義*/double T(double x,double y,int z)double h,Tn;int i;double f(double t);h=(y-x)/z;Tn=(f(x)+f(y)/2;for(i=1;i<z;i+)Tn=Tn+f(x+i*h);Tn=Tn*h;return (Tn);/*以下為被積函數(shù)的定義,即函數(shù)舉例*/double f(double t)double s;s=sqrt(4-t*t);return (s);3.5.2程序四的編譯運(yùn)行 被積函數(shù)為f(x)=sqrt4-(x*x)的情

16、況先編譯,再運(yùn)行,屏幕顯示及操作如下:輸入0+回車輸入2+回車輸入1000+回車3.6程序六(Guass公式)3.6.1源程序#include <stdio.h>#include <math.h>#define N 3float gass_integral(float (*)(float),float,float,int);void main()float function_name(float);float a,b;printf("請(qǐng)輸入積分上限bn");scanf("%f",&b);printf("請(qǐng)輸入積分

17、下限an");scanf("%f",&a);float ans;ans=gass_integral(function_name,a,b,N);printf("ans=%f",ans);/高斯求積:代數(shù)精度為2n-1. -1-+1 之間float gass_integral(float (*func)(float x), float a,float b ,int n )/高斯點(diǎn)及其求積系數(shù)列表-float x11=0.0; float A11=2;float x22=-0.5573503,0.5573503; float A22=1,1;

18、float x33=-0.7745967,0.0,0.7745967; float A33=0.555556,0.888889,0.555556;float x44=0.3399810,-0.3399810,0.8611363,-0.8611363; float A44=0.6521452,0.6521452,0.3478548,0.3478548;float x55=0.0,0.5384693,-0.5384693,0.9061799,-0.9061799; float A55=0.5688889,0.4786287,0.4786287,0.2369269,0.2369269; /-float * p,* t;switch ( n)case 1 : p=x1;t=A1;break;case 2 : p=x2;t=A2;break;case 3 : p=x3;t=A3;break;case 4 : p=x4;t=A4;break;case 5 : p=x5;t=A5;break;default : printf("intput wrong!");float g=0;for(int i=0;i<n;i+)g+=(*func)(b-a)*pi/2+(a+b)/2)*ti;g*=(b-a)/2;return g;float funct

溫馨提示

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

評(píng)論

0/150

提交評(píng)論