
第6章《Matlab软件基础及应用》.doc
20页个人收集整理 勿做商业用途第6章 符号计算61 符号对象和符号表达式 在MATLAB中,数值和数值变量用于数值的存贮和各种数值计算而符号常数、符号变量、符号函数、符号操作等则是用来形成符号表达式,严格按照代数、微积分等课程中的规则、公式进行运算,并尽可能给出解析结果1 符号对象的生成和使用f=sym(arg) 把数字、字符串或表达式arg转换成为符号对象ff=sym(argn,flagn) 把数字、字符串或表达式argn转换成为flagn格式的符号对象f flagn取:‘d’——最接近的十进制浮点精确表示; ‘r—-最接近有理表示;argv=sym(’argv,flagv) 按flagv指定的要求把字符串argv定义为符号对象argvsyms(’argv1’,’argv2’,argvk’) 把字符argv1,argv2,argvk定义为基本符号对象syms argv1 argv2 argv3 上述格式的简单形式【例6.1-1】符号常数形成中的差异a1=[1/3,pi/7,sqrt(5),pi+sqrt(5)] a2=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)]) a3=sym(’[1/3,pi/7,sqrt(5),pi+sqrt(5)]’)a23=a2—a3 a1 = 0.3333 0.4488 2。
2361 5.3777a2 =[ 1/3, pi/7, sqrt(5), 6054707603575008*2^(-50)]a3 =[ 1/3, pi/7, sqrt(5), pi+sqrt(5)]a23 =[ 0, 0, 0, 189209612611719/35184372088832—pi-5^(1/2)] 【例6.1—2】把字符表达式转换为符号变量y=sym(’2*sin(x)*cos(x)’)y=simple(y) y =2*sin(x)*cos(x)y =sin(2*x) 【例6.1-3】用符号计算验证三角等式syms fai1 fai2y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2)) y =sin(fai1-fai2) 【例6.1—4】求矩阵的行列式值、逆和特征根syms a11 a12 a21 a22A=[a11,a12;a21,a22]DA=det(A),IA=inv(A),EA=eig(A) A =[ a11, a12][ a21, a22]DA =a11*a22-a12*a21IA =[ a22/(a11*a22-a12*a21), -a12/(a11*a22-a12*a21)][ —a21/(a11*a22—a12*a21), a11/(a11*a22-a12*a21)]EA =[ 1/2*a11+1/2*a22+1/2*(a11^2—2*a11*a22+a22^2+4*a12*a21)^(1/2)][ 1/2*a11+1/2*a22-1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)] 【例6。
1—5】验证积分.syms A t tao wyf=int(A*exp(—i*w*t),t,-tao/2,tao/2);Yf=simple(yf) Yf =2*A*sin(1/2*tao*w)/w 6.2 符号计算中的算符和基本函数(1) 基本运算符矩阵算符 + - * \ / ^元素对元素算符 .* / \ ^6.2.1 识别对象类别的指令【例6.1-6】数据对象及其识别指令的使用clear,a=1;b=2;c=3;d=4;Mn=[a,b;c,d] Mc=[a,b;c,d]’ Ms=sym(Mc) Mn = 1 2 3 4Mc =[a,b;c,d]Ms =[ a, b][ c, d] (1) 判断矩阵的大小SizeMn=size(Mn),SizeMc=size(Mc),SizeMs=size(Ms) SizeMn = 2 2SizeMc = 1 9SizeMs = 2 2 (2)用class获得每种矩阵的类别CMn=class(Mn),CMc=class(Mc),CMs=class(Ms) CMn =doubleCMc =charCMs =sym (3) 用isa判断矩阵的类别isa(Mn,double),isa(Mc,’char’),isa(Ms,sym) ans = 1ans = 1ans = 1 (4)利用whos观察内存变量的类别和其它属性whos Mn Mc Ms Name Size Bytes Class Mc 1x9 18 char array Mn 2x2 32 double array Ms 2x2 408 sym objectGrand total is 21 elements using 458 bytes 6。
22 符号表达式中自由变量的确定findsym(EXPR) 确认表达式EXPR中所有”自由"符号”变量"findsym(EXPR,N) 从表达式EXPR中确认出靠x最近的N个独立变量.【例6.1—7】对独立自由符号变量的自动辨认syms a b x X Y;k=sym(3);z=sym(’c*sqrt(delta)+y*sin(theta));EXPR=a*z*X+(b*x^2+k)*Y; findsym(EXPR) ans =X, Y, a, b, c, delta, theta, x, y findsym(EXPR,1) ans =x findsym(EXPR,2),findsym(EXPR,3) ans =x,yans =x,y,theta 【例6.1-8】findsym确定自由变量是对整个矩阵进行的syms a b t u v x y;A=[a+b*x,sin(t)+u;x*exp(-t),log(y)+v]findsym(A,1) A =[ a+b*x, sin(t)+u][ x*exp(—t), log(y)+v]ans = x 6.3 符号对象的操作和转换6.3.1 符号表达式的操作 简化simple(expr)【例6。
2—1】简化syms xf=(1/x^3+6/x^2+12/x+8)^(1/3);g1=simple(f)g2=simple(g1) g1 =(2*x+1)/xg2 =2+1/x 合并同类项 collect(expr,v)因式分解 factor(expr)62 置换操作6.32.1 子表达式置换操作 [rs ssub]=subexpr(S,ssub) 运用符号变量ssub置换子表达式,重写S为rs【例62—2】把复杂表达式中所含的多个相同子表达式用一个符号代替,使表达简洁clear allsyms a b c d W[V,D]=eig([a b;c d]);[RVD,W]=subexpr([V;D],W) RVD =[ -(1/2*d—1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c][ 1, 1][ 1/2*d+1/2*a+1/2*W, 0][ 0, 1/2*d+1/2*a—1/2*W]W =(d^2-2*a*d+a^2+4*b*c)^(1/2) 6。
3.22 通用置换指令 RES=subs(ES,old,new) 用new置换ES中的old后产生RES RES=subs(ES,new) 用new置换ES中的自由变量后产生RES【例62-3】用简单算例演示subs的置换规则.syms a x;f=a*sin(x)+5; (1)符号变量置换f1=subs(f,’sin(x),sym(’y)) f1 =a*y+5 (2)符号常数置换f2=subs(f,{a,x},{2,sym(pi/3)}) f2 =3^(1/2)+5 (3)双精度数值置换f3=subs(f,{a,x},{2,pi/3}) f3 = 6.7321 (4)数值数组置换一(取a=2,x=0:pi/6:pi)f4=subs(subs(f,a,2),x,0:pi/6:pi) f4 = 50000 6.0000 67321 70000 67321 60000 50000 (4)数值数组置换二(取a=0:6,x=0:pi/6:pi)f5=subs(f,{a,x},{0:6,0:pi/6:pi}) f5 = 5.0000 5.5000 6。
7321 80000 8.4641 7.5000 5.0000 6.32.3 符号数值精度控制和任意精度计算 【例62—4】指令使用演示.p0=sym(’(1+sqrt(5))/2);p1=sym((1+sqrt(5))/2) pd=double(p0) e01=vpa(abs(p0-p1)) e0d=vpa(abs(p0-pd)) p1 =7286977268806824*2^(-52)pd = 1.6180e01 =.543211520368250e—16e0d =543211520368250e-16 p2=vpa(p0) e02=vpa(abs(p0—p2),64) p2 = 1.618033988749894848204586834365。












