




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第7讲MATLAB符号计算,张建瓴,本章将介绍符号运算的概念、基本用法和MAPLE资源的调用,同时将详细介绍MATLAB的符号函数计算器。,内容提要,7.1概述,除数值计算外,像公式推导,因式分解等这一类含有x、y、z、等符号变量的符号表达式的抽象运算,以及求解代数方程或微分方程的精确解等,在工程领域和科学研究中也占有很大比例。,MATLAB的符号数学工具箱包括基本符号数学工具箱和扩展符号数学工具箱两个子工具箱。,其中基本符号数学工具箱是MATLAB语言的自然扩展,它集中了大约100多个MATLAB函数,在扩展符号数学工具箱内可以调用所有非图形类的属于MAPLE的工具包,并且运用MAPLE的编程特征完成自设的运算。,符号数学工具箱一共有三个通道与MAPLE交换信息:,1、通过基本符号数学工具箱。即在用MATLAB语言编写的多个函数中,通过若干个专用函数进行符号运算。用于符号运算的专用函数按照内容可分为:,(1)函数体(FuncfionBody)符号表达式和符号矩阵的操作;(2)线性代数;(3)微积分;(4)符号方程的求解;(5)多项式的化简、展开和代入;(6)特殊的数学函数。,2、通过maple.m、mpa.m两个专门设计的M文件进行符号运算。这种符号运算的运算方式要求掌握一些MAPLE的基本语句。,3、通过MATLAB中的函数计算器(FunctionCaculator)也可以进行较为简单的符号运算,这是MATLAB最方便、最直观的符号运算方法。,在数值计算参与输入、输出和中间计算的过程中,所有运作的变量都是被赋了值的数值变量;而在符号计算的过程中,参与运作的变量都是符号变量(SymbolicVariable)(包括符号表达式中出现的数字也当作符号处理)。使用字符串进行符号分析而不是基于数组的数值分析,是符号数学工具箱区别于其他工具箱的重要特征。,7.2符号变量,在进行符号计算时,首先要定义基本的符号对象(可以是常数、变量以及表达式等),然后利用这些基本符号对象去构成新的表达式,从而进行所需的符号运算。在运算中,凡是由包含符号对象的表达式所生成的新对象也都是符号对象。,可以使用sym和syms这两个函数命令来创建和定义基本的符号对象。,sym函数的调用格式:,1、S=sym(arg),从表达式arg创建一个sym对象S,如果arg是一个字符串(string),则S是符号变量或符号数;如arg是数值标量或矩阵,则S是这些给定数值的符号形式。以下是sym函数调用形式的具体实现方式:,一、用sym函数定义符号变量,(1)x=sym(x)建立符号变量x,变量的值为单引号内的字符或字符串,这里是和变量名相同的字符x;,(2)x=sym(x,real)设定符号变量为实型变量(Real),此时conj(x)和x相等;,1、S=sym(arg)(续),(3)x=sym(x,unreal)使x为纯粹的形式变量,没有附加属性。一般用来清除x的实型属性;,(4)类似pi=sym(pi)和delta=sym(l/10)建立符号数,这种方式避免了浮点数本身的近似,建立的符号数是数值的精确表示。这种方式建立的符号数pi可以临时代替内置的同名数值函数pi。,2、S=sym(A,flag),可以将数值或矩阵转化为符号形式,其中flag选项有四项参数,即f,r,e和d,它们对应于不同的符号形式,r为缺省项。各项的含义如下:,(1)选项f代表十六进制浮点形式。格式为:1.F*2(e)or-1.F*2(e),其中F是由13位十六进制数组成的字符串,e是整数(但F前面的“1”是十进制数)。例如:sym(1/10,f)ans=1.999999999999a*2(-4)因为1/10不能用浮点精确地表示。,2、S=sym(A,flag)(续1),(2)选项r代表有理数形式。像p/q、p*pi/q,sqrt(p)、2q和l0q之类的有理数形式,有效地补偿了舍入误差,但是也有可能表示的浮点值和原值不相等。如果找不到简单的有理数形式近似,则可采用形式p*2q产生正确的浮点数,其中p是很大的整数。例如:,sym(4/3,r)ans=4/3而sym(1+sqrt(5),r)ans=7286977268806824*2(-51),2、S=sym(A,flag)(续2),(3)选项e估计误差。根据eps(浮点运算的相对精度)给出理论表达式和实际计算的误差。例如:sym(3*pi/4,e)ans=3*pi/4-103*eps/249,(4)选项d表示十进制小数。其有效数字位数由digits函数定义,缺省的有效位数是32位。如果有效位数小于16位,则会损失一些精度。例如:digits(10),sym(4/3,d)ans=1.333333333,digits(20),sym(4/3,d)ans=1.3333333333333332593,在符号变量和变量值相同时,可以用sym的简捷方式来建立符号变量,即用函数sym来表达。该函数的用法及其与sym函数的关系如下:。,(1)symsarglarg2等价于argl=sym(argl);arg2=sym(arg2);,(2)symsarglarg2real等价于argl=sym(argl,real);arg2=sym(arg2,real);,二、用syms函数定义符号变量,(3)symsarglarg2positive等价于argl=sym(arg1,positive);arg2=sym(arg2,positive);,(4)symsarglarg2unreal等价于argl=sym(argl,unreal);arg2=sym(arg2,unreal);,例7-1example7_1.m,创建一个字符型数据变量和一个符号型数据变量,并比较它们的不同。,f=sym(a)创建一个符号变量ff=af1=a创建一个字符变量f1f1=asize(f)求符号变量f的大小ans=1结果为一个ll的矩阵size(f1)求字符变量f1的大小ans=1结果同样为一个ll的矩阵,例7-1example7_1.m(续),f=fl对变量f和f1进行逻辑运算,看两变量是否相等ans=1返回结果为1,表示“真”,二者内容是相等的abs(f1)求字符型变量f1的ASIIC码值ans=97abs(f)求符号型变量f的ASIIC码值ans=abs(a)可见f和f1的ASCII码值是不相同的,因此两个变量是不同的,7.3符号表达式和符号方程,一、符号表达式和符号方程的概念,符号表达式(SymbolicExpression)和符号方程(SymbolicEquation)是将表达式和方程赋给一个符号变量,通过引用该符号变量来引用相应的表达式或方程。它们是两个不同的符号对象。符号表达式是代表数字、函数、算子和变量的字符串和字符串数组,不要求变量有预先确定的值,而符号方程是含有等号的表达式。它们的区别在于表达式不含等号,而方程必须带等号。如:,f=sym(a*x2+b*x2+c)%表达式f=sym(a*x2+b*x2+c=0)%方程,f=sym(arg),采用sym命令来创建符号表达式和符号方程的调用格式为,1、采用sym命令,二、符号表达式和符号方程的建立,arg代表一个表达式或方程,注意,不要遗忘单引号。,(1)创建一个表达式f=sym(a*x2+b*x+c)f=a*x2+b*x+c,(2)创建一个方程f=sym(a*x2+b*x+c=0)f=a*x2+b*x+c=0,2、直接建立法,符号表达式和符号方程也可以直接采用与MATLAB中字符串变量的创建方法一样来建立。如:,(1)建立一个表达式f=a*x2+b*x+cf=a*x2+b*x+c,(2)创建一个方程f=a*x2+b*x+c=0f=a*x2+b*x+c=0,【注意】:,符号表达式和符号方程对空格很敏感。因此,在创建符号表达式或符号方程时,不要在字符间任意加空格符;在符号计算中出现的数字也是当作符号处理的;符号矩阵是数组,其元素是符号表达式。,7.4符号矩阵,一、符号矩阵的建立,符号矩阵的创建有两种方法,即由sym命令创建和由字符串直接输入创建。,1、由sym命令建立符号矩阵,矩阵元素是不带等号的符号表达式,各矩阵元素的长度可以不同,矩阵行之间用分号隔开,各元素间用逗号或空格隔开。例如:,A=sym(4+xx2x;x35x-3x*a)A=4+x,x2,xx3,5*x-3,x*a,或利用简捷方式,命令如下:symsxaA=4+xx2x;x35*x-3x*a,2、由字符串直接输入创建矩阵,此种输入法与MATLAB字符串矩阵的输入相似。它不需要调用sym函数,但要保证在同一列中各元素字符串有同样的长度,在较短的字符串前后用空格符填充。,A=4+xx2x;x35*x-3x*aA=4+xx2xx35x-3x*a,【注意】:,此种方法在建立时要求符号矩阵每一行的两端都有方括号,而MATLAB字符串矩阵仅在首尾有方括号。,数字矩阵转换成符号矩阵是通过sym函数命令来实现的,起调用格式是:,由于MATLAB的数值型和符号型是两种不同的数据类型,因此在MATLAB中,这两个数据类型的变量之间不能直接进行符号运算,必须在MATLAB的工作空间内将数值型转换为符号型后才能进行符号运算。不管数值矩阵的元素是以分数或是浮点数表示,转换后的符号矩阵都将以最接近有理式的形式给出。,二、数字矩阵和符号矩阵的转换,1、数字矩阵转换为符号矩阵,sym(A),例7-3example7_3.m,数值矩阵转化为符号矩阵,A=2/54/0.78sqrt(23)/3;0.330.3333log(4)输入数值矩阵AA=0.40005.12821.59860.33000.33331.3863FA=sym(A)将数值矩阵A转化为符号矩阵FAFA=2/5200/39sqrt(23/9)33/1003333/100006243314768165359*2(-52),在数值计算中,可以用一个指令来实现对矩阵中的任何一个子矩阵进行引用和修改,但在符号计算中,引用(Quote)和修改(Modify)只能对符号矩阵中具体的元素一个一个地进行。,三、符号矩阵的引用和修改,例7-5example7_5.m,用函数sym和syms建立符号变量、表达式和矩阵。,(1)用命令建立符号变量x和beta,并设置附加属性为实型变量,命令为:,x=sym(x,real);x=xbeta=sym(beta,real);%采用简捷方式:symsxbetarealbeta=beta,例7-5example7_5.m(续1),(2)建立复数变量z,z=x+beta*i;conj(x)%用下面的命令计算相应变量的共轭复数:ans=xconj(z)ans=x-i*betaexpand(z*conj(z)ans=x2+beta2,例7-5example7_5.m(续2),(3)建立三次函数y=ax3+bx2+cx+d的符号表达式,其命令为:,y=sym(a*x3+b*x2+c*x+d)y=a*x3+b*x2+c*x+d,这个命令将符号表达式ax3+bx2+cx+d赋值给变量y,由于没有建立对应于表达式中d、b、c、d和x的变量,y中的内容只是一个简单的字符串。为了使y成为一个真正的符号表达式,可以执行符号数学运算(微积分等),必须显式地建立这些变量。其命令如下:,a=sym(a),b=sym(b),c=sym(c),d=sym(d)x=sym(x)%用简捷方式:symsabcdx,例7-5example7_5.m(续3),如果用上述两个命令建立符号矩阵,命令为:,symsabcdA=aa+cd+b;cda+c;a+c+dcc+d*aA=aa+cd+bcda+ca+c+dcc+d*a,例7-5example7_5.m(续4),symseeedddA(1,3)=eee;%用“eee”代替矩阵A中的A(1,3)位置的元素A(3,2)=ddd;%用“ddd代替矩阵A中的A(3,2)位置上的元素A,结果为:A=aa+ceeecda+ca+c+ddddc+d*a,7.5符号数学函数,一、一般数学函数,MATLAB的符号数学工具箱具有创建数学函数的功能,既可以建立一般的数学函数,如y=ax2+bx+c,又可以建立抽象的数学函数,如y=f(x)等。,1、利用符号表达式,先定义符号变量,再建立符号表达式,例如:,MATLAB的符号数学工具箱有两种方式建立一般的数学函数,即利用符号表达式和利用建立M文件的方法。,symsxyzf=sin(x+y)/(x-y)g=sqrt(x2+y2+z2),2、建立M文件,M文件可以更方便地使用函数。MATLAB的许多内置式和函数便是用M文件建立的。例如,要建立一个名为sinx的函数用于求sin(x)/x的值,只要建立一个求sin(x)/x值的M文件,然后放入设置的当前工作目录中即可(本文以MATLAB的缺省设置d:matlabRl2work为当前工作路径)。,functiony=sinx(x)SINXthesymbolicsincfunctiontocomputsin(x)/xifisequal(x,sym(0)y=l;elsey=sin(x)/x;end,symsvarlvar2var3varnf=sym(f(varlvar2var3varn),在实际工程应用和科学计算中,经常用f(x)、g(x,y,z)或f、g之类的符号来代表个己知或未知的抽象函数进行运算,此类运算同样可用MATLAB的sym命令完成。,二、抽象数学函数(隐函数),用sym命令创建一个变量为varl、var2,var3、varn的f函数,格式为:,例7-7example7_7.m,建立一阶差分函数f=f(dx+h)-f(x)/h,symsxh建立符号变量f=sym(f(x)建立抽象函数ff=f(x)df=(subs(f,x,x+h)-f)/f建立一阶差分公式df=(f(x+h)-f(x)/h,(1)x=double(S),MATLAB中的数值型、字符型和符号型三种数据类型的等级不同,其中数值变量级别最低,字符变量级别居中,符号变量级别撮高。如果有这三种变量参与的混合运算,系统将会把所有参与运算的变量自动统一转换为变量等级最高的类型,然后进行计算,也可以通过命令来完成对不同数据类型之间的转换,大致可以分为三种情况:,三、数据类型之间的相互转换,1、转化为数值变量,S为符号变量时,将S转化为数值变量x,若S中有非数字的符号,则系统给出出错提示;,S为字符变量时,将S转化为数值矩阵,矩阵中的元素为S中相应字符的ASCII码值。,(2)x=str2num(S),专门用于将字符型变量转换为数值变量。当S中含有非字符型变量时,该命令返回一个空矩阵。,(3)x=numeric(S),将S转换为数值型,不管S是字符变量还是符号变量。但S不能是矩阵,否则给出错误信息。,2、转化为符号变量,S=sym(f)%对变量f没有任何限制,只要不是非法的表达式或字符矩阵即可。,3、转化为字符变量,(1)S=int2str(x)将整数x转化为字符变量S,当x为昔通有理数时,将对x四舍五入之后进行转化;当x为虚数时,sym(f)仅对实部进行转化。,(2)S=num2str(x)将普通数值变量转化为字符变量S。此命令对x的限制全部取消。,7.6符号矩阵的运算,1、使用运算符号,一、四则运算,符号矩阵的四则运算可以使用数学运算符号+、-、*、.*、/、./、.即可代表通常的加、减、乘、点乘、左除、左点除、右除以及右点除四则运算。同时也可以通过单个运算符号的复合使用来完成较为复杂的符号矩阵运算。,例7-9example7_9.m,对两个符号矩阵作基本四则运算,symsabcdA=sym(ab;cd)创建符号矩阵AA=a,bc,d,B=sym(a+b,a-b;c+d,c-d)创建符号矩阵BA+Bans=2*a+ba2*c+dc,例7-9example7_9.m(续1),A-Bans=-b2*b-a-d2*d-c,A*Bans=a*(a+b)+b*(c+d)a*(a-b)+b*(c-d)c*(a+b)+d*(c+d)c*(a-b)+d*(c-d),A.Bans=a*(a+b)b*(a-b)c*(c+d)d*(c-d),A/Bans=1/2*(-a*c+a*d+b*d+b*c)/(a*d-b*c)l/2*(-b2-2*a*b+a2)/(a*d-b*c)1/2*(-c2+d2+2*c*d)/(a*d-b*c)1/2*(-a*c+a*d+b*d+b*c)/(a*d-b*c),例7-9example7_9.m(续2),A./Bans=a/(a+b)b/(a-b)c/(c+d)d/(c-d),A.Bans=(a+b)/a(a-b)/b(c+d)/c(c-d)/d,A2对矩阵A进行乘方运算ans=a2+b*ca*b+b*da*c+c*db*c+d2,A.2对符号矩阵A中的每个符号元素进行乘方运算ans=a2b2c2d2,A+B+A2ans=2*a+b+a2+b*ca+a*b+b*d2*c+d+a*c+c*dc+b*c+d2,2、使用符号运算函数,(1)两个符号矩阵的和:symadd(A,B)C=symadd(A,B),(2)两个符号矩阵的差:symsub(A,B)C=symsub(A,B),(3)两个符号矩阵的积:symmul(A,B)C=symmul(A,B),(4)两个符号矩阵的除:symdiv(A,B)C=symdiv(A,B),(5)符号矩阵的求逆:inverse(A)C=inverse(A),【说明】,(1)符号对象的加法和减法需要满足:两个符号矩阵的大小相等方可进行加减运算;符号矩阵可以和符号标量进行加减运算,运算按照数组运算规则进行;,(2)两个符号矩阵只有在内积相等时才可以进行乘法运算;,(3)符号的乘方运算Sp,若S为符号表达式,p可以为符号表达式或数值表达式;若S为符号矩阵,则p必须是整数。,和数值矩阵一样,符号矩阵也可以进行矩阵的线性代数运算,例如,求一个符号矩阵行列式的值、求逆、求方阵的特征值和特征向量等。,二、线性代数运算,例7-10example7_10.m,对一个符号矩阵作线性代数运算,formatshortH=hilb(2)采用短格式输出方式,创建一个22的hilbert矩阵H=1.00000.50000.50000.3333,H=sym(H)将数值矩阵H转化为符号矩阵H=11/2l/21/3,例7-9example7_9.m(续),inv(H)求符号矩阵H的逆矩阵ans=4-6-612det(H)求符号矩阵H的行列式值ans=1/12,7.7可视化的符号函数分析界面,一、单变量函数分析界面,单变量函数分析界面用于考察两个一元函数各自性质及其相关关系。该函数计算器由funtool.m文件生成。在MATLAB命令窗口中键入下面命令即可:,图形化的函数计算器是MATLAB符号数学sym(arg2,unreal);工具箱所提供的第三种符号计算方法,为符号函数可视化提供更为简便易用的命令。本节着重介绍两个进行数学分析的可视化界面:单变量函数分析界面和泰勒级数逼近分析界面。,funtool,泰勒级数逼近分析界面,用于观察函数f(x)在给定区间位置上的被N阶泰勒多项式TN(x)逼近的情况。在MATLAB工作窗口中输入命令:,二、泰勒级数逼近分析界面,taylortool,即可产生如图7-2所示泰勒级数分析窗口。,7.9使用MAPLE的符号资源,一、MAPLE与MATLAB的连接,MATLAB的符号数学工具箱(SymbolicMathToolbox)就是以MAPLE的内核为“引擎”,依靠MAPLE已有的库函数(Library)开发的。由于MAPLE资源是以库的形式而不是以M文件的形式提供给MATLAB,因此无法在MATLAB中直接使用。为了能够在MATLAB的工作环境中进一步利用MAPLE的符号计算能力,MATLAB提供有专门的指令用于MATLAB和MAPLE的连接。,1、mfun,对MAPLE中的若干重要的特殊函数实施数值计算。对于MAPLE中的“完全椭圆积分”、“正弦积分”及“误差函数”等一些重要的特殊函数,由于在许多的工程应用中经常需要计算此类函数的值,并且在符号求积和微分方程符号解中也常常要计算此类函数的值,MATLAB便将这些重要的特殊函数引入符号数学工具箱,用命令mfun实现。,mfun(function,part1,part2,part3,part4),该函数以数值方式计算MAPLE中特殊函数function的值,函数的参数由parl、par2、par3和par4指定,最多可以指定四个参数。,2、mfunlist,采用MATLAB注释语句列出能被mfun计算的一些重要MAPLE函数列表;,3、mhelp,查阅MAPLE库函数的联机帮助文件,以获取MAPLE库函数及其调用方法;,4、maple,进入MAPLE的工作空间,直接对访问MAPLE的任意函数进行计算,并将结果返回至MATLAB工作空间。它有三种调用格式,分别为:,(1)R=maple(MapleStatement)直接运行MAPLE格式的语句MapleStatement,输出R为字符串类型;,(2)R=maple(fun,arg1,arg2,)运行以argl等为输入的MAPLE的fun函数;,(3)R,S=maple()将MAPLE运行结果由输出总量返回。,5、procread,把按照MAPLE格式写的源程序读入MAPLE工作空间。对于需要运行由多个MAPLE指令构成的程序时,必须由proclead和maple相结合方可解决。先用maple格式写好源程序,再用procread命令将此程序读入MAPLE工作空间。,为了方便用户查阅函数,MATLAB编制了一个纯说明文件mfunilst.m,用于列出MAPLE的几十条常用的重要函数名以及简单的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 25秋新人教版英语七年级上册 Starter Unit 1同步练习(含答案)
- 江苏语文自考试题及答案
- 2025年物业维修基金管理合同范本
- 2025年广西玉林市公需课培训(专业技术人员继续教育)试题及答案
- 商业伦理考试题库及答案
- 陕西定向选调考试真题及答案
- 番禺附中考试题目及答案
- 武胜县高考试卷真题及答案
- 软件开发员笔试题及答案
- 2025年婴幼儿照护赛竞赛试题附答案
- 2025四川省水电投资经营集团有限公司所属电力公司员工招聘6人备考模拟试题及答案解析
- 房地产中介居间服务合同5篇
- 童话中的英雄勇敢的小矮人作文10篇范文
- 康复科的科室介绍
- 公安校园欺凌课件大纲
- 人教PEP版(2024)四年级上册英语全册教案(单元整体教学设计)
- 2025年江苏省南京市中考历史真题卷含答案解析
- 2025-2026学年浙教版小学劳动技术一年级上册教学计划及进度表
- 甲状腺疾病课件
- 数控滚齿机操作指导手册
- 医保智能审核培训课件
评论
0/150
提交评论