第12讲符号表达式与符号运算

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第12讲:符号表达式与符号运算2我们知道数值计算是MATLAB最强大的功能之一,但自从Mathworks公司买下了Maple的使用权以后,MATLAB将数值计算与符号计算熔为一体,成了全功能的计算软件。所谓符号计算是指在运算时,无须事先对变量赋值,而将所得到结果以标准的符号形式表示。MATLAB以Maple的内核作为符号计算引,依赖Maple已有的函数库,开发了实现符号计算的符号工具箱。3本讲教学目标了解符号对象掌握符号和数值的不同掌握符号变量的定义方法掌握符号多项式的生成和运算掌握符号矩阵的生成和运算方法412.1符号对象符号对象是符号的字符串表示,是符号工具箱中定义的又一种数据类型。在符号工具箱中符号对象用于表示符号变量、表达式和方程。例1:符号对象和普通数据对象之间的差别sqrt(2)%在命令窗口中输入ans=1.4142x=sqrt(sym(2))%在命令窗口中输入x=2^(1/2)返回数值结果返回符号结果5由上例可以看出,当采用符号运算时,并不计算出表达式的结果,而是给出符号表达式。如果可以查看符号x所表示的值,可以在窗口中输入:double(x)ans=1.41426例2:符号运算和数值运算之间的差别。sym(2)/sym(5)ans=2/52/5+1/3ans=0.7333sym(2)/sym(5)+sym(1)/sym(3)ans=11/15double(sym(2)/sym(5)+sym(1)/sym(3))ans=0.7333当进行数值运算时,结果为double型数据;而进行符号运算时,结果为分数形式。712.2定义符号变量参与符号运算的对象可以是符号变量、符号表达式或符号矩阵。符号变量要先定义,后引用。可以用sym函数、syms函数将运算量定义为符号型数据。引用符号运算函数时,用户可指定函数执行过程中的变量参数;若用户没有指定变量参数,则使用findsym函数默认的变量作为函数的变量参数。812.2.1sym函数sym函数的主要功能是创建符号变量,以便进行符号运算,也可以用于创建符号表达式或符号矩阵。一般格式为:x=sym(‘x’)其目的是将’x’创建为符号变量,以x作为输出变量名。每次调用该函数,可以定义一个符号变量。9函数的其他调用格式:S=sym(A)——如果参数A为字符串,则返回一个符号变量或者一个符号数值;如果A是一个数字或矩阵,则返回该参数的符号表示;x=sym(‘x’,‘real’)——指定符号变量x为实数;x=sym(‘x’,‘unreal’)——指定x为一个纯粹的变量,而不具有其他属性;S=sym(A,flag)——参数flag可为‘r’,‘d’,‘e’或‘f’。该函数将数值标量或者矩阵转化为符号形式,第二个参数用于指定浮点数转化的方法,该函数各个取值的意义如表所示。浮点数,将数值表示为浮点数,将数值表示为'1.F'*2^(e)'1.F'*2^(e)或或‘‘--1.F1.F’’*2^(e)*2^(e)的格式,其中的格式,其中FF为为1313位十六进制数,位十六进制数,ee为整数为整数ff估计误差估计误差ee十进制数十进制数dd有理数有理数rr说明说明参数参数浮点数,将数值表示为浮点数,将数值表示为'1.F'*2^(e)'1.F'*2^(e)或或‘‘--1.F1.F’’*2^(e)*2^(e)的格式,其中的格式,其中FF为为1313位十六进制数,位十六进制数,ee为整数为整数ff估计误差估计误差ee十进制数十进制数dd有理数有理数rr说明说明参数参数10例3:用符号运算解方程组:其中a,b,x,y均为符号运算量。说明:在符号运算前,应先将a,b,x,y定义为符号运算量。15byaxbyax11a=sym(‘a’);%定义‘a’为符号运算量b=sym(‘b’);x=sym(‘x’);y=sym(‘y);%以a,b为符号常数,x,y为符号变量求解方程组[x,y]=solve(a*x-b*y-1,a*x+b*y-5,x,y)x=3/ay=2/b12例4:已知一复数表达式z=x+i*y,试求其共轭复数,并求该表达式与其共轭复数乘积的多项式。说明:为了使乘积表达式x^2+y^2非负,这里把变量x和y定义为实数。13x=sym(‘x’,'real');y=sym(‘y’,'real');z=x+i*y;%定义复数表达式conj(z);%求共轭复数%求表达式与其共轭复数乘积的多项式expand(z*conj(z))ans=x^2+y^21412.2.2syms函数syms函数的功能与sym函数类似,可以在一个语句中同时定义多个符号变量。其一般格式为:symsarg1arg2…argN用于将arg1,arg2,…,argN等符号创建为符号型数据。1512.2.3默认符号变量在数学表达式中,一般习惯于使用排在字母表中前面的字母作为变量的系数,而用排在后面的字母表示变量。例如:f=ax2+bx+cg=sin(at+b)根据数学式中表示自变量的习惯,默认a,b,c为符号常数,x,t为看作自变量。16在进行导数运算时,由于没有指定符号变量,则系统采用数学习惯来确定表达式中的自变量,默认a,b,c为符号常数,x,t为符号变量,即:对函数f求导为:df/dx;对函数g求导为:dg/dt可以用findsym函数查询默认的变量,来了解函数引用过程中使用的符号变量个数及名称。其格式为:findsym(f,n)说明:f为用户定义的符号函数,n表示查询变量的个数,省略时表示查询全部默认变量。17例5:查询下面符号函数中的系统默认变量。f=x^n和g=sin(at+b)symsabntx%定义符号变量f=x^n;%给定符号函数g=sin(a*t+b);findsym(f,1)%查询1个系统默认变量ans=x%表示f函数中查询的1个系统默认变量为x1812.3符号表达式符号表达式是由符号变量、函数、算术运算符等组成的式子。符号表达式的书写格式与数值表达式相同。例如,数学表达式:其符号表达式为:1+sqrt(5*x))/2。注意:在定义表达式前应先将表达式中的字符x定义为符号变量。251x1912.3.1符号表达式运算1.提取分子和分母运算如果符号表达式是一个有理分式或可以展开为有理分式,可用numden函数来提取符号表达式中的分子或分母。其一般格式为:[n,d]=numden(s)该函数提取符号表达式s的分子和分母,分别将它们存放在n与d中。202.符号表达式的四则运算符号表达式的加、减、乘、除运算可分别由函数symadd、symsub、symmul和symdiv来实现,幂运算可以由sympow来实现。3.符号表达式的替换求值sub(s,new)——将符号表达式中自由符号变量用new替代sub(s,old,new)——将符号变量old用new替代。214.符号表达式的因式分解与展开函数的调用格式为:factor(s)——对符号表达式s分解因式expand(s)——对符号表达式s进行展开horner(s)——对符号多项式s用嵌套形式表示5.符号表达式的化简函数的调用格式为:simplify(s)——应用函数规则对s进行化简simple(s)——调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程22例6:将表达式(x^9-1)分解为多个因式。symsxfactor(x^9-1)ans=(x-1)*(x^2+x+1)*(x^6+x^3+1)例7:符号表达式的简化。symsxfun=(1/x+7/x^2+12/x+8)^(1/3)fun=(13/x+7/x^2+8)^(1/3)sfy=simplify(fun)sfy=((13*x+7+8*x^2)/x^2)^(1/3)2312.3.2符号表达式与数值表达式的转化数值表达式→符号表达式——函数sym。符号表达式→数值表达式——函数eval、“numeric”、vpa和subs。eval(A)——符号表达式→数值表达式R=vpa(A)——对符号表达式A求给定精度的值R=subs(S,old,new)——将符号表达式S中的某些“老变量”替换成“新变量或数值数组。numeric——代表具体的数值类型,如float等24例8:求以下符号的有效位数值digits(25)%设置vpa输出的有效数q=vpa(sin(sym('pi')/6))w=vpa('(1+sqrt(5))/2',4)%有效位为4q=0.5000000000000000000000000w=1.618例9:替换“老”符号。subs(a+b,a,4)ans=4+bsubs(cos(a)+sin(b),{a,b},{sym('alpha'),2})ans=cos(alpha)+sin(2)2512.4符号矩阵12.4.1符号矩阵的创建数值矩阵A=[1,2;3,4]A=[a,b;c,d]——不识别1.用函数sym创建符号矩阵命令格式:A=sym('[]')例10:A=sym('[a,2*b;3*a,0]')A=[a,2*b][3*a,0]262.用字符串直接创建矩阵模仿matlab数值矩阵的创建方法,需保证同一列中各元素字符串有相同的长度。例11:A=['[a,2*b]';'[3*a,0]']A=[a,2*b][3*a,0]注意:符号矩阵的每一行的两端都有方括号,这是与matlab数值矩阵的一个重要区别。273.符号矩阵的修改a.直接修改可用、键找到所要修改的矩阵,直接修改b.索引修改用矩阵的坐标括号表达式实现修改。例12:A=['[a,2*b]';'[3*a,0]'];A(2,2)='4*b‘;则A=[a,2*b][3*a,4*b]284.符号矩阵与数值矩阵的转换a.用函数sym:数值矩阵→符号矩阵b.用函数“numeric”:符号矩阵→数值矩阵例13:符号矩阵与数值矩阵的转换。A=[1/3,2.5;1/0.7,2/5]A=0.33332.50001.42860.4000B=sym(A)C=single(B)B=[1/3,5/2][10/7,2/5]C=0.33332.50001.42860.400029本节完,谢谢!!

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功