數(shù)值分析-高斯—勒讓德積分公式_第1頁
數(shù)值分析-高斯—勒讓德積分公式_第2頁
數(shù)值分析-高斯—勒讓德積分公式_第3頁
數(shù)值分析-高斯—勒讓德積分公式_第4頁
數(shù)值分析-高斯—勒讓德積分公式_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上高斯勒讓德積分公式摘要:高斯勒讓德積分公式可以用較少節(jié)點(diǎn)數(shù)得到高精度的計(jì)算結(jié)果,是現(xiàn)在現(xiàn)實(shí)生活中經(jīng)常運(yùn)用到的數(shù)值積分法。然而,當(dāng)積分區(qū)間較大時(shí),積分精度并不理想。The adva ntage of Gauss-Legendre integral formula is tend to get high-precision calculational result by using fewer Gauss-points, real life is now often applied numerical integration method. But the precisi

2、on is not good when the length of integral interval is longer.關(guān)鍵字: 積分計(jì)算,積分公式,高斯勒讓德積分公式,MATLABKeyword:Integral Calculation , Integral formula ,Gauss-Legendre integral formula, Matlab引言:眾所周知,的兩大部分是微分與積分。微分實(shí)際上是求一函數(shù)的,而積分是已知一函數(shù)的導(dǎo)數(shù),求這一函數(shù)。所以,微分與積分互為逆運(yùn)算。實(shí)際上,積分還可以分為兩部分。第一種,是單純的積分,也就是已知導(dǎo)數(shù)求原函數(shù),稱為不定積分。相對而言,另一種就

3、是定積分了,之所以稱其為定積分,是因?yàn)樗e分后得出的值是確定的,是一個(gè)數(shù),而不是一個(gè)函數(shù)。計(jì)算定積分的方法很多,而高斯勒讓德公式就是其中之一。高斯積分法是精度最高的插值型數(shù)值積分,具有2n+1階精度,并且高斯積分總是穩(wěn)定。而高斯求積系數(shù),可以由Lagrange多項(xiàng)式插值系數(shù)進(jìn)行積分得到。高斯勒讓德求積公式是構(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ù),其他積分域是通過變換x=(b-a)t/2&

4、#160;  +(a+b)/2 變換到-1到1之間積分。1. 現(xiàn)有的方法和理論1.1高斯 勒讓德求積公式在高斯求積公式(4.5.1)中,若取權(quán)函數(shù),區(qū)間為,則得公式 我們知道勒讓德多項(xiàng)式是區(qū)間上的正交多項(xiàng)式,因此,勒讓德多項(xiàng)式的零點(diǎn)就是求積公式(上式)的高斯點(diǎn)形如(上式)的高斯公式特別地稱為高斯勒讓德求積公式若取的零點(diǎn)做節(jié)點(diǎn)構(gòu)造求積公式令它對準(zhǔn)確成立,即可定出這樣構(gòu)造出的一點(diǎn)高斯勒讓德求積公式是中矩形公式再取的兩個(gè)零點(diǎn)構(gòu)造求積公式令它對都準(zhǔn)確成立,有由此解出,從而得到兩點(diǎn)高斯勒讓德求積公式三點(diǎn)高斯勒讓德求積公式的形式是如表列出高斯勒讓德求積公式的節(jié)點(diǎn)和系數(shù)00.2.10.1.20.0

5、.0.0.30.0.0.0.40.0.0.0.0.0.公式(4.5.9)的余項(xiàng)由(4.5.8)得,這里是最高項(xiàng)系數(shù)為的勒讓德多項(xiàng)式,由(3.2.6)及(3.2.7)得 當(dāng)時(shí),有它比辛普森公式余項(xiàng)還小,且比辛普森公式少算一個(gè)函數(shù)值當(dāng)積分區(qū)間不是,而是一般的區(qū)間時(shí),只要做變換可將化為,這時(shí) 對等式右端的積分即可使用高斯勒讓德求積公式1.2復(fù)化Gauss-Legendre求積公式將被積區(qū)間m等分, 記, 作變換在每個(gè)小區(qū)間上應(yīng)用Gauss-Legendre公式, 累加即得復(fù)化Gauss-Legendre求積公式不妨設(shè)則有:Gauss點(diǎn)個(gè)數(shù)時(shí),Gauss點(diǎn)個(gè)數(shù)時(shí),總結(jié)復(fù)化Gauss-Legendre求

6、積過程如下:1. 分割區(qū)間, 記錄區(qū)間端點(diǎn)值;2. 通過查表或求解非線性方程組, 在所有小區(qū)間上, 將Gauss系數(shù)和Gauss點(diǎn)的值代入變量替換后的公式;3. 將所有區(qū)間的結(jié)果累加, 即得到整個(gè)區(qū)間上的積分近似值.針對Gauss點(diǎn)個(gè)數(shù)和的復(fù)化Gauss-Legendre求積公式編寫的一個(gè)簡單的MATLAB函數(shù) compgauss() 如下: function = compgauss(a, b, n)% Composite Gauss Integration% Equation Type: n=2, n=3% Coded by Nan.Xiao 2010-05-25% Step.1 Divid

7、e Interval% Step.2 Calculate% Step.3 Sum Resultsformat longf = (x) exp(x).*sin(x);h=(b-a)/n;xk=zeros(n+1,1);xk(1,1)=a;xk(n+1,1)=b;fk1=zeros(n,1);fk2=zeros(n,1);for i=1:n-1 xk(i+1,1)=a+h*i;endfor j=1:n fk1(j)=f(xk(j)+xk(j+1)/2+(h/2)*(-1/sqrt(3)+. f(xk(j)+xk(j+1)/2+(h/2)*(1/sqrt(3);endfor r=1:n fk2(r)

8、=(5/9)*f(xk(r)+xk(r+1)/2+(h/2)*(-sqrt(15)/5)+. (8/9)*f(xk(r)+xk(r+1)/2+(h/2)*(0)+. (5/9)*f(xk(r)+xk(r+1)/2+(h/2)*(sqrt(15)/5);endmysum1=h*sum(fk1)/2;mysum2=h*sum(fk2)/2;disp('Result of 2 Nodes:')disp(mysum1);disp('Result of 3 Nodes:')disp(mysum2);end1.3龍貝格,三點(diǎn),五點(diǎn)以及變步長高斯勒讓德求積法以下是關(guān)于龍貝格,

9、三點(diǎn),五點(diǎn)以及變步長高斯勒讓德之間精度的相互比較#include <iostream.h> #include <math.h> #include <iomanip.h> #define Precision1 0.1 # define e         2. #define  MAXRepeat 10   double function

10、60;(double x)   double s; s=1/x; return s; double Romberg(double a,double b,double f(double x)   int m,n,k;  double yMAXRepeat,h,ep,p,xk,s,q; h=b-a;  y0=h*(f(a)+f(b)/2.0;/計(jì)算T1(h)=1/2(b-a)(f(a)+f(b);  m=1; n=1; ep=Pr

11、ecision1+1;  while(ep>=Precision1)&&(m<MAXRepeat)  p=0.0; for(k=0;k<n;k+)  xk=a+(k+0.5)*h;  p=p+f(xk);                    p=(y0+h*p)/2.0;  /Tm(h/2),變步長梯形求積公式  

12、;s=1.0; for(k=1;k<=m;k+) s=4.0*s;/ pow(4,m) q=(s*p-yk-1)/(s-1.0); yk-1=p; p=q;  ep=fabs(q-ym-1);  m=m+1;             ym-1=q; n=n+n;   /  2 4 8 16    h=h/2.0;/二倍分割區(qū)間 re

13、turn q; double ThreePointGaussLegendre(double a,double b,double f(double x)  double x,w;  static double X3=-sqrt(15)/5.0,0,sqrt(15)/5.0;   static double L3=5/9.0,8/9.0,5/9.0;     w=0.0;   for(int

14、 i=0;i<3;i+)                         x=(b-a)*Xi+(b+a)/2.0;                    

15、0;      w=w+f(x)*Li;                return w; double FivePointGaussLegendre(double a,double b,double f(double x)   double x,w;     stat

16、ic double X5=-0.,-0.,0,0.,0.;     static double L5=0.,0.,0.,0.,0.;   w=0.0;     for(int i=0;i<5;i+)                      &

17、#160;  x=(b-a)*Xi+(b+a)/2.0;                              w=w+f(x)*Li;/每一次小區(qū)間利用勒讓德公式計(jì)算的結(jié)果           

18、  return w; double FivePointPrecisionGaussLegendre(double a,double b,double f(double x)   int m,i,j;     double s,p,ep,h,aa,bb,w,x,g;     static double X5=-0.,-0.,0,0.,0.;   m=1; &

19、#160; h=b-a;     s=fabs(0.001*h); p=1.0e+35;    ep=Precision1+1;    while(ep>=Precision1)&&(fabs(h)>s)           g=0.0;         for(i=0;i<

20、m;i+)                     aa=a+i*h;            bb=aa+h;             w=0.0;  

21、0;       for(j=0;j<=4;j+)                           x=(bb-aa)*Xj+(bb+aa)/2.0;          

22、      w=w+f(x)*Lj;                       g=g+w;/各個(gè)區(qū)間計(jì)算結(jié)果之和相加                   &

23、#160; g=g*h/2.0;             ep=fabs(g-p)/(1.0+fabs(g);/計(jì)算精度             p=g;             m=m+1;    

24、        h=(b-a)/m;/分割區(qū)間             return g; main()     double a,b,s;     cout<<"請輸入積分下限:"     cin>>a;  

25、60;  cout<<"請輸入積分上限:"     cin>>b;     cout<<"的真值為:"<<endl;     cout<<"1."<<endl;     /*龍貝格求積*/     s=Romberg( a, b

26、, function);     cout<<"龍貝格求積公式:"<<endl;     cout<<setiosflags(ios:fixed)<<setprecision(14)<<s<<endl;     /*三點(diǎn)求積公式*/     s=ThreePointGaussLegendre( a, b, 

27、function);     cout<<"三點(diǎn)求積公式:"<<endl;     cout<<setiosflags(ios:fixed)<<setprecision(14)<<s<<endl;     /*五點(diǎn)求積公式*/     s=FivePointGaussLegendre( a, b, function)

28、;     cout<<"五點(diǎn)求積公式"<<endl;     cout<<setiosflags(ios:fixed)<<setprecision(14)<<s<<endl;      s=FivePointPrecisionGaussLegendre(a, b,function);     cout<<&quo

29、t;控制精度五點(diǎn)求積公式"<<endl;     cout<<setiosflags(ios:fixed)<<setprecision(14)<<s<<endl;     return 0; 2. 高斯勒讓德求積的程序2.1三點(diǎn)高斯勒讓德公式的代碼function gl=f(str,a,b)x=zeros(3,1);y=zeros(3,1);x(1)=-sqrt(15)/5;x(2)=0;x(3)=sqrt(15)/5;for i=1:3 t=(b-a)/2*x(i)+(a+b)/2; y(i)=eval(str);%exp(t)*sin(t);%此處為求積的函數(shù),t為自變量endgl=5/9*y(1)+8/9*y(2)+5/9*y(3);上面的代碼保存為f.m文件,調(diào)用的時(shí)候如下f('t*2',-1,1)f('exp(t)*sin(t)',1,3)其中第一個(gè)參數(shù)為求積分的表達(dá)式,第二三個(gè)參數(shù)分別

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論