您好,欢迎访问三七文档
十一章的符号运算除了数值运算,在数学和工程中还经常用到符号运算。比如我们经常使用的对某个表达式进行特点运算,如微分、积分等。它们的区别在于:数值运算中,参与运算的变量是被赋值的数值变量;而在符号运算中,参与运算的是非数值的所谓符号变量,其中出现的数值都当作符号来被处理的。我们先看一个具体实例:对于函数,求其对于x的微分和积分:命令如下•f=‘sin(x)^2’;•dfdx=diff(f);•intf=int(f)这样,我们就可以得到正确的表达式。实际上,我们首先定义了符号表达式f,然后由相关的符号运算得到了微分和积分的结果。下面我们就来介绍相关内容。一、定义符号对象•在MATLAB的symbolicmathtoolbox中定义了一种新的数据类型,为符号对象。该对象用来存储代表符号的字符串,可以是符号变量,符号表达式或符号矩阵几种形式。•在使用符号对象之前,首先要声明要用到的符号变量,语法为:syms变量名1变量名2……•其中,各个变量名应该用空格分隔,不能用逗号。如symsax即创建了两个符号变量a和x,定义后的符号变量就可以参与符号运算。在创建必要的符号变量后,可以在此基础上建立符号表达式和符号方程,例如:•symsxabc•f=sym(’sin(x)^2’);或f=’sin(x)^2’•eq=sym(’a*x^2+b*x+c=0’)或eq=’a*x^2+b*x+c=0’上面的符号变量f和eq分别保存的是一个符号表达式和符号方程。注意,符号表达式和符号方程必须要以单引号包含起来。另外,对于矩阵而言,数值矩阵不能参与符号运算,所以,我们还要将某参与符号运算的矩阵定义为符号矩阵。例如:A=hilb(3)A=sym(A)•当使用符号转换函数时,有理化运算被启动,原先的数值类型被转化为无穷精度的符号形式数据,矩阵也转换为符号矩阵。一般情况下,通过sym()函数,可以与普通矩阵定义类似的方法来定义符号矩阵。例如:•symsabcd;•B=sym(‘[2*a+b,3*b;5*c+d,2*d]’);二、数值与符号的转换对于某个数值变量所保存的数值结果,sym()函数可以将其转换为相应的符号表达式,即该数值经过转换后被看作一个符号变量。设要被转换的数值变量为a,则语法为:•sym(a,’f’)浮点表示形式•sym(a,’r’)有理数表示形式(为缺省设置)•sym(a,’d’)十进制表示形式例如:a=(1+sqrt(5))/2•digits(5)•b=sym(a,’d’)即将其转换为5位有效数字的符号对象,我们注意比较a,b类型上的区别。三、符号算术运算1.加减乘除运算相应的语句为:•symadd(A,B)•symsub(A,B)•symmul(A,B)•symdiv(A,B)2.变量替换当我们得到一个符号解或一个符号表达式的时候,往往需要将一些符号变量替换成数字或其他符号。我们可以通过subs()函数来实现该功能。该函数适于单个符号矩阵、表达式、代数方程和微分方程。语法为:•subs(S,NEW),即用新变量NEW替换S中的默认变量,一般而言,其默认变量为x。例如:•G=sym(‘[a*sin(b+x),a+b,exp(a*x),sqrt(x)]’);•G1=subs(G,‘pi/3’)注意:pi/3也是一符号对象。subs(S,NEW,OLD)即用新变量NEW替换S中的指定变量OLD。例如:•f=sym(‘sin(1/3*a*pi)’);•subs(f,’2’,’a’)其结果将a替换为符号变量‘2’。如果用数值替换原来表达式中的变量,最终将得到对原表达式计算后的数值结果。例如上式中,以数值2替代原式中的a,有:•subs(f,2,‘a’)则结果为一数值,而非符号表达式。3因式分解与展开factor(S)对S分解因式,S是符号表达式或符号矩阵。expand(S)对S进行展开,S是符号表达式或符号矩阵。collect(S)对S合并同类项,S是符号表达式或符号矩阵。collect(S,v)对S按变量v合并同类项,S是符号表达式或符号矩阵。例:对符号矩阵A的每个元素分解因式。命令如下:symsabxy;A=[2*a^2*b^3*x^2-4*a*b^4*x^3+10*a*b^6*x^4,3*x*y-5*x^2;4,a^3-b^3];factor(A)%对A的每个元素分解因式例:计算表达式S的值。命令如下:symsxy;s=(-7*x^2-8*y^2)*(-x^2+3*y^2);expand(s)%对s展开collect(s,x)%对s按变量x合并同类项(无同类项)factor(ans)%对ans分解因式四.符号微积分运算在人工进行微积分运算中,对应变量的选取由我们本身决定,如对于函数求导,我们习惯上自然认为是对x,而不是对n。但是MATLAB如何区分呢?这里我们介绍其确定符号变量的原则:•只对于除i,j之外的小写字母进行检索;•小写字母x是首选的符号变量;•其余小写字母被选的顺序为:靠近x的优先选取,同样靠近的情况下,之后的比之前的优先选取。按照这个原则,上式求导自然是对x,而不是对n。符号微分运算:运算函数为diff().语法规则为:1)diff(f)对符号表达式f进行一次微分,微分变量由上面规则决定,例如:•symsax;•f=’sin(a*x)’;•df=diff(f)结果显示为:•df=•cos(a*x)*a2)diff(f,a),对于符号表达式f对指定变量a求导。3)diff(f,a,n),对于符号表达式f对指定变量a求n阶导。符号积分运算:int()函数。语法为:1)int(s)求对于符号表达式s关于x的不定积分。例如:•symsx;•s=’1/(1+x^2)’;•f=int(s)结果为:f=atan(x)2)int(s,v)计算符号表达式s关于指定变量v的不定积分。3)int(s,v,a,b)计算符号表达式s关于指定变量v从a到b的定积分。例:对于函数•symsxy;•s=’x*exp(-x*y)’;•int(int(s,x),y);dydxxexeyxsxyxy)(求,),(另外,在符号运算中,我们往往希望以最简单的形式来书写表达式,MATLAB提供了simple()函数来实现对表达式的简化。例如:•symsx;•f=sym(’cos(x)^2+sin(x)^2’);•f=simple(f)结果:f=1四、符号函数的可视化二维作图:对于符号函数,MATLAB提供了一个非常简单的函数:ezplot()函数。它和plot最大区别是:plot要提供具体的x,y坐标值才能画出图形,而ezplot则只需要提供一个符号表达式即可。•语法为:1)ezplot(f)•对于符号函数f=f(x)作图,x的默认范围是:-2*pix2*pi2)ezplot(f,[a,b])对于符号函数f=f(x)在[a,b]区间作图。3)对于符号函数f=f(x,y),将做出方程f(x,y)=0的图形。例如:f=’x^2-y^2-1’;ezplot(f)也可以指定范围:ezplot(f,[xmin,xmax,ymin,ymax])4)ezplot(x,y)做出参数方程x=x(t),y=y(t),0t2*pi的曲线例如:•x=’sin(t)’•y=’cos(t)’•ezplot(x,y)三维曲线作图ezplot3()函数,语法:ezplot3(x,y,z,[tmin,tmax])做出参数方程x=x(t),y=y(t),z=z(t)的立体曲线,例如:•x=’sin(3*t)*cos(t)’;•y=’sin(3*t)*sin(t)’;•z=’t’;•ezplot3(x,y,z,’animate’)其中,animate选项产生一个跟踪小球,并可以单击repeat按钮重新演示。
本文标题:十一章的符号运算
链接地址:https://www.777doc.com/doc-3229614 .html