§14.2符号运算功能一、符号表达式的生成1.用单引号设定后输入或赋值f='log(x)'f=log(x)2.用命令sym(生成符号对象)例如,创建符号函数例如,创建符号方程eqation=sym('a*x^2+b*x+c=0')eqation=a*x^2+b*x+c=03.用命令sym(确定多个符号对象),可用whos检查存在的空间的各种变量及其所属类型symsxyabcdalfawhosNameSizeBytesClassabcd1x1132symobjectalfa1x1132symobjecteqation1x1150symobjectf1x612chararrayx1x1126symobjecty1x1126symobjectGrandtotalis34elementsusing678bytes二、符号函数的运算1.复合函数的运算复合函数运算可通过功能函数compose来实现,其调用格式为:(1)compose(f,g)返回当f=f(x)和g=g(y)时的复合函数f(g(y))。(2)compose(f,g,z)返回复合函数以z为自变量。(3)compose(f,g,x,z)返回复合函数f(g(z)),且使x为f的独立变量。例如symsxyztf=1/(1+x^2);g=sin(y);h=x^t;compose(f,g)ans=1/(1+sin(y)^2)compose(f,g,z)ans=1/(1+sin(z)^2)compose(h,g,x,z)ans=sin(z)^t2.反函数的运算反函数运算可通过功能函数finverse(f)来实现,其调用格式为:(1)g=finverse(f)符号函数f的反函数。(2)g=finverse(f,z)返回符号函数的自变量为z。f=x^3+y;finverse(f,y)ans=-x^3+yfinverse(f)Warning:finverse(x^3+y)isnotunique.InC:\MATLAB6P1\toolbox\symbolic\@sym\finverse.matline43ans=(-y+x)^(1/3)三、符号的矩阵的创立与运算1.符号矩阵的创立符号矩阵的创立与和创立数值矩阵的方法相似,只不过要用到符号定义函数sym。我们可以使用sym函数直接建立符号矩阵;可以通过建立子矩阵的方法建立符号矩阵;也可以使用sym函数将数值矩阵转化为符号矩阵。a=sym('[11/s+xsin(x);y/x1+1/y,tan(x+y);3+4,exp(x^2+y^2),log(tanh(y))]')a=[1,1/s+x,sin(x)][y/x,1+1/y,tan(x+y)][3+4,exp(x^2+y^2),log(tanh(y))]b=[1235;791011;13151718];c=sym(b)c=[1,2,3,5][7,9,10,11][13,15,17,18]2.符号矩阵的运算符号矩阵的运算与数值矩阵的运算相同(1)四则运算:a=sym('[1/x1/(x+1);1/(x+2)1/(x+3)]');b=sym('[x,1;x+2,0]');a\bans=[-6*x-2*x^3-7*x^2,3/2*x^2+x+1/2*x^3][6+2*x^3+10*x^2+14*x,-1/2*x^3-2*x^2-3/2*x](2)求逆运算“inv”,行列式运算“det”,幂运算“^”、求秩运算“rank”、指数运算“exp”和对数运算“log”inv(a)ans=[1/2*x*(x+1)*(x+2),-1/2*x*(x+3)*(x+2)][-1/2*x*(x+3)*(x+1),1/2*(x+3)*(x+1)*(x+2)](3)矩阵分解函数:特征值函数“eig”,约当标准型函数“Jordan”,三角提取函数“diag”、“tril”、“triu”[u,v]=eig(b)u=[(1/2*x+1/2*(x^2+4*x+8)^(1/2))/(x+2),(1/2*x-1/2*(x^2+4*x+8)^(1/2))/(x+2)][1,1]v=[1/2*x+1/2*(x^2+4*x+8)^(1/2),0][0,1/2*x-1/2*(x^2+4*x+8)^(1/2)]四、符号微积分1.符号极限符号函数的极限是由limit函数来实现,其调用格式如下:limit(f,x,a)计算符号表达式f在x→a时的极限limit(f)计算符号表达式f在x→0时的极限symsxt;limit((1+2*t*sin(1/x))^(3*x),x,inf)ans=exp(6*t)2.符号积分积分函数int函数的调用格式为:int(S,t)计算符号表达式S对符号变量t的不定积分int(S,a,b)计算符号表达式S对默认符号变量从a到b的不定积分symsxyt;A=[cos(x*t),sin(x+t);exp(t/x),log(x-t)]A=[cos(x*t),sin(x+t)][exp(t/x),log(x-t)]int(A,t)ans=[1/x*sin(x*t),-cos(x+t)][exp(t/x)*x,-log(x-t)*(x-t)+x-t]int(sqrt(1+y^2),y)ans=1/2*y*(1+y^2)^(1/2)+1/2*asinh(y)int(sqrt(1+y^2),0,1)ans=1/2*2^(1/2)-1/2*log(2^(1/2)-1)如,计算二次积分dxyxdyy)(22110int(int((x^2+y^2),x,sqrt(y),1),y,0,1)ans=26/1053.符号微分微分diff,其调用格式为diff(S)表示对表达式S的微分。diff(S,’v’)或diff(S,sym(’v’))表示对变量v,求表达式S的微分。diff(S,n)对整数n,对表达式S微分n次。diff(S,’v’,n)和diff(S,n,’v’)都表示对变量v,求表达式S的微分n次。symsxt;diff(sin(x^2))ans=2*cos(x^2)*x设23)ln(yxzxyxz,求symsxy;z=x*log(x*y);diff(diff(z,'x'),'y',2)ans=-1/y^2五、符号代数方程求解1.符号线性方程组的求解方法可用linsolve和solve得到方程组的精确解。所得到的精确解可由函数vpa转换成浮点近似数值。a=sym([10-10;-110-2;0-210]);b=('[9;7;6]');linsolve(a,b)ans=[473/475][91/95][376/475]vpa(ans)ans=[.99578947368421052631578947368421][.95789473684210526315789473684211][.79157894736842105263157894736842]2.符号非线性方程组的求解方法由函数fsolve实现,其调用格式为X=fsolve(‘fun’,X0),X=fsolve(‘fun’,X0,options)X=fsolve(‘fun’,X0,options,’gradfun’)例如0sin2.0cos7.00cos2.0sin7.0212211xxxxxxfunctiony=fc(x)y(1)=x(1)-0.7*sin(x(1))-0.2*cos(x(2));y(2)=x(2)-0.7*cos(x(1))-0.2*sin(x(2));y=[y(1),y(2)];x0=[0.5,0.5];fsolve('fc',x0)ans=0.44420.7715六、符号微分方程求解常微分方程及微分方程组的符号求解由函数dsolve来实现,其调用格式为:dsolve(‘equ1’,‘equ2’,…)例如,求微分方程的特解。2(1)20ytty满足初始条件00|1|3xxyy,dsolve('(t^2+1)*D2y=2*t*Dy','y(0)=1,Dy(0)=3')ans=1+t^3+3*t又如,求微分方程的通解。2xeyyyxdsolve('D2y-2*Dy+y=exp(x)/x','x')ans=-exp(x)*x+log(x)*exp(x)*x+C1*exp(x)+C2*exp(x)*x又如,求下列微分方程组的特解(0)0,(0)0,(0)1duvdtdvwdtdwudtuvwS=u:[1x1sym]v:[1x1sym]w:[1x1sym也可使用命令S=dsolve('Du=v','Dv=w','Dw-u','u(0)=0,v(0)=0,w(0)=1')symsuvwtS=dsolve('Du=v,Dv=w,Dw-u','u(0)=0,v(0)=0,w(0)=1')查看解S.uans=-1/3*3^(1/2)*exp(-1/2*t)*sin(1/2*t*3^(1/2))-1/3*exp(-1/2*t)*cos(1/2*t*3^(1/2))+1/3*exp(t)七、级数1.常数项级数级数求和用函数symsum来实现,其调用格式为:symsum(一般项)symsum(一般项,变量)symsum(一般项,变量,起始,终止)例如,求级数的前10项和及无穷和。211nnsymsn;symsum(1/n^2,n,1,10)ans=1968329/1270080symsum(1/n^2,n,1,inf)ans=1/6*pi^22.幂级数(1)用函数symsum求幂级数的和函数。21121nnxnsymsxnsymsum(x^(2*n-1)/(2*n-1),n,1,inf)ans=1/2*log((1+x)/(1-x))(2)用taylor将函数展成泰勒级数,其调用格式为:Taylor(f,n)求函数f的n-1阶麦克劳林级数Taylor(f,n,x0,x)求函数f在x0处的以x为变量的n-1阶泰勒级数。注:后面3个参数的次序可以任意打乱,在不引起混淆的情况下均能给出正确结果。求函数阶泰勒展式077xex在处的symsx,n;taylor(exp(-x),x,8,7)ans=exp(-7)-exp(-7)*(x-7)+1/2*exp(-7)*(x-7)^2-1/6*exp(-7)*(x-7)^3+1/24*exp(-7)*(x-7)^4-1/120*exp(-7)*(x-7)^5+1/720*exp(-7)*(x-7)^6-1/5040*exp(-7)*(x-7)^7八、符号和数字之间的转换1.转化为符号变量命令:S=sym(f)S1=sym('3.456'),S2=sym(3.456),S3=sym('23f'),s4=sym(['23';'23';'32'])S1=3.456S2=432/1252.转化为数值变量及符号函数值的计算将得到的解析解进行数值转换,可通过函数digits(设置变量精度)和vpa(变量精度函数)来实现。通常与变量替换函数subs配合使用,也可通过函数numeric(转换符号矩阵成数值型)来实现。(1)digits函数的调用格式为:digits(D),它设置有效数字个数为D的近似解精度。2)vpa函数的调用格式如下:x=vpa(S)符号表达式S在digits设置下的精确的数值解。vpa(S,D)符号表达式S在digits(D)函数设置下的精确的数值解。(3)subs函数的调用格式为:subs(S,OLD,NEW),将符号表达式中的OLD变量替换为NEW变量。(4)numeric函数的调用格式为:n=numeric(S),它将不含自由变量的符号表达式转换为数值形式。求方程的精确解和各种精度的近似解。0