2012年MATLAB第二章-2.2_第1页
2012年MATLAB第二章-2.2_第2页
2012年MATLAB第二章-2.2_第3页
2012年MATLAB第二章-2.2_第4页
2012年MATLAB第二章-2.2_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

1、 2.5.1 符号表达式,目 录, 2.5.2 符号表达式运算, 2.5.3 可变精度算术运算, 2.5.5 符号表达式画图, 2.5.4 微分和积分, 2.5.6 符号表达式的简化, 2.5.7 符号方程求解,在MATLAB的数值计算中,数值表达式所引用的变量必须 事先被赋值, 否则无法计算。因此,前面介绍的有关数值运 算, 其运算变量都是被赋值的数值变量。而在MATLAB的符号 运算中, 运算变量则是符号变量,所出现的数字也作为符号 来处理。实际上,符号数学是对字符串进行的运算。 进行符号运算时,首先要创建(即定义)基本的符号对 象, 它可以是常数、变量和表达式。然后利用这些基本符号 对象

2、构成新的表达式,进而完成所需的符号运算。,基本的符号运算包括复合、化简、微分、积分以及求解 代数方程式、微分方程式等,进一步可以求解线性代数问题, 如求解符号矩阵的逆、行列式、正则行的精确结果,找出符号 矩阵的特征值表达式而不会产生数值计算引入的误差。工具箱 还支持可变精度运算,由于符号运算不产生数值运算产生的运 算误差,可以在运算最后将数字代入结果,因此避免了中间运 算的误差,能够以指定的精度返回结果。,什么是符号运算 与数值运算的区别 数值运算中必须先对变量赋值,然后才能参与运算。 符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。,2.5.1 符号表达式,特点: (1) 运算

3、对象可以是没赋值的符号变量 (2) 符号运算以推理解析的方式进行,计算的结果不受计算累积误差影响 (3)符号计算,或给出完全正确的封闭解,或给出任意精度的数值解(当封闭解不存在时) (4) 符号计算所需要的时间较长。,2.创建符号表达式 MATLAB用sym( ) 命令建立符号表达式。符号表达式表示 成字符串,用单引号 括起来,以便与数字变量或运算相区 别,否则,这些符号表达式几乎完全像 MATLAB 命令。,(1)符号表达式的形式: 符号函数 不包括等号 符号方程 必须带等号 (2)创建方法: 符号函数和符号方程 创建方法相同,最简单的方法和MATLAB中字符串变量的生成方法相同。 1)创建

4、符号函数 f=log(x) f= log(x),2) 创建符号方程 e=a*x2+b*x+c=0 e=a*x2+b*x+c=0 3) 创建符号微分方程 diffeq=Dy-y=x diffeq =Dy-y=x 注意:1)由这种方法创建的符号表达式对空格是很敏感的。因此,不要在字符间乱加空格符,否则在其它地方调用此表达式的时候会出错。 2)由于符号表达式在MATLAB中被看成是1*1阶的符号矩阵,因此,它也可用sym和syms命令来创建。 如: f=sym( sin(x) ) f=sin(x) f=sym( sin(x)2=0 ) f=sin(x)2=0,syms x t; f=sin(x)+c

5、os(t) f=sin(x)+cos(t) 此方法不能用来创建符号方程 表114列有几则符号表达式和MATLAB等效表达式的例 子。,syms x; f=sin(x)+cos(x) f=sin(x)+cos(x),注意: (1)有些符号表达式如果直接定义可能与MATLAB数值运算混淆,则必须用sym命令定义。 (2)很多符号运算命令如nemden(提取分子分母多项式)只在sym定义下可以运行。用户在使用时可能会遇到这个问题,这时需要重新用sym定义。,subs 举例, f=sym(2*u); subs(f,u,2) f2=subs(f,u,u+2) a=3; subs(f2,u,a+2) su

6、bs(f2,u,a+2) syms x y f3=subs(f,u,x+y) subs(f3,x,y,1,2),ans=4,f2=2*(u+2),ans=14,ans=2*(a+2)+2),f3=2*x+2*y,ans=6,例:指出下面各条语句的输出结果,f=2*u,符号表达式的替换,subs(f,x,a) 用 a 替换字符函数 f 中的字符变量 x a 是可以是 数/数值变量/表达式 或 字符变量/表达式,若 x 是一个由多个字符变量组成的数组或矩阵, 则 a 应该具有与 x 相同的形状的数组或矩阵。,用给定的数据替换符号表达式中的指定的符号变量,3.符号常量 不含变量的符号表达式叫做符号常

7、量。 例如: f=sym(2*4-6) 定义符号表达式, 不含符号变量得到含有常数的符号表达式: f = 2*4-6 如果要求f的数值数值运算,利用numeric指令可以完成。 键入 f1=numeric(f) 可以得到: f1 = 2 结果已经变为数值,可以与常数进行运算,,4.符号变量 当字符表达式中含有多于一个的变量时,只有 一个变量是独立变量,其余的文字符号作为常量处 理。如果用户不指定哪一个变量是独立变量, MATLAB 将基于以下规则选择一个独立变量: 除去i和j的小写字母,表达式中如果没有其它字 母,选择 x 作为独立变量; 如果有多个字符变量,选择在字母顺序中最接 近 x 的字

8、符变量; 如果有相连的字母,选择在字母表中较后的那 一个。,syms v1 v2 v3 vn 定义符号变量名 syms x f = sin(x)+5*x f 符号变量(矩阵) sin(x)+5*x 符号表达式,例1 sym(x) rho=sym(1+sqrt(5)/2) f=rho2-rho-1 ans = x rho = (1+sqrt(5)/2 f = (1/2+1/2*5(1/2)2- 1/2-1/2*5(1/2)-1,符号表达式中变量的确定 为了了解函数引用过程中使用的符号变量个数及变量名,可以用findsym函数查询默认的变量。该函数的引用格式为:findsym(f, n) 该函数返

9、回符号表达式f中的n个符号变量. f为用户定义的符号函数,n为正整数,表示查询变量的个数。n=i表示查询i个系统默认变量。n值省略时表示查询符号函数中全部系统默认变量。,例 用findsym函数寻找符号变量, syms a alpha b x1 y findsym(alpha+a+b) ans = a, alpha, b findsym(cos(alpha)*b*x1 + 14*y,2) ans = x1,y findsym(y*(4+3*i) + 6*j) ans = y,例 查询符号函数f=xn, g=sin(at+b)中的系统默认变量。 syms a b n t x %定义符号变量 f=

10、xn; %给定符号函数 g=sin(a*t+b); findsym(f,1) %在f函数中查询1个系统默认变量 ans= x 表示f函数中查询的1个系统默认变量为x。,5.符号矩阵 符号矩阵/数组:元素为符号表达式的矩阵/数组。 命令格式:A=sym() 需用sym指令定义 需用 标识 例如: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

11、 = 0.3333 2.5000 1.4286 0.4000 sym(A) ans = 1/3, 5/2 10/7, 2/5,数值运算中,所有对象运算操作指令都比较直观、简单。例如:a=b+c; a=a*b ;A=2*a2+3*a-5 等。 而符号运算就不同了,所有涉及符号运算的操作都有专用函数来进行. 符号运算的特点: 在符号运算过程中,变量都是以字符形式保存和运算,即使是数字也被当做字符来处理。,252 符号表达式运算,1. 符号运算中的运算符号和基本函数,1.1. 基本运算符 (1) 运算符号“+”、“”、“*”、“”、“”、“”分别实现矩阵的加法、减法、乘法、左除、右除与求幂运算。 (

12、2) 运算符号“.*”、“.”、“./”、“.”分别实现元素对元素的数组相乘、左除、右除与求幂运算。 (3) 运算符号“”实现矩阵的Hermition转置或复数矩阵的共轭转置; 运算符号“.”实现数组转置或复数矩阵的非共轭转置。,【例】作符号计算: a,b,x,y均为符号运算量。在符号运算前,应先将a,b,x,y定义为符号运算量 a=sym(a); %定义a为符号运算量,输出变量名为a b=sym(b); x=sym(x); y=sym(y); x,y=solve(a*x-b*y-1,a*x+b*y-5,x,y) %以a,b为符号常数,x,y为符号变量 即可得到方程组的解:x =3/a,y =

13、2/b,例 f= 2*x2+3*x-5; g= x2+x-7; syms x f=2*x2+3*x-5; g= x2+x-7; h=f+g h = 3*x2+4*x-12 例 f=cos(x);g= sin(2*x); syms x f=cos(x);g=sin(2*x); f/g+f*g ans = cos(x)/sin(x)+cos(x)*sin(x),符号对象的代数运算函数 symadd(a,d) 符号对象的加 symsub(a,b) 符号对象的减 symmul(a,b) 符号对象的乘 symdiv(a,b) 符号对象的除 sympow(a,b) 符号对象的幂运算 symop(a,b,)

14、 符号对象的综合运算,f= 2*x2+3*x-5; g= x2+x-7; h= symadd(f,g) h= 3*x2+4*x-12 f=cos(x);g= sin(2*x); symop(f,/,g,+,f,*,g) ans = cos(x)/sin(2*x)+cos(x)*sin(2*x) x=pi/4;subs(ans) ans = 1.4142,1.2. 关系运算符 在符号对象的比较中,没有“大于”、“大于等于”、“小于”、“小于等于”的概念,而只有是否“等于”的概念。 运算符号“”和“”分别对它两边的对象进行“相等”、“不相等”的比较。当事实为“真”时,比较结果用1表示; 当事实为“

15、假”时,比较结果用0表示。 需要特别指出的是,MATLAB的符号对象无逻辑运算功能。,1.3. 三角函数及双曲函数 除函数atan2()仅能用于数值计算外,其余的三角函数(如sin()、双曲函数(如cosh()及其反函数(如asin()、acosh(),无论在数值计算还是符号运算中,其使用方法都相同。 1.4. 指数与对数函数 在数值计算与符号运算中,指数函数与对数函数的使用方法完全相同,如函数sqrt()、exp()、expm()、log()、 log2()及log10()等。,1.5. 复数函数 涉及复数的共轭函数conj()、求实部的函数real()、 求虚部的函数imag()和求绝对值

16、的函数abs(),在符号与数值计算中的使用方法相同。 1.6. 矩阵代数运算 在符号运算中,MATLAB提供的常用矩阵代数函数有diag()、inv()、det()、rank()、poly()、expm()及eig()等。它们的用法几乎与数值计算中的情况完全一样。,253 可变精度算术运算,计算机内的数值计算精度受到每次计算结果所保留的位数 (字长、字节数)的限制,例如如果保留位数是16位,则第 17位以后的数据将被舍去,所以任何数值运算都会引入舍入误 差,重复多次的数值运算还会造成累计误差。而MATLAB的符 号运算是对符号表达式的运算,结果是非常准确的,因为它们 不需要进行数值运算,所以没

17、有舍入误差。对符号运算的最终 结果求其数值,仅在结果转换时会引入一次性的舍入误差,因 此提高了运算的精度。,MATLAB的符号运算功能,可以将符号表达式变换成数 值或反之。有些符号函数可返回数值。 目的:有时符号运算的目的是得到精确的数值解,这样就 需要对得到的解析解进行数值转换。在MATLAB中转换主要由 两个函数digits和vpa完成。而这两个函数在实际中经常同变量 替换函数subs配合使用,其调用格式为: digits(D) 函数设置有效数字个数为D的近似解精度; R=vpa(S) 符号表达式S在digits函数设置下的精确的数值解 vpa(S,D) 符号表达式S在digits(D)精

18、度下的数值解; 同学们先看下面的例题,体会一下。,例题:设函数为 f(x)=x-cos(x),求此函数在 x =点的值。 x=sym(x) f=x-cos(x) f1=subs(f, pi,x) f1=pi+1 digits(25); vpa(f1) ans =4.141592653589793238462643,1.任意精度符号运算可以使用digits和vpa命令来实现。 语法: digits(n) %设定默认的精度 说明:n为所期望的有效位数。digits函数可以改变默认的有效 位数来改变精度,随后的每个进行Maple函数的计算都以新精 度为准。当有效位数增加时,计算时间和占用的内存也增加

19、。 命令“digits”用来显示默认的有效位数,默认为32位。 语法: S=vpa(s,n)%将s表示为n位有效位数的符号对象 说明:s可以是数值对象或符号对象,但计算的结果S一定是符 号对象;当参数n省略时则以给定的digits指定精度。vpa命令 只对指定的符号对象s按新精度进行计算,并以同样的精度显 示计算结果,但并不改变全局的digits参数。 2.获得数值型对象 语法: n=double(s) %将符号对象s转换为双精度数值对象n,浮点算术运算 1/2+1/3 % 已定义输出格式为format long ans = 0.83333333333333 符号运算 sym(1/2)+(1/

20、3) ans = 5/6 精确解,任意精度算术运算 digits(n) 设置可变精度,缺省为32位 vpa(x,n) 显式可变精度计算 digits(25) vpa(1/2+1/3) ans = .8333333333333333333333333,vpa(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, .4285

21、714286 Exp(n):返回e的n次方,e是一个常数为2.71828,转换命令: (1)命令sym和numeric 命令sym可将MATLAB的一般(数值)表达式转换为符号 表达式,前面已经作过介绍。函数numeric的功能正好相反, 它把一个符号常数(无变量符号表达式)变换为一个数值。 (2)命令eval 命令eval可以计算符号表达式的值。 (3)命令sym2poly和poly2sym 命令sym2poly可以将符号表达式转换为数值多项式的系数 向量;命令poly2sym的功能相反。,254 微分和积分,1微分 符号表达式的微分利用命令diff完成,有下面四种形式: diff(f)%求

22、f对自由变量的一阶微分 diff(f,t)%求f对符号变量t的一阶微分 diff(f,n)%求f对自由变量的n阶微分 diff(f,t,n) %求f对符号变量t的n阶微分 微分函数diff也可以用于符号矩阵,其结果是对矩阵的每 一个元素进行微分运算。 另外,diff命令还可以对数组中的数值逐项求差值。见教 材第59页。,2积分 积分有定积分和不定积分,运用函数int可以求得符号表 达式的积分。 语法: int(f,t) %求符号变量t的不定积分 int(f,t,a,b) %求符号变量t的定积分 int(f,t,m,n) %求符号变量t的定积分 说明:t为符号变量,当t省略则为默认自由变量;a和

23、b为数 值,a,b为积分区间;m和n为符号对象,m,n为积分区 间;与符号微分相比,符号积分复杂得多。因为函数的积分有 时可能不存在,即使存在,也可能限于很多条件,MATLAB 无法顺利得出。当MATLAB不能找到积分时,它将给出警告 提示并返回该函数的原表达式。,3.符号极限 极限的求解可由limit函数来实现,调用格式: limit(F,x,a) 计算符号表达式F在xa条件下的极限值; limit(F,a) 计算符号表达式中由findsym(F)返回的独立 变量趋向于a的极限值; limit(F) 计算a=0时的极限; limit(F,x,a, right)或limit(F,x,a, le

24、ft) rigft,left用来指定取极限的方向。 如: syms x t; limit(sin(x)/x) ans=1 limit(1+2*t/x)(3*x),x,inf) ans=exp(6*t) limit(1/x,x,0,right) ans=inf,一般来讲,积分比微分复杂得多。一 个函数的积分或逆求导的解不一定以封闭 形式存在;或虽然存在但MATLAB软件找不 到;或虽然可以明显地求解,但超过内存 或时间限制。出于上述种种原因,当 MATLAB不能找到逆导数时,它将返回未经 计算的命令。,255 符号表达式可视化,对于一个自变量的函数,可视化实际上是求解自变量各点 上的函数值并绘图

25、的过程。 1.符号函数的简易绘图函数ezplot 函数的调用格式: ezplot(F,xmin,xmax,fig) %画符号表达式的图形 这里F为代表数学表达式的包含单个符号变量x的字符串或 符号表达式。 xmin,xmax是绘图的自变量范围,省略时默认值为 2,2;fig是指定的图形窗口,省略时默认为当前图形 窗口。,图115 符号表达式画图,自动选择X范围,图116符号表达式画图,给定x范围,256 符号表达式的简化,同一个数学函数的符号表达式的可以表示成三种形式, 例如以下的f(x)就可以分别表示为: (1)多项式形式的表达方式:f(x)=x3+6x2+11x-6 (2)因式形式的表达方

26、式:f(x)=(x-1)(x-2)(x-3) (3)嵌套形式的表达方式:f(x)=x(x(x-6)+11)-6 对于其中一些冗长繁复、难以理解的符号表达式, MATLAB提供了许多方法可以将其进行简化、约分、合并同类 项等处理,使表达式变得更简洁易懂。包括以下几种:,1. pretty命令 以类似于数学课本上的形式(如有理分式)来显示符号表 达式。例题见教材62页。 2.同类式合并 collect命令可以合并同类项,给出降幂排列形式。 函数collect调用格式: collect(S,v) 将符号矩阵S中的各元素的v的同幂项系数 合并; collect(S) 对由findsym函数返回的默认变

27、量进行同类 项合并。 3. horner命令 可将降幂排列的多项式变成嵌套形式。 4. factor命令 factor(S) 此函数将分解输入变量的表达式为因式形式 ; 如输入变量为一符号矩阵,此函数将分解矩阵的各个元素;如S包 含的所有元素为整数,则计算最佳因式分解式。,分解大整数(factor(sym( N ) factor(sym( 12345678901234567890 ) ans = (2)*(3)2*(5)*(101)*(3803)*(3607)*(27961)*(3541) 5.展开函数 expand expand(s) 对符号矩阵的各元素的符号表达式进行展开, 也常用于三角函

28、数、指数函数和对数函数的展开中。 6. simplify命令 命令将表达式进行简化。它利用各种类型的代数恒等式, 包括求和、积分和分数幂、三角、指数和 log 函数等来简化表 达式。 7. simple命令 可在简化基础上进一步给出多种简化形式,但由于简化方式不 同,有时会产生不同的答案。,simple 用于寻找符号矩阵或符号表达式的最简型。 调用格式: simple(S) 对表达式S 尝试多种不同的算法简化,以显示 S的长度最短的简化形式,若S为一矩阵,则结果是全矩阵的最 短形,而非每个元素的最短形。 它试用的简化命令除了已知的collect、factor、expand、 simplify命

29、令外,还包括如下功能: combine(trig) 将cos(x)2+sin(x)2合并为1 combine(trig) 将cos(x)2-sin(x)2 合并为cos(2*x) radsimp 将cos(x)+(-sin(x)2)(1/2)表示为复数形式 cos(x)+i*sin(x) convert(exp) 将cos(x)+i*sin(x)表示为指数形式exp(i*x),8. 分式通分 numden 求解符号表达式的分子和分母。 调用格式: N,D=numden(A) 把A的各元素转换为分子和分母都是整系数的最佳多项式型。 如: n,d=numden(x/y+y/x),n = x2+y2

30、,d = x*y,257 符号方程求解,1解单个代数方程 一般的代数方程包括线性方程、非线性方程和超越方程。 当方程不存在解析解又无其他自由参数时,MATLAB提供了 solve函数得出方程的数值解。此方法也可得到方程组的精确 解,所得的解析解可由函数vpa转换在浮点近似数值。 MATLAB用solve命令求解符号方程。如果表达式不是一个 方程式(不含等号),则在求解之前自动将表达式置成等于0。 它也可以求解f(x)=0或y(x)=f(x)两种形式的代数方程。 注意,在求解带有周期函数的方程时,有无穷多个解。这 时,solve命令在最接近于0的范围内(如2,或2等) 搜索,返回一个在最小范围内

31、得到的解。如果不能求得符号 解,就返回可变精度数值解。,2代数方程组求解 solve命令还可以同时求解若干代数方程,语句形式为: solve(sl,s2,sn)对缺省变量求解 n 个方程; solve(s1,s2,sn,v1,v2 vn)对n个未知数v1,v2 vn求解 n 个方程。 3解单个微分方程 用MATLAB符号工具箱的dsovle命令可以求解微分方程。 由于用符号运算解微分方程可以得到解析解,比起一般的数值 解,更具有理论研究意义。 主要调用格式为: dsolve(equ1, equ2,) 以代表微分方程及初始条件的符号方程为输入参数,多个方程 或初始条件可在一个输入变量内联立输入,且以逗号

温馨提示

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

评论

0/150

提交评论