数值积分与数值微分matla.ppt
MATLAB数值积分与数值微分,MATLAB数值积分 MATLAB数值微分,2,数学研究,积分的概念起源极早,公元前3世纪左右正是希腊数学鼎盛期,尤多克斯(Eudoxus)、欧几里德、阿基米德,先后用“穷尽法”算出许多图形的面积、立体的体积及曲线的长度。例如,阿基米德用圆的内接正多变形周长来逼近圆周长。这种逼近法要不断地用到开方,所以过程非常繁杂。但这个原理却发展成为积分,3,数学研究,裁缝数学家:数值积分的“辛普森法则”的主角是英国著名数学家;从小就帮父亲缝衣服,没受过正规教育。有次他搞到一本算命书和一本数学书;于是一边当裁缝,一边算命和教数学。1736年,他出了一本微积分教科书,大获成功;完成了从裁缝到数学家的转变。有趣的是,让他千古流芳的辛普森法则并非他发明的,为什么要作数值积分,积分是重要的数学工具,是微分方程、概率论等的基础;在实际问题中有直接应用。,对于用离散数据或者图形表示的函数,(可以先做插值然后积分;或者直接利用点做数值积分),计算积分只有求助于数值方法。,数 值 积 分 的 基 本 思 路,回 忆 定 积 分 的 定 义,各种数值积分方法研究的是,使得既能保证一定精度,计算量又小。,n充分大时In就是I的数值积分,(计算功效:算得准,算得快),数值积分基本思想,将积分区间细分,在每一个小区间内用简单函数代替复杂函数进行积分,这就是数值积分的思想,用代数插值多项式去代替被积函数发f(x)进行积分,三个求积分公式,梯形公式,y=f(x),y,x,a,b,y=f(x),a,b,y,x,(a+b)/2,中矩形公式,y=f(x),a,b,a,b,矩形法数字积分的演示程序rsums,MATLAB中有一个矩形法数字积分的演示程序rsums,可以作一个对比。键入rsums(115-x.2,0,10)就得到右图。图中表示了被积函数的曲线和被步长分割的小区间,并按各区间中点的函数值构成了各个窄矩形面积。用鼠标拖动图下方的滑尺可以改变步长的值,图的上方显示的是这些矩形面积叠加的结果。,y=f(x),y,a,b,Simpson公式,(a+b)/2,a,b,(a+b)/2,用二次函数来近似,2.辛普森(Simpson)公式(抛物线公式),梯形公式相当于用分段线性插值函数代替,每段要用相邻两小区间端点的三个函数值,提高精度,数值积分,区间数必须为偶数,数值积分的实现方法,1变步长辛普生法基于变步长辛普生法,MATLAB给出了quad函数来求定积分。该函数的调用格式为:I,n=quad(fun,a,b,tol,trace)其中fun是被积函数名。a和b分别是定积分的下限和上限。tol用来控制积分精度,缺省时取tol=10-6。返回参数I即定积分值,n为被积函数的调用次数。,注意:fun.m中应以自变量为矩阵的形式输入(点运算),用MATLAB 作数值积分,Gauss-Lobatto公式,I,fn=quadl(fun,a,b),用自适应Gauss-Lobatto公式计算 tol为绝对误差,缺省时为10-6,该函数可以更精确地求出定积分的值,且一般情况下函数调用的步数明显小于quad函数,从而保证能以更高的效率求出所需的定积分值。,例1 求定积分:(1)建立被积函数文件fesin.m。function f=fesin(x)f=exp(-0.5*x).*sin(x+pi/6);(2)调用数值积分函数quad求定积分。S,n=quad(fesin,0,3*pi)S=0.9008n=77,也可不建立关于被积函数的函数文件,而使用匿名求解,命令如下:g=(x)(exp(-0.5*x).*sin(x+pi/6);%定义语句函数S,n=quad(g,0,3*pi)%不用加引号 S=0.9008n=77,例2 分别用quad函数和quadl函数求定积分的近似值,并在相同的积分精度下,比较函数的调用次数。1.调用函数quad求定积分:clc,clearformat long;fx=(x)(exp(-x);I,n=quad(fx,1,2.5,1e-10)I=0.28579444254766n=65,2.调用函数quadl求定积分:clc,clearformat long;fx=(x)(exp(-x);I,n=quad(fx,1,2.5,1e-10)I=0.28579444254881n=18,梯形积分法在科学实验和工程应用中,函数关系往往是不知道的,只有实验测定的一组样本点和样本值,这时,人们就无法使用quad等函数计算其定积分。在MATLAB中,对由表格形式定义的函数关系的求定积分问题用梯形积分函数trapz。,被积函数由一个表格定义梯形积分法 在MATLAB中,对由表格形式定义的函数关系的求定积分问题用trapz(X,Y)函数。其中向量X,Y定义函数关系Y=f(X)。例4 用trapz函数计算定积分。命令如下:clc,clearX=1:0.01:2.5;Y=exp(-X);%生成函数关系数据向量trapz(X,Y)ans=0.28579682416393,数值积分,先看一个例子:现要根据瑞士地图计算其国土面积。于是对地图作如下的测量:以西东方向为横轴,以南北方向为纵轴。(选适当的点为原点)将国土最西到最东边界在x轴上的区间划取足够多的分点xi,在每个分点处可测出南北边界点的对应坐标y1,y2。用这样的方法得到下表根据地图比例知18mm相当于40km,试由上表计算瑞士国土的近似面积。(精确值为41288km2)。,数值积分,数值积分,解题思路:数据实际上表示了两条曲线,实际上我们要求由两曲线所围成的图形的面积。解此问题的方法是数值积分的方法。,x=7.0,10.5,13.0,17.5,34.0,40.5,44.5,48.0,56.0,61.0,68.5,76.5,80.5,91.0,96,101,104,106.5,111.5,118,123.5,136.5,142,146,150,157,158;y1=44,45,47,50,50,38,30,30,34,36,34,41,45,46,43,37,33,28,32,65,55,54,52,50,66,66,68;y2=44,59,70,72,93,100,110,110,110,117,118,116,118,118,121,124,121,121,121,122,116,83,81,82,86,85,68;plot(x,y1,r,x,y2,g),数值积分,z1=trapz(x,y1);z2=trapz(x,y2);z=z2-z1;area=(z/(18*18)*40*40,矩形域上计算二重积分的命令:,dblquad(fun,xmin,xmax,ymin,ymax,tol),广义积分、二重和三重积分,长方体上计算三重积分的命令:,triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol),例5 计算二重定积分(1)建立一个函数文件fxy.m:function f=fxy(x,y)f=exp(-x.2/2).*sin(x.2+y);(2)调用dblquad函数求解I=dblquad(fxy,-2,2,-1,1)I=1.57449318974494,clearf=(x,y)(exp(-x.2/2).*sin(x.2+y);I=dblquad(f,-2,2,-1,1)I=1.5745,例6 计算三重定积分命令如下:fxyz=(x,y,z)(4*x.*z.*exp(-z.*z.*y-x.*x);triplequad(fxyz,0,pi,0,pi,0,1,1e-7)ans=1.7328,2 数值微分2.1 数值差分与差商任意函数f(x)在x点的导数是通过极限定义的:,如果去掉上述等式右端的h0的极限过程,并引进记号:分别称为函数在x点处以h(h0)为步长的向前差分、向后差分和中心差分。,当步长h充分小时,有 分别称为函数在x点处以h(h0)为步长的向前差商、向后差商和中心差商。当步长h(h0)充分小时,函数f在点x的微分接近于函数在该点的任意一种差分,而f在点x的导数接近于函数在该点的任意一种差商。,在MATLAB中,没有直接提供求数值导数的函数,只有计算向前差分的函数diff,其调用格式为:DX=diff(X):计算向量X的向前差分 DX(i)=X(i+1)-X(i),i=1,2,n-1。DX=diff(X,n):计算X的n阶向前差分 例如,diff(X,2)=diff(diff(X)。DX=diff(A,n,dim):计算矩阵A的n阶差分dim=1时(缺省状态),按列计算差分(相邻两行相减);dim=2,按行计算差分。,例 求向量sin(X)的13阶差分。设X由0,2间均匀分布的10个点组成。命令如下:X=linspace(0,2*pi,10);Y=sin(X);DY=diff(Y);%计算Y的一阶差分D2Y=diff(Y,2);%计算Y的二阶差分,也可用命令diff(DY)计算D3Y=diff(Y,3);%计算Y的三阶差分,也可用diff(D2Y)或diff(DY,2),例8 设用不同的方法求函数f(x)的数值导数,并在同一个坐标系中做出f(x)的图像。用两种方法:1、直接求f(x)在假设点的数值导数;2、求出g(x)=f(x)的表达式 然后求f(x)在假设点的数值导数。,例 用不同的方法求函数f(x)的数值导数,并在同一个坐标系中做出f(x)的图像。程序如下:f=(x)(sqrt(x.3+2*x.2-x+12)+(x+5).(1/6)+5*x+2);g=(x)(3*x.2+4*x-1)./sqrt(x.3+2*x.2-x+12)/2+1/6./(x+5).(5/6)+5);x=-3:0.01:3;dx=diff(f(x,3.01)/0.01;%直接对f(x)求数值导数gx=g(x);%求函数f的导函数g在假设点的导数plot(x,dx,.,x,gx,-);%作图,