符号极限、微积分和符号方程的求解1.语法:sym(‘表达式’)%创建符号表达式f1=sym('a*x^2+b*x+c')f1=a*x^2+b*x+c2.使用syms命令创建符号变量和符号表达式语法:symsarg1arg2…,参数%把字符变量定义为符号变量的简洁形式symsabcx%创建多个符号变量f2=a*x^2+b*x+c%创建符号表达式3.4.1符号极限假定符号表达式的极限存在,SymbolicMathToolbox提供了直接求表达式极限的函数limit,函数limit的基本用法如表3.2所示。表3.2limit函数的用法表达式函数格式说明f(x)lim0xlimt(f)对x求趋近于0的极限f(x)limaxlimt(f,x,a)对x求趋近于a的极限,当左右极限不相等时极限不存在。f(x)limaxlimt(f,x,a,left)对x求左趋近于a的极限f(x)limaxlimt(f,x,a,right)对x求右趋近于a的极限【例3.14】分别求1/x在0处从两边趋近、从左边趋近和从右边趋近的三个极限值。f=sym('1/x')limit(f,'x',0)%对x求趋近于0的极限ans=NaNlimit(f,'x',0,'left')%左趋近于0ans=-inflimit(f,'x',0,'right')%右趋近于0ans=inf程序分析:当左右极限不相等,表达式的极限不存在为NaN。3.4.2符号微分函数diff是用来求符号表达式的微分。语法:diff(f)%求f对自由变量的一阶微分diff(f,t)%求f对符号变量t的一阶微分diff(f,n)%求f对自由变量的n阶微分diff(f,t,n)%求f对符号变量t的n阶微分【例3.15】已知f(x)=ax2+bx+c,求f(x)的微分。f=sym('a*x^2+b*x+c')f=a*x^2+b*x+cdiff(f)%对默认自由变量x求一阶微分ans=2*a*x+bdiff(f,'a')%对符号变量a求一阶微分ans=x^2diff(f,'x',2)%对符号变量x求二阶微分ans=2*adiff(f,3)%对默认自由变量x求三阶微分ans=0微分函数diff也可以用于符号矩阵,其结果是对矩阵的每一个元素进行微分运算。【例3.15续】对符号矩阵x2etsin(x)t2x求微分。symstxg=[2*xt^2;t*sin(x)exp(x)]%创建符号矩阵g=[2*x,t^2][t*sin(x),exp(x)]diff(g)%对默认自由变量x求一阶微分ans=[2,0][t*cos(x),exp(x)]diff(g,'t')%对符号变量t求一阶微分ans=[0,2*t][sin(x),0]diff(g,2)%对默认自由变量x求二阶微分ans=[0,0][-t*sin(x),exp(x)]diff还可以用于对数组中的元素进行逐项求差值。【例3.15续】可以使用diff计算向量间元素的差值。x1=0:0.5:2;y1=sin(x1)y1=00.47940.84150.99750.9093diff(y1)%计算元素差ans=0.47940.36200.1560-0.0882程序分析:计算出的差值比原来的向量少一列。3.4.3符号积分积分有定积分和不定积分,运用函数int可以求得符号表达式的积分。语法:int(f,’t’)%求符号变量t的不定积分int(f,’t’,a,b)%求符号变量t的积分int(f,’t’,’m’,’n’)%求符号变量t的积分说明:t为符号变量,当t省略则为默认自由变量;a和b为数值,[a,b]为积分区间;m和n为符号对象,[m,n]为积分区间;与符号微分相比,符号积分复杂得多。因为函数的积分有时可能不存在,即使存在,也可能限于很多条件,MATLAB无法顺利得出。当MATLAB不能找到积分时,它将给出警告提示并返回该函数的原表达式。【例3.16】求积分cos(x)和cos(x)。f=sym('cos(x)');int(f)%求不定积分ans=sin(x)int(f,0,pi/3)%求定积分ans=1/2*3^(1/2)int(f,'a','b')%求定积分ans=sin(b)-sin(a)int(int(f))%求多重积分ans=-cos(x)diff和int命令,也可以直接对字符串f进行运算:f='cos(x)';【例3.16续】求符号矩阵x2etsin(x)t2x的积分。symstxg=[2*xt^2;t*sin(x)exp(x)]%创建符号矩阵g=[2*x,t^2][t*sin(x),exp(x)]int(g)%对x求不定积分ans=[x^2,t^2*x][-t*cos(x),exp(x)]int(g,'t')%对t求不定积分ans=[2*x*t,1/3*t^3][1/2*t^2*sin(x),exp(x)*t]int(g,sym('a'),sym('b'))%对x求定积分ans=[b^2-a^2,t^2*(b-a)][-t*cos(b)+t*cos(a),exp(b)-exp(a)]3.4.4符号级数1.symsum函数语法:symsum(s,x,a,b)%计算表达式s的级数和说明:x为自变量,x省略则默认为对自由变量求和;s为符号表达式;[a,b]为参数x的取值范围。【例3.17】求级数222k131211和1+x+x2+…+xk+…的和。symsxks1=symsum(1/k^2,1,10)%计算级数的前10项和s1=1968329/1270080s2=symsum(1/k^2,1,inf)%计算级数和s2=1/6*pi^2s3=symsum(x^k,'k',0,inf)%计算对k为自变量的级数和s3=-1/(x-1)2.taylor函数语法:taylor(F,x,n)%求泰勒级数展开说明:x为自变量,F为符号表达式;对F进行泰勒级数展开至n项,参数n省略则默认展开前5项。【例3.17续】求ex的泰勒展开式为:1k32xk!1x321x21x1。symsxs1=taylor(exp(x),8)%展开前8项s1=1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5+1/720*x^6+1/5040*x^7s2=taylor(exp(x))%默认展开前5项s2=1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^53.6符号方程的求解3.6.1代数方程当方程不存在解析解又无其他自由参数时,MATLAB可以用solve命令给出方程的数值解。语法:solve(‘eq’,’v’)%求方程关于指定变量的解solve(‘eq1’,’eq2’,’v1’,’v2’,…)%求方程组关于指定变量的解说明:eq可以是含等号的符号表达式的方程,也可以是不含等号的符号表达式,但所指的仍是令eq=0的方程;当参数v省略时,默认为方程中的自由变量;其输出结果为结构数组类型。【例3.21】求方程ax2+bx+c=0和sinx=0的解。f1=sym('a*x^2+b*x+c')%无等号f1=a*x^2+b*x+csolve(f1)%求方程的解xans=[1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))]f2=sym('sin(x)')f2=sin(x)solve(f2,'x')ans=0程序分析:当sinx=0有多个解时,只能得出0附近的有限几个解。【例3.22】求三元非线性方程组1z*y43zx012xx2的解。eq1=sym('x^2+2*x+1');eq2=sym('x+3*z=4');eq3=sym('y*z=-1');[x,y,z]=solve(eq1,eq2,eq3)%解方程组并赋值给x,y,zx=-1y=-3/5z=5/3程序分析:输出结果为“结构对象”,如果最后一句为“S=solve(eq1,eq2,eq3)”,则结果为:S=x:[1x1sym]y:[1x1sym]z:[1x1sym]3.6.2符号常微分方程MATLAB提供了dsolve命令可以用于对符号常微分方程进行求解。语法:dsolve(‘eq’,’con’,’v’)%求解微分方程dsolve(‘eq1,eq2…’,’con1,con2…’,’v1,v2…’)%求解微分方程组说明:’eq’为微分方程;’con’是微分初始条件,可省略;’v’为指定自由变量,省略时则默认为x或t为自由变量;输出结果为结构数组类型。当y是因变量时,微分方程’eq’的表述规定为:y的一阶导数dxdy或dtdy表示为Dy;y的n阶导数nndxyd或nndtyd表示为Dny。微分初始条件'con'应写成'y(a)=b,Dy(c)=d'的格式;当初始条件少于微分方程数时,在所得解中将出现任意常数符C1,C2……,解中任意常数符的数目等于所缺少的初始条件数。【例3.23】求微分方程222xdxdy3dxydx,y(1)=0,y(0)=0的解。y=dsolve('x*D2y-3*Dy=x^2','x')%求微分方程的通解y=-1/3*x^3+C1+C2*x^4y=dsolve('x*D2y-3*Dy=x^2','y(1)=0,y(5)=0','x')%求微分方程的特解y=-1/3*x^3+125/468+31/468*x^4【例3.24】求微分方程组xdtdyy,dtdx的解。[x,y]=dsolve('Dx=y,Dy=-x')x=cos(t)*C1+sin(t)*C2y=-sin(t)*C1+cos(t)*C2程序分析:默认的自由变量是t,C1、C2为任意常数,程序也可指定自由变量,结果相同:[x,y]=dsolve('Dx=y,Dy=-x','t')3.7符号函数的可视化3.7.1符号函数的绘图命令1.ezplot和ezplot3命令ezplot命令是绘制符号表达式的自变量和对应各函数值的二维曲线,ezplot3命令用于绘制三维曲线。语法:ezplot(F,[xmin,xmax],fig)%画符号表达式的图形说明:F是将要画的符号函数;[xmin,xmax]是绘图的自变量范围,省略时默认值为[-2л,2л];fig是指定的图形窗口,省略时默认为当前图形窗口。【例3.25】画出上一小节【例3.23】中y(x)特解的图形,如图3.2所示。y=sym('-1/3*x^3+1/3*x^4')y=-1/3*x^3+1/3*x^4ezplot(y)ezplot(y,[0,100])%绘制符号函数y在[0,100]中的图形【例3.26】用ezplot3绘制三维符号表达式曲线,如图3.3所示。x=sym('sin(t)');z=sym('t');y=sym('cos(t)');图3.2(a)y(x)在[-2л,2л]的图形(b)y(x)在[0,100]的图形ezplot3(x,y,z,[0,10*pi],'animate')%绘制t在[0,10*pi]范围的三维曲线2.其它绘图命令MATLAB提供的较常用绘图命令还有如表3.3所示。表3.3符号表达式和字符串的绘图命令命令名含义举例ezcontour画等高线ezcontour('x*sin(t)',[-4,4])ezcontourf画带填充颜色等高线ezcontourf('x*sin(t)',[-4,4])ezmesh画三维网线图ezmesh('sin(x)*exp(-t)','cos(x)*exp(-t)','x',[0,2*pi])ezmeshc画带等高线的三维网线图ezmeshc('sin(x)*t',[-pi,pi])ezpolar画极坐标图ezpolar('sin(t)',[0,pi/2])ezsurf画三维曲面图ezsurf('x*sin(t)','x*cos(t)','t',[0,10*pi])ezsurfc画带等高线的三维曲面图ezsurfc('