资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,*,符号表达式、符号矩阵的创建,符号矩阵的运算,符号微积分,符号代数方程求解,符号微分方程,符号函数的二维图,本章要点,符号表达式、符号矩阵的创建本章要点,1,一、符号变量、符号表达式和符号方程的生成,与数值运算的区别:,数值运算中必须,先对变量赋值,,然后才能参与运算。,符号运算,无须事先对独立变量赋值,,运算结果以标准的符号形式表达,,可以获得任意精度的解。,参与符号运算的对象可以是符号变量、符号表达式或,符号矩阵。,(,符号变量也要先定义,后引用),1,、什么是符号运算,一、符号变量、符号表达式和符号方程的生成 与数值运算的,2,2,、符号变量的定义,(,1,),sym,函数,主要功能是创建符号变量、符号表达式或符号矩阵。函数调用的一般格式为:,x=sym(x),其目的是将,x,创建为符号变量,以,x,作为输出变量名。,例:f=sym(,y);%定义f是符号变量名,值为符号x,f 1=sym(,sin(x)+5x,);,f 1 符号变量名,sin(x)+5x 符号表达式,符号标识,符号表达式一定要用 单引号括起来matlab才能识别。,2、符号变量的定义(1)sym函数例:f=sym(y,3,的内容可以是符号表达式,也可以是符号方程。,例:,f1=sym,(,a,x2+bx+c),二次三项式,f2=,sym,(,a,x2+bx+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/3,ans=,0.7333%结果为double形式,例,3-1,符号对象和普通数据对象之间的差别,sqrt(2)例3-1 符号对象和普通数据对象之间的,5,例,3-2,用符号运算求解方程组,a,b,x,y,均为符号运算量。在符号运算前,应先将,a,b,x,y,定义为符号运算量。,a=sym(a);,b=sym(b);,%,定义,a,b,为符号常量,内容为符号,a,、,b,。,y=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/a,y=2/b,例3-2 用符号运算求解方程组 a,b,x,6,例,3-3,已知一复数表达式,z=x+i*y,试求其共轭复数,并求该表达式与其共轭复数乘积的多项式。,命令如下:,x=sym(x,real);,把变量,x,定义为实数,y=sym(y,real);,指定符号变量,y,为实数。,z=x+i*y;%,定义复数表达式,conj(z);%,求共轭复数,expand(z*conj(z),%,求表达式与其共轭复数乘积的多项式,ans=,x2+y2,x=sym(x,unreal),去掉,x,的属性,将,x,创建,为纯格式的符号变量,不具有任何属性。,例3-3 已知一复数表达式 z=x+i*y,试求其共轭复数,7,syms,函数的功能与,sym,函数类似。,syms,函数可以在一个语句中同时定义多个符号变量,其一般格式为:,syms arg1 arg2 argN,用于将,rg1,arg2,argN,等符号创建为符号型数据。,例:,syms x y z,(,2,),syms,函数,syms函数的功能与sym函数类似。syms函数,8,一般习惯于使用排在字母表中前面的字母作为变 量的系数,而用排在后面的字母表示变量。例如:,f=sym(ax,2,+bx+c),表达式中的,a,b,c,通常被认为是常数,用作变量的系数;而将,x,看作自变量。,(,3,)默认符号变量,一般习惯于使用排在字母表中前面的字母作为变 量的系数,9,符号表达式由符号变量、函数、算术运算符等组成。符号表达式的书写格式与数值表达式相同。例如,数学表达式:,其符号表达式为:,1+sqr(5*x)/2,注意,在定义表达式前应先将表达式中的字符,x,定义为符号变量。,3,、符号表达式的生成,符号表达式由符号变量、函数、算术运算符等组成。符号,10,findsym,函数,:,查询系统默认符号变量个数及变量名。,findsym,函数通常由系统自动调用,在进行符号运算时,系统调用该函数确定表达式中的符号变量,执行相应的操作。,findsym(f),:返回表达式,f,中的所有符号变量。,findsym(f,n),:返回表达式,f,中的,n,个变量,例:,f=sym(cos(alpha)*b*x1+14*y),findsym(f)%alpha,,,b,,,x1,y,findsym(f,2)%x1,y,findsym 函数:查询系统默认符号变量个数及变量名。,11,subs,函数:将符号表达式中的符号变量用数值代替。,subs(f),:显示符号表达式,f,。,subs(f,new),:用,new,替代符号表达式,f,的系统默认变量。默认变量的选择规则为:对于只包含一个字符的变量,选择靠近,x,的变量作为默认变量;如果有两个变量和,x,之间的距离相同,则选择字母表后面的的变量作为默认变量,subs(f,old,,,new),:用,new,替代符号表达式,f,的系统变量,old,。,subs 函数:将符号表达式中的符号变量用数值代替。,12,例:,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),例:syms x y,13,将表达式中的自变量定义为符号变量后,赋值给符号函数名,即可生成符号函数。例如有一数学表达式:,4,、符号函数的生成,其用符号表达式生成符号函数,fxy,的过程为:,syms a b c x y%,定义符号运算量,fxy=(a*x2+b*y2)/c2%,生成符号函数,生成符号函数,fxy,后,即可用于微积分等符号计算。,将表达式中的自变量定义为符号变量后,赋值给符号,14,例,3-5,定义一个符号函数,fxy=,(a*x,2,+b*y,2,)/c,2,,分别求该函数对,x,、,y,的导数和对,x,的积分。,syms a b c x y%,定义符号变量,fxy=(a*x2+b*y2)/c2,;,%,生成符号函数,diff(fxy,,,x)%,符号函数,fxy,对,x,求导数,ans=2*a*x/c2,diff(fxy,,,y)%,符号函数,fxy,对,y,求导数,ans=2*b*y/c2,int(fxy,,,x)%,符号函数,fxy,对,x,求积分,ans=1/c2*(1/3*a*x3+b*y2*x),例3-5 定义一个符号函数 fxy=(a*x2+b*y2),15,5,、符号方程的生成,(,1,)创建抽象方程,MATLAB,中可以创建抽象方程,即只有方程符号,没有具体表达式的方程。若要创建方程,并计算其一阶微分的方法如下:,f=sym(f(x);,syms x h;,df=(subs(f,x,x+h)-f)/h,df=,(f(x+h)-f(x)/h,抽象方程在积分变换中有着很多的应用。,5、符号方程的生成(1)创建抽象方程,16,(,2,)创建符号方程,创建符号方程的方法有两种:,利用符号表达式创建,先创建符号变量,通过符号变量的运算生成符号函数,直接生成符号表达式,创建,M,文件,利用,M,文件创建的函数,可以接受任何符号变量作为输入,作为生成函数的自变量,equation1=sym(sin(x)+cos(x)=1),equation1=,sin(x)+cos(x)=1,(2)创建符号方程 equation1=sym(sin,17,6,、符号和数值之间的转化,S=sym(A,flag),:将数值转化为符号变量,,其中 参数,flag,可以为,r,d,e,或者,f,中的一个。该函数将数值标量或者矩阵转化为参数形式,该函数的第二个参数用于指定浮点数转化的方法,该函数各个取值的意义如表所示:,参数,说明,r,A,为有理数形式,d,A,为十进制数形式,e,A,为指数形式,f,A,为浮点数形式,将数值表示为,1.F*2(e),或者,-1.F*2(e),的格式,其中,F,为,13,位十六进制数,,e,为整数,6、符号和数值之间的转化 S=sym(A,flag):,18,例:,t=0.1,t=,0.1000,sym(t)%,有理数形式,ans=,1/10,sym(t,r)%,有理数形式,ans=,1/10,sym(t,f)%,浮点数形式,ans=,1.999999999999a*2(-4),例:t=0.1,19,7,、任意精度的计算,符号计算的一个非常显著的特点是:,在计算过程中不会出现舍入误差,,从而可以得到任意精度的数值解。如果希望计算结果精确,可以用符号计算来获得足够高的计算精度。符号计算相对于数值计算而言,需要更多的计算时间和存储空间。,MATLAB,工具箱中有三种不同类型的算术运算:,数值型:,MATLAB,的浮点数运算;,有理数类型:,Maple,的精确符号运算;,VPA,类型:,Maple,的任意精度算术运算。,7、任意精度的计算 符号计算的一个非常显,20,在三种运算中,浮点运算速度最快,所需的内存空间小,但是结果精确度最低,而且存在一个舍入误差。,符号运算中的有理数运算,其时间复杂度和空间复杂度都是最大的,但是,只要时间和空间允许,能够得到任意精度的结果。,可变精度的运算运算速度和精确度均位于上面两种运算之间。其具体精度由参数指定,参数越大,精确度越高,运行越慢。,在三种运算中,浮点运算速度最快,所需的内存空间小,但是结果,21,浮点算术运算:,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(1/2+1/3),ans=,.8333333333333333333333333,浮点算术运算:,22,二、符号运算的基本操作,符号表达式的四则运算,合并符号表达式的同类项,符号多项式的因式分解,符号表达式的简化,subs,函数用于替换求值,反函数的运算,复合函数的运算,二、符号运算的基本操作符号表达式的四则运算,23,1,、符号表达式的四则运算,syms x y a b,fun1=sin(x)+cos(y),fun1=,sin(x)+cos(y),fun2=a+b,fun2=,a+b,fun1+fun2,ans=,sin(x)+cos(y)+a+b,fun1*fun2,ans=,(sin(x)+cos(y)*(a+b),1、符号表达式的四则运算 syms x y,24,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,进行合并。,2、合并符号表达式的同类项 syms x y,25,3,、符号多项式的嵌套,(horner),sy
展开阅读全文