第七章符号运算强大的符号运算功能通过运行符号数学工具箱(SymbolicMathToolbox)实现基于字符串进行符号分析与运算可完成大量的符号运算功能,包括:•符号表达式操作•符号表达式的复合、化简•符号矩阵的运算•符号微积分•符号函数画图•符号代数方程求解及符号微分方程求解7.1符号对象和符号表达式符号表达式:代表数字、函数和变量的MATLAB字符串或字符串数组,不要求变量要有预先确定的值。包括:符号函数与符号方程,区别在于有没有等号符号表达式的表达:字符串(字符数组)形式表达函数sym生成符号表达式如:f=sym(‘ax+b=0’)函数syms生成符号表达式(只能生成符号函数)如:symsyu;p=exp(-y/u)7.1符号对象和符号表达式1、创建7.1符号对象和符号表达式由symvar函数得到符号表达式中的符号变量1、创建7.1符号对象和符号表达式•函数syms生成符号表达式(只能生成符号函数)如:symsyu;生成符号变量p=exp(-y/u)生成符号表达式1、创建7.1符号表达式的基本符号运算)()()()()()()()()()()()(33322203331110SSSSSSSSSSSSZZcYYbXXaZZcYYbXXafyyZZcYYbXXaZZcYYbXXafxx1000)cos()sin(0)sin()cos()cos()sin(0)sin()cos(0001)cos(0)sin(010)sin(0)cos(321321321cccbbbaaa7.2符号表达式操作7.2.1提取分子、分母如果符号表达式是有理分式形式或可展开为有理分式形式,可用函数numden来提取符号表达式中的分子与分母。调用格式如下:•[n,d]=numden(a)提取a的分子分母存放在n与d中•n=numden(a)提取a的分子分母,只把分子存放在n中7.2符号表达式操作7.2.2符号表达式的基本代数运算符号表达式的四则运算及幂运算等基本的代数运算与矩阵的数组运算几乎完全一样。四则运算分别由函数symadd,symsub,symmul,symdiv,也可由“+”,“-”,“*”,“/”符号进行运算。幂运算由函数sympow实现,也可由“^”符号实现。7.2符号表达式操作7.2.2符号表达式的高级运算1、符合表达式的复合函数运算由函数compose()来实现•Compose(f,g),返回复合函数f(g(x))•Compose(f,g,z),返回自变量为z的复合函数f(g(z))•Compose(f,g,x,z),返回复合函数f(g(z)),且使x成为f函数的独立变量。(函数f含有两个变量,包括x)。•Compose(f,g,x,y,z),返回复合函数f(g(z)),且使x成为f函数的独立变量,y成为g的独立变量。(函数f含有两个变量,包括x,函数g含有两个变量,包括y)。7.2符号表达式操作7.2.2符号表达式的高级运算2、符合表达式的反函数运算由函数finverse()来实现•g=finverse(f),直接返回f的反函数给g•finverse(f,v),将v看作变量,返回关于v的反函数。函数f中可能有多个变量。7.2符号表达式操作7.2.2符号表达式的高级运算3、求表达式的符号和由函数symsum()来实现•symsum(S)返回对x=0和1求和如:S=k,symsum(S)=1/2*k^2-1/2k•symsum(S,v),返回S含有两个变量时,对v求和•symsum(S,a,b),返回•symsum(S,v,a,b),返回10)(xxS10)(xvSbaxS)(bavS)(7.3符号与数值间的转换7.7.1将符号表达式转换成数值表达式由函数numeric()或eval()来实现如:p='2*sin(pi/6)'numeric(p)=eval(p)=1两者的差别:返回值为数字时,才可以用numeric函数,如果返回值是符号表达式,则只能用eval函数如:p=‘2*sin(pi/6)+x+1’,此时x未取值,只能用eval函数sym2poly()和poly2sym()两个函数可实现符号多项式与系数向量之间的转换7.3符号与数值间的转换7.7.2将数值表达式转换成符号表达式由函数sym()实现如:p=1sym(p)=1符号表达式取值是唯一的,但数值表达式(如一个数),对应的符号表达式并不唯一,取一个最简单的,往往没用多大意义。如:p=1.0123sym(p)=10123/100007.4符号表达式的化简函数名功能pretty按常规显示格式显示多项式collect合并同类项horner将一般的符号表达式转换成嵌套形式的符号表达式factor因式分解expand符号表达式展开simplify符号表达式化简simple多种类型的代数恒等式进行化简7.4符号表达式的化简simple,用多种类型的代数恒等式进行化简调用格式:simple(s)[r,how]=simple(s),返回化简结果的同时,返回所采用的化简方法,存储在how中7.5符号矩阵7.5.1符号矩阵的生成也通过函数sym()实现,直接输入矩阵,行间用分号隔开,行内用空格或逗号隔开由函数size得到矩阵的大小,返回矩阵的行列数7.5符号矩阵7.5.2符号矩阵的运算1、四则运算及幂运算通过函数(symadd,symsub,symmul,symdiv,sympow)或运算符(+,-,*,/,^)完成。运算规则等同于矩阵运算幂运算sympow(a,b)中a为符号矩阵,b必须为标量,且为整数7.5符号矩阵7.5.2符号矩阵的运算2、其他基本运算与矩阵运算相同1)、转置运算:通过函数transpose实现2)、行列式运算:通过函数det实现3)、求逆运算:通过函数inv实现4)、求秩运算:通过函数rank实现7.5符号矩阵7.5.2符号矩阵的运算2、常用函数运算与矩阵运算相同1)、特征值和特征向量运算:通过函数eig实现2)、行列式运算:通过函数det实现3)、求逆运算:通过函数inv实现4)、求秩运算:通过函数rank实现7.6符号微积分7.6.1符号极限由函数limit()实现调用格式如下:limit(f,x,a),返回f当时的极限,x必须是f的变量limit(f,a),由系统确定f中的变量,取极限limit(f),缺省在0处的极限limit(f,x,a,“right”)或limit(f,x,a,“left”),右极限或左极限ax7.6符号微积分7.6.2符号微分由函数diff()实现调用格式如下:diff(f),对由系统确定f中的变量求微分diff(f,a),对a变量求微分diff(f,n),对由系统确定f中的变量求n次微分diff(f,a,n),对a变量求n次微分7.6符号微积分7.6.2符号积分由函数int()实现调用格式如下:int(f),对由系统确定f中的变量求不定积分int(f,v),对v变量求不定积分int(f,a,b),对由系统确定f中的变量求a到b的积分int(f,v,a,b),对v变量求求a到b的积分注:符号微分、积分对符号矩阵同样适用,分别对矩阵中的每一个元素进行微分、积分(实际上是对符号数组的运算)7.7符号函数画图由函数ezplot或fplot完成ezplot调用格式如下:ezplot(f),在默认区间(-2*pi,2*pi)绘制函数图ezplot(f,[a,b]),在区间(a,b)绘制函数图fplot只能绘制字符串对应的函数7.8符号方程求解7.8.1符号代数线性方程求解由函数solve(),linsolve()实现调用格式如下:solve函数用于求表达式类型的函数,对象必须是完整的符号函数或方程,返回的是符号表达式或数值,调用格式如下:solve('x^2-3=0'),得到[3^(1/2)][-3^(1/2)]solve('x^2-4=0'),得到[2][-2]solve('x^2-b=0'),得到[b^(1/2)][-b^(1/2)]方程组:[x,y]=solve('x^2+x*y+y=3','x^2-4*x+3=0')linsolve函数对系数序列和常数项组成的方程(组)求解7.8符号方程求解7.8.1符号代数线性方程求解linsolve函数对系数序列和常数项组成的线性方程(组)求解,调用格式如下:A=sym('[10,-1,0;-1,10,-2;2,-6,1]')B=sym('[1;2;3]')linsolve(A,B)得到:[-6/17][-77/17][-399/17]第二次实习内容1、数据可视化:绘图函数plot、fplot、subplot、mesh、surface、contour等的使用、属性设置等;2、对“dem.txt”文件的高程数据进行等高线绘制,等高距5m,绘制首曲线、计曲线,上交绘制结果;3、插值、多项式拟合的使用操作;4、符号表达式的四则运算、幂运算、符合函数运算、反函数运算、化简运算;共线方程符号表达式生成并对Xs、φ求偏微分;5、符号极限、符号微分、符号画图。