符号运算科学计算包括数值计算和符号计算两种计算,数值计算是近似计算;而符号计算则是绝对精确的计算。
符号变量的生成和使用1、符号变量、符号表达式和符号方程的生成(1)、使用sym函数定义符号变量和符号表达式单个符号变量sqrt(2)sym(sqrt(2)) %显示精确结果a=sqrt(sym(2)) %显示精确结果double(a)sym(2)/sym(3) %显示精确结果2/5+1/3sym(2/5+1/3) %显示精确结果sym(2)/sym(5)+sym(1)/sym(3) %显示精确结果sym函数定义符号表达式:单个变量定义法,整体定义法单个变量定义法a=sym('a')b=sym('b')c=sym('c')x=sym('x')f=a*x^2+b*x+c整体定义法f=sym('a*x^2+b*x+c')g=f^2+4*f-2(2)、使用syms函数定义符号变量和符号表达式一次可以创建任意多个符号变量syms var1 var2 var3…syms a b c xf=a*x^2+b*x+cg=f^2+4*f-2(3)、符号方程的生成函数:数字和变量组陈的代数式方程:函数和等号组成的等式用sym函数生成符号方程:equation1=sym('sin(x)+cos(x)=1')2、符号变量的基本操作(1)、findsym函数用于寻找符号变量findsym(f):找出f表达式中的符号变量findsym(s,n):找出表达式s中n个与x接近的变量syms a alpha b x1 yfindsym(alpha+a+b)findsym(cos(alpha)*b*x1+14*y,2) %x1,yfindsym(y*(4+3i)+6j)findsym(cos(alpha)*b*x1+14*y,1) %x1findsym(cos(alpha)*b*x1+14*y,3) %x1,y,b(2)、任意精确度的符号表达式digits函数设定所用数值的精度digits:在command window显示当前设定的数值精度digits(D):设置数值的精度为DD=digits:在command window中返回当前设定数值精度digitsdigits(100)D=digitsvpa函数进行可控精度运算R=vpa(S):显示符号表达式S在当前精度D下的值,D是使用digits函数设置的数值精度vpa(S,D):显示符号表达式S在精度D下的值,D不是当前精度值,只是临时设置的r=vpa(pi)r=vpa(pi,1000)q=vpa(hilb(2))q=vpa(hilb(2),6)(3)、数值型变量与符号型变量的转换形式数值型变量t转换成符号型变量有理数形式:sym(t)或sym(t,’r’)浮点数形式:sym(t,’f’)指数形式:sym(t,’e’)指数精度形式:sym(t,’d’)t=0.1sym(t)sym(t,'r')sym(t,'f')sym(t,'e')sym(t,'d')可以通过digits函数改变精度digits(7)sym(t,'d')也可以用于矩阵,但是矩阵只能转换为有理数形式A=hilb(4)A=sym(A)A=sym(A,'d') %报错A=sym(A,'e') %报错A=sym(A,'f') %报错3、符号表达式(符号函数)的操作(1)、四则运算(与通常算术式一样)syms x y a bfun1=sin(x)+cos(y)fun1+fun2(2)、合并同类项collect(S,v):将符号矩阵S中所有同类项合并,并以v为符号变量输出collect(S):使用findsym函数规定的默认变量,代替上式的vsyms x ycollect(x^2*y+y*x-x^2-2*x)f=-1/4*x*exp(-2*x)+3/16*exp(-2*x)collect(f)(3)、因式分解horner(P):将表达式P进行因式分解syms xfun1=2*x^3+2*x^2-32*x+40horner(fun1)fun2=x^3-6*x^2+11*x-6horner(fun2)(4)、简化simplify(S):将表达式S中的每个元素都进行简化,即便使用多次simplify也不一定能得到最简形式syms xfun1=(1/x+7/x^2+12/x+8)^(1/3)sfy1=simplify(fun1)sfy2=simplify(sfy1)simplify(sin(x)^2+cos(x)^2)simple(S):使用多种代数方法对S进行简化,显其中最简单的结果[R,how]=simple(S):R为最简结果,how为简化方法的字符串s=2*cos(x)^2-sin(x)^2simple(s)[R how]=simple(s)simple(f)(5)、subs函数用于替换求值subs函数可以将符号表达式的符号变量替换为数值变量subs(S) :将S中自由符号变量用调用函数中的值或是MATLAB工作区间值替换subs(S,new):将S中自由符号变量用数值型变量或表达式new替换subs(S,old,new):将S中符号变量old用数值型变量或表达式new替换syms x yf=x^2*y+5*x*sqrt(y)subs(f)subs(f,x,3)subs(f,y,3)subs(f,3) %与subs(f,x,3)结果相同用户没指定被替换的符号变量,对单个字母的变量,MATLAB选择在字母表中与x接近的字母,若有两个变量离x一样近,则选择字母表中靠后的那个findsym(f,1)g=s+tfindsym(g,1) %找到tsubs(g,1) %替换为s+1多个变量替换syms a bsubs(cos(a)+sin(b),{a,b},{sym('alpha'),2})用矩阵替换syms t x ysubs(exp(a*t),a,-magic(2))subs(x*y,{x,y},{[0 1;-1 -1],[1 -1;-2 1]})(6)、反函数g=finverse(f):求函数f的反函数,返回g也是符号函数g=finverse(f,v):设定f的自变量是v,当f包括不止一个变量时最好使用该命令syms x yf=x^2+yfinverse(f,y)finverse(f) %由于没指明自变量,给出警告syms xf=x^2g=finverse(f) %x^2的反函数不唯一,默认给出正值fg=simple(compose(g,f)) %验证反函数正确性(7)、复合函数compose(f,g):返回f=f(x),g=g(y)的复合函数f(g(y)),x是findsym定义的f的符号变量,y是findsym定义的g的符号变量compose(f,g,z):返回f=f(x),g=g(y)的复合函数f(g(z)),返回函数以z为自变量compose(f,g,x,z):返回f(g(z)),x为函数f的独立变量compose(f,g,x,y,z):返回f(g(z)),x为函数f的独立变量,y为函数g的独立变量syms x y z t uf=1/(1+x^2)g=sin(y)h=x^tp=exp(-y/u)compose(f,g)compose(f,g,t)compose(h,g,x,z)compose(h,g,t,z)compose(h,p,x,y,z)compose(h,p,t,u,z)符号矩阵的生成和运算1、符号矩阵的生成(1)、使用sym函数直接生成符号矩阵a1=sym('[1/3 2/3 5/7;9/11 11/13 13/17;17/19 19/23 23/29]')a1=sym('[1/3,0.2+sqrt(2),pi;2/7,sin(x),cos(x),log(x);sin(x)^2,sin(22*x),exp(x)]') %长度不一致的行补0(2)、用生成子矩阵的方法生成符号矩阵与字符串矩阵的直接输入法类似,同一列元素长度须相同(不同补0)a=['[100,cos(x)]';'[1/s,x ]'](3)、由数值矩阵转换为符号矩阵系统首先将自动在MATLAB工作区间将数值型变量转换为符号型变量,用户也可以用sym函数进行转换M=[30 1 1 1;6 1 5 9;9 8 25 4;32 45 62 0]S=sym(M)M1=[0.3 0.33 0.333 1/3;3.14 3.142 3.1416 pi;log(2) log(3) log(5) log(7);sin(1) cos(1) tan(1) atan(1)]S1=sym(M1)2、符号矩阵及符号数组的运算(1)、符号矩阵的四则运算A+B和A-B同型矩阵可以分别对对应分量进行加减,若A与B至少有一个为标量,则把标量扩大为与另一个同型的阵列A*B为线性代数中定义的矩阵乘法A\B实现左除,X=A\B为符号线性方程组A*X=B的解,A\B近似等于inv(A)*B,X不存在或不唯一,则产生警告,A可以是非方阵,要求方程组必须是相容的A/B实现右除,X=B/A为符号线性方程组X*A=B的解,B/A近似等于B*inv(A) ,X不存在或不唯一,则产生警告,A可以是非方阵,要求方程组必须是相容的m=sym('[x,x^2,x*2,1/x]')n=sym('[2*x,y,x,x^2]')m+nm-nm*n %出错m\nm/n %出错(2)、符号数组的四则运算若有标量,则扩展为同型阵列.*乘法./右除.\左除q=sym('[3 4 9 6;x y z w;a b c d]')p=sym('[x 1/x x^2 x^3;a b c d;5 2 3 6]')q.*pq./pq.\pr=q*p %矩阵行列不匹配,出错(3)、矩阵和数组的逆运算A’实现矩阵的Hermition转置,若A为复数矩阵,则A’为共轭转置q=sym('[3 4 9 6;x y z w;a b c d]')q' %符号变量具体值不知,只能用conj给出q.' %普通转置(4)、矩阵和数组的幂运算A^B实现矩阵幂运算,若A为标量B为方阵,A^B用方阵B的特征值与特征向量计算数值。