1、第三章 MATLAB的符号运算,3.1 符号对象与符号表达式 3.2 符号表达式的运算 3.3 符号表达式的操作及转换 3.4 符号矩阵 3.5 符号微积分 3.6 积分变换 3.7 符号方程的求解,3.1符号对象与符号表达式,3.1.1 符号对象的生成 1建立符号变量和符号常量 (1) 符号常量的建立 符号常量是不含变量的符号表达式。 sym函数的一般调用形式 sym(常量) %创建符号常量 sym(常量,参数) %把常量按某种格式转换为符号常量,(2) 符号变量的建立 符号变量就是含有变量的符号表达式。 syms函数的一般调用格式为: syms 符号变量名1 符号变量名2 符号变量名n 用
2、这种格式定义符号变量时不要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔。,2. 建立符号表达式 符号表达式就是代表数字、函数和变量的MATLAB字符串或字符串数组,它不要求变量要有预先定义的值。符号表达式包含符号函数和符号方程,其中符号函数没有等号,而符号方程必须带有等号。在MATLAB中建立符号表达式主要有一下三种方式: (1) 用单引号建立符号表达式 (2) 用sym建立符号表达式 (3) 使用已经定义的符号变量来组成符号表达式,3.2 符号表达式的运算,符号运算与数值运算的区别主要有以下几点: A 传统的数值型运算因为要受到计算机所保留的有效位数的限制,它的内部表示法总是采
3、用计算机硬件提供的8位浮点表示法,因此每一次运算都会有一定的截断误差,重复的多次数值运算就可能会造成很大的累积误差。符号运算不需要进行数值运算,不会出现截断误差,因此符号运算是非常准确的。 B符号运算可以得出完全的封闭解或任意精度的数值解。 C符号运算的时间较长,而数值型运算速度快。,3.2.1 提取分子分母 numden函数的调用形式如下: n,d=numden(a) 提取符号表达式a的分子与分母,并分别将其存放在n与d中 n=numden(a) 提取符号表达式a的分子与分母,但只把分子存放在n中 例 提取符号表达式 的分子和分母,3.2.2 符号表达式的基本代数运算 符号表达式的加、减、乘
4、、除四则运算及幂运算等基本的代数运算,与矩阵的数值运算几乎完全一样。其中,符号表达式的加、减、乘、除运算可分别有函数symadd、symsub、symmul、symdiv来实现,也可与矩阵的数值运算一样,用“”、“”、“”、“”符号进行运算,而符号表达式的幂运算也可以由函数sympow来实现,也可以由幂运算符“”来实现。 例 符号表达式f=2x2+3x+4与g=5x+6的代数运算。,3.3 符号表达式的操作及转换,3.3.1 符号表达式中自由变量的确定 自由变量的确定原则 A 小写字母i和j不能作为自由变量。 B 符号表达式中如果有多个字符变量,则按照以下顺序选择自由变量:首先选择x作为自由变
5、量;如果没有x,则选择在字母顺序中最接近x的字符变量;如果与x相同距离,则在x后面的优先。 C 大写字母比所有的小写字母都靠后。,如果我们无法确定表达式中的自由变量,我们可以使用MATLAB提供的findsym函数来确定,该函数的一般调用形式为 findsym(EXPR,n) %确定自由符号变量 说明:EXPR可以是符号表达式或符号矩阵;n为按顺序得出符号变量的个数,当n省略时,则不按顺序得出EXPR中所有的符号变量。 例 使用matlab指令得出 的符号变量,3.3.2 符号表达式的化简 当通过MATLAB的符号函数运算生成的符号表达式难于看懂时,可以通过MATLAB的符号数学工具箱中提供的
6、函数,来对符号表达式进行化简,把它化成易于看懂的形式。这方面的函数主要有:pretty、collect、expand、horner、factor、simplify、simple。,一般来说同一个数学函数可以表示成三种,如 多项式形式的表达方式:f(x)=x3+6x2+11x-6 因式形式的表达方式:f(x)=(x-1)(x-2)(x-3) 嵌套形式的表达方式:f(x)=x(x(x-6)+11)-6,1.pretty函数化简 习惯方式显示2. collect函数化简当有多个符号变量,可以指定按某个符号变量来合并同类项。,3. expand函数 给出相应的符号表达式形式。 指定项展开 4. hor
7、ner函数 给出符号表达式的嵌套形式。 5. factor函数 给出符号表达式的因式形式。 6. simplify函数,例 利用三角函数来简化符号表达式cos2x-sin2x。 7. simple函数 寻求包含最少数目字符的表达式简化形式。利用simple简化符号表达式cos2x-sin2x。,3.3.3 符号表达式的替换 subs(s)%用给定值替换符号表达式s中的所有变量 subs(s,new)%用new替换符号表达式s中的自由变量 subs(s,old,new) %用new替换符号表达式s中的old变量 例 用subs函数对符号表达式(x+y)2+3(x+y)+5进行替换。,3.3.4
8、符号数值任意精度控制和运算 在MATLAB的符号运算工具箱(Symbolic Math Toolbox)中共包含3种算术运算: A 数值类型 matlab的浮点算术运算 B 有理数类型 精确符号运算 C vpa类型 任意精度算术运算,任意精度的VPA型运算可以使用digits和vpa命令来实现。digits(n) %设定默认的精度 说明:n为所期望的有效位数。digits函数可以改变默认的有效位数来改变精度,随后的每个进行Maple函数的计算都以新精度为准。,3.3.5 符号与数值间的转换 1. 将符号表达式转换成数值表达式 将符号表达式转换成数值表达式主要是通过函数numeric或eval来
9、实现,2. 将数值转换成符号表达式 将数值转换成符号表达式主要是通过函数sym来实现。 3.符号表达式与多项式的转换 构成多项式的符号表达式f(x)可以与多项式系数构成的行向量进行相互转换,MATLAB提供了函数sym2poly和poly2sym实现相互转换。,3.3.6 求反函数和复合函数 1. 求反函数 finverse(f,v) 2. 求复合函数 compose(f,g,x,z),3.4 符号矩阵,3.4.1 符号矩阵的生成 1 使用sym符号矩阵可通过函数sym来生成。符号矩阵的元素是任何不带等号的符号表达式,各符号表达式的长度可以不同;符号矩阵中,以空格或逗号分隔的元素指定的是不同列
10、的元素,而以分号分隔的元素指定的是不同行的元素。,2. 用字符串直接创建矩阵 模仿matlab数值矩阵的创建方法 需保证同一列中各元素字符串有相同的长度,3.4.2 符号矩阵的运算 1. 符号矩阵的四则运算在MATLAB中,进行符号运算的四则运算非常方便。实际上,它与数值矩阵的四则运算完全相同,这大大地方便了用户的操作。符号表达式的加、减、乘、除运算可分别有函数symadd、symsub、symmul、symdiv来实现,也可与矩阵的数值运算一样,用“”、“”、“”、“”符号进行运算,而符号表达式的幂运算也可以由函数sympow来实现,也可以由幂运算符“”来实现。,2. 符号矩阵的其他一些基本
11、运算 (1) 符号矩阵的转置运算(transpose) (2)符号矩阵的行列式运算 (determ或det ) (3)符号矩阵的求逆运算 (inv ) (4) 符号矩阵的特征值、特征向量运算 E = eig(X) 返回方阵X的特征值 V,D = eig(X) 返回方阵特征值和特征向量矩阵 V,D = eigensys(A) 和eig的第二种调用方式相同,3.5 符号微积分,3.5.1 符号极限Limit函数,3.5.2 符号级数求级数和symsum(s,x,a,b) 说明:x为自变量,x省略则默认为对自由变量求和;s为符号表达式;a,b为参数x的取值范围。 例 求级数 和1+x+x2+xk+
12、的和,3.5.2 符号微分 diff(s):没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数。 diff(s,v):以v为自变量,对符号表达式s求一阶导数。 diff(s,n):按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数。 diff(s,v,n):以v为自变量,对符号表达式s求n阶导数。 例 已知f(x)ax2+bx+c,求f(x)的微分。 diff还可以用于对数组中的元素进行逐项求差值。,3.5.3 符号积分 int(f) %对findsym函数返回的独立变量求不定积分,f为符号表达式 int(f,t) %求符号变量t的不定
13、积分 int(f,t,a,b) %求符号变量t的积分 int(f,t,m,n) %求符号变量t的积分 说明:t为符号变量,当t省略则为默认自由变量;a和b为数值,a,b为积分区间;m和n为符号对象,m,n为积分区间 例 求积分 和,3.6 积分变换,3.6.1 傅立叶变换 1. 使用fourier函数 fourier的一般调用形式为Ffourier(f,t ,w) 说明:返回结果F是符号变量w的函数,当参数w省略,默认返回结果为w的函数;f为t的函数,当参数t省略,默认自由变量为x。 2. 使用ifourier ifourier主要用于求傅立叶逆变换,它的一般调用形式为f=ifourier (
14、F,w,t) 说明:ifourier函数的用法与fourier函数相同。,3.6.2 拉普拉斯变换 1.拉普拉斯正变换F=laplace(f,t,s) 说明:返回结果F为s的函数,当参数s省略,返回结果F默认为s的函数;f为t的函数,当参数t省略,默认自由变量为t。 2. Laplace逆变换 filaplace(F,s,t),3.7 符号方程的求解,3.7.1 符号代数方程的求解 solve(s):求解符号表达式s的代数方程,求解变量为默认变量。 solve(s,v):求解符号表达式s的代数方程,求解变量为v。 solve(s1,s2,sn,v1,v2,vn):求解符号表达式s1,s2,sn组成的代数方程组,求解变量分别v1,v2,vn。 说明:s可以是含等号的符号表达式的方程,也可以是不含等号的符号表达式,但所指的仍是令s=0的方程;当参数v省略时,默认为方程中的自由变量;其输出结果为结构数组类型。 例 求方程ax2+bx+c=0和sinx=0的解。求三元非线性方程组 的解,3.7.2 符号常微分方程dsolve(eq,con,v) dsolve(eq1,eq2,con1,con2,v1,v2) 说明:eq为微分方程;con是微分初始条件,可省略;v为指定自由变量,省略时则默认为x或t为自由变量;输出结果为结构数组类型。,