第三章Matlab符号运算dai_第1页
第三章Matlab符号运算dai_第2页
第三章Matlab符号运算dai_第3页
第三章Matlab符号运算dai_第4页
第三章Matlab符号运算dai_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1MATLAB的符号运算——Matlab不仅具有数值运算功能,还开发了在matlab环境下实现符号计算的工具包SymbolicMathToolbox符号运算的功能符号表达式、符号矩阵的创建因式分解、展开和简化符号代数方程求解符号微积分符号微分方程3符号运算的基本操作什么是符号运算

与数值运算的区别

数值运算中必须先对变量赋值,然后才能参与运算。

符号运算无须事先对变量赋值,运算结果以标准的符号形式表达。 4特点:运算对象可以是没赋值的符号变量,以推理解析的方式进行,因此不受计算误差累积所带来的困扰。可以给出完全正确的封闭解或任意精度的数值解(当封闭解不存在时)。③符号计算指令的调用简单,和经典教科书公式相近。④计算所需的时间较长。

5SymbolicMathToolboxforMATLAB较早版本的符号引擎为Maple,在MatlabR2008b(7.7)以后,默认符号计算引擎为“MuPAD”,但是如果用户安装了与matlab版本相配套的Maple和MapleToolboxforMatlab,用户可以选择使用“MuPAD”或“Maple”作为默认的符号引擎。

符号对象符号数学工具箱中定义了一种新的数据类型:符号对象,符号对象可以表示符号变量、符号常量、符号矩阵符号对象创建相关指令为:sym()和syms()

(symbolic的缩写)符号对象sym()调用格式:S=sym(A,flag),A是一个数字、数值矩阵或数值表达式,输出将数值对象转换为符号对象。S=sym(‘A’,flag),A是一个字符串,输出将字符串转换为符号对象。如果被转换对象为数值对象,flag表示转换的符号对象应该符合的格式:‘d’---十进制表示,有效位数由digits确定‘e’---带估计误差的有理表示‘f’---浮点表示‘r’---为缺省设置,最接近有理表示的形式符号对象>>digits(10);>>sym(1/3+1/2,'d')ans=0.8333333333>>sym(1/3+1/2,'e')

ans=

5/6-eps/3eps,正的极小值2.2204e-016>>sym(1/3+1/2,'f')

ans=3752999689475413/4503599627370496

N*2^eforintegersNande.>>sym(1/3+1/2,'r')

ans=

5/6符号对象如果被转换对象为字符串,flag:‘positive’---限定S为正的实型符号变量‘real’---限定S为实型符号变量‘unreal’---限定S为非实型符号变量syms()调用格式:symsabcd符号常量当数值常量作为sym()的输入参量时,就建立了一个符号对象——符号常量。虽然看上去是一个数值量,但已经是一个符号对象了。例:a=3/4;b='3/4';c=sym(3/4);d=sym('3/4');whos查看变量类型a为实双精度浮点数值类型;b为字符类型;c和d都是符号对象类型。符号变量符号变量是内容可变的符号对象。符号变量通常是指一个或几个特定的字符,不是指符号表达式,可以将一个符号表达式赋值给一个符号变量。符号变量有时也称自由变量,它的命名规则和数值变量的命名规则相同。例:用函数命令sym()和syms()来创建符号变量,并检测数据类型。a=sym('a')b=sym('c')classa=class(a)classb=class(b)注意两个a的区别,可看出a,b两个变量均为符号对象symsabcdefghwhos也可以查看所有变量类型从上述比较来看:当需要同时定义多个符号变量时,使用syms()更简洁一些。sym和syms区别syms可以同时定义多个符号变量,sym一次定义一个符号变量;sym可以在定义时,同时把变量赋给另外一个符号变量,如p=sym('q')syms是定义符号变量,sym将数字、字符或者表达式转换为符号对象比如:symsxy%定义了符号变量x,y,以后x,y就可以直接使用了,由x,y参与运算的结果也是符号变量sym('a+b')%将a+b转化为符号表达式13由符号变量构成的符号函数和符号方程符号表达式是由符号常量、符号变量、符号函数运算符以及专用函数连接起来的符号对象。包括:符号函数和符号方程。判断看带不带等号。符号函数不带等号,符号方程带等号采用sym()和syms()来建立符号表达式例:symsxyz;f1=x*y/z;f2=x^2+y^2+z^2;f3=f1/f2;%符号函数

e1=sym('sin(x)^2+2*cos(x)=1')

e2=sym(‘Dy-y=x’)%符号方程符号矩阵的创建元素是符号对象(符号变量、符号常量、符号表达式、)的矩阵数值矩阵A=[1,2;3,4]A=[a,b;c,d]——不识别用Matlab函数sym创建矩阵,矩阵含有字符命令格式:A=sym('[]')※符号矩阵内容同数值矩阵

※需用sym指令定义,需用''标识

※注意与'[a,b;c,d]'的区别例如:A=sym('[a,2*b;3*a,0]')A=[a,2*b][3*a,0]

这就完成了一个符号矩阵的创建。注意:符号矩阵的每一行的两端都有方括号,这是与Matlab数值矩阵的一个重要区别。将数值矩阵转化为符号矩阵函数调用格式:sym(A)A=[1/3,2.5;1/0.7,2/5]A=0.33332.50001.42860.4000sym(A)ans=[1/3,5/2][10/7,2/5]符号矩阵与数值矩阵的转换18将符号矩阵转化为数值矩阵函数调用格式:double(A)A=[1/3,5/2][10/7,2/5]double(A)ans=0.33332.50001.42860.4000由于Matlab7.0采用了重载技术,使得符号计算表达式的运算符和基本函数,无论在形状、名称上,还是在使用方法上,都与数值计算中的运算符和基本函数几乎完全相同。这无疑给用户带来了极大的方便。例外:在符号对象的比较中,没有”大于”、”大于等于”、”小于”、”小于等于”的概念,而只有是否“等于”的概念。符号运算任意精度的数学运算在symbolic中有三种不同的算术运算:数值类型matlab的浮点算术运算有理数类型精确符号运算vpa类型任意精度算术运算任意精度的数学运算数值类型:浮点运算是最快的运算,需要的计算机内存最小,但结果不精确,存在舍入误差。有理数类型:计算时间和内存最大,结果精确。vpa类型从精确解中获得任意精度的解。浮点算术运算formatlong--(定义输出格式,显示15位十进制数)

1/2+1/3ans=0.833333333333333符号运算sym(1/2+1/3)ans=5/6--精确解任意精度算术运算digits(n)——设置近似解的精度为n位有效数字,默认32位有效数字。vpa(x,n)——求符号解的近似解,该近似解的有效位数由n来决定。digits(25)vpa(1/2+1/3)ans=.8333333333333333333333333vpa(5/6,40)ans=.8333333333333333333333333333333333333333

a=sym('[1/4,exp(1);log(3),3/7]')a=[1/4,exp(1)][log(3),3/7]vpa(a,10)ans=[.2500000000,2.718281828][1.098612289,.4285714286]符号表达式的化简可以对符号计算结果进行简化,诸如因式分解、同类项合并、符号表达式的展开、符号表达式的化简等等。合并同类项collect(v)----将表达式v的相同次幂的项合并。例:symsxt%定义基本变量

f=(x-1)*(x-2)*(x-3)%定义符号表达式

collect(f)%合并f中x的同类项ans=x^3-6*x^2+11*x-6expand(s)将s中的各项进行展开,用于多项式,三角函数、指数函数、对数函数。例:symsxy;f=(x+y)^3;f1=expand(f)f1=x^3+3*x^2*y+3*x*y^2+y^3例:h=cos(x-y)expand(h)ans=cos(x)*cos(y)+sin(x)*sin(y)factor(S)将系数为有理数的多项式(矩阵)S,表示成低阶多项式相乘的形式,如果不能分解,则返回S本身。例:symsxyfactor(x^3-y^3)ans=(x-y)*(x^2+x*y+y^2)simplify()该函数是一个强有力的具有普遍意义的工具,它利用化简规则对表达式进行简化。例:S=sym('[(x^2+5*x+6)/(x+2);sqrt(16)]')simplify(S)ans=x+34simple()用几种不同的算术简化规则对符号表达式进行简化,使其用最少的字符来表示。虽然并非表达式中的字符越少,表达式就越简单,但采用这个标准往往能够得到满意的结果,尤其是对于包含三角函数的表达式。例:symsxsimple(cos(x)^2+sin(x)^2)ans=130simplify:1

radsimp:cos(x)^2+sin(x)^2

simplify(100):1

combine(sincos):1

combine(sinhcosh):cos(x)^2+sin(x)^2combine(ln):cos(x)^2+sin(x)^2

Factor:cos(x)^2+sin(x)^2

Expand:

cos(x)^2+sin(x)^2

Combine:cos(x)^2+sin(x)^2

rewrite(exp):((1/exp(x*i))/2+exp(x*i)/2)^2+(((1/exp(x*i))*i)/2-(exp(x*i)*i)/2)^2

rewrite(sincos):cos(x)^2+sin(x)^2rewrite(sinhcosh):cosh(-x*i)^2-sinh(-i*x)^2

rewrite(tan):(tan(x/2)^2-1)^2/(tan(x/2)^2+1)^2+(4*tan(x/2)^2)/(tan(x/2)^2+1)^2mwcos2sin:1

collect(x):cos(x)^2+sin(x)^2ans=1diff(f)—对默认变量求f的微分,默认变量由symvar或findsym函数确定。diff(f,v)—对指定变量v求微分diff(f,n)—对默认变量求n阶微分diff(f,v,n)—对指定变量v求f的n阶微分例:symsaxf=sin(a*x)df=diff(f)dfa=diff(f,a,2)符号微分与积分变换符号变量查询symvar(S)或findsym(S)返回S中包含的所有符号变量,按字母排序,大写在小写前面symvar(S,N)返回N个最靠近‘x’的符号变量。pi,i,j不返回symvar(alpha+a+b)返回a,alpha,bsymvar(cos(alpha)*b*x1+14*y,2)返回x1,ysymvar(y*(4+3*i)+6*j)返回y32默认(缺省)符号变量确定x是首选的默认变量,其后的次序排列规则:与x的ASCII码值之差的绝对值小的字母优先,差绝对值相同时,ASCII码值大的字母优先大写字母离小写x的距离总大于所有小写字母离x的距离。自动识别默认变量时,字母的优先次序为x,y,w,z,v3334符号表达式的极限limit(F,x,a)求当x→a时,表达式F的极限limit(F,a)默认自变量趋于a的极限limit(F)默认自变量趋于0的极限值limit(F,x,a,'left')取F的左极限limit(F,x,a,'right')取F的右极限例:symshnxdc=limit((sin(x+h)-sin(x))/h,h,0)

%使用极限函数,按照导数的定义求sin的导数。注意:对于极限不存在,返回NaN例:limit(1/x,x,0)limit(1/x,x,0,'left')limit(1/x,x,0,'right')结果分别为:ans=NaNans=-Infans=Infint(f)—对f表达式的默认变量求不定积分int(f,v)—对f表达式的v变量求不定积分int(f,v,a,b)—对f表达式的v变量在(a,b)区间求定积分

注意:当函数的积分不存在时,Matlab7.0将简单地返回原来的积分表达式。符号表达式的积分int(‘被积表达式’,‘积分变量’,‘积分下限’,

‘积分上限')——定积分——缺省时为不定积分例:int(-2*x/(1+x^2)^2)ans=1/(1+x^2)int(log(x))int(log10(x))int(sin(x),x,-pi,pi)taylor(f,n,v,a)——v=a处的n-1阶泰勒级数展开例:symsxf=1/(2+cos(x))r=taylor(f,8)%默认变量x=0处7阶泰勒级数展开symsum(f,v,a,b)—表达式f中变量v从a变到b时的有限和例:symsxks1=symsum(1/k^2,1,inf)s2=symsum(x^k,k,0,inf)

上述都是求无穷级数的和符号积分变换ztrans(f)——Z变换iztrans(f)——Z反变换laplace(f)——拉氏变换ilaplace(f)——拉氏反变换fourier(f)——付氏变换ifourier(f)——付氏反变换

注意:上述函数均缺省了部分参数

例1.计算二重不定积分symsxy;F=int(int(x*exp(-x*y),x),y)F=1/(y*exp(x*y))符号积分的例子

例2.计算f=x*exp(-x*10)的Z变换

symsx;f=x*exp(-x*10)

F=ztrans(f)F=(z*exp(10))/(z*exp(10)-1)^2符号积分的例子符号代数方程求解

Matlab符号运算能够解一般的线性方程、非线性方程、超越方程(指数方程、对数方程、三角方程、反三角方程等)。当方程组不存在符号解时,则给出数值解。命令格式:solve(f,v)——求一个方程f=0的解,f可以是符号表达式,或带单引号的字符串。Solve(f1,f2,…fn)——求n个方程的解

例1.f=ax2+bx+c求解symsabxc;f=a*x^2+b*x+c;solve(f)——对缺省变量x求解ans=-(b+(b^2-4*a*d)^(1/2))/(2*a)-(b-(b^2-4*a*d)^(1/2))/(2*a)计算机格式一般格式例2.符号方程cos(x)=sin(x)tan(2*x)=sin(x)求解

f1=solve(‘cos(x)=sin(x)’) f1=

1/4*pisolve(f,b)——对指定变量b求解solve('tan(2*x)=sin(x)')ans=

acos(1/2-3^(1/2)/2)acos(3^(1/2)/2+1/2)0-acos(1/2-3^(1/2)/2)-acos(3^(1/2)/2+1/2)例3.解方程组x+y+z=1x-y+z=22x-y-z=1g1='x+y+z=1',g2='x-y+z=2',g3='2*x-y-z=1'f=solve(g1,g2,g3)f=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')f=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')f=x:[1x1sym] f.x ans=2/3 y:[1x1sym] f.y ans=-1/2z:[1x1sym] f.z ans=5/6

[x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')x=2/3y=-1/2z=5/6符号微分方程求解

——用一个函数可以方便地得到微分方程的符号解符号微分方程求解指令:dsolve命令格式:dsolve(f,g,v)f——微分方程,可多至12个微分方程的求解;g为初始条件或边界条件。默认自变量为‘t’,可任意指定自变量v微分方程的各阶导数项以大写字母D表示或或或y的一阶导数——Dyy的二阶导数——D2yy的n阶导数——Dny[y1,y2…]=dsolve(f,g,v)——返回微分方程的解一阶微分方程dsolve('Dx=y','Dy=x','x(0)=0','y(0)=1')ans=x(t)=exp(t)/2-1/(2*exp(t))---sinh(t)y(t)=1/(2*exp(t))+exp(t)/2----cosh(t)二阶微分方程dsolve('D2y=-a^2*y','y(0)=1','Dy(pi/a)=0')ans=(1/exp(a*t*i))/2+exp(a*t*i)/2---cos(a*t)例.y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0','x')ans=cos(x)/exp(x)+sin(x)/exp(x)ezplot(y)——方程解y(t)的时间曲线图求该方程的解53symsy;X=dsolve('D4y-4*D3y+8*D2y-8*Dy+4*y=2')X=

1/2+C1*exp(t)*cos(t)+C2*exp(t)*sin(t)+C3*exp(t)*cos(t)*t+C4*exp(t)*sin(t)*t54线性常微分方程的解析求解symstyy=dsolve('D4y+11*D3y+41*D2y+61*Dy+30*y=exp(-6*t)*cos(5*t)');>>pretty(simple(y))55两个数学分析

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论