数值分析高斯—勒让德积分公式课程设计.docx

上传人:l*** 文档编号:63388269 上传时间:2022-11-24 格式:DOCX 页数:11 大小:15.15KB
返回 下载 相关 举报
数值分析高斯—勒让德积分公式课程设计.docx_第1页
第1页 / 共11页
数值分析高斯—勒让德积分公式课程设计.docx_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《数值分析高斯—勒让德积分公式课程设计.docx》由会员分享,可在线阅读,更多相关《数值分析高斯—勒让德积分公式课程设计.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、数值分析高斯勒让德积分公式课程设计 高斯勒让德积分公式 摘要: 高斯勒让德积分公式可以用较少节点数得到高精度的计算结果,是现在现实生活中常常运用到的数值积分法。然而,当积分区间较大时,积分精度并不志向。 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

2、 precision is not good when the length of integral interval is longer. 关键字: 积分计算,积分公式,高斯勒让德积分公式,MATLAB Keyword: Integral Calculation , Integral formula ,Gauss-Legendre integral formula, Matlab 引言: 众所周知,微积分的两大部分是微分与积分。微分事实上是求一函数的导数,而积分是已知一函数的导数,求这一函数。所以,微分与积分互为逆运算。 事实上,积分还可以分为两部分。第一种,是单纯的积分,也就是已知导数求原

3、函数,称为不定积分。相对而言,另一种就是定积分了,之所以称其为定积分,是因为它积分后得出的值是确定的,是一个数,而不是一个函数。计算定积分的方法许多,而高斯勒让德公式就是其中之一。高斯积分法是精度最高的插值型数值积分,具有2n+1阶精度,并且高斯积分总是稳定。而高斯求积系数,可以由Lagrange多项式插值系数进行积分得到。高斯勒让德求积公式是构造高精度差值积分的最好方法之一。他是通过让节点和积分系数待定让函数f(x)以此取i=0,1,2.n次多项式使其尽可能多的能够精确成立来求出积分节点和积分系数。高斯积分的代数精度是2n-1,而且是最高的。通常运用的是(-1,1)的积分节点和积分系数,其他

4、积分域是通过变换x=(b-a)t/2 +(a+b)/2 变换到-1到1之间积分。 1. 现有的方法和理论 1.1高斯 勒让德求积公式 在高斯求积公式(4.5.1)中,若取权函数,区间为,则得公式 我们知道勒让德多项式是区间上的正交多项式,因此,勒让德多项式的零点就是求积公式(上式)的高斯点形如(上式)的高斯公式特殊地称为高斯勒让德求积公式 若取的零点做节点构造求积公式 令它对精确成立,即可定出这样构造出的一点高斯勒让德求积公式是中矩形公式再取的两个零点构造求积公式 令它对都精确成立,有 由此解出,从而得到两点高斯勒让德求积公式 三点高斯勒让德求积公式的形式是 如表列出高斯勒让德求积公式的节点和

5、系数 0 0.0000000 2.0000000 1 0.5773503 1.0000000 2 0.7745967 0.0000000 0.5555556 0.8888889 3 0.8611363 0.3399810 0.3478548 0.6521452 4 0.9061798 0.5384693 0.0000000 0.2369269 0.4786287 0.5688889 公式(4.5.9)的余项由(4.5.8)得 , 这里是最高项系数为的勒让德多项式,由(3.2.6)及(3.2.7)得 当时,有 它比辛普森公式余项还小,且比辛普森公式少算一个函数值 当积分区间不是,而是一般的区间时

6、,只要做变换 可将化为,这时 对等式右端的积分即可运用高斯勒让德求积公式 1.2复化Gauss-Legendre求积公式 将被积区间m等分, 记, 作变换 在每个小区间上应用Gauss-Legendre公式, 累加即得复化Gauss-Legendre求积公式 不妨设 则有: Gauss点个数时, Gauss点个数时, 总结复化Gauss-Legendre求积过程如下: 1. 分割区间, 记录区间端点值; 2. 通过查表或求解非线性方程组, 在全部小区间上, 将Gauss系数和Gauss点的值代入变量替换后的公式; 3. 将全部区间的结果累加, 即得到整个区间上的积分近似值. 针对Gauss点个

7、数和的复化Gauss-Legendre求积公式编写的一个简洁的MATLAB函数 compgauss() 如下: function = compgauss(a, b, n) % Composite Gauss Integration % Equation Type: n=2, n=3 % Coded by Nan.Xiao 2010-05-25 % Step.1 Divide Interval % Step.2 Calculate % Step.3 Sum Results format long f = (x) exp(x).*sin(x); h=(b-a)/n; xk=zeros(n+1,1)

8、; 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; end for 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); end for r=1:n fk2(r)=(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)+x

9、k(r+1)/2+(h/2)*(sqrt(15)/5); end mysum1=h*sum(fk1)/2; mysum2=h*sum(fk2)/2; disp(Result of 2 Nodes:) disp(mysum1); disp(Result of 3 Nodes:) disp(mysum2); end 1.3龙贝格,三点,五点以及变步长高斯勒让德求积法 以下是关于龙贝格,三点,五点以及变步长高斯勒让德之间精度的相互比较 #include<iostream.h> #include<math.h> #include<iomanip.h> #define

10、Precision10.000000000001 #definee2.71828183 #defineMAXRepeat10 doublefunction(doublex) doubles; s=1/x; returns; doubleRomberg(doublea,doubleb,doublef(doublex) intm,n,k; doubleyMAXRepeat,h,ep,p,xk,s,q; h=b-a; y0=h*(f(a)+f(b)/2.0;/计算T1(h)=1/2(b-a)(f(a)+f(b); m=1; n=1; ep=Precision1+1; while(ep>=Pre

11、cision1)(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),变步长梯形求积公式 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;/24816 h=h/2.0;/二倍分割区间 returnq; doubleThreePointGaussLegendre(doublea,

12、doubleb,doublef(doublex) doublex,w; staticdoubleX3=-sqrt(15)/5.0,0,sqrt(15)/5.0; staticdoubleL3=5/9.0,8/9.0,5/9.0; w=0.0; for(inti=0;i<3;i+) x=(b-a)*Xi+(b+a)/2.0; w=w+f(x)*Li; returnw; doubleFivePointGaussLegendre(doublea,doubleb,doublef(doublex) doublex,w; staticdoubleX5=-0.9061798459,-0.5384693

13、101,0,0.5384693101,0.9061798459; staticdoubleL5=0.2369268851,0.4786286705,0.5688888889,0.4786286705,0.2369268851; w=0.0; for(inti=0;i<5;i+) x=(b-a)*Xi+(b+a)/2.0; w=w+f(x)*Li;/每一次小区间利用勒让德公式计算的结果 returnw; doubleFivePointPrecisionGaussLegendre(doublea,doubleb,doublef(doublex) intm,i,j; doubles,p,ep,

14、h,aa,bb,w,x,g; staticdoubleX5=-0.9061798459,-0.5384693101,0,0.5384693101,0.9061798459; m=1; 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<m;i+) aa=a+i*h; bb=aa+h; w=0.0; for(j=0;j<=4;j+) x=(bb-aa)*Xj+(bb+aa)/2.0; w=w+f(x)*Lj; g=g+w;

15、/各个区间计算结果之和相加 g=g*h/2.0; ep=fabs(g-p)/(1.0+fabs(g);/计算精度 p=g; m=m+1; h=(b-a)/m;/分割区间 returng; main() doublea,b,s; cout<<“请输入积分下限:“; cin>>a; cout<<“请输入积分上限:“; cin>>b; cout<<“的真值为:“<<endl; cout<<“1.098612289“<<endl; /*龙贝格求积*/ s=Romberg(a,b,function); cou

16、t<<“龙贝格求积公式:“<<endl; cout<<setiosflags(ios:fixed)<<setprecision(14)<<s<<endl; /*三点求积公式*/ s=ThreePointGaussLegendre(a,b,function); cout<<“三点求积公式:“<<endl; cout<<setiosflags(ios:fixed)<<setprecision(14)<<s<<endl; /*五点求积公式*/ s=FiveP

17、ointGaussLegendre(a,b,function); cout<<“五点求积公式“<<endl; cout<<setiosflags(ios:fixed)<<setprecision(14)<<s<<endl; s=FivePointPrecisionGaussLegendre(a,b,function); cout<<“限制精度五点求积公式“<<endl; cout<<setiosflags(ios:fixed)<<setprecision(14)<<

18、;s<<endl; return0; 2. 高斯勒让德求积的程序 2.1三点高斯勒让德公式的代码 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);%此处为求积的函数,t为自变量 end gl=5/9*y(1)+8/9*y(2)+5/9*y(3); 上面的代码保存为f.m文件,调用的时候如下 f(t*2,-1,1) f(

19、exp(t)*sin(t),1,3) 其中第一个参数为求积分的表达式,其次三个参数分别为 积分的上下限。 2.2高斯-勒让德数值积分Matlab代码 function ql,Ak,xk=guasslegendre(fun,a,b,n,tol) if nargin=1 a=-1;b=1;n=7;tol=1e-8; elseif nargin=3 n=7;tol=1e-8; elseif nargin=4 tol=1e-8; elseif nargin=2|nargin>5 error(The Number of Input Arguments Is Wrong!); end syms x

20、p=sym2poly(diff(x2-1)(n+1),n+1)/(2n*factorial(n); tk=roots(p); Ak=zeros(n+1,1); for i=1:n+1 xkt=tk; xkt(i)=; pn=poly(xkt); fp=(x)polyval(pn,x)/polyval(pn,tk(i); Ak(i)=quadl(fp,-1,1,tol); % 求积系数 end xk=(b-a)/2*tk+(b+a)/2; fun=fcnchk(fun,vectorize); fx=fun(xk)*(b-a)/2; ql=sum(Ak.*fx); 3.数值试验 3.1 用4点(n

21、=3)的高斯勒让德求积公式计算 . 解: 先将区间化为,由(1) .(1) 有 . 依据表4-7中n=3的节点及系数值可求得 . ( 精确值 ) 3.2用的高斯-勒让德公式计算积分 解: 令,则 用的高斯勒让德公式计算积分 用的高斯勒让德公式计算积分 3.2用四个节点的高斯勒让德求积公式计算定积分,计算过程保留4位小数 解 : 高斯勒让德求积公式只求积分区间为1,1上的积分问题需作变换,令 ,当x=1时,u=1;当x=0时,u=1于是, 3. 总结 高斯勒让德求积公式对定积分的计算拥有高精度的特点,但是这只存在于积分区间在-1,1上,区间的变大会导致精度的降低。因此,找寻精度更高,加速更快的算法是必要的。 参考文献 1数值计算 张军、林瑛、钟竞辉 清华高校出版社 2008 6 17 2数值分析 陈晓江、黄樟灿 科学出版社 2010 7 10 3数值分析原理吴勃英 科学出版社 2009 7 23 4 复化两点Gauss-Legendre求积公式的外推算法 桂林航天工业高等专科学校学报2007年03期

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁