《(精品)MATLAB数值积分及算例.ppt》由会员分享,可在线阅读,更多相关《(精品)MATLAB数值积分及算例.ppt(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、6.1 数值积分基本原理求求求求解解解解定定定定积积积积分分分分的的的的数数数数值值值值方方方方法法法法多多多多种种种种多多多多样样样样,如如如如简简简简单单单单的的的的梯梯梯梯形形形形法法法法、辛辛辛辛 普普普普 生生生生(Simpson)(Simpson)法法法法、牛牛牛牛 顿顿顿顿 柯柯柯柯 特特特特 斯斯斯斯(Newton-(Newton-Cotes)Cotes)法等都是经常采用的方法。法等都是经常采用的方法。法等都是经常采用的方法。法等都是经常采用的方法。它它它它们们们们的的的的基基基基本本本本思思思思想想想想都都都都是是是是将将将将整整整整个个个个积积积积分分分分区区区区间间间间a
2、,a,bb分分分分成成成成n n个个个个子区间子区间子区间子区间 x xi i,x xi i+1+1,i=1,2,ni=1,2,n,其中其中其中其中x x1 1=a a,x xn n+1+1=b b。这样求定积分问题就分解为求和问题。这样求定积分问题就分解为求和问题。这样求定积分问题就分解为求和问题。这样求定积分问题就分解为求和问题。6.2 数值积分的实现方法6.2.1 变步长辛普生法基基基基于于于于变变变变步步步步长长长长辛辛辛辛普普普普生生生生法法法法,MATLABMATLAB给给给给出出出出了了了了quadquad函函函函数数数数来来来来求定积分。该函数的调用格式为:求定积分。该函数的调
3、用格式为:求定积分。该函数的调用格式为:求定积分。该函数的调用格式为:I,n=I,n=quad(fnamequad(fname,a,b,a,b,toltol,trace),trace)其其其其中中中中fnamefname是是是是被被被被积积积积函函函函数数数数名名名名。a a和和和和b b分分分分别别别别是是是是定定定定积积积积分分分分的的的的下下下下限限限限 和和和和 上上上上 限限限限。toltol用用用用 来来来来 控控控控 制制制制 积积积积 分分分分 精精精精 度度度度,缺缺缺缺 省省省省 时时时时 取取取取toltol=0.001=0.001。tracetrace控控控控制制制制是
4、是是是否否否否展展展展现现现现积积积积分分分分过过过过程程程程,若若若若取取取取非非非非0 0则则则则展展展展现现现现积积积积分分分分过过过过程程程程,取取取取0 0则则则则不不不不展展展展现现现现,缺缺缺缺省省省省时时时时取取取取trace=0trace=0。返回参数返回参数返回参数返回参数I I即定积分值,即定积分值,即定积分值,即定积分值,n n为被积函数的调用次数。为被积函数的调用次数。为被积函数的调用次数。为被积函数的调用次数。例例例例1 1 求定积分:求定积分:求定积分:求定积分:(1)(1)建立被积函数文件建立被积函数文件建立被积函数文件建立被积函数文件fesin.mfesin.
5、m。function f=function f=fesin(xfesin(x)f=exp(-0.5*x).*sin(x+pi/6);f=exp(-0.5*x).*sin(x+pi/6);(2)(2)调用数值积分函数调用数值积分函数调用数值积分函数调用数值积分函数quadquad求定积分。求定积分。求定积分。求定积分。S,nS,n=quad(fesin,0,3*pi)=quad(fesin,0,3*pi)(S(S为返回值为返回值为返回值为返回值,n,n是调用次数是调用次数是调用次数是调用次数)6.2.2 牛顿柯特斯法基基基基于于于于牛牛牛牛顿顿顿顿柯柯柯柯特特特特斯斯斯斯法法法法,MATLABM
6、ATLAB给给给给出出出出了了了了quad8quad8函函函函数数数数来求定积分。该函数的调用格式为:来求定积分。该函数的调用格式为:来求定积分。该函数的调用格式为:来求定积分。该函数的调用格式为:I,n=quad8(fname,a,b,I,n=quad8(fname,a,b,toltol,trace),trace)其其其其中中中中参参参参数数数数的的的的含含含含义义义义和和和和quadquad函函函函数数数数相相相相似似似似,只只只只是是是是toltol的的的的缺缺缺缺省省省省值值值值取取取取1010-6-6。该该该该函函函函数数数数可可可可以以以以更更更更精精精精确确确确地地地地求求求求出
7、出出出定定定定积积积积分分分分的的的的值值值值,且且且且一一一一般般般般情情情情况况况况下下下下函函函函数数数数调调调调用用用用的的的的步步步步数数数数明明明明显显显显小小小小于于于于quadquad函函函函数数数数,从从从从而保证能以更高的效率求出所需的定积分值。而保证能以更高的效率求出所需的定积分值。而保证能以更高的效率求出所需的定积分值。而保证能以更高的效率求出所需的定积分值。例例例例2 2 求定积分求定积分求定积分求定积分:(1)(1)被积函数文件被积函数文件被积函数文件被积函数文件fx.mfx.m。function f=function f=fx(xfx(x)f=x.*sin(x).
8、/(1+cos(x).*f=x.*sin(x)./(1+cos(x).*cos(xcos(x););(2)(2)调用函数调用函数调用函数调用函数quad8quad8求定积分。求定积分。求定积分。求定积分。I=quad8(fx,0,pi)I=quad8(fx,0,pi)例例例例3 3 分别用分别用分别用分别用quadquad函数和函数和函数和函数和quad8quad8函数求定积分函数求定积分函数求定积分函数求定积分的的的的近近近近似似似似值值值值,并并并并在在在在相相相相同同同同的的的的积积积积分分分分精精精精度度度度下下下下,比比比比较较较较函函函函数数数数的的的的调调调调用次数。用次数。用次
9、数。用次数。调用函数调用函数调用函数调用函数quadquad求定积分:求定积分:求定积分:求定积分:format long;format long;fxfx=inline(exp(-xinline(exp(-x););I,nI,n=quad(fx,1,2.5,1e-10)=quad(fx,1,2.5,1e-10)调用函数调用函数调用函数调用函数quad8quad8求定积分:求定积分:求定积分:求定积分:format long;format long;fxfx=inline(exp(-xinline(exp(-x););I,nI,n=quad8(fx,1,2.5,1e-10)=quad8(fx,
10、1,2.5,1e-10)6.2.3 被积函数由一个表格定义(要求积分,但是函数没有直接给出,只是自己在做实验时得到的一组相关联的数据)在在在在MATLABMATLAB中中中中,对对对对由由由由表表表表格格格格形形形形式式式式定定定定义义义义的的的的函函函函数数数数关关关关系系系系的的的的求求求求定定定定积积积积分分分分问问问问题用题用题用题用trapz(X,Ytrapz(X,Y)函数。其中向量函数。其中向量函数。其中向量函数。其中向量X,YX,Y定义函数关系定义函数关系定义函数关系定义函数关系Y=Y=f(Xf(X)。例例例例4 4 用用用用trapztrapz函数计算定积分。函数计算定积分。函
11、数计算定积分。函数计算定积分。命令如下:命令如下:命令如下:命令如下:X=1:0.01:2.5;X=1:0.01:2.5;Y=exp(-X);%Y=exp(-X);%生成函数关系数据向量生成函数关系数据向量生成函数关系数据向量生成函数关系数据向量trapz(X,Ytrapz(X,Y)ansans=0.28579682416393 0.285796824163936.3 二重定积分的数值求解使使使使用用用用MATLABMATLAB提提提提供供供供的的的的dblquaddblquad函函函函数数数数就就就就可可可可以以以以直直直直接接接接求求求求出出出出上述二重定积分的数值解。该函数的调用格式为:
12、上述二重定积分的数值解。该函数的调用格式为:上述二重定积分的数值解。该函数的调用格式为:上述二重定积分的数值解。该函数的调用格式为:I=I=dblquad(f,a,b,c,d,tol,tracedblquad(f,a,b,c,d,tol,trace)该该该该函函函函数数数数求求求求f(x,yf(x,y)在在在在 a,bc,da,bc,d 区区区区域域域域上上上上的的的的二二二二重重重重定定定定积积积积分分分分。参数参数参数参数toltol,tracetrace的用法与函数的用法与函数的用法与函数的用法与函数quadquad完全相同。完全相同。完全相同。完全相同。例例例例5 5 计算二重定积分计
13、算二重定积分计算二重定积分计算二重定积分(1)(1)建立一个函数文件建立一个函数文件建立一个函数文件建立一个函数文件fxy.mfxy.m:function f=function f=fxy(x,yfxy(x,y)global global kiki;kiki=ki+1;%=ki+1;%kiki用于统计被积函数的调用次数用于统计被积函数的调用次数用于统计被积函数的调用次数用于统计被积函数的调用次数f=exp(-x.2/2).*sin(x.2+y);f=exp(-x.2/2).*sin(x.2+y);(2)(2)调用调用调用调用dblquaddblquad函数求解。函数求解。函数求解。函数求解。global global ki;kiki;ki=0;=0;I=dblquad(fxy,-2,2,-1,1)I=dblquad(fxy,-2,2,-1,1)kiki