与Wolfram公司(Mathematics的开发公司)相比,Mathworks公司一直以矩阵计算和强大的数据处理能力见长,而符号计算非强项。
1993年,mathworks公司从加拿大Waterloo Maple公司购买了maple的内核技术,作为MA TLAB符号运算与推导的平台,开发了用以进行符号计算的基本符号运算工具箱和扩展符号运算工具箱,从而解决了MA TLAB在符号计算方面的缺陷。
MA TLAB7.0的符号运算工具箱已上升到3.1.1版本,它几乎可以完成所有的符号运算功能,包括符号函数与符号方程的定义、运算、复合、化简、符号矩阵的计算、符号微分、符号积分、符号代数方程、符号微分方程的求解、符号积分变换和符号特殊函数。
在MA TLAB7.0的符号数学工具箱中,符号表达式含有符号函数和符号方程两种形式,它是表示数字、函数或变量的字符串或字符串组。
字符就是符号变量的值。
因此在MA TLAB的源程序中符号表达式被表示成字符串和字符串组。
符号函数和符号方程的区别是符号函数没有等号,而符号方程必须有等号。
符号变量的定义MA TLAB有默认的符号自变量,但在各种情况下默认的自变量是不同的。
系统默认的自变量主要有x、x1、y、y1、z、v、u、t、theta、alpha。
对于这些变量MA TLAB 的默认规则与平时数学习惯大致相同,即:当这些变量中的某一个与其他变量组成符号数学表达式时,这个变量即为默认的自变量;当这些变量中的某几个组成符号数学表达式是,默认自变量的顺序是:x>x1>y>y1>z>v>u>t>theta>alpha例如:当数学表达式为cos(2*x*a^2)时,默认的自变量为x;当数学表达式为cos(2*x*v)时,默认的自变量为x;当数学表达式为cos(2*t*alpha)时,默认的自变量为t;符号变量可以通过命令syms和sym定义,syms命令一个可以定义一个或多个符号变量。
sym一个只能定义一个符号变量。
>> syms x y z t>> whoY our variables are:t x y z>> syms u>> whoY our variables are:t u x y z>> x=sym('x');>> t=sym('t');>> z=sym('z');>> y=sym('y');>> whoY our variables are:ans t x y z符号表达式的定义MA TLAB7.0当中,符号表达式可以通过基本赋值语句,采用单引号或sym/syms命令定义。
定义好的符号函数可以通过symvar检查其自变量。
实例:>> f='a*x^2+b*x+c=0'f =a*x^2+b*x+c=0>> f='a*D2y+b*Dy+3*y=0'f =a*D2y+b*Dy+3*y=0>> f='asin(x)'f =asin(x)>> sym('x*log(x)-sin(x)')ans =x*log(x)-sin(x)>> symvar('x*log(x)-sin(x)')ans ='x'>> f=sym('a*x^2+b*x+c=0')f =a*x^2+b*x+c=0>> A=sym('[a,b,c,d;f,g,h,k]')A = [ a, b, c, d][ f, g, h, k]符号表达式的基本运算符号表达式的基本运算有合并同类项、表达式展开、因式分解、提取符号表达式的分子和分母、符号表达式的化简、确定符号矩阵的维数等等。
1、collect(S) 按默认变量的次数对符号多项式S合并同类项。
2、collect(S,v) 按指定变量的次数对符号多项式S合并同类项。
3、expand(S) 将S展开4、factor(x) 将符号表达式因式分解。
当x是正整数时,分解为质数分解式;当x为符号表达式,分解为乘积形式;当x为符号整数或符号表达式阵列,则分解每一个元素为质数分解式或乘积形式5、[N,D]=numden(A) 求符号表达式的分子A和分母D6、simple(S) 求各种不同算法下符号表达式的化简形式7、[r,how]=simple(S) 求S的最短形式和化简方法8、simplify(S) 对S进行化简,若S为矩阵则化简其每一个元素9、size(A) 求符号函数A的维数10、[m,n]=size(A) 求符号函数A的行数和列数11、size(A,n) n=1时求A的行数;n=2时求A的列数>> syms x y a b>> f=(x+a)*(x+b)+(x-a)^2f =(x+a)*(x+b)+(x-a)^2>> f1=collect(f)f1 =2*x^2+(-a+b)*x+a*b+a^2>> f=(x+y)^3-(x+y)^2+y^4;>> f2=collect(f,y)f2 =y^4+y^3+(3*x-1)*y^2+(3*x^2-2*x)*y+x^3-x^2 >> f=(x-2)^2*(x-1)-(x+1)^2>> expand(f)ans =x^3-6*x^2+6*x-5>> A=[sin(2*x),cos(2*x);(a+b)^2,(a-b)^2];>> expand(A)ans =[ 2*sin(x)*cos(x), 2*cos(x)^2-1][ a^2+2*a*b+b^2, a^2-2*a*b+b^2]>> A1=factor(sym('243'))A1 =(3)^5>> A2=factor(243)A2 =3 3 3 3 3>> A3=factor([a*x-a*b,x^2-b*x;(x-b)^2,x^2-b^2]) A3 =[ a*(x-b), x*(x-b)][ (x-b)^2, (x-b)*(x+b)]>> f=(x-2)/(x*(x-1));>> [n1,d1]=numden(f)n1 =x-2d1 =x*(x-1)>> A=[1/x,2/y, 1/a^2;1/y,2/b,3/x;2/a,3/x,1/y^2]; >> [n2,d2]=numden(A)n2 =[ 1, 2, 1][ 1, 2, 3][ 2, 3, 1]d2 = [ x, y, a^2][ y, b, x][ a, x, y^2]>> f=(x^2-1)/(x^2+2*x-3);>> [r,how]=simple(f)r =(x+1)/(x+3)how =simplify>> A=[a,b,c;x,y,z];>> d=size(A)d =2 3>> [m,n]=size(A)m =2n =3>> d=size(A,1)d =2>> d=size(A,2)d =3符号表达式的转化12、pretty(S) 求符号表达式或符号矩阵S的常规形式,默认线宽度为7913、pretty(S,n) 按设定现宽度n求常规形式14、horner(S) 求嵌套形式15、latex(S) 求LaTex形式16、findsym(S) 求S中的符号变量、17、findsym(S,n) 求最靠近x的n个符号变量18、subs(S,a) 用a替换S中默认的变量19、subs(S,new,old) 用new替换S中的old >> f=taylor(cos(x))f =1-1/2*x^2+1/24*x^4>> pretty(f)2 41 - 1/2 x + 1/24 x >> horner(f)ans =1+(-1/2+1/24*x^2)*x^2>> f=(x-a+y)/(y+b-x);>> findsym(f)ans =a, b, x, y>> findsym(f,2)ans =x,y>> f1=subs(f,z)f1 =(z-a+y)/(y+b-z)>> f2=subs(f1,z,2)f2 =(2-a+y)/(y+b-2)复合函数的计算(主要指复数、复合函数、反函数计算)20、B=conj(A) 求复数A的共轭复数21、R=real(Z) 求复数Z的实部22、I=imag(Z) 求复数Z的虚部23、compose(f,g) 求f=f(x),g=g(x)的复合函数f[g(x)]24、compose(f,g,z) 求f=f(x),g=g(x),x=z的复合函数f[g(z)]25、compose(f,g,x,z) 求f=f(x),g=g(y),y=z的复合函数f[g(z)]26、g=finverse(f) 求函数f的反函数g27、g=finverse(f,v) 求函数f对指定自变量v的反函数g >> syms('a','real');>> syms('b','real');>> z=3*a-2*b-(6+b)*i;>> real(z)ans =3*a-2*b>> imag(z)ans =-6-b>> conj(z)ans =3*a-2*b+i*(6+b)>> syms x y z u t>> f=u^3;g=sin(2*x+1);>> compose(f,g)ans =sin(2*x+1)^3>> compose(f,g,t) (求f,g 的复合函数,再将自变量x 换成t)ans =sin(2*t+1)^3求22x e -,12xx -+的反函数>> finverse(exp(2*x)-2)ans =1/2*log(2+x)>> finverse((1-x)/(2+x))ans =-(-1+2*x)/(1+x)特征多项式运算1、p=poly(A) 求数值矩阵或符号矩阵A 特征多项式系数向量p2、p=poly(A,v) 求数值矩阵或符号矩阵A(指定变量v)特征多项式系数向量p3、r=poly2sym(p) 将数值系数向量p 转化为符号变量多项式r4、r=poly2sym(p,v) 将数值系数向量p(按指定变量v)转化为符号变量多项式r >> A=[1 2 3;2 3 1;3 1 2];>> p=poly(A)p =1.0000 -6.0000 -3.0000 18.0000>> q=poly(sym(A))q =-6*x^2-3*x+18+x^3>> r=poly2sym(p)r =-6*x^2-3*x+18+x^3>> syms t>> t=poly2sym(p,t)t =t^3-6*t^2-3*t+18符号函数的极限运算28、limit(F,x,a) 计算当x→a时求F的极限值29、limit(F) 计算默认变量v→0时F的极限值30、limit(F,a) 计算默认变量v→a时求F的极限值31、limit(F,x,a,’right’) 计算当x→a时求F的右极限值32、limit(F,x,a,’left’) 计算当x→a时求F的左极限值>> syms x y t>> f=1/x;>> limit(f,a)1/a>> limit(f,inf)ans =>> limit(f,0)ans =NaN>> g=atan(x);>> limit(g,x,inf)ans =1/2*pi>> limit(g,x,-inf)ans =-1/2*pi>> f=tan(x)f =tan(x)>> limit(f,x,pi/2,'right') ans =-Inf>> limit(f,x,pi/2,'left')Inf 例:按系统默认自变量求函数22x t x y --的自变量趋近于0和3时的极限值 >> f=(x^2-t^2)/(x-y);>> limit(f)ans =t^2/y>> limit(f,3)ans =(-9+t^2)/(-3+y)例3、求符号矩阵()()()2sin cos sin 2ln 1ln 2ln 3x x x x e e e e xx x x x x --⎛⎫-⎪ ⎪ ⎪ ⎪+++ ⎪ ⎪⎝⎭当x →0时的左极限>> A=[exp(x) exp(-x) (exp(x)-exp(-x))/2;sin(x) cos(x) sin(2*x);log(1+x) log(2+x) log(3+x)];>> limit(A,x,0,'left')ans =[ 1, 1, 0][ 0, 1, 0][ 0, log(2), log(3)]1、 符合函数求导2、 diff(S,’v ’)/ diff(S,sym(’v ’)) 计算S 对指定符号变量v 的一阶导数3、 diff(S) 计算S 对默认变量的一阶导数4、 diff(S ,n) 计算S 对默认变量的n 阶导数5、 diff(S,’v ’,n)/ diff(S,sym(’v ’),n) 计算S 对指定符号变量v 的n 阶导数 例:求)2x x e 的一阶导数>> f=exp(x)*(sqrt(x)+2^x)f =exp(x)*(x^(1/2)+2^x)>> diff(f)ans =exp(x)*(x^(1/2)+2^x)+exp(x)*(1/2/x^(1/2)+2^x*log(2))>> diff(f,3)ans =exp(x)*(x^(1/2)+2^x)+3*exp(x)*(1/2/x^(1/2)+2^x*log(2))+3*exp(x)*(-1/4/x^(3/2)+2^x*log(2)^2)+exp(x)*(3/8/x^(5/2)+2^x*log(2)^3)例:求隐函数223x y xy +=的一阶导数>> S=x^2+y^2-3*x*y;>> -diff(S,'x')/diff(S,'y')ans =(-2*x+3*y)/(2*y-3*x) 例:求二元函数222xyx y +的两个一阶导数和三个二阶导数>> S=2*x*y/(x^2+y^2);>> dfx=diff(S,'x')2*y/(x^2+y^2)-4*x^2*y/(x^2+y^2)^2>> dfy=diff(S,'y')dfy =2*x/(x^2+y^2)-4*x*y^2/(x^2+y^2)^2>> d2fx=diff(S,'x',2)d2fx =-12*y/(x^2+y^2)^2*x+16*x^3*y/(x^2+y^2)^3>> d2fxy=diff(dfx,'y')d2fxy =2/(x^2+y^2)-4*y^2/(x^2+y^2)^2-4*x^2/(x^2+y^2)^2+16*x^2*y^2/(x^2+y^2)^3 >> d2fy=diff(dfy,'y')d2fy =-12*y/(x^2+y^2)^2*x+16*x*y^3/(x^2+y^2)^3符号函数的积分1、 int(S) 对S 中默认变量求S 的不定积分2、 int(S,v) 对S 中指定变量v 求S 的不定积分3、 int(S,a,b) 对S 中默认变量在区间[a,b]上求S 的不定积分4、 int(S,v,a,b)对S 中指定变量v 在区间[a,b]上求S 的不定积分 例:计算22741225x dx x x -++⎰、2cos 3x e xdx ⎰>> S=(2*x-7)/(4*x^2+12*x+25);>> int(S)1/4*log(4*x^2+12*x+25)-5/4*atan(1/2*x+3/4)>> S=exp(2*x)*cos(3*x);>> int(S)ans =2/13*exp(2*x)*cos(3*x)+3/13*exp(2*x)*sin(3*x)例;求1220⎰、220sin x xdx π⎰、2114dx x ∞-∞+⎰>> syms x y z a b>> S=x^2/(sqrt(1-x^2));>> int(S,0,1/2)ans =-1/8*3^(1/2)+1/12*pi>> S=x*sin(x)^2 ;>> int(S,0,pi/2)ans =1/4+1/16*pi^2>> S=1/(1+4*x^2);>> int(S,-inf,inf)ans =1/2*pi 例:求二重积分sin D x dxdy x ⎰⎰,其中D 是由直线,2x y x y ==及2x =围成的区域先求解,2x y x y ==可知02x ≤≤,2x y x ≤≤,由微积分的知识,我们知道二重积分是两个定积分的累次积分>> S=sin(x)/x;>> int(S,y,x/2,x)ans =1/2*sin(x)>> s1=int(S,y,x/2,x)s1 =1/2*sin(x)>> int(s1,0,2)ans =1/2-1/2*cos(2)2)求()22ln Dx y dxdy +⎰⎰,其中22:116D x y ≤+≤我们知道当被积函数为圆域时,我们一般用极坐标法,因此原式2ln Dr rdrd θ⎰⎰ :14,02D r θπ≤≤≤≤>> syms r sita>> S=2*r*log(r);>> s2=int(S,r,1,4)s2 =-15/2+32*log(2)>> int(s2,sita,0,2*pi)ans =-15*pi+64*pi*log(2)例:求曲线积分22L xydx x dy +⎰,其中L 为曲线2cos ,3sin ,04x t y t t π⎛⎫==≤≤ ⎪⎝⎭依参数增大方向。