微分方程的数值积分课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《微分方程的数值积分课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微分方程 数值 积分 课件
- 资源描述:
-
1、5.1 函数极限和导数函数极限和导数5.1.1 单变量函数值的计算和绘图单变量函数值的计算和绘图【例例5-1-1】设要求以0.01s为间隔,求出y的151个点,并求出其导数的值和曲线。解解:建模可以采取下列两种方法来做:(1)只用主程序编程的方法;(2)编成函数文件,由主程序调用的方法。求导数可采用diff函数对数组y做运算的方法。3t 34sine23y4t MATLAB程序(1)第一种方法的程序exn511a如下:t=0:.01:1.5;%设定自变量数组t w=4*sqrt(3);%固定频率 y=w/8*exp(-4*t).*sin(w*t+pi/3);%注意用数组运算式 subplot(
2、2,1,1),plot(t,y),grid%绘制曲线并加上坐标网格 title(绘图示例),xlabel(时间 t),ylabel(y(t)%加标注 Dy=diff(y);subplot(2,1,2),plot(t(length(t)-1),Dy),grid%求导数并绘制曲线,注意用数值方法求导后,导数数组长度比原函数减少一 ylabel(Dy(t)%加标注(2)第二种方法的主程序exn511b如下:dt=0.01;t=0:dt:1.5;w=4*sqrt(3);y=exn511bf(t,w);Dy=diff(y)/dt;%绘图和加标注的程序略去 另要建立一个函数文件exn511bf.m,其内容
3、为:function xvalues=exn511bf(tvalues,w)%注意编写的函数文件中,其语法对数组w应该能用元素群运算。xvalues=w*exp(-4*tvalues).*sin(w*tvalues+pi/3);程序运行结果运行这两种程序都得到图5-1所示的曲线。为了节省篇幅,我们没有显示y的数据。以后的各例中还将省略绘图时的标注语句。从本例看,第二种方法似乎更麻烦一些,但它具备模块化的特点。当程序中要反复多次调用此函数,而且输入不同的自变量时,利用函数文件可大大简化编程。我们应该掌握这种方法。两次应用diff函数或用diff(y,2)可以求y的二次导数,读者可自行实践。图 5
4、-1 例5-1-1的曲线5.1.2 参变方程表示的函数的计算和绘图参变方程表示的函数的计算和绘图【例例5-1-2】摆线的绘制。如图5-2所示,当圆轮在平面上滚动时,轮上任一点所画出的轨迹称为摆线。如果这一点不在圆周上而在圆内,则生成内摆线;如果该点在圆外,即离圆心距离大于半径,则生成外摆线。对于后一种情况,可由火车轮来想象。其接触轨道的部分,并不是直径最大处,其内侧的直径还要大一些,以防止车轮左右出轨。在这部分边缘上的点就形成外摆线。图 5-2 摆线的生成解:解:建模概括几种情况,其普遍方程可表示为:xA=rt-Rsin t yA=r-Rcos t可由这组以t为参数的方程分析其轨迹。MATLA
5、B程序 t=0:0.1:10;%设定参数数组 r=input(r=),R=input(R=)%输入常数 x=r*t-R*sin(t);%计算x,y y=r-R*cos(t);plot(x,y),axis(equal)%绘图 程序运行结果设r=1,令R=r,R=0.7及R=1.5时得到的摆线、内摆线和外摆线都绘于图5-3中。为了显示摆线的正确形状,x、y坐标保持等比例是很重要的,因此程序中要加axis(equal)语句。图 5-3 摆线的绘制5.1.3 曲线族的绘制曲线族的绘制【例例5-1-3】三次曲线的方程为y=ax3+cx,试探讨参数a和c对其图形的影响。解解:建模因为函数比较简单,因此可以
6、直接写入绘图语句中,用循环语句来改变参数。注意坐标的设定方法,以得到适于观察的图形。给出的程序不是唯一的,例如也可用fplot函数等。读者可自行探索其他编法。MATLAB程序 x=-2:0.1:2;%给定x数组,确定范围及取点密度 subplot(1,2,1)%分两个画面绘图 for c=-3:3%取不同的c循环 plot(x,x.3+c*x),hold on,end,grid subplot(1,2,2)for a=-3:3%取不同的a循环 plot(x,a*x.3+x),hold on,end,grid,hold off 用直接在图形窗内编辑的方法可在图内标注字符。程序运行结果程序运行结果
7、见图5-4,其中a和c均从-3取到3,步长为1。图 5-4 c和a取不同值时y=ax3+cx的曲线族(a)a=1,c取不同值;(b)c=1,a取不同值5.1.4 极限判别极限判别用MATLAB来表达推理过程是比较困难的,因为它必须与实际的数值联系起来。比如无法用无穷小和高阶无穷小的概念,只能用e-10、e-20等数值。不过极限的定义恰恰用了和这些数的概念,因此不难用程序表达。【例例5-1-4】极限的定义和判别。解解:建模 对于函数y=f(x),当任意给定一个正数时,有一个对应的正数存在,使得当0|xc-x|epsilon delta=delta/2;x=xc-delta;%找 if abs(d
8、elta)0.0001 f=x0.3+10*x0.2-2*sin(x0)-50;%求f(x0)g=3*x02+20*x0-2*cos(x0);%求函数的导数g(x0)xx=x0-f/g;%切线法求解公式 e=abs(xx-x0);x0=xx%精度控制,把新值赋予x0 plot(x0,0,*),pause(2)%画出新点在x轴上的位置 end 程序运行结果运行此程序,设x0分别为-10、-2、2,得出的解分别为-9.4384、-2.5648、2.0707,从图上可看到解逐渐接近精确解的过程。本程序中用了导数的解析形式,对于某些较为复杂的函数,这样会很繁琐,所以这不是一个值得推荐的程序,只是为了帮
9、助读者理解,好的程序应该用数值方法求导数(如例5-1-1),或用两分法来求根。读者可自行改进这个程序。懂得原理后,实际上不必再去编程,直接用fzero求f(x)的根即可,要做的工作是把f(x)定义为一个用M文件表示的函数,例如建立一个exn517f.m文件,其内容为function y=exn517f(x)y=x.3+10*x.2-2*sin(x)-50;再调用x=fzero(exn517f,x0),即可得出解x。【例例5-1-8】设f(x)=x3+2x,x0=1。(a)在x0-1/2xx0+3的区间内画出y=f(x)的曲线;(b)保持x0不动,求差商 ,作为h的函数;(c)求h0时q(h)的
10、极限;(d)对于h=3、2、1,定义割线y=f(x0)+q*(x-x0),画出此割线;(e)在x0=0、1、2三个点上分别画出曲线的切线。h)f(xh)f(xq(h)00解:建模先在指定的定义域内画出函数的图形,然后在x0附近计算不同h时的差商及其在h0时的极限,再按切线公式画出切线图形。MATLAB程序 x=linspace(-1/2,3,100);subplot(1,2,1),plot(x,x.3+2*x),grid on,hold on%画曲线在一个点上,取不同步长求斜率,画出多根割线 h=1,0.1,0.01;for k=1:3 x1=1,1+h(k);f=x1.3+2*x1;%取不同
11、步长 q=diff(f)/diff(x1),%求差商 plot(x,f(1)+q*(x-x1(1),:),%画割线 end%在多个点上,取同样步长h=0.1,求斜率,画出多根切线 for k=0:2 x1=k,k+0.1;f=x1.3+2*x1;%取不同位置的x,求函数 q=diff(f)/diff(x1),%求差商 subplot(1,2,2),plot(x,x.3+2*x),grid on,hold on plot(x,f(1)+q*(x-x1(1),:r),%画割线 end 程序运行结果在x0=1处取三个不同的步长h,得到的斜率分别为:q=9 5.3100 5.0301用这三个斜率画出的
12、近似切线如图5-10(a)所示,可见q逐步接近精确值。取三个不同的x0,得到的斜率分别为:q=2.0100 5.3100 14.6100根据这些斜率画出的切线如图5-10(b)所示。图 5-10 曲线的割线与切线的关系斜率的精确值只能通过符号数学来求,其程序为syms x,y=x3+2*x,Dy=diff(y),Dy1=subs(Dy,x,0,1,2)运行此程序的结果为Dy1=2 5 14【例例5-1-9】求函数 位于区间0,内的近似极值。解解:先完全采用数值方法来解这个问题,为了尽量求得准确一些,对自变量作较细的分度,求出其函数值,画图并求其极值。编写程序如下:clear,clf,x=lin
13、space(0,pi,10000);y=2*sin(2*x).2+5/2*x.*cos(x/2).2;plot(x,y),grid on,hold on2xxcos25(2x)2siny22程序运行后得到图5-11所示的曲线。求y的最大值可有几种方法:(1)方法一:由y的数据直接求极值(exn519a):ymax1=max(y)求得 ymax=3.7323如果要进一步确定此处的x坐标和其他几个极值,那就要麻烦一些,要利用find函数找到变量的下标:%找最大值处y的下标 nm1=find(y=max(y)%求该下标处的x的值 xm1=x(nm1)运行的结果是nm1=2752,xm1=0.8643
14、。图5-11 曲线的极值位置其他两个极值点是局部极值,只能在划分出的局部区域中寻找,所以先任取两个边界点x01=1和x02=2,该两点处的下标值也要用find函数来求:n01=find(abs(x-1)2e-4);%找两个边界处的y的下标 n02=find(abs(x-2)2e-4);ymin=min(y(n01:n02)%求x=12之间y的最小值 ymax2=max(y(n02:end)%求x=2pi之间y的最大值 nm2=find(y(n01:n02)=ymin)+n01-1%求y的最小值处的下标 nm3=find(y(n02:end)=ymax2)+n02-1%求y的最大值处的下标 xm
15、2=x(nm2),xm3=x(nm3)%求y的最小最大值处的x值程序运行结果为:ymin=1.9446 ymax2=2.9571 nm2=5171 nm3=7147 7148 xm2=1.6244 xm3=2.2452 2.2455这种方法比较直观,也有利于思考。但键入量多,也比较麻烦。MATLAB已提供了求极小值的函数fminbnd,可以用一条语句求出极小值(参阅4.4.2节)。求极大值时只需将函数的值反号。因此键入下面三条语句就可代替前面的八条语句。xm1,mym1=fminbnd(-(2*sin(2*x).2+5/2*x.*cos(x/2).2),0,1)xm2,ym2=fminbnd(
16、2*sin(2*x).2+5/2*x.*cos(x/2).2,1,2)xm3,mym3=fminbnd(-(2*sin(2*x).2+5/2*x.*cos(x/2).2),2,3)xm=xm1,xm2,xm3,ym=-mym1,ym2,-mym3程序运行结果为:xm=0.8642 1.6239 2.2449 ym=-3.7323 1.9446 2.9571把mym1、mym3反号得到ym1、ym3,因为它们是为了利用fminbnd函数才变了号的。(2)方法二:上述方法完全没有利用极值处导数为零的性质,本方法则利用导数为零性质,但用数值方法求导,其程序如下(exn519b):h=pi/(1000
17、0-1);Dy=diff(y)/h;%先用数值方法求导数 plot(x(1:end-1),Dy,-.r)%绘制导数曲线导数的长度比原函数的长度小1,绘图时必须相应地把x的长度减小。而求出导数过零点的下标后要加1,才能用做函数的下标检测的门限值需要经过反复试验。因为x的取值是离散的,不但不可能正好取到Dy=0的点,而且用户也不知道最靠近零的那个点的Dy值有多大,它取决于x的步长和过零点处的斜率,所以设它为某一常数kh与步长h的乘积,让kh可以人工输入。检测出的过零点太多,说明kh太大;反之,则kh太小。在本题中,理想的情况是得到三个过零点。kh=input(过零点检测门限取h的kh倍,kh=)n
18、m=find(abs(Dy)kh*h)+1,%求导数过零点 ym=y(nm)%求极值试验的结果是:若kh=1,则得出的nm只包含两项,意味着只找到两个过零点,有一个没找到,需加大;若kh=8,则nm又出现了4项,后两项实际上是一个零点。于是有:nm=find(abs(Dy)8*h),ym=y(nm),xm=x(nm)n=2751 5169 7145 7146 ym=3.7323 1.9446 2.9571 2.9571 xm=0.8640 1.6237 2.2446 2.2449最后两项代表同一极值,可以去掉一个,得到所需的三个极值解。(3)方法三:以下提供了用符号数学工具箱解本题的程序(ex
19、n519c),它的好处是求过零点时不必反复试验。clear,syms x,y=2*sin(2*x)2+5/2*x*cos(x/2)2;Dy=diff(y);ezplot(y,0,pi),hold on,ezplot(Dy,0,pi),grid on下面要根据Dy=0的条件解出相应的xm值。因为这是一个超越函数,求其零点必须用近似算法,根据图形,在各极值点附近取一起始点,逐次使用fsolve函数来求。根据图形可知y在x=1、1.5、2.2附近各有一个极值点,用三条语句分别求出:x1=fsolve(4*sin(4*x)+5/4*cos(x)+5/4-5/4*x*sin(x),1)x2=fsolve
20、(4*sin(4*x)+5/4*cos(x)+5/4-5/4*x*sin(x),1.5)x3=fsolve(4*sin(4*x)+5/4*cos(x)+5/4-5/4*x*sin(x),2.2)答案分别为:0.8642 1.6239 2.2449 ym=subs(y,x,x1,x2,x3),plot(x1,x2,x3,ym,o),grid on得极值分别为:ym=3.7323 1.9446 2.9571【应用篇中与本节相关的例题】【例6-2-2】平面上质点运动轨迹的绘制,即知道参数方程x=x(t)及y=y(t),画出y=f(x)。【例6-2-3】平面上质点运动轨迹及李萨如图形的绘制。与上题相仿
21、,其特点在于这两个参数方程都是周期性的函数,因此得出的是李萨如图形。【例6-6-1】声波的波形叠加造成的拍频。两个波形分别为x1=f1(t)及x2=f2(t),两个波形叠加后的x=x1+x2=f1(t)+f2(t),画出图形就可以直接看出其合成效果和拍频,也可使之变成可听到的声音而直接感受到。【例6-6-2】运动声源造成的声波的多普勒效应。这从图形上不大好观察,要转化成声音才能很清楚地感受到。【例7-1-4】进行四连杆机构的运动分析时,由四根连杆的几何位置方程(非线性方程)解出角位置数组,然后经过求导得出角速度和角加速度。【例8-3-1】可控硅电流波形的绘制。特别注意其中出现了不连续点,对不连
22、续点的绘制需要在该点设置左右边界,才能得出正确的图形。【例8-4-2】给出了平面上参数不同的曲线族综合绘制的方法,得出了著名的阻抗圆图。【例9-1-1】典型连续信号波形的绘制。注意要用stairs函数来绘制不连续的阶跃波形。【例9-2-1】典型离散信号波形的绘制。注意要用stem函数来绘制脉冲波形。本节习题本节习题1.(a)在同一张图中画出函数f(x)=sinx+cos(x/2)和g(x)=lnx+x1/3。(b)求函数f(x)的周期。(c)用代数方法证明(b)中的结果。(d)在同一张图中画出h(x)=f(x)-g(x)。2.设x=a cost,y=b sint,0t2。(a)利用参数方程作出
23、它的曲线。(b)消去t,将此方程化为直角坐标中的形式,作出它的图形。3.写出程序,要求能一次画出y=bx(b=0、1、2、3,-x)在x-y坐标中的曲线族,并对所得的图形做出解释。4.对以下题目,用图形来估计极限。(a)(b)(c)2x16xlim42x2231x1)(x3x5xxlim47x9xlim223x5.(a)画出h(x)=x2 cos(1/x),并估计,根据需要可以把原点附近的图形放大。(b)再画出k(x)=cos(1/x),比较h和k在原点附近有什么相同点和不同点。6.对下列函数,求和 。(a)(b)(c)f(x)=x2e-xh(x)lim0 xf(x)limxf(x)limxx
24、|x|lnf(x)x1xsinf(x)7.在-4,4区间上作出函数 的图形,研究 和。8.观察函数的图形并求极限。9.通过画图找到,并用代数方法证明之。xx9xxf(x)33f(x)limxf(x)lim0 xx12x1f(x)x-12x1lim1xf(x)limxxxxxf(x)2210.画出下列函数的曲线并判断其极限。(a)(b)(c)(d)11.计算下列函数在给定的各个区间中的平均变化率。(a)f(x)=ex,(i)x-2,0,(ii)x1,3(b)f(x)=lnx,(i)x1,4,(ii)x100,103(c)f(x)=cotx,(i)x/4,3/4,(ii)x/6,/2lnxcotx
25、ln lim0 xx0 x(x)limsinxxxcosx-sinxlim20 xlnxxlim20 x12.参照例5-1-8的几点要求,对以下的曲线的给定点画出割线和切线。(a)f(x)=x+sin2x,x0=/2(b)f(x)=cosx+4sin2x,x0=13.在区间0 x2中画出曲线 ,并在同一幅图上画出曲线 ,先取h=1、0.5、0.1,再取h=-1、-0.5、-0.1,讨论其结果。)2/(1xy hxhxf(x)14.对下列函数:(a)f(x)=x3+x2-x,x0=1(b)f(x)=x1/3+x2/3,x0=1(c)f(x)=sin2x,x0=/2(d)f(x)=x2cosx,x
展开阅读全文