MATLAB-ch013(数值计算-微积分.ppt
《MATLAB-ch013(数值计算-微积分.ppt》由会员分享,可在线阅读,更多相关《MATLAB-ch013(数值计算-微积分.ppt(27页珍藏版)》请在三一办公上搜索。
1、第13讲 数值计算微积分,张建瓴,13.1 数值积分,在工程教学和应用中,除了进行数据逼近外,还要求逼近曲线下面的面积,这就是积分问题。,一、数值积分方法,典型的数值积分方法有:用常数(0阶多项式)近似函数矩形法;用直线(一阶多项式)近似函数曲线的梯形法;用抛物线(二阶多项式)近似函数曲线的Simpson法,以及用一般多项式近似函数的Romberg法等。y=sin(x3)*sqrt(x)x求y,表13-1列出了函数数值积分的一些命令。,表13-1 函数数值积分的命令,常见的一元数值积分命令,MATLAT提供了在有限区间内,数值计算某函数下的面积(积分)的三种函数:trapz,quad和quad
2、8。,二、一(元)维数值积分,1、trapz函数函数trapz通过计算若干梯形面积的和来近似某函数的积分,这些梯形如图13-1所示,是通过使用函数humps的数据点形成。,图13-2 较好的梯形逼近曲线下的面积示意图从图中可明显地看出,单个梯形的面积在某一段欠估计了函数真正的面积,而在其它段又过估计了函数的真正面积。如同线性插值,当梯形数目越多时,函数的近似面积越准确。例如,在图13-1中,如果我们大致增加一倍数目的梯形,我们得到如下(如图13-2)所示的更好的近似结果。,trapz 函数,对如上所示的两个曲线,用trapz在区间-1x=-1:0.17:2;%rough approximati
3、ony=humps(x);area=trapz(x,y)%call trapz just like the plot commandarea=25.9174,trapz 函数的应用,x=-1:0.07:2;%better approximationy=humps(x);area=trapz(x,y)area=26.6243上述两个结果不同是基于对图形的观察,粗略近似可能低估了实际面积。除非特别精确,没有准则说明哪种近似效果更好。,trapz 函数的应用,MATLAB提供的求积函数命令quad和quad8在使用时,其递推的层次限制在十层以内,达到这个限制则会提示警告信息,并且这两个函数命令都不能
4、解决可积的奇异值问题,例如,求解。,quad函数和quad8函数,函数quad和quad8完整的调用格式为:(1)q=quad(fun,a,b,tol,trace,pl,p2,)采用Simpson法计算积分;(2)q=quad8(fun,a,b,tol,trace,p1,p2,)采用八样条Newton-Cotes公式求数值积分。其中:fun是被积函数,可以是表达式字符串、内联函数、M函数文件名,被积函数的自变量,一般采用字母x;a、b分别是积分的上、下限,都是确定的值;,quad和quad8函数调用格式,tol是一个二元向量,它的第一个元素用来控制相对误差,第二个元素用来控制绝对误差,缺省时积
5、分的相对精度为0.001;trace如果取非零值时,将以动态图形的形式展现积分的整个过程,若取零值,则不画图,其缺省值是0;pl和p2是向被积函数传递的参数。在上面的调用格式中,前三个输入参数是调用时必须的,而后面的输入参数可缺省。,quad和quad8的参数,MATLAB的函数quad和quad8是基于数学上的正方形概念来计算函数的面积。为获得更准确的结果,两个函数在所需的区间都要计算被积函数。与简单的梯形比较,这两个函数进行更高阶的近似,而且quad8比quad更精确。这两个函数的调用方法与fzero相同,即area=quad(humps,-1,2)%find area between-1
6、 and 2area=26.3450,quad和quad8函数的调用,area=quad8(humps,-1,2)area=26.3450注意:这两个函数返回完全相同的估计面积,而且这个估计值在两个trapz面积的估计值之间。,quad和quad8函数的调用,求函数的数值积分(1)建立函数funqfunction y=funq(x)y=x.3+x.2+2;(2)对被积函数funq进行数值积分q=quad(funq,-1,1,le-4)使用quad命令求数值积分q=4.6667,例13-1 example13_1.m,q8=quad8(funq,-1,1,le-4,1)用quad8命令求数值积分
7、q8=4.6667程序的运行结果显示出积分的过程如图13-3所示。,例13-1,一元函数积分中存在的问题,同样存在于多重积分中。1、积分限为常数的二重积分多重积分使用函数dblquad,其完整的调用格式为:result=dblquad(fun,inmin,inmax,outmin,outmax,tol,method)其中:输入参数fun是被积函数,可以直接用字符串内联函数或M函数文件表达,但不论什么形式,该被积函数应有两个变量,即内变量和外变量。内变量接受向量输入,外变量接受标量输入。被积函数的输出是与内变量同长的向量。,三、多重数值积分,输入参数inmin,inmax是内变量的下限和上限;o
8、utmin、outmax是外变量的下限和上限;tol的含义与命令quad中的情况相同;method是积分方法选项,如“quad”和“quad8”等。注意:该命令不适用于内积分区间上、下限为函数的情况。,dblquad函数的参数,求积分上下限都为常数的二重积分,被积函数为y*sin(x)+s*cos(y),其中x的取值范围是到2,y的取值范围是0到。(1)建立名为integrnd的M文件 fimction out=integrnd(x,y)out=y*sin(x)+x*cos(y)(2)用函数dblquad命令来求integrnd的二重积分 result=dblquad(integrnd,pi,
9、2*pi,0,pi)result=-9.8698,例13-6 example13_6.m,对于内积分上下限是外积分变量的函数的积分问题,求解过程较为麻烦。一般方法都是先求出,然后再求。,2、内积分上下限为函数的二重积分,【例13-10】计算。(1)编写内积分区间上下限的M函数文件x_low.mfunction f=x_low(y)f=sqrt(y);(2)编写被积函数 被积函数函数采用内联函数ff=inline(x.2+y.2,x,y)表示。(3)被积函数用内联函数表达时,运行以下指令,即得结果ff=inline(x.2+y.2,x,y);%被积函数的内联函数表达SS=double_int(f
10、f,x_low,2,1,4)SS=9.5810(4)本题用符号计算很容易获得高精度解Ssym=vpa(int(int(x2+y2,x,sqrt(y),2),y,1,4)Ssym=9.580952380952381,例13-10 example13_10.m,1、“完整”离散序列的数值卷积(1)求和运算上下界的确定(2)卷积C(n)“非平凡”区间的确定(3)“截尾”离散序列的数值卷积(4)多项式乘法与离散卷积的算法同构(5)连续时间函数的数值卷积(6)“零阶”近似算法(7)“积分-插值”混合算法(8)SIMULINK卷积法【例13-12】example12_12.m 有序列和。(A)求这两个完整
11、序列的卷积,并图示。(B)假设A(7)及其后的4个非零值未知,而成为截尾序列,求卷积并图示。%完整序列卷积a=ones(1,10);n1=3;n2=12;%完整A(n)序列的非平凡值和区间端点b=ones(1,8);n3=2;n4=9;%完整B(n)序列的非平凡值和区间端点c=conv(a,b);nc1=n1+n3;nc2=n2+n4;%计算卷积和确定卷积非平凡区间端点kc=nc1:nc2;%构成非平凡区间的序号自变量%截尾序列卷积aa=a(1:6);nn1=3;nn2=8;%截尾A(n)序列的非平凡值和区间端点cc=conv(aa,b);ncc1=nn1+n3;图13-7“完整”序列卷积和“
12、截尾”序列卷积nx=nn2+n4;%“非平凡”区间右端点ncc2=min(nn1+n4,nn2+n3);%截尾序列卷积被正确计算区间的右端点kx=(ncc2+1):nx;kcc=ncc1:ncc2;N=length(kcc);stem(kcc,cc(1:N),r,filled)axis(nc1-2,nc2+2,0,10),grid,hold onstem(kc,c,b),stem(kx,cc(N+1:end),g),hold off【例13-8】求函数u(t)=e-tU(t)和h(t)=te-t/2U(t)的卷积。本例展示:(A)符号Laplace变换求卷积的理论表示;(B)SIMULINK卷
13、积法的执行过程和它的快速精确性。(C)从理论符号解产生相应的理论数值序列。(1)符号卷积法(得解析结果)syms tao;t=sym(t,positive);%把t定义为“取正”符号变量US1=laplace(exp(-t);%u(t)的L氏变换HS1=laplace(t*exp(-t/2)%h(t)的L氏变换yt1=simple(ilaplace(US1*HS1)%L氏反变换得卷积的理论解图13-8 卷积解算模型exm5835_2_2.mdlHS1=1/(1/2+s)2yt1=4*exp(-t)+(2*t-4)*exp(-1/2*t)(2)SIMULINK卷积法根据h(t)的传递函数,构作S
14、IMULINK模型exm5835_2.mdl,并运行,可从示波器上看到卷积结果。(3)比较两种卷积方法的结果,并用图形表示t=yt2(:,1);%exm5835_2.mdl示波器所保存的仿真采样时间序列yyt1=eval(vectorize(char(yt1);%理论解的数值序列dy,kd=max(abs(yyt1-yt2(:,2);dy12=dy/abs(yyt1(kd)dy12=2.8978e-006【例13-9】用“零阶”近似法求u(t)=e-tU(t)和h(t)=te-t/2U(t)的卷积。本例演示:(A)连续函数的有限长度采样。(B)卷积数值计算三个误差(“截尾”误差、“零阶”近似误
15、差、计算机字长误差)的影响。(C)卷积“无截尾误差”区间、“非平凡”区间端点的确定。(D)离散卷积和连续卷积之间的关系。(E)指令conv的使用。(F)绘图分格线的运用。(1)离散卷积运算前的准备由于数值计算只能对有限长度序列进行,所以必须对被卷函数做截尾处理。假如把5%作为函数的截断阈值,那么u(t)在t=3处截尾,h(t)在t=11处截尾,即取t2=3,t4=11。取采样周期T=0.001。(2)实施计算%“零阶”法计算卷积t2=3;t4=11;T=0.01;tu=0:T:t2;N2=length(tu);th=0:T:t4;N4=length(th);u=exp(-tu);h=th.*e
16、xp(-th/2);tx=0:T:(t2+t4);Nx=length(tx);yt3=T*conv(u,h);%把计算结果与理论值比较t=tx;yyt1=eval(vectorize(char(yt1);%例13-8第(1)步的计算结果dy,kd=max(abs(yyt1(1:N2)-yt3(1:N2);dy13(1)=dy/abs(yyt1(kd);图13-9“零阶”近似法卷积在不同区间上的精度图示dy,kd=max(abs(yyt1(N2+1:N4)-yt3(N2+1:N4);dy13(2)=dy/abs(yyt1(N2+kd);dy,kd=max(abs(yyt1(N4+1:Nx)-yt
17、3(N4+1:Nx);dy13(3)=dy/abs(yyt1(N4+kd);(3)不同区间段的误差及图示disp(与理论结果的相对误差)disp(blanks(4),0,3段 3,11段 11,14段),disp(dy13)plot(t,yyt1,:b,t,yt3,r)set(gca,Xtick,0,3,11,14),grid与理论结果的相对误差 0,3段 3,11段 11,14段 0.0068 0.0810 0.6974。,三、卷积,13.1 数值微分,在工程试验或工程应用中,有时要根据已知的数据点,求某一点的一阶或高阶导数,这时就要用到数值微分。与积分相反,数值微分非常困难。积分描述了一个
18、函数的整体或宏观性质,而微分则描述了一个函数在一点处的斜率,即函数的微观性质。因此积分对函数的形状在小范围内的改变不敏感。而微分却很敏感。一个函数小的变化,容易产生相邻点的斜率的大的改变。由于微分这个固有的困难,所以尽可能避免数值微分,特别是对实验获得的数据进行微分。在这种情况下,最好用最小二乘曲线拟合这种数据,然后对所得到的多项式进行微分。或用另一种方法,对该数据进行三次样条拟合。数值微分的基本思路是先用逼近或拟合等方法将已知数据在一定范围内的近似函数求出,再用特定的方法对此近似函数进行微分。,己知函数某些节点的值,只要将用曲线拟合得到的多项式微分,再对微分后的多项式求值,即可求出在拟合范围
19、以内任意一点的任意阶微分。这种方法一般只用在低阶数值微分。例13-20example13_20.m 用5阶多项式拟合函数cos(x),并利用多项式的求导来求处的一阶和二阶导数。x=0:0.3:4;y=cos(x);p=polyfit(x,y,5);生成拟合多项式 pp=polyder(p)对拟合多项式求一阶微分 pp=-0.0330 0.257 0.0027-1.0257 0.0069 polyvat(pp,pi)求pi处的一阶导数 ans=0.0025 ppp=polyder(pp)求多项式的二阶微分 pp=-0.1321 0.6200 0.0053-1.0257 polyval(ppp,p
20、i)求pi处的二阶导数 ans=1.0150 例13-21example13_21.m x=0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1y=-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2;%datan=2;%order of fitp=polyfit(x,y,n)%find polynomial coefficientsp=-9.8108 20.1293-0.0317xi=linspace(0,1,100);z=polyval(p,xi);%evaluate polynomialplot(x,y
21、,o,x,y,xi,z,:)xlabel(x),ylabel(y=f(x),title(Second Order Curve Fitting)图13-9 二次曲线拟合 在这种情况下,运用多项式微分函数polyder求得微分。pd=polyder(p)pd=-19.6217 20.1293 y=-9.8108x2的微分是dy/dx=-19.6217x+20.1293。由于一个多项式的微分是另一个低一阶的多项式,所以还可以计算并画出该函数的微分。图13-11 曲线拟合多项式微分z=polyval(pd,xi);%evaluate derivativeplot(xi,z)xlabel(x),ylab
22、el(dy/dx),title(Derivative of a curve Fit Polynimial)%(微分曲线如图13-11所示)在这种情况下,拟合的多项式为二阶,使其微分为一阶多项式。这样,微分为一条直线,它意味该微分与x成线性变化。,一、多项式求导法求数值微分,二、用diff函数计算差分求数值微分 给定一些描述某函数的数据,MATLAB提供了一个计算其非常粗略的微分的函数。这个函数命名为diff,它计算数组中元素间的差分。【调用格式】:D=diff(X)因为微分定义为:则y=f(x)的微分可近似为:它是y的有限差分除以x的有限差分。因为diff计算数组元素间的差分,所以在MATLA
23、B中,可近似求得函数的微分。继续前一个例子:dy=diff(y)./diff(x);%compute differences and use array divisionxd=x(1:length(x)-1);%create new x axis since dy is shorter than yplot(xd,dy);title(Approximate Derivative Using DIFF)图13-12 用diff得到的近似微分ylabel(dy/dx),xlabel(x)例13-25example13_25.m 用diff近似求函数的微分。x=0:0.3:4;y=cos(x);dy
24、=diff(y)./diff(x)应用数组近似计算微分 dy=Columns 1 through 7-0.1489-0.4333-0.6791-0.8642-0.9721-0.9931-0.9255 Columns 8 through l3-0.7752-0.5556-0.2864 0.0084 0.3024 0.5694 因函数diff计算的是数组元素间的差分,故所得输出比原数组少了一个元素。这样,在绘制微分曲线时,必须舍弃x数组中的一个元素。当舍弃x的第一个元素时,上述过程给出向后差分近似。而舍弃x的量后一个元素,则给出向前差分近似。如果比较这两条曲线,就很容易发现,用有限差分近似微分会导
25、致很差的结果,特别是在处理被噪音污染了的数据方面。,一、多项式求导法求数值微分,13.3 符号微积分,MATLAB的数学工具箱提供了微积分运算的基本函数:包括微分、积分、求和、极限和泰勒展开等。,1、符号自变量的确定 在MATLAB中进行数学运算时,自变量的选取一般根据上下文得到。例如,在表达式f=x3和y=sin(at+b)中,如果对其进行求导而没有指定自变量,则MATLAB将根据数学约定,分别得到求导式:f=3x2和y=acos(at+b),即分别假设这两个表达式中的自变量为x和t,其他符号a和b都看作常数或参数。根据数学约定,自变量一般都是小写字母,并且在拉丁字母表的后面(如x、y和z)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB ch013 数值 计算 微积分

链接地址:https://www.31ppt.com/p-5438848.html