1、第 页1数学建模与实验 课程教案授课时间 2010 年 月 日 授课周次 第 周授课方式(请打) 理论课 讨论课 实验课 习题课 其他课时安排 2授课题目(教学章、节或主题):第七章 MATLAB 符号计算7.1 7.2 7.3 7.4教学目的、要求:1 了解符号对象的应用2 掌握符号微积分、级数和方程的求解基本要求:学会使用 MALTAB 函数对微积分、级数和方程的求解。教学重点及难点:重点和难点: 重点:符号微积分 级数 符号方程求解教 学 基 本 内 容 和 过 程第七章、 MATLAB符号计算7.1 符号对象7.1.1 建立符号对象1建立符号变量和符号常量MATLAB提供了两个建立符号
2、对象的函数:sym和syms,两个函数的用法不同。(1) sym函数sym函数用来建立单个符号量,一般调用格式为:符号量名=sym(符号字符串)该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。应用sym函数还可以定义符号常量,使用符号常量进行代数运算时和数值常量进行的运算不同。下面的命令用于比较符号常量与数值常量在代数运算时的差别。(2) syms函数函数sym一次只能定义一个符号变量,使用不方便。MATLAB提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为:第 页2syms 符号变量名1 符号变量名2 符号变量名n用这种格式定义符号变量时不
3、要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔。2建立符号表达式含有符号对象的表达式称为符号表达式。建立符号表达式有以下3种方法:(1)利用单引号来生成符号表达式。(2)用sym函数建立符号表达式。(3) 使用已经定义的符号变量组成符号表达式。7.1.2 符号表达式运算1符号表达式的四则运算符号表达式的加、减、乘、除运算可分别由函数symadd、symsub、symmul和symdiv来实现,幂运算可以由sympow来实现。2符号表达式的提取分子和分母运算如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。其一般调用格式为:n,
4、d=numden(s)该函数提取符号表达式s的分子和分母,分别将它们存放在n与d中。3符号表达式的因式分解与展开MATLAB提供了符号表达式的因式分解与展开的函数,函数的调用格式为:factor(s):对符号表达式s分解因式。expand(s):对符号表达式s进行展开。collect(s):对符号表达式s合并同类项。collect(s,v):对符号表达式s按变量v合并同类项。4符号表达式的化简MATLAB提供的对符号表达式化简的函数有:simplify(s):应用函数规则对s进行化简。simple(s):调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。5符号表达式与数值表达式之
5、间的转换利用函数sym可以将数值表达式变换成它的符号表达式。函数numeric或eval可以将符号表达式变换成数值表达式。7.1.3 符号表达式中变量的确定MATLAB中的符号可以表示符号变量和符号常量。findsym可以帮助用户查找一个符号表达式中的的符号变量。该函数的调用格式为:findsym(s,n)函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全部符号第 页3变量。7.1.4 符号矩阵符号矩阵也是一种符号表达式,所以前面介绍的符号表达式运算都可以在矩阵意义下进行。但应注意这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。由于符号矩阵是一个矩阵,所以符号矩阵还能进
6、行有关矩阵的运算。MATLAB还有一些专用于符号矩阵的函数,这些函数作用于单个的数据无意义。例如transpose(s):返回s矩阵的转置矩阵。determ(s):返回s矩阵的行列式值。其实,曾介绍过的许多应用于数值矩阵的函数,如diag、triu、tril、inv、det、rank、eig等,也可直接应用于符号矩阵。7.2 符号微积分7.2.1 符号极限limit函数的调用格式为:(1) limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。(2) limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使
7、用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a。(3) limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。(4) limit(f,x,a,right):求符号函数f的极限值。right表示变量x从右边趋近于a。(5) limit(f,x,a,left):求符号函数f的极限值。 left表示变量x从左边趋近于a。例7-1 求下列极限。(1)limxa(2) lixa(3) 2li(1)xx(4) 2limxaa极限1:syms
8、a m x;第 页4f=(x*(exp(sin(x)+1)-2*(exp(tan(x)-1)/(x+a);limit(f,x,a)ans =(1/2*a*exp(sin(a)+1/2*a-exp(tan(a)+1)/a极限2:syms x t;limit(1+2*t/x)(3*x),x,inf)ans =exp(6*t)极限3:syms x;f=x*(sqrt(x2+1)-x);limit(f,x,inf,left)ans =1/2极限4:syms x;f=(sqrt(x)-sqrt(2)-sqrt(x-2)/sqrt(x*x-4);limit(f,x,2,right)ans =-1/27.2
9、.2 符号导数diff函数用于对符号表达式求导数。该函数的一般调用格式为:diff(s):没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数。diff(s,v):以v为自变量,对符号表达式s求一阶导数。diff(s,n):按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数。diff(s,v,n):以v为自变量,对符号表达式s求n阶导数。例7-2 求下列函数的导数。(1) ,求 1xyey(2) ,求 、cosinatx命令如下:(1)syms a b t x y;f=sqrt(1+exp(x);diff(f) % 未指定求导变量和阶数,
10、按默认规则处理。ans=第 页51/2/(1+exp(x)(1/2)*exp(x)(2)f1=a*cos(t);f2=a*sin(t);diff(f2)/diff(f1) % 按参数方程求导公式求y对x的导数 ans=-b*cos(t)/a/sin(t)(diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2)/(diff(f1)3 % 求y对x的二阶导数ans=-(a*sin(t)2*b+a*cos(t)2*b)/a3/sin(t)37.2.3 符号积分符号积分由函数int来实现。该函数的一般调用格式为:int(s):没有指定积分变量和积分阶数时,系统按findsym函
11、数指示的默认变量对被积函数或符号表达式s求不定积分。int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分。int(s,v,a,b):求定积分运算。a,b分别表示定积分的下限和上限。该函数求被积函数在区间a,b上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数f关于变量x在闭区间a,b上可积时,函数返回一个定积分结果。当a,b中有一个是inf时,函数返回一个广义积分。当a,b中有一个符号表达式时,函数返回一个符号函数。例7-3 求下列积分。(1) 32()xd(2)命令如下:(1)x=sym(x);f=(3-x2)3;int(f) ans=
12、-1/7*x7+9/5*x5-9*x3+27*x(2)x=sym(x);t=sym(t);int(abs(1-x),1,2)ans=1/27.2.4 积分变换常见的积分变换有傅立叶变换、拉普拉斯变换和Z变换。1傅立叶(Fourier)变换在MATLAB中,进行傅立叶变换的函数是:第 页6fourier(f,x,t):求函数f(x)的傅立叶像函数F(t)。ifourier(F,t,x):求傅立叶像函数F(t)的原函数f(x)。例7-4 求函数y= 的傅立叶变换及其逆变换。x命令如下:syms x t;y=abs(x);Ft=fourier(y,x,t) % 求y的傅里叶变换Ft=-2/t2fx=
13、ifourier(Ft,t,x) % 求Ft的傅里叶逆变换fx=x*(2*heaviside(x)-1)结果中的Heaviside(x)是一个MATLAB函数,数学上称为单位跳跃函数。其定义是: 0,()1,xHeavisdNa7.3 级数7.3.1 级数符号求和求无穷级数的和需要符号表达式求和函数symsum,其调用格式为:symsum(s,v,n,m)其中s表示一个级数的通项,是一个符号表达式。v是求和变量,v省略时使用系统的默认变量。n和m是求和的开始项和末项。例7-5 求下列级数之和。(1) 211.496sn(2)命令如下:n=sym(n);S1=symsum(1/n2,n,1,in
14、f) %求s1S1=1/6*pi2S2=symsum(-1)(n+1)/n,1.inf) %求s2。未指定求和变量,默认为nS2=log(2)7.3.2 函数的泰勒级数MATLAB提供了taylor函数将函数展开为幂级数,其调用格式为:第 页7taylor(f,v,n,a)该函数将函数f按变量v展开为泰勒级数,展开到第n项(即变量v的n-1次幂)为止,n的缺省值为6。v的缺省值与diff函数相同。参数a指定将函数f在自变量v=a处展开,a的缺省值是0。例7-6 求函数 的5阶泰勒级数展开式。33121xx命令如下:X=sym(x);f1=sqrt(1-2*x+x3)-(1_3*x+x2)(1/
15、3);f2=(1+x+x2)/(1-x+x2);taylor(f1,x,5)ans=1/6*x2+x3+119/72*x47.4 符号方程求解7.4.1 符号代数方程求解在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:solve(s):求解符号表达式s的代数方程,求解变量为默认变量。solve(s,v):求解符号表达式s的代数方程,求解变量为v。solve(s1,s2,sn,v1,v2,vn):求解符号表达式s1,s2,sn组成的代数方程组,求解变量分别v1,v2,vn。例7-7 解下列方程。(1) 21412x(2) sin(3)命令如下:x=solve
16、(1/(x+2)+4*x/(x2-4)=1+2/(x-2), x) %解方程(1)x=1x=solve(2*sin(3*x-pi/4)=1) %解方程(2)x=5/36*pi7.4.2 符号常微分方程求解在MATLAB中,用大写字母D表示导数。例如,Dy表示y,D2y表示y,Dy(0)=5表示y(0)=5。D3y+D2y+Dy-x+5=0表示微分方程y+y+y-x+5=0。符号常微分方程求解可以通过函数dsolve来实现,其调用格式为:dsolve(e,c,v)该函数求解常微分方程e在初值条件c下的特解。参数v描述方程中的自变第 页8量,省略时按缺省原则处理,若没有给出初值条件c,则求方程的通
17、解。dsolve在求常微分方程组时的调用格式为:dsolve(e1,e2,en,c1,cn,v1,vn)该函数求解常微分方程组e1,en在初值条件c1,cn下的特解,若不给出初值条件,则求方程组的通解,v1,vn给出求解变量。例7-8 求下列微分方程的解。(1)求 的通解。2dyx(2)求 的特解,y(2)=1。2x(3)求 的通解。220dytx命令如下:y=dsolve(Dy-(x2+y2)/x2/2, x) %解 (1)。方程的右端为0时可以不写y=x*(-log(x)+2+C1)/(-log(x)+C1)y=dsolve(Dy-x2/(1+y2), y(2)=1, x) %解(2)x,y=dsolve(D2x-y, D2y+x, t) %解(3)本章小结:布置作业:1. 回顾课堂内容,对所列模型进行改进。2. 预习下一章经验模型。第 页9