ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:266.14KB ,
资源ID:4770830      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4770830.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MATLAB符号计算.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MATLAB符号计算.docx

1、MATLAB符号计算第5章 MATLAB符号计算Matlab本身并没有符号计算功能,1993年通过购买Maple的使用权后,开始具备符号运算的功能符号运算的类型很多,几乎涉及数学的所有分支符号运算使用一种特殊的数据类型,称为符号对象(Symbolic Object),用字符串形式表达,但又不同于字符串(Char Array)。符号中的变量,函数和表达式都是符号对象。For personal use only in study and research; not for commercial use5.1 符号对象的定义5.1.1 建立符号变量MATLAB提供了两个建立符号对象的函数:sym和s

2、yms,两个函数的用法不同。For personal use only in study and research; not for commercial use1. sym函数sym函数用来建立单个符号对象,一般调用格式为:符号对象名=sym(符号字符串)该函数可以建立一个符号对象,符号字符串可以是常量、变量、函数或表达式。符号对象名=sym(num,d) 该函数将数值表达式num转化为符号表达式,数值用十进制表示;试比较分析下列命令: a=pi2, b=pi2, c=sym(pi2),d= sym(pi2,d), e=sym(b)a=pi2 %结果为一个数a = 9.8696b=pi2 %

3、结果为一个字符串b =pi2c=sym(pi2) %数值转化为符号对象,有理表示!c =*2(-49)c=sym(pi2,d) %数值转化为符号对象,十进制表示!c =9.e=sym(b) %或e=sym(pi2) 字符串转化为符号对象e =pi22. syms函数函数sym一次只能定义一个符号变量,使用不方便。MATLAB提供了另一个函数syms,一次可以定义多个符号变量(对象)。syms函数的一般调用格式为:syms 符号变量名1 符号变量名2 符号变量名n用这种格式定义符号变量时不要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔。syms x y zh=x3+2*y2+eh

4、=x3+2*y2+pi25.1.2 建立符号表达式含有符号对象的表达式称为符号表达式。建立符号表达式有以下3种方法:(1)利用单引号来生成符号表达式。(2)用sym函数建立符号表达式。(3)使用已经定义的符号变量组成符号表达式。A=c b;e-h h-x3A = *2(-49), pi2 -x3-2*y2, 2*y2+pi25.1.3 计算精度和数据类型转换 利用函数sym可以将数值表达式变换成它的符号表达式,函数numeric或eval可以将符号表达式变换成数值表达式。double(s) 将符号对象转化为双精度数值char(s) 将符号对象转化为字符串digits(n) 将数值计算精度设为n

5、位;x=vpa(s) 求s的数值结果x=vpa(s,n) 采用n位计算精度求s的数值结果210000ans = Infa=sym(2);b=a10000b =216268709376 %很长的整数,准确的,而不是近似的vpa(b)ans =.e3011 format long;pi2,format short %用长格式显示pi的值,再恢复为短格式ans = 9.108936试比较以下C=PI2的显示结果。c=sym(pi2);vpa(c,16) %16位ans =9.1089357vpa(c) %32位,默认ans =9.9998761vpa(c,100) %100位,高精度ans =9.0

6、2vpa(c,2) %2位,低精度ans =9.6double(c) %双精度,数值 ans = 9.8696syms x; f=sym(x3-1)f =x3-1fun=inline(f)fun = Inline function: fun(x) = x.3-15.2 符号矩阵和符号函数5.2.1 符号矩阵MATLAB大部分矩阵和数组运算符及指令都可以用于符号如:inv,./,.,eig等clear;A=sym(a,b;c,d);B=inv(A)B = d/(a*d-b*c), -b/(a*d-b*c) -c/(a*d-b*c), a/(a*d-b*c)A.B,ABans = d/(a*d-b

7、*c)/a, -1/(a*d-b*c) -1/(a*d-b*c), a/(a*d-b*c)/dans = (d2+b*c)/(d2*a2-2*a*d*b*c+b2*c2), -b*(a+d)/(d2*a2-2*a*d*b*c+b2*c2) -c*(a+d)/(d2*a2-2*a*d*b*c+b2*c2), (b*c+a2)/(d2*a2-2*a*d*b*c+b2*c2)A*Bans = a*d/(a*d-b*c)-b*c/(a*d-b*c), 0 0, a*d/(a*d-b*c)-b*c/(a*d-b*c)eig(A)ans = 1/2*d+1/2*a+1/2*(d2-2*a*d+a2+4*b

8、*c)(1/2) 1/2*d+1/2*a-1/2*(d2-2*a*d+a2+4*b*c)(1/2)2.符号函数计算大部分MATLAB的数学函数和逻辑关系运算也可以用于符号对象,另外还有:factor(expr) 对expr作因式分解expand(expr) 将expr展开collect(expr,v) 将expr按变量v合并同类项simplify(s):应用函数规则对s进行化简。simple(s):调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。g=finverse(f,v) 求函数f(v)的反函数g(v)fg=compose(f, g) 求函数f(v)和g(v)的复合函数f(

9、g(v)n,d=numden(expr) 分式通分,n返回分子,d返回分母如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。例1. 已知 f (x,y) = (x-y)3, g(x,y) = (x+y)3,s=x6+1;考虑相关的运算,如求 h= f*g 并展开。clear;syms x y z ;f=(x-y)3;g=(x+y)3;h=f*g %两函数相乘h =(x-y)3*(x+y)3hs=expand(h) %函数展开hs =x6-3*x4*y2+3*x2*y4-y6s=x6+1;sf=factor(s) %因式分解sf =(x2+1

10、)*(x4-x2+1)sz=subs(sf,x,z2+z+1) %用z2+z+1替换sf中的xsz =(z2+z+1)2+1)*(z2+z+1)4-(z2+z+1)2+1)n,d=numden(x/y+y/x) %分式通分n =x2+y2d =x*y下面是复合函数与反函数的例子:clear;syms x y z t;f=1/(1+x2);g=sin(y);A1=compose(f,g) %求复合函数A1 =1/(sin(y)2+1)A2=compose(f,g,t) %求复合函数,变量用t表示A2 =1/(sin(t)2+1)v=finverse(f)Warning: finverse(1/(

11、x2+1) is not unique.In D:toolboxsymbolicsymfinverse.m at line 43v =1/x*(-x*(x-1)(1/2) %结果不唯一。5.3 符号表达式中变量的确定MATLAB中的符号可以表示符号变量和符号常量。findsym可以帮助用户查找一个符号表达式中的的符号变量。该函数的调用格式为:findsym(s,n)函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全部符号变量。符号变量确定原则(1)除了i和j之外,字母位置最接近x的字母;若距离相等,则取ASCII码大的;(2)若没有除了i 与j以外的字母,则视x为默认的符号变量

12、;(微分方程视t为默认的符号变量)syms a b x yfindsym(3*a*b+y2+1,1)ans =yfindsym(3*a*b+y2+1)ans =a, b, y5.4 符号微积分5.4.1 符号极限limit函数的调用格式为:(1)limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。(2)limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a。(3)limit(f):求符号函数f(x)的极限值。符

13、号函数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。例5-1 求下列极限(改用课本例子)。(1) (2) (3) (4) syms h n xL=limit(log(x+h)-log(x)/h,h,0) %单引号可省略掉L =1/xM=limit(1-x/n)n,n,inf) M=exp(-x) limit(1-cos(x)/

14、(x*sin(x),x,0)ans =1/2syms x;f=(sqrt(x)-sqrt(2)+sqrt(x-2)/sqrt(x*x-4);limit(f,x,2,right)ans =1/2例5-2 (A)(B)(C)二元,其中C不存在!1. (A)求二元函数的极限: fun1=(x3*y+x*y3+x*y)/(x+y)3; limit(limit(fun1,x,2),y,1) ans =4/9(B)1. 求极限: syms m n limit(symsum(m/n2,m,1,n),n,inf) ans = 1/2(C)syms x ylimit(limit(x*y/(x2+y2),x,0)

15、,y,0) ans =0注:此二元函数的极限不存在,但计算结果为零,是不正确的。要注意二元函数的极限与二次极限的区别。故使用MATLAB计算极限,要在极限存在的前提下进行。5.4.2 符号导数diff函数用于对符号表达式求导数。该函数的一般调用格式为:diff(s):没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数。diff(s,v):以v为自变量,对符号表达式s求一阶导数。diff(s,n):按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数。diff(s,v,n):以v为自变量,对符号表达式s求n阶导数。例5-3 (1)设z=e2

16、xcos(3y),求(化简过程中只写最后一个最简结果)。2. 设z=e2xcos(3y),求,并求(2)y=ex(sinx+cosx)z=exp(2*x)*cos(3*y);f1=diff(diff(z,x),y) f1 =-6*exp(2*x)*sin(3*y)%或f1=diff(diff(z,y),x) 结果同上!ff2=subs(f1,x,1); ff2=subs(ff2,y,pi)ff2 = -1.6288e-014(2) clear;syms x y y=exp(x)*(sin(x)+cos(x); dy=diff(y,x)dy =exp(x)*(sin(x)+cos(x)+exp(

17、x)*(cos(x)-sin(x) simple(dy)ans =2*exp(x)*cos(x) simplify(dy)ans =2*exp(x)*cos(x)例5-3 求下列函数的导数。(同前面合并!)(2), clear;syms x y s=diff(x2*exp(-y),x,2)s =2*exp(-y) t=diff(x2*exp(-y),x); t=diff(t,y); t=subs(t,x,1) t=subs(t,y,2)t = -0.2707例5-4. (1)求由方程y5+2y-x-3x7=0 所确定的隐函数的导数。(2).求函数z=ln(x2+y2)的全微分, 并化简(化简过

18、程中只写最后一个最简结果)。(3)求摆线,在t=所对应的点的切线斜率(4)求y=ln(sinx)的微分 syms x y; fxy=y5+2*y-x-3*x7;fx=diff(fxy,x);fy=diff(fxy,y); dv=-fx/fy dv = (1+21*x6)/(5*y4+2)syms x y dx dyz=log(x2+y2);dz=diff(z,x)*dx+diff(z,y)*dy;dz=simple(dz)dz =2*(x*dx+y*dy)/(x2+y2) syms a t; x=a*(t-sin(t);y=a*(1-cos(t); f1=diff(y,t);f2=diff(x

19、,t); f=f1/f2f =sin(t)/(1-cos(t) ff=inline(f); k=ff(pi)k = 6.1232e-017 syms x y dx dy y=log(sin(x); f1=diff(y,x); dy=f1*dxdy =cos(x)/sin(x)*dx5.4.3 符号积分符号积分由函数int来实现。该函数的一般调用格式为:int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分。int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分。int(s,v,a,b):求定积分运算。a,b分别表示定积分

20、的下限和上限。该函数求被积函数在区间a,b上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数f关于变量x在闭区间a,b上可积时,函数返回一个定积分结果。当a,b中有一个是inf时,函数返回一个广义积分。当a,b中有一个符号表达式时,函数返回一个符号函数。当系统求不出解析解,会自动求原点附近的一个近似解。例5-5 求下列积分。syms x f=(x2+1)/(x2-2*x+2)2;g=cos(x)/(sin(x)+cos(x);h=exp(-x2);I=int(f)J=int(g,0,pi/2)K=int(h,0,inf) 结果为: I =1/4*(2*

21、x-6)/(x2-2*x+2)+3/2*atan(x-1) J =1/4*pi K =1/2*pi(1/2)4.求不定积分: 并化简(化简过程中只写最后一个最简结果)。(4)f2=int(x*exp(a*x) f2 =1/a2*(a*x*exp(a*x)-exp(a*x) simple(f2)ans =exp(a*x)*(a*x-1)/a2例5-5 计算积分(无解析解)(3) (4) (5)重积分syms x;t3=int(3*sin(x2)/x,1,4)t3 =3/2*sinint(16)-3/2*sinint(1) %特殊函数sinint(a)表示积分int(sin(a*x)/x,0,1)

22、t3=vpa(t3,5) %用vpa求数值解t3 =1.0279t4=int(exp(-xsin(x),0,1) %求不出解析解Warning: Explicit integral could not be found.In D:toolboxsymbolicsymint.m at line 58t4 =int(exp(-xsin(x),x = 0 . 1) t4=vpa(t4,5) %也可用vpa求数值解t4 =.45491 syms x y iy=int(2*sqrt(1-x2),y,-sqrt(1-x2),sqrt(1-x2); t5=int(iy,x,-1,1)t5 =16/35.5

23、级数5.5.1 级数符号求和求无穷级数的和需要符号表达式求和函数symsum,其调用格式为:symsum(s,v,n,m)其中s表示一个级数的通项,是一个符号表达式。v是求和变量,v省略时使用系统的默认变量。n和m是求和的开始项和末项。例5-6求级数 的和S, 以及前十项的部分和S1 syms n x S=symsum(1/n2, 1, inf)S =1/6*pi2 S1=symsum(1/n2, 1, 10)S1 =1968329/1270080重要说明:当求函数项级数的和S2时,可用命令: syms n x S2=symsum(x/n2, n, 1, inf)S2 =1/6*x*pi2 S

24、2=symsum(x/n2, n, 1, 10)S2 =1968329/1270080*x两点说明:(1)注意观察S2与S1的细微区别!(2)当通项公式的Matlab表达式较长时,表达式要加上单引号后面的练习中会遇到此问题例5-7 求下列级数之和。3. 求幂级数的和函数(注意最后结果要化简!) (3) syms n x; % (1分)s1=symsum(1/(2*n+1)/(2*x+1)(2*n+1),n,0,inf); % (4分)s1=simple(s1) % (3分)s1 =1/2*log(x+1)/x)5.5.2 函数的泰勒级数MATLAB提供了taylor函数将函数展开为幂级数,其调

25、用格式为:taylor(f,v,n,a)该函数将函数f按变量v展开为泰勒级数,展开到第n项(即变量v的n-1次幂)为止,n的缺省值为6。v的缺省值与diff函数相同。参数a指定将函数f在自变量v=a处展开,a的缺省值是0。例5-8 求函数在指定点的泰勒级数展开式。4. 将函数在x=0点展开成x的幂级数(取前9项,实际结果为4项)(4) f4=log(1+x)/(1-x); % (2分)taylor(f4,x,0,9) % (6分)ans =2*x+2/3*x3+2/5*x5+2/7*x74. 将函数, 在x=-1点展开成x的幂级数(采用默认阶数) (4) taylor(1/x2,-1) % (

26、8分) ans = 3+2*x+3*(x+1)2+4*(x+1)3+5*(x+1)4+6*(x+1)55.6符号代数方程求解在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:solve(s):求解符号表达式s的代数方程,求解变量为默认变量。solve(s,v):求解符号表达式s的代数方程,求解变量为v。solve(s1,s2,sn,v1,v2,vn):求解符号表达式s1,s2,sn组成的代数方程组,求解变量分别v1,v2,vn。注:线性方程可用linsolve函数当系统求不出解析解,会自动求原点附近的一个近似解。例5-9 解方程(1) 二次方程ax2+bx+

27、c=0;(2) 无解析解 x2-3x+ex=2;(3) 方程组,这里y, z是未知量。 syms a b c x;solve(a*x2+b*x+c,x)ans = 1/2/a*(-b+(b2-4*a*c)(1/2) 1/2/a*(-b-(b2-4*a*c)(1/2) solve(x2-3*x+exp(x)-2,x) %无解析解,得一近似解ans =1.8160 syms y z u v w;s=solve(u*y2+v*z+w,y+z+w,y,z)s = y: 2x1 sym z: 2x1 sym s.y,s.z %察看结构的具体内容,结果略,也可用下列方法更直接 y,z=solve(u*y2

28、+v*z+w,y+z+w,y,z)y = -1/2/u*(-2*u*w-v+(4*u*w*v+v2-4*u*w)(1/2)-w -1/2/u*(-2*u*w-v-(4*u*w*v+v2-4*u*w)(1/2)-wz = 1/2/u*(-2*u*w-v+(4*u*w*v+v2-4*u*w)(1/2) 1/2/u*(-2*u*w-v-(4*u*w*v+v2-4*u*w)(1/2)例5-9 解下列方程。*4. 问k为何值时,下面的方程组有非零解?请写出相应的MATLAB命令x1 -3x3=0 x1+2x2+kx3=0 2x1+kx2 - x3=0(4)syms k %(1分)A=1 0 -3;1 2 k;2 k -1; %(1分) D=det(A) %(2分) D =10-k2-3*k solve(D)ans = -5 2当k=-5或k=2时,det(A)=0,从而有非零解!。5.7 符号常微分方程求解在MATLAB中,用大写字母D表示导数。例如,Dy表示y,D2y表示y,Dy

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1