您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 2符号计算绘图和simulink仿真
第4章MATLAB符号计算1.符号计算基础2.符号微积分3.级数4.符号方程求解5.积分变换4.1符号计算基础4.1.1符号对象的建立1.创建符号变量MATLAB提供了两个建立符号对象的函数:sym和syms,两个函数的用法不同。(1)sym函数sym函数用来建立单个符号量,一般调用格式为:符号量名=sym('符号字符串')该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。a=sym('a')a=a注意:符号变量a和非符号变量a是不同的。非符号变量在参与运算之前必须赋值,变量的运算实际上是该变量对应的值进行运算,其结果是一个和变量类型对应的值;而符号变量参与运算之前无须赋值,其结果是一个由参与运算的变量名组成的表达式。a=sym('a');b=sym('b');c=sym('c');d=sym('d');A=[a,b;c,d]A=[a,b][c,d]w=1;x=2;y=3;z=4;B=[w,x;y,z]B=1234det(A)ans=a*d-b*c(A=sym('[a,b;c,d]')det(B)ans=-2应用sym函数还可以定义符号常数,使用符号常数进行代数运算时和数值常量进行的运算不同。下面的命令用于比较符号常量与数值常量在代数运算时的差别。a=sym('8');b=8;sqrt(a)%结果为符号常量ans=2*2^(1/2)sqrt(b)%结果为数值常量ans=2.8284eval(a)%计算符号表达式的值ans=8(2)syms函数MATLAB提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为:syms符号变量名1符号变量名2…符号变量名n用这种格式定义符号变量时不要在变量名上加字符串分界符(′),变量间用空格而不要用逗号分隔。例如用syms定义a、b、c三个符号变量:symsabc2.建立符号表达式和符号矩阵建立符号表达式有以下2种方法:(1)用sym函数建立符号表达式。(2)使用已经定义的符号变量组成符号表达式。f=sym('a*x^2+b*x+c')f=a*x^2+b*x+csymsxabcf=a*x^2+b*x+cf=a*x^2+b*x+c创建符号矩阵的方法同创建符号表达式如:symsa11a12a21a22A=[a11a12;a21a22]A=[a11,a12][a21,a22]sym('[a11a12;a21a22]')法一法二符号表达式的因式分解与展开MATLAB提供了符号表达式的因式分解与展开的函数,函数的调用格式为:factor(f):对符号表达式f分解因式。expand(f):对符号表达式f进行展开。collect(f):对符号表达式f合并同类项。collect(f,v):对符号表达式f按变量v合并同类项。4.1.2基本的符号运算symsxyf=(2*x+3*y)*(x+1)f=(2*x+3*y)*(x+1)a=expand(f)a=2*x^2+2*x+3*y*x+3*ya=collect(a,x)a=2*x^2+(2+3*y)*x+3*yfactor(a)ans=(2*x+3*y)*(x+1)符号矩阵P66符号矩阵也是一种符号表达式,所以前面介绍的符号表达式运算都可以在矩阵意义下进行。但应注意这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。transpose(A):返回符号矩阵A的转置矩阵。A':返回符号矩阵A的共轭转置矩阵。det(A)、determ(A):返回矩阵A的行列式值。其实,曾介绍过的许多应用于数值矩阵的函数,如diag、triu、tril、inv、det、rank、eig等,也可直接应用于符号矩阵。符号表达式与数值表达式之间的转换利用函数sym可以将数值表达式变换成它的符号表达式。函数numeric或eval可以将符号表达式变换成数值表达式。符号表达式中变量的确定MATLAB中的符号可以表示符号变量和符号常量。findsym可以帮助用户查找一个符号表达式中的的符号变量。该函数的调用格式为:findsym(s,n)函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全部符号变量。仅作了解。4.2.1符号函数的极限limit函数的调用格式为:(1)limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。注:其中a可以为一个确定的数,也可以为无穷大。在应用时,先用syms命令把x声明为符号变量(2)limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a。4.2微分运算(3)limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。(4)limit(f,x,a,'right'):求符号函数f的极限值。'right'表示变量x从右边趋近于a。(5)limit(f,x,a,‘left’):求符号函数f的极限值。‘left’表示变量x从左边趋近于a。例如:求极限xxxsinlim0symsxlimit(sin(x)/x,x,0)ans=1limit(sin(x)/x)ans=1limit(1/x,x,0)ans=NaNlimit(1/x,x,0,'left')ans=-inflimit(1/x,x,0,'right')ans=infxx1lim0xx1lim0xx1lim0例求下列极限。极限1:symsamx;f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a);limit(f,x,a)ans=(1/2*a*exp(sin(a))+1/2*a-exp(tan(a))+1)/a极限2:symsxt;limit((1+2*t/x)^(3*x),x,inf)ans=exp(6*t)极限3:symsx;f=x*(sqrt(x^2+1)-x);limit(f,x,inf,'left')ans=1/2极限4:symsx;f=(sqrt(x)-sqrt(2)-sqrt(x-2))/sqrt(x*x-4);limit(f,x,2,'right')ans=-1/24.2.2符号函数的微分diff函数用于对符号表达式求微分(导数)。该函数的一般调用格式为:diff(f):没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式f求一阶导数。diff(f,'x'):以x为自变量,对符号表达式f求一阶导数。diff(f,n):按findsym函数指示的默认变量对符号表达式f求n阶导数,n为正整数。diff(f,'x',n):以x为自变量,对符号表达式f求n阶导数。symsxdiff(x*cos(x),x)ans=cos(x)-x*sin(x)diff(x*cos(x),x,2)ans=-2*sin(x)-x*cos(x)diff(x*cos(x),x,3)ans=-3*cos(x)+x*sin(x)sym('y=x^3+3*x-2');f=diff(y);p=solve(f-4)%求f-4=0的根eval(solve(f-4))%将结果转化为数值解p=[1/3*3^(1/2)][-1/3*3^(1/2)]ans=0.5774-0.5774求曲线与直线平行的切线的切点233xxy14xydiff(‘x*cos(x)’,‘x’)4.3积分运算符号积分由函数int来实现。该函数的一般调用格式为:int(f):没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式f求不定积分。int(f,x):以x为自变量,对被积函数或符号表达式f求不定积分。int(f,x,a,b):求定积分运算。a,b分别表示定积分的下限和上限。该函数求被积函数在区间[a,b]上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。当a,b中有一个是inf时,函数返回一个广义积分。当a,b中有一个符号表达式时,函数返回一个符号函数。dxx112symsxint(1/(x^2+1))ans=atan(x)symsxt;f1=x^2/(x+1);a1=int(f1,1,2)a1=log(3)+1/2-log(2)double(a1)ans=0.9055dxx21211dxx112f2='1/(x^2+1)';a2=int(f2,-inf,inf)a2=pittxdxsin12f3='2*t*x‘;a3=int(f3,x,1,'sin(t)')a3=t*(sin(t)^2-1)4.4级数1.级数符号求和求无穷级数的和符号表达式求和函数symsum,调用格式为:symsum(s,v,n,m)其中s表示一个级数的通项,是一个符号表达式。v是求和变量,v省略时使用系统的默认变量。n和m是求和的开始项和末项。例:分别求级数的和。和symsksymsum(1/k,k,1,inf)ans=infsymsum(1/(k*(k+1)),k,1,inf)ans=1k131211)1k(k1321212.函数的泰勒级数MATLAB提供了taylor函数将函数展开为幂级数,其调用格式为:taylor(f,x,n,a)该函数将函数f按变量x展开为泰勒级数,展开到第n项(即变量x的n-1次幂)为止,n的缺省值为6。x的缺省值与diff函数相同。参数a指定将函数f在自变量x=a处展开,a的缺省值是0。f='(1+2*x+3*x^2)/(1-2*x-3*x^2)';taylor(f,x,5)ans=1+4*x+14*x^2+40*x^3+122*x^44.5.1代数方程在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:solve(f):求解符号表达式f的代数方程,求解变量为默认变量。solve(f,x):求解符号表达式f的代数方程,求解变量为x。solve(f1,f2,…,fn,x1,x2,…,xn):求解符号表达式f1,f2,…,fn组成的代数方程组,求解变量分别x1,x2,…,xn。4.5求解方程例如求解一元二次方程的解symsxabcy=a*x^2+b*x+cy=a*x^2+b*x+csolve(y)ans=[1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))]solve(y,a)%求解未知变量aans=-(b*x+c)/x^2在求解后,有时解的表示是有理分式形式,可以用double函数将结果化为小数,但会使结果不够精确。y=x^2+3*x+4;solve(y)ans=[-3/2+1/2*i*7^(1/2)][-3/2-1/2*i*7^(1/2)]double(ans)ans=-1.5000+1.3229i-1.5000-1.3229i若要求解的是形式的方程,可给出整个方程,并用单引号引起来,或将方程改为,并将赋给另一个变量,然后再使用函数。)(xfy0)(xfy)(xfy求解方程组:4,222yxxy[x,y]=solve('x*y=2','x^2+y^2=4')x=[2^(1/2)][-2^(1/2)]y=[2^(1/2)][-2^(1/2)]4.5.3符号常微分方程求解在MATLAB中,用大写字母D表示导数。例如,Dy表示y′,D2y表示y″,Dy(0)=5表示。D3y+D2y+Dy-x+5=
本文标题:2符号计算绘图和simulink仿真
链接地址:https://www.777doc.com/doc-8183796 .html