您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > matlab教程详解(5)
1第五章符号计算符号计算的特点:一,运算以推理解析的方式进行,因此不受计算误差积累问题困扰;二,符号计算,或给出完全正确的封闭解,或给出任意精度的数值解(当封闭解不存在时);三,符号计算指令的调用比较简单,经典教科书公式相近;四,计算所需时间较长,有时难以忍受。在MATLAB中,符号计算虽以数值计算的补充身份出现,但涉及符号计算的指令使用、运算符操作、计算结果可视化、程序编制以及在线帮助系统都是十分完整、便捷的。MATLAB的升级和符号计算内核Maple的升级,决定着符号计算工具包的升级。但从用户使用角度看,这些升级所引起的变化相当细微。即使这样,本章还是及时作了相应的更新和说明。如MATLAB6.5+版开始启用MapleVIII的计算引擎,从而克服了MapleV计算“广义Fourier变换”时的错误(详见第5.4.1节)。5.1符号对象和符号表达式5.1.1符号对象的生成和使用【例5.1.1-1】符号常数形成中的差异a1=[1/3,pi/7,sqrt(5),pi+sqrt(5)]%1a2=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)])%2a3=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)],'e')%3a4=sym('[1/3,pi/7,sqrt(5),pi+sqrt(5)]')%4a24=a2-a4a1=0.33330.44882.23615.3777a2=[1/3,pi/7,sqrt(5),6054707603575008*2^(-50)]a3=[1/3-eps/12,pi/7-13*eps/165,sqrt(5)+137*eps/280,6054707603575008*2^(-50)]a4=[1/3,pi/7,sqrt(5),pi+sqrt(5)]a24=[0,0,0,189209612611719/35184372088832-pi-5^(1/2)]【例5.1.1-2】演示:几种输入下产生矩阵的异同。a1=sym([1/3,0.2+sqrt(2),pi])%1a2=sym('[1/3,0.2+sqrt(2),pi]')%2a3=sym('[1/30.2+sqrt(2)pi]')%3a1_a2=a1-a2%a1=[1/3,7269771597999872*2^(-52),pi]a2=[1/3,0.2+sqrt(2),pi]a3=[1/3,0.2+sqrt(2),pi]a1_a2=2[0,1.4142135623730951010657008737326-2^(1/2),0]【例5.1.1-3】把字符表达式转换为符号变量y=sym('2*sin(x)*cos(x)')y=simple(y)y=2*sin(x)*cos(x)y=sin(2*x)【例5.1.1-4】用符号计算验证三角等式。symsfai1fai2;y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2))y=sin(fai1-fai2)【例5.1.1-5】求矩阵的行列式值、逆和特征根symsa11a12a21a22;A=[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)]【例5.1.1-6】验证积分22sin2/2/AdtAeti。symsAttaow;yf=int(A*exp(-i*w*t),t,-tao/2,tao/2);Yf=simple(yf)Yf=2*A*sin(1/2*tao*w)/w5.1.2符号计算中的算符和基本函数5.1.3识别对象类别的指令【例5.1.3-1】数据对象及其识别指令的使用。(1)clear,a=1;b=2;c=3;d=4;Mn=[a,b;c,d]Mc='[a,b;c,d]'Ms=sym(Mc)Mn=12343Mc=[a,b;c,d]Ms=[a,b][c,d](2)SizeMn=size(Mn),SizeMc=size(Mc),SizeMs=size(Ms)SizeMn=22SizeMc=19SizeMs=22(3)CMn=class(Mn),CMc=class(Mc),CMs=class(Ms)CMn=doubleCMc=charCMs=sym(4)isa(Mn,'double'),isa(Mc,'char'),isa(Ms,'sym')ans=1ans=1ans=1(5)whosMnMcMsNameSizeBytesClassMc1x918chararrayMn2x232doublearrayMs2x2408symobjectGrandtotalis21elementsusing458bytes5.1.4符号表达式中自由变量的确定【例5.1.4-1】对独立自由符号变量的自动辨认。(1)symsabxXY;k=sym('3');z=sym('c*sqrt(delta)+y*sin(theta)');EXPR=a*z*X+(b*x^2+k)*Y;(2)findsym(EXPR)ans=X,Y,a,b,c,delta,theta,x,y(3)findsym(EXPR,1)ans=x(4)4findsym(EXPR,2),findsym(EXPR,3)ans=x,yans=x,y,theta【例5.1.4-2】findsym确定自由变量是对整个矩阵进行的。symsabtuvxy;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=x5.2符号表达式和符号函数的操作5.2.1符号表达式的操作【例5.2.1-1】按不同的方式合并同幂项。EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');expr1=collect(EXPR)expr2=collect(EXPR,'exp(-t)')expr1=x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)expr2=x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x【例5.2.1-2】factor指令的使用(1)symsax;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)ans=(x-1)*(x-2)*(x-3)*(x+1)(2)f2=x^2-a^2;factor(f2)ans=(x-a)*(x+a)(3)factor(1025)ans=5541【例5.2.1-3】对多项式进行嵌套型分解clear;symsax;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)ans=-6+(5+(5+(-5+x)*x)*x)*x5【例5.2.1-4】写出矩阵各元素的分子、分母多项式(1)symsx;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4];[n,d]=numden(A)pretty(simplify(A))%3n=[3,x^3+5*x^2-3][4,3*x+4]d=[2,(2*x-1)*(x-1)][x^2,1][32][x+5x-3][3/2-----------------][(2x-1)(x-1)][][4][----3x+4][2][x](2)pretty(simplify(n./d))【例5.2.1-5】简化(1)symsx;f=(1/x^3+6/x^2+12/x+8)^(1/3);sfy1=simplify(f),sfy2=simplify(sfy1)sfy1=((2*x+1)^3/x^3)^(1/3)sfy2=((2*x+1)^3/x^3)^(1/3)(2)g1=simple(f),g2=simple(g1)g1=(2*x+1)/xg2=2+1/x【例5.2.1-6】简化symsx;ff=cos(x)+sqrt(-sin(x)^2);ssfy1=simplify(ff),ssfy2=simplify(ssfy1)ssfy1=cos(x)+(-sin(x)^2)^(1/2)ssfy2=cos(x)+(-sin(x)^2)^(1/2)gg1=simple(ff),gg2=simple(gg1)gg1=cos(x)+i*sin(x)gg2=exp(i*x)65.2.2符号函数的求反和复合【例5.2.2-1】求的反函数symsx;f=x^2;g=finverse(f)Warning:finverse(x^2)isnotunique.InD:\MATLAB6P5\toolbox\symbolic\@sym\finverse.matline43g=x^(1/2)fg=simple(compose(g,f))%验算g(f(x))是否等于xfg=x【例5.2.2-2】求的复合函数(1)symsxyufait;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)fg1=cos(y+fai)/(1+u^2)(2)fg2=compose(f,g,u,fai,t)fg2=x/(cos(y+t)^2+1)5.2.3置换及其应用5.2.3.1自动执行的子表达式置换指令【例5.2.3.1-1】演示子表达式的置换表示。clearall,symsabcdW;[V,D]=eig([ab;cd]);[RVD,W]=subexpr([V;D],W)%2RVD=[-(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)5.2.3.2通用置换指令【例5.2.3.2-1】用简单算例演示subs的置换规则。(1)symsax;f=a*sin(x)+5;(2)f1=subs(f,'sin(x)',sym('y'))%2f1=a*y+5(3)7f2=subs(f,{a,x},{2,sym(pi/3)})%3f2=3^(1/2)+5(4)f3=subs(f,{a,x},{2,pi/3})%4f3=6.7321(5)f4=subs(subs(f,a,2),x,0:pi/6:pi)%5f4=5.00006.00006.73217.00006.73216.00005.0000(6)f5=subs(f,{a,x},{0:6,0:pi/6:pi})%6f5=5.00005.50006.73218.00008.46417.50005.00005.2.4符号数值精度控制和任意精度计算5.2.4.1向双精度数值转换的doblue指令5.2.4.2任意精度的符号数值【例5.2.4.2-1】指令使用演示。digitsDigits=32p0=sym('(1+sqrt(5))/2');p1=sym((1+sqrt(5))/2)e01=vpa(abs(p0-p1))p1=7286977268806824*2^(-52)e01=.543211520368250e-16p2=vpa(p0)e02=vpa(abs(p0-p2),64)p2=1.6180339887498948482045868343657e02=.61882279
本文标题:matlab教程详解(5)
链接地址:https://www.777doc.com/doc-2887526 .html