1、l 符号表达式、符号矩阵的创建符号表达式、符号矩阵的创建l 符号矩阵的运算符号矩阵的运算l 符号微积分符号微积分l 符号代数方程求解符号代数方程求解l 符号微分方程符号微分方程l 符号函数的二维图符号函数的二维图本章要点本章要点一、符号变量、符号表达式和符号方程的生成一、符号变量、符号表达式和符号方程的生成 与数值运算的区别:与数值运算的区别:数值运算中必须数值运算中必须先对变量赋值先对变量赋值,然后才能参与运算。,然后才能参与运算。符号运算符号运算无须事先对独立变量赋值无须事先对独立变量赋值,运算结果以标准,运算结果以标准的符号形式表达,的符号形式表达,可以获得任意精度的解。可以获得任意精度
2、的解。参与符号运算的对象可以是符号变量、符号表达式或参与符号运算的对象可以是符号变量、符号表达式或符号矩阵。符号矩阵。(符号变量也要先定义,后引用)符号变量也要先定义,后引用)1、什么是符号运算、什么是符号运算2、符号变量的定义、符号变量的定义(1)sym函数函数 主要功能是创建符号变量、符号表达式或符号矩阵。函主要功能是创建符号变量、符号表达式或符号矩阵。函数调用的一般格式为:数调用的一般格式为:x=sym(x)其目的是将其目的是将x创建为符号变量,以创建为符号变量,以x作为输出变量名。作为输出变量名。例:例:f=sym(y);%定义定义f是符号变量名,值为符号是符号变量名,值为符号x f
3、1=sym(sin(x)+5x);f 1 符号变量名符号变量名 sin(x)+5x 符号表达式符号表达式 符号标识,符号表达式一定要用符号标识,符号表达式一定要用 单引号单引号括起来括起来matlab才能识别。才能识别。的内容可以是符号表达式,也可以是符号方程。的内容可以是符号表达式,也可以是符号方程。例:例:f1=sym(a x2+b x+c)二次三项式二次三项式 f2=sym(a x2+b x+c=0)方程方程 f3=Dy+y2=1 微分方程微分方程符号表达式或符号方程可以赋给符号变量,以后调用方符号表达式或符号方程可以赋给符号变量,以后调用方便;也可以不赋给符号变量直接参与运算。便;也可
4、以不赋给符号变量直接参与运算。sqrt(2)ans=1.4142 返回数值结果返回数值结果 a=sqrt(sym(2)符号变量符号变量 a=2(1/2)返回符号结果返回符号结果 double(x)求符号的值求符号的值 ans=1.4142 sym(2)/sym(5)+sym(1)/sym(3)符号表达式符号表达式ans=11/15%结果为分数形式结果为分数形式 2/5+1/3ans=0.7333%结果为结果为double形式形式例例3-1 符号对象和普通数据对象之间的差别符号对象和普通数据对象之间的差别例例3-2 用符号运算求解方程组用符号运算求解方程组15axbyaxby a,b,x,y均为
5、符号运算量。在符号运算前,应先将均为符号运算量。在符号运算前,应先将a,b,x,y定义为符号运算量。定义为符号运算量。a=sym(a);b=sym(b);%定义定义a,ba,b为符号常量,内容为符号为符号常量,内容为符号a a、b b。y=2/by=2/b;x=sym(x);y=sym(y”););%定义定义a,b为符号变量为符号变量 x,y=solve(a*x-b*y-1,a*x+b*y-5,x,y)%以以a,b为符号常数,为符号常数,x,y为符号变量为符号变量即可得到方程组的解:即可得到方程组的解:x=3/ay=2/b例例3-3 3-3 已知一复数表达式已知一复数表达式 z=x+iz=x+
6、i*y,y,试求其共轭复数试求其共轭复数,并求该表达式与其共轭复数乘积的多项式。并求该表达式与其共轭复数乘积的多项式。命令如下:命令如下:x=sym(x,real);x=sym(x,real);把变量把变量x x定义为实数定义为实数 y=sym(y,real);y=sym(y,real);指定符号变量指定符号变量y y为实为实数。数。z=x+iz=x+i*y;%y;%定义复数表达式定义复数表达式 conj(z);%conj(z);%求共轭复数求共轭复数 expand(zexpand(z*conj(z)conj(z)%求表达式与其共轭复数乘积的多项式求表达式与其共轭复数乘积的多项式 ans=an
7、s=x2+y2 x2+y2 x=sym(x,unreal)x=sym(x,unreal)去掉去掉xx的属性的属性,将将xx创建创建 为纯格式的符号变量,不具有任何属性。为纯格式的符号变量,不具有任何属性。syms函数的功能与函数的功能与sym函数类似。函数类似。syms函数可以在函数可以在一个语句中同时定义多个符号变量,其一般格式为:一个语句中同时定义多个符号变量,其一般格式为:syms arg1 arg2 argN 用于将用于将rg1,arg2,argN等符号创建为符号型数据。等符号创建为符号型数据。例:例:syms x y z(2)syms函数函数 一般习惯于使用排在字母表中前面的字母作为
8、变一般习惯于使用排在字母表中前面的字母作为变 量的系数,而用排在后面的字母表示变量。量的系数,而用排在后面的字母表示变量。例如:例如:f=sym(ax2+bx+c)表达式中的表达式中的a,b,c通常被认为是常数,用作变量的通常被认为是常数,用作变量的系数;而将系数;而将x看作自变量。看作自变量。(3)默认符号变量)默认符号变量 符号表达式由符号变量、函数、算术运算符等组成。符号表达式由符号变量、函数、算术运算符等组成。符号表达式的书写格式与数值表达式相同。例如符号表达式的书写格式与数值表达式相同。例如,数学表数学表达式:达式:其符号表达式为:其符号表达式为:1+sqr(5*x)/2注意,在定义
9、表达式前应先将表达式中的字符注意,在定义表达式前应先将表达式中的字符x定义为符定义为符号变量。号变量。1+5x23、符号表达式的生成符号表达式的生成findsym 函数函数:查询系统默认符号变量个数及变量名。查询系统默认符号变量个数及变量名。findsym 函数通常由系统自动调用,在进行符号运算函数通常由系统自动调用,在进行符号运算时,系统调用该函数确定表达式中的符号变量,执行时,系统调用该函数确定表达式中的符号变量,执行相应的操作。相应的操作。findsym(f):返回表达式:返回表达式f中的所有符号变量。中的所有符号变量。findsym(f,n):返回表达式:返回表达式f中的中的n个变量个
10、变量例:例:f=sym(cos(alpha)f=sym(cos(alpha)*b b*x1+14x1+14*y)y)findsym(f)%alpha findsym(f)%alpha,b b,x1,yx1,y findsym(f,2)%x1,y findsym(f,2)%x1,ysubs 函数:将符号表达式中的符号变量用数值代替。函数:将符号表达式中的符号变量用数值代替。subs(f):显示符号表达式:显示符号表达式f。subs(f,new):用:用new替代符号表达式替代符号表达式f的系统默认变量。的系统默认变量。默认变量的选择规则为:对于只包含一个字符的变量,默认变量的选择规则为:对于只包
11、含一个字符的变量,选择靠近选择靠近 x 的变量作为默认变量;如果有两个变量和的变量作为默认变量;如果有两个变量和 x 之间的距离相同,则选择字母表后面的的变量作为默认之间的距离相同,则选择字母表后面的的变量作为默认变量变量 subs(f,old,new):用:用new替代符号表达式替代符号表达式f的系统变量的系统变量old。例:例:syms x y f=x2*y+5*x*sqrt(y)f=x2*y+5*x*y(1/2)subs(f,x,3)ans=9*y+15*y(1/2)subs(f,y,3)ans=3*x2+5*x*3(1/2)将表达式中的自变量定义为符号变量后,赋值给符号将表达式中的自变
12、量定义为符号变量后,赋值给符号函数名,即可生成符号函数。例如有一数学表达式:函数名,即可生成符号函数。例如有一数学表达式:222ax+byf(x,y)=c4、符号函数的生成、符号函数的生成其用符号表达式生成符号函数其用符号表达式生成符号函数fxy的过程为:的过程为:syms a b c x y%定义符号运算量定义符号运算量 fxy=(a*x2+b*y2)/c2%生成符号函数生成符号函数生成符号函数生成符号函数fxy后,即可用于微积分等符号计算。后,即可用于微积分等符号计算。例例3-5 3-5 定义一个符号函数定义一个符号函数 fxy=fxy=(a*x2+b*y2)/c2,分别求该,分别求该函数
13、对函数对x、y的导数和对的导数和对x的积分。的积分。syms a b c x y%定义符号变量定义符号变量fxy=(a*x2+b*y2)/c2;%生成符号函数生成符号函数 diff(fxy,x)%符号函数符号函数fxy对对x求导数求导数ans=2*a*x/c2diff(fxy,y)%符号函数符号函数fxy对对y求导数求导数ans=2*b*y/c2 int(fxy,x)%符号函数符号函数fxy对对x求积分求积分ans=1/c2*(1/3*a*x3+b*y2*x)5、符号方程的生成符号方程的生成(1)创建抽象方程创建抽象方程 MATLAB 中可以创建抽象方程,即只有方程符号,没有中可以创建抽象方程
14、,即只有方程符号,没有具体表达式的方程。若要创建方程,并计算其一阶微分的方具体表达式的方程。若要创建方程,并计算其一阶微分的方法如下:法如下:f=sym(f(x);syms x h;df=(subs(f,x,x+h)-f)/hdf=(f(x+h)-f(x)/h抽象方程在积分变换中有着很多的应用。抽象方程在积分变换中有着很多的应用。(2)创建符号方程)创建符号方程 创建符号方程的方法有两种:创建符号方程的方法有两种:利用符号表达式创建利用符号表达式创建 先创建符号变量,通过符号变量的运算生成符号先创建符号变量,通过符号变量的运算生成符号函数函数 直接生成符号表达式直接生成符号表达式 创建创建 M
15、 文件文件 利用利用 M 文件创建的函数,可以接受任何符号变量文件创建的函数,可以接受任何符号变量作为输入,作为生成函数的自变量作为输入,作为生成函数的自变量 equation1=sym(sin(x)+cos(x)=1)equation1=sin(x)+cos(x)=16、符号和数值之间的转化、符号和数值之间的转化 S=sym(A,flag):将数值转化为符号变量,:将数值转化为符号变量,其中其中 参数参数 flag 可以为可以为 r,d,e,或者或者 f 中的一个。该函数将数值标中的一个。该函数将数值标量或者矩阵转化为参数形式,该函数的第二个参数用于指量或者矩阵转化为参数形式,该函数的第二个
16、参数用于指定浮点数转化的方法,该函数各个取值的意义如表所示:定浮点数转化的方法,该函数各个取值的意义如表所示:参数参数说明说明rA为有理数形式为有理数形式dA为十进制数形式为十进制数形式eA为指数形式为指数形式fA为浮点数形式,将数值表示为为浮点数形式,将数值表示为 1.F*2(e)或或者者-1.F*2(e)的格式,其中的格式,其中 F 为为13 位十六进位十六进制数,制数,e 为整数为整数例:例:t=0.1 t=0.1000 sym(t)%有理数形式有理数形式 ans=1/10 sym(t,r)%有理数形式有理数形式 ans=1/10 sym(t,f)%浮点数形式浮点数形式 ans=1.99
17、9999999999a*2(-4)7、任意精度的计算、任意精度的计算 符号计算的一个非常显著的特点是:符号计算的一个非常显著的特点是:在计算过程中不在计算过程中不会出现舍入误差,会出现舍入误差,从而可以得到任意精度的数值解。如果从而可以得到任意精度的数值解。如果希望计算结果精确,可以用符号计算来获得足够高的计算希望计算结果精确,可以用符号计算来获得足够高的计算精度。符号计算相对于数值计算而言,需要更多的计算时精度。符号计算相对于数值计算而言,需要更多的计算时间和存储空间。间和存储空间。MATLAB 工具箱中有三种不同类型的算术运算:工具箱中有三种不同类型的算术运算:数值型:数值型:MATLAB
18、 的浮点数运算;的浮点数运算;有理数类型:有理数类型:Maple 的精确符号运算;的精确符号运算;VPA 类型:类型:Maple 的任意精度算术运算。的任意精度算术运算。l 在三种运算中,浮点运算速度最快,所需的内存空间小,在三种运算中,浮点运算速度最快,所需的内存空间小,但是结果精确度最低,而且存在一个舍入误差。但是结果精确度最低,而且存在一个舍入误差。l 符号运算中的有理数运算,其时间复杂度和空间复杂度都符号运算中的有理数运算,其时间复杂度和空间复杂度都是最大的,但是,只要时间和空间允许,能够得到任意精度是最大的,但是,只要时间和空间允许,能够得到任意精度的结果。的结果。l 可变精度的运算
19、运算速度和精确度均位于上面两种运算之可变精度的运算运算速度和精确度均位于上面两种运算之间。其具体精度由参数指定,参数越大,精确度越高,运行间。其具体精度由参数指定,参数越大,精确度越高,运行越慢。越慢。浮点算术运算:浮点算术运算:1/2+1/3 (定义输出格式定义输出格式format long)ans=0.83333333333333符号运算:符号运算:sym(1/2)+sym(1/3)ans=5/6 精确解精确解任意精度算术运算:任意精度算术运算:digits(n)设置可变精度,缺省设置可变精度,缺省16位位 vpa(x,n)显示可变精度计算显示可变精度计算例:例:digits(25)vpa
20、(1/2+1/3)ans=.8333333333333333333333333二、符号运算的基本操作二、符号运算的基本操作符号表达式的四则运算符号表达式的四则运算合并符号表达式的同类项合并符号表达式的同类项 符号多项式的因式分解符号多项式的因式分解 符号表达式的简化符号表达式的简化 subs函数用于替换求值函数用于替换求值 反函数的运算反函数的运算 复合函数的运算复合函数的运算 1、符号表达式的四则运算符号表达式的四则运算 syms x y a b fun1=sin(x)+cos(y)fun1=sin(x)+cos(y)fun2=a+bfun2=a+b fun1+fun2ans=sin(x)+
21、cos(y)+a+bfun1*fun2 ans=(sin(x)+cos(y)*(a+b)2、合并符号表达式的同类项、合并符号表达式的同类项 syms x y collect(x2*y+y*x-x2-2*x)ans=(y-1)*x2+(y-2)*x f=-1/4*x*exp(-2*x)+3/16*exp(-2*x);collect(f)ans=-1/4*x*exp(-2*x)+3/16*exp(-2*x)R=collect(S,v),对指定的变量,对指定的变量 v 进行合并,如果进行合并,如果不指定,则默认为对不指定,则默认为对 x 进行合并。进行合并。3、符号多项式的嵌套符号多项式的嵌套(ho
22、rner)syms x fun1=2*x3+2*x2-32*x+40fun1=2*x3+2*x2-32*x+40 horner(fun1)ans=40+(-32+(2+2*x)*x)*xhorner(f)函数:将函数:将f转化为嵌套格式。嵌套格式在多项式求转化为嵌套格式。嵌套格式在多项式求值中可以降低计算的时间复杂度。值中可以降低计算的时间复杂度。expand(f)函数:用于符号表达式的展开。其操作对象可以是函数:用于符号表达式的展开。其操作对象可以是多种类型,如多项式、三角函数、指数函数等。(多种类型,如多项式、三角函数、指数函数等。(P84表表3.1)4、符号多项式的展开符号多项式的展开(
23、expand )syms x fun1=40+(-32+(2+2*x)*x)*x expand(fun1)ans=2*x3+2*x2-32*x+40factor(f)函数:实现因式分解功能,如果输入的参数为正整函数:实现因式分解功能,如果输入的参数为正整数,则返回此数的素数因数。数,则返回此数的素数因数。5、符号多项式的因式分解符号多项式的因式分解(factor )syms x fun1=x2-x-6 factor(fun1)ans=(x+2)*(x-3)6、符号表达式的简化、符号表达式的简化l simple(s):实现表达式的化简,该函数可以自动选择化简实现表达式的化简,该函数可以自动选择化
24、简所选择的方法,最后返回表达式的最简单的形式。函数的所选择的方法,最后返回表达式的最简单的形式。函数的化简方法包括:化简方法包括:simplify、combine(trig)、radsimpconvert(exp)、collect、factor、expand 等。等。l simplify(f):函数实现表达式的化简,化简所选用的方法函数实现表达式的化简,化简所选用的方法为为 Maple 中的化简方法。中的化简方法。syms x fun1=(1/x+7/x2+12/x+8)(1/3)fun1=(1/x+7/x2+12/x+8)(1/3)sfy1=simplify(fun1)sfy1=(13*x+
25、7+8*x2)/x2)(1/3)7、subs函数用于替换求值函数用于替换求值 syms x yf=x2*y+5*x*sqrt(y)f=x2*y+5*x*y(1/2)subs(f,x,3)ans=9*y+15*y(1/2)subs(f,y,3)ans=3*x2+5*x*3(1/2)8、反函数的运算反函数的运算(finverse)syms x y f=x2+yf=x2+y finverse(f,y)ans=-x2+y 9、复合函数的运算复合函数的运算(compose)syms x y z t u f=1/(1+x2)g=sin(y)h=xt p=exp(-y/u)compose(f,g)ans=1
26、/(1+sin(y)2)compose(f,g,t)ans=1/(1+sin(t)2)1、符号矩阵的创建、符号矩阵的创建 数值矩阵数值矩阵A=1,2;3,4 A=a,b;c,d 不识别不识别使用函数使用函数sym直接创建符号矩阵直接创建符号矩阵 命令格式:命令格式:A=sym()二、符号矩阵二、符号矩阵例如:例如:A=sym(a,2*b;3*a,0)A=a,2*b 3*a,0注意:符号矩阵的注意:符号矩阵的每一行每一行的两端都有方括号,这是与的两端都有方括号,这是与 matlab数值矩阵的一个重要区别。数值矩阵的一个重要区别。用字符串直接创建矩阵用字符串直接创建矩阵 模仿模仿matlab数值矩
27、阵的创建方法需保证同一列中各数值矩阵的创建方法需保证同一列中各元素字符串有相同的长度。元素字符串有相同的长度。例:例:A=a,2*b;3*a,0 A=a,2*b 3*a,0 将数值矩阵转化为将数值矩阵转化为符号矩阵符号矩阵函数调用格式:函数调用格式:sym(A)A=1/3,2.5;1/0.7,2/5A=0.3333 2.5000 1.4286 0.4000sym(A)ans=1/3,5/2 10/7,2/5 虽然矩阵形式没有发生改虽然矩阵形式没有发生改变,但是在变,但是在MATLAB 7的工的工作区间内,系统已经生成了作区间内,系统已经生成了一个新的矩阵,其数据类型一个新的矩阵,其数据类型为符
28、号型。为符号型。符号矩阵的修改符号矩阵的修改 a.直接修改直接修改 可用可用、键找到所要修改的矩阵,直接修改键找到所要修改的矩阵,直接修改 b.指令修改指令修改 用用A1=sym(A,new)来修改。来修改。用用A1=subs(A,new,old)来修改来修改例如:例如:A=a,2*b 3*a,0 A1=sym(A,2,2,4*b)A(2,2)=4*b A1=a,2*b 3*a,4*b A2=subs(A1,c,b)A2=a,2*c 3*a,4*c 2、符号矩阵的运算、符号矩阵的运算 数值运算中,所有矩阵运算操作指令都比较直观、简单。数值运算中,所有矩阵运算操作指令都比较直观、简单。例如:例如
29、:a=b+c;a=a*b;A=2*a2+3*a-5等。等。而符号运算就不同了,所有涉及符号运算的操作都有专用而符号运算就不同了,所有涉及符号运算的操作都有专用函数来进行。函数来进行。符号矩阵运算的函数:符号矩阵运算的函数:symadd(a,d)符号矩阵的加符号矩阵的加symsub(a,b)符号矩阵的减符号矩阵的减symmul(a,b)符号矩阵的乘符号矩阵的乘symdiv(a,b)符号矩阵的除符号矩阵的除sympow(a,b)符号矩阵的幂运算符号矩阵的幂运算symop(a,b)符号矩阵的综合运算符号矩阵的综合运算例例3-6:符号矩阵的运算符号矩阵的运算 f=2*x2+3*x-5;g=x2+x-7;h=symadd(f,g)h=3*x2+4*x-12 f1=cos(x);g1=sin(2*x);symop(f,/,g,+,f,*,g)ans=cos(x)/sin(2*x)+cos(x)*sin(2*x)q=sym(3,4,9;x,y,z;a,b,c)p=sym(x,1/x,x2,x3;a,b,c,d;5,2,3,6)r=q*p例例3-7:功能同:功能同3-6 syms x f=2*x2+3*x-5;g=x2+x-7;h=f+g h=3*x2+4*x-12 f1=cos(x);g1=sin(2*x);f/g+f*g ans=cos(x)/sin(x)+cos(x)*sin(x)