matlab符号计算2.ppt_第1页
matlab符号计算2.ppt_第2页
matlab符号计算2.ppt_第3页
matlab符号计算2.ppt_第4页
matlab符号计算2.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

第7章 符号计算,在科学研究和工程应用中,除了存在大量的数值计算外,还有对符号对象进行的运算,即在运算时无须事先对变量赋值,而将所得到结果以标准的符号形式来表示。MATLAB符号计算是通过集成在MATLAB中的符号运算工具箱(Symbolic Math Toolbox)来实现的。应用符号计算功能,可以直接对抽象的符号对象进行各种计算,并获得问题的解析结果。 【本章学习目标】 掌握符号对象的定义方法以及符号表达式的运算法则。 掌握微积分的符号计算方法。 掌握级数求和的方法以及将函数展开为泰勒级数的方法。 掌握代数方程和微分方程符号求解的方法。,7.1 符号对象及其运算 MATLAB为用户提供了一种符号数据类型,相应的运算对象称为符号对象。例如,符号常量、符号变量以及有它们参与的数学表达式等。在进行符号运算前首先要建立符号对象。 7.1.1 建立符号对象 1建立符号对象 (1)sym函数 sym函数用来建立单个符号量,一般调用格式为 符号量名 = sym(符号字符串) 该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。例如: a=sym(a) %建立符号变量a 符号变量参与运算前无须赋值,其结果是一个由参与运算的变量名组成的表达式。,a=sym(a); %定义符号变量a w=a3+3*a+10 %符号运算 w = a3 + 3*a + 10 x=5; %定义数值变量x w=x3+3*x+10 %数值运算 w = 150 whos %查看内存变量 Name Size Bytes Class Attributes a 1x1 126 sym w 1x1 8 double x 1x1 8 double,(2)syms函数 函数sym一次只能定义一个符号变量,使用不方便。MATLAB提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为 syms符号变量名1符号变量名2符号变量名n 用这种格式定义符号变量时不要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔。例如,用syms函数定义4个符号变量a、b、c、d,命令如下: syms a b c d,2建立符号表达式 含有符号对象的表达式称为符号表达式。建立符号表达式有以下2种方法。 (1)用sym函数建立符号表达式。例如: U=sym(3*x2-5*y+2*x*y+6) U = 3*x2-5*y+2*x*y+6 F=sym(cos(x2)-sin(2*x)=0) F = cos(x2)-sin(2*x)=0 M=sym(a,b;c,d) M = a, b c, d (2)使用已经定义的符号变量组成符号表达式。例如: syms x y; V=3*x2-5*y+2*x*y+6 ans = 3*x2 + 2*y*x - 5*y + 6,1符号表达式的四则运算 符号表达式的四则运算与数值运算一样,用+、*、/、 运算符实现,其运算结果依然是一个符号表达式。例如: f= sym(2*x2+3*x-5) %定义符号表达式 g= sym(x2-x+7) f+g ans= 3*x2 + 2*x + 2 fg ans= (2*x2 + 3*x - 5) (x2 - x + 7),2符号表达式的提取分子和分母运算 如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。其一般调用格式为 n,d=numden(s) 该函数提取符号表达式s的分子和分母,分别将它们存放在n与d中。 numden函数在提取各部分之前,将符号表达式有理化后返回所得的分子和分母。 如果符号表达式是一个符号数组,numden返回两个新数组n和d,其中n是分子数组,d是分母数组。例如: h=sym(3/2,(2*x+1)/3;a/x+a/y,3*x+4) ; n,d=numden(h) n = 3, 2*x + 1 a*x + a*y, 3*x + 4 d = 2, 3 x*y, 1,3符号表达式的因式分解与展开 factor(s):对符号表达式s分解因式。 expand(s):对符号表达式s进行展开。 collect(s):对符号表达式s合并同类项。 collect(s,v):对符号表达式s按变量v合并同类项。 例如: syms x y; s1=x3-y3; factor(s1) %对s分解因式 ans = (x - y)*(x2 + x*y + y2) s2=(-7*x2-8*y2)*(-x2+3*y2); expand(s2) %对s展开 ans = 7*x4 - 13*x2*y2 - 24*y4 s3=(x+y)*(x2+y2+1) collect(s3,y) %对s按变量x合并同类项 ans = y3 + x*y2 + (x2 + 1)*y + x*(x2 + 1) factor(sym(630) %对符号整数分解因式 ans = 2*32*5*7,4符号表达式系数的提取 c = coeffs(s , x) 该函数返回多项式中按指定变量升幂顺序排列的系数,若没有指定变量,则返回所有项的常系数,且按离字符“x”近原则确定主变量。例如: syms x y s = 5*x*y3 + 3*x2*y2 + 2*y + 1; coeffs(s) %求所有项的常系数,按x的升幂排列 1, 2, 5, 3 coeffs(s,y) %求变量y的系数 1, 2, 3*x2, 5*x,5符号表达式的化简 MATLAB提供的对符号表达式化简的函数如下。 simplify(s):应用MuPAD简化规则对s进行化简。 simple(s):调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。 例如: s= sym(x2+5*x+6)/(x+2); simplify(s) ans= x + 3 函数simple试用几种不同的化简工具,然后选择在结果表达式中含有最少字符的那种形式。例如 s= sym(cos(3*acos(x); simple(s) %自动调用多种函数对s进行化简,并显示每步结果 显示一系列化简过程后,最后显示化简结果: ans = 4*x3 - 3*x,6符号表达式与数值表达式之间的转换 利用函数sym可以将数值表达式变换成它的符号表达式。 函数eval可以将符号表达式变换成数值表达式。 7符号多项式与多项式系数向量之间的转换 利用函数sym2poly可以将符号多项式转换为多项式系数向量,而函数poly2sym可以将多项式系数向量转换为符号多项式。,7.1.3 符号表达式中变量的确定 findsym、sysvar函数可以帮助用户查找一个符号表达式中的符号变量。该函数的调用格式为 findsym(s,n) symvar(s,n) 函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全部符号变量。findsym以字符串形式返回结果,symvar以向量形式返回结果。例如: syms x a y z b; %定义5个符号变量 s1=3*x+y; s2=a*y+b; %定义2个符号表达式 findsym(s1) ans = x, y symvar(s1+s2) ans = a, b, x, y 在求函数的极限、导数和积分时,如果用户没有明确指定自变量,MATLAB将按以下原则确定主变量并对其进行相应微积分运算。 找寻除i、j之外,在字母顺序上最接近x的小写字符。 若表达式中有两个符号变量与x的距离相等,则ASCII大者优先。,7.1.4 符号矩阵 函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。,syms a b x y m= (a2-x2)/(a+x), sin(y)2,(x-y)/(a+b);1,15,x2+y2-2*x*y; simplify(m) %对符号矩阵化简处理 ans = a-x, 1-cos(y)2, (x-y)/(a+b) 1, 15, x2+y2-2*x*y factor(m) %对符号矩阵因式分解 ans = a-x, sin(y)2, (x-y)/(a+b) 1, 15, (x-y)2,7.2 符号微积分,用符号运算能获得微积分的解析解。 7.2.1 符号极限 在MATLAB中求函数极限的函数是limit,可用来求函数在指定点的极限值和左右极限值。对于极限值为“没有定义”的极限,MATLAB给出的结果为NaN,极限值为无穷大时,MATLAB给出的结果为inf。limit函数的调用格式如下。 limit(f,x,a):求符号函数f(x)的极限值,即计算当变量x趋近于常数a时,f(x)函数的极限值。变量可以是其他的符号变量。 limit(f,a):求当默认自变量x趋近于常数a时,符号函数f(x)的极限值。当a默认时,求当默认自变量x趋近于0时的极限值。 limit(f,x,a,right)或limit(f,x,a,left):求符号函数f的极限值或。right表示变量x从右边趋近于a,left表示变量x从左边趋近于a。,极限1: f=sym(sin(x+h)-sin(x)/h); limit(f,sym(h),0) ans = cos(x) 极限2: f=sym(1+t/x) x); limit(f,inf) ans = exp(t),极限3: f=sym(x*(sqrt(x2+1)-x); limit(f,sym(x),inf,left) ans = 1/2 极限4: f= sym(cot(x) (1/log(x); limit(f,x,0,right) ans = 1/exp(1),7.2.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阶导数。,%求(1) f1=cos(x*x); diff(f1) %未指定求导变量和阶数,按默认规则处理 ans = (-2)*x*sin(x2) diff(f1,x,2) %求f1对x的二阶导数 ans = - 2*sin(x2) - 4*x2*cos(x2) diff(f1,x,3) %求f1对x的三阶导数 ans = 8*x3*sin(x2) - 12*x*cos(x2) %求(2) f21=a*(t-sin(t); f22=b*(1-cos(t); diff(f22)/diff(f21) %求y对x的一阶导数 ans = -(b*sin(t)/(a*(cos(t) - 1),%求(3) f3= x6-3*y4+2*x2*y2; diff(f3,x) %求z对x的偏导数 ans = 6*x5 + 4*x*y2 diff(f3,y) %求z对y的偏导数 ans = 4*x2*y - 12*y3 diff(diff(x6-3*y4+2*x2*y2,x),y) ans = 8*x*y,7.2.3 符号积分 符号积分由函数int来实现,一般调用格式如下。 int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分。 int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分。 int(s,v,a,b):求定积分运算。a、b分别表示定积分的下限和上限。该函数求被积函数在区间a,b上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数f关于变量x在闭区间a,b上可积时,函数返回一个定积分结果。当a、b中有一个是inf时,函数返回一个广义积分。当a、b中有一个符号表达式时,函数返回一个符号函数。,f=sym(1/(1+x2); f1=int(f) %求不定积分 f1 = atan(x) f2=int(f,a,b) %求定积分 f2 = atan(b) - atan(a) f3=int(f,1,2) %求定积分 f3 = acos(5(1/2)/5) - pi/4 eval(f3) %计算积分值 ans = 0.3218,7.3 级 数,7.3.1 级数符号求和 求无穷级数的和需要符号表达式求和函数symsum,其调用格式为 symsum(s,v,n,m) 其中s表示一个级数的通项,是一个符号表达式。v是求和变量,v省略时使用系统的默认变量。n和m是求和的开始项和末项。,syms n k x; s=symsum(-1)(n+1)/n,1,inf) %求(1) s= log(2) eval(s) %转换为数值 ans = 0.6931 symsum(xk/sym(k!),k,0,inf) %求(2) y = exp(x),7.3.2 函数的泰勒级数 泰勒级数将一个任意函数表示为一个幂级数,即 MATLAB提供了taylor函数将函数展开为幂级数,其调用格式为 taylor(f,v,n,a) 该函数将函数f按变量v展开为泰勒级数,展开到第n项(即变量v的n 1次幂)为止,n的默认值为6。v的默认值与diff函数相同。参数a指定将函数f在自变量v = a处展开,a的默认值是0。 【例7.6】求函数在指定点的泰勒级数展开式。 (1)求在x = 0处的泰勒级数展开式。 (2)将在x = 1处的5阶展开式。 命令如下: syms x k; taylor(log(x+sqrt(x*x+1) %求(1) ans = (3*x5)/40 - x3/6 + x taylor(1+2*x+3*xx)/(1-2*x-3*xx),5,1) %求(2) ans = (5*x)/8 - (13*(x-1)2)/32 + (29*(x-1)3)/128 - (45*(x-1)4)/512 - 17/8,7.4 符号方程求解,7.4.1 符号代数方程求解 代数方程是指未涉及微积分运算的方程,相对比较简单。在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式如下。 solve(s):求解符号表达式s的代数方程,求解变量为默认变量。 solve(s,v):求解符号表达式s的代数方程,求解变量为v。 solve(s1,s2, ,sn,v1,v2,vn):求解符号表达式s1,s2,sn组成的代数方程组,求解变量分别为v1,v2,vn。 solve函数能求解一般的线性、非线性或超越代数方程。对于不存在符号解的代数方程组,若方程组中不包含符号参数,则solve函数给出该方程组的数值解。 【例7.7】解方程 x=solve(sym(1/(x+2)+a=1/(x-2) x= (2*(a2 + a)(1/2)/a -(2*(a2 + a)(1/2)/a,【例7.8】解方程组 命令如下: x y z= solve(sym(3*x+2*y-z=10,-x+3*y+2*z=5,x2+3*y2=12) x = (21*43(1/2)*i)/124 + 375/124 375/124 - (21*43(1/2)*i)/124 y = 175/124 - (15*43(1/2)*i)/124 (15*43(1/2)*i)/124 + 175/124 z = (33*43(1/2)*i)/124 + 235/124 235/124 - (33*43(1/2)*i)/124 命令也可写成: x y z= solve(3*x+2*y-z=10,-x+3

温馨提示

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

评论

0/150

提交评论