第七讲符号计算符号计算是数字运算的自然扩展,其特点包括:不受计算误差的困扰;计算可以给出完全正确的封闭解或任意精度的数值解;计算的指令比较简单,所需要的时间较长。目录7.1符号计算入门7.2符号对象的创建和使用7.3符号表达式的化简7.4符号微积分7.5符号方程求解7.1符号计算入门1.求解代数方程2.求解微分方程3.计算导数4.计算定积分自然科学理论分析中的公式、关系式及其推导是符号计算要解决的问题。MATLAB数值计算的对象是数值,而符号计算的对象则是非数值的符号字符串。1.求解代数方程2.求解微分方程3.计算导数4.计算定积分7.2符号对象的创建和使用7.2.1创建符号对象和表达式7.2.2符号和数值之间的转换在符号计算中,需定义一种新的数据类型sym类。sym类的实例就是符号对象,符号对象是一种数据结构,用来存储代表符号变量、表达式和矩阵的字符串。7.2.1创建符号对象和表达式1.符号常量2.符号变量3.符号表达式4.符号矩阵函数sym()和命令syms创建符号常量、变量、函数以及表达式(1)函数sym()函数sym()的具体使用方法如下:s=sym(A);s=sym(‘A’)(2)命令syms命令syms的具体使用方法如下:symss1s2…sn注:各变量间用空格分隔,不用逗号1.符号常量符号常量是一种符号对象。数值常量如果作为函数命令sym()的输入参量,就建立了一个符号对象—符号常量。2.符号变量符号变量通常是由一个或几个特定的字符表示。符号变量的命名规则如下所示:变量名可以由英文字母、数字和下划线组成;变量名应以英语字母开头;组成变量名的字母长度不大于31个;区分大小写。3.符号表达式符号表达式是由以下部分组成的符号对象:符号常量;符号变量;符号运算符;专用函数。Matlab中,大部分运算符和函数支持符号运算。4.符号矩阵元素是符号对象的矩阵叫做符号矩阵。7.2.2符号和数值之间的转换1.Subs函数:subs(S)subs(S,new)S是符号表达式,new是新代入的变量或值2.Vpa函数:vpa(S)vpa(S,D)S是符号表达式,D是有效数字个数例:symsxy=x+x^2y=x^2+xsubs(y,'3')ans=12subs(y,'pi')ans=pi^2+pivpa(ans)ans=13.011197054679151857vpa(ans,7)ans=13.01127.3符号表达式的化简MATLAB提供函数实现对符号计算的结果进行化简和替换,如:因式分解;同类项合并;符号表达式展开、化简;通分、符号替换。工具:1.函数collect()2.函数expand()3.函数horner()4.函数factor()5.函数simplify()6.函数simple()1.函数collect()函数collect()将符号表达式中同类项合并,其具体使用方法如下:R=collect(S):将表达式S中的相同次幂的项合并;R=collect(S,v):将表达式S中变量v的相同次幂的项合并。例:z=sym('2*x^2+3*x^2+9*x')z=2*x^2+3*x^2+9*xcollect(z)ans=5*x^2+9*x2.函数expand()函数expand()将符号表达式进行展开,其具体使用方法如下:R=expand(S):将表达式S中的各项进行展开。例:u=sin(2*x)u=sin(2*x)expand(u)ans=2*cos(x)*sin(x)3.函数horner()函数horner()将符号表达式转换成嵌套形式,其具体使用方法如下:R=horner(S):将符号多项式矩阵S中的每个多项式转换成它们的嵌套形式。4.函数factor()函数factor()对符号多项式进行因式分解,其具体使用方法如下:R=factor(X)如果X是一个多项式或多项式矩阵,该函数将X表示成低阶多项式相乘的形式;如果X不能分解成有理多项式乘积的形式,则返回X本身。例:t=x^4-1t=x^4-1factor(t)ans=(x-1)*(x+1)*(x^2+1)5.函数simplify()函数simplify()将符号表达式按一定规则简化,其具体使用方法如下:R=simplify(S):该函数可应用于包含和式、方根、分数的乘方、等符号表达式矩阵S。例:r=sin(x)*cos(x)r=cos(x)*sin(x)simplify(r)ans=sin(2*x)/26.函数simple()该函数是将符号表达式表示成最简形式,其具体使用方法如下:r=simple(S)用几种不同的算术简化规则对符号表达式进行简化,并显示中间过程;7.4符号微积分1.符号表达式的极限2.符号表达式的微分3.符号表达式的积分4.级数求和5.泰勒级数1.符号表达式的极限函数limit()求表达式的极限,其具体用法如下:limit(F,x,a):求当x→a时,符号表达式F的极限;limit(F,a):求符号表达式F的默认自变量趋近于a时的极限;limit(F):求符号表达式F的默认自变量趋近于0时的极限;limit(F,x,a,'right')或limit(F,x,a,'left'):分别求取符号表达式F的右极限和左极限。例:y=2*sin(x)/xy=(2*sin(x))/xlimit(y,x,0)ans=2函数diff()求表达式的微分,其具体用法如下:diff(S,‘v’):将符号“v”视作变量,对符号表达式或矩阵S求微分;diff(S,n):将S中的默认变量求n阶微分;diff(S,‘v’,n):将符号“v”视作变量,对符号表达式或矩阵S求n阶微分。2.符号表达式的微分函数int()求表达式的积分,其具体用法如下:R=int(S):用默认变量求符号表达式S的不定积分;3.符号表达式的积分R=int(S,v):用符号标量v作为变量求符号表达式S的不定积分值;R=int(S,a,b):符号表达式采用默认变量;R=int(S,v,a,b):符号表达式采用符号标量v作为标量,求当v从a到b时,符号表达式S的定积分值。函数symsum()来对符号表达式进行求和,其具体用法如下:r=symsum(s,a,b):求符号表达式s中默认变量从a到b的有限和;r=symsum(s,v,a,b):求符号表达式s中变量v从a到b的有限和。4.级数求和例:y=1/n^2y=1/n^2symsum(y,1,inf)ans=pi^2/6函数taylor()对符号表达式进行泰勒级数展开,其具体用法如下:r=taylor(f):返回f在变量等于0处的5阶泰勒展开式;r=taylor(f,n,v):符号表达式f以符号标量v作为自变量,返回f的n-1阶泰勒展开式。r=taylor(f,n,v,a):返回符号表达式f在v=a处的n-1阶泰勒展开式。5.泰勒级数例:y=cos(x);taylor(y,5)ans=x^4/24-x^2/2+17.5符号方程求解1.代数方程2.微分方程符号方程可以分为代数方程和微分方程。代数方程可以细分为线性方程和非线性方程两类;微分方程可以细分为常微分方程和偏微分方程。1.代数方程函数solve()求解代数方程,其具体用法如下:g=solve(eq):其中eq可以是符号表达式或不带等号的字符串,该函数求解方程eq=0;g=solve(eq,var):求解方程eq=0,其自变量由参数var指定;g=solve(eq1,eq2,…,eqn):求解由符号表达式或不带等号的字符串eq1,eq2,…,eqn组成的方程组;g=solve(eq1,eq2,…,eqn,var1,var2,…,varn):求解由符号表达式或不带等号的字符串eq1,eq2,…,eqn组成的方程组。2.微分方程函数dsolve()求解微分方程,其具体用法如下。r=dsolve(‘eq1,eq2,…’,‘cond1,cond2,…’,‘v’):求由eq1,eq2……指定的常微分方程组的符号解;r=dsolve('eq1','eq2',…,'cond1','cond2',…,'v'):求由eq1,eq2……指定的常微分方程组的符号解。END