《《符号计算 》》由会员分享,可在线阅读,更多相关《《符号计算 》(35页珍藏版)》请在金锄头文库上搜索。
1、MATLAB 实用教程第3章 MATLAB符号计算UsingSymbolicMathToolbox3.1符号表达式的建立3.2符号表达式的代数运算3.3符号表达式的操作和转换3.4符号极限、微积分和级数求和3.5符号积分变换3.6符号方程的求解.MATLAB 实用教程MATLAB具有符号数学工具箱(SymbolicMathToolbox)。符号计算是可以对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。与数值运算的区别:数值运算中必须先对变量赋值,然后才能参与运算。符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。.MATLAB 实用教程符号运算的功能符号线性代数(li
2、nearalgebra)因式分解、展开和简化(simplificationandsubstitution)符号代数方程求解(solvingequations)符号微积分(Calculus)符号微分方程.MATLAB 实用教程3.1符号表达式的建立3.1.1创建符号常量符号常量是不含变量的符号表达式。sym(常量) %创建符号常量sym(常量,参数)%按某种格式转换为符号常量说明:参数可以选择为d、f、e或r 四种格式,也可省略。EX: a=sym(sin(2) a=sym(sin(2),r).MATLAB 实用教程3.1.2创建符号变量和表达式(Creating Symbolic Variab
3、les and Expression)1. 使用sym命令创建符号变量和表达式sym(变量,参数) %把变量定义为符号对象2.使用syms命令创建符号变量和符号表达式syms(arg1, arg2, ,参数) syms arg1 arg2 ,参数.MATLAB 实用教程例如:f1=sym(a*x2+b*x+c)%创建表达式symsabcx%创建变量f2=a*x2+b*x+c %创建表达式syms(a,b,c,x)f3=a*x2+b*x+c符号表达式()中的参数一定要用单引号括起来。.MATLAB 实用教程3.1.3符号矩阵例如,使用sym命令创建的符号矩阵: A=sym(a,b;c,d)例如,
4、使用syms命令创建相同的符号矩阵: syms a b c d A=a b;c d比较符号矩阵与字符串矩阵: B=a,b;c,d %创建字符串矩阵 C=a,b;c,d %创建数值矩阵? Undefined function or variable a.MATLAB 实用教程3.2符号表达式的代数运算3.2.1符号表达式的代数运算由于MATLAB采用了重载技术,使得符号表达式的运算符和基本函数都与数值计算中的几乎完全相同 。例如: A+2 A. det(A) A2 例如:f=sym(2*x2+3*x+4)g=sym(5*x+6)f+gf*g.MATLAB 实用教程1.符号运算中的运算符(1)基本
5、运算符p运算符“”,“”,“*”,“”,“/”,“”分别实现符号矩阵的加、减、乘、左除、右除、求幂运算。p运算符“.*”,“./”,“.”,“.”分别实现符号数组的乘、除、求幂,即数组间元素与元素的运算。p运算符“”,“.”分别实现符号矩阵的共轭转置、非共轭转置。(2)关系运算符运算符“=”、“=”分别对运算符两边的符号对象进行“相等”、“不等”的比较。.MATLAB 实用教程2.函数运算(1)三角函数和双曲函数(2)(2)指数和对数函数(3)(3)复数函数(4)(4)矩阵代数命令.MATLAB 实用教程3.2.2符号数值任意精度控制和运算在Symbolic Math Toolbox中有三种不
6、同的算术运算:数值型:MATLAB的浮点运算。有理数型:Maple的精确符号运算。VPA型:Maple的任意精度运算。任意精度的VPA型运算可以使用digits和vpa命令来实现。digits(n)%设定默认的精度S=vpa(s,n)%将s表示为n位有效位数的符号对象.MATLAB 实用教程3.2.3符号对象与数值对象的转换将数值矩阵转化为符号矩阵函数调用格式:sym(A)EX: A=1/3,2.5;1/0.7,2/5 sym(A)将符号矩阵转化为数值矩阵函数调用格式:numeric(A)EX: a=sym(2/3) b=numeric(a).MATLAB 实用教程3.3符号表达式的操作和转换
7、3.3.1符号表达式中自由变量的确定符号表达式“f=ax2+bx+c” 中只有一个变量是独立变量: 小写字母i和j不能作为自由变量。 符号表达式中如果有多个符号变量,则按照以下顺序选择自由变量:首先选择x作为自由变量;如果没有x,则选择在字母顺序中最接近x的字符变量;如果与x相同距离,则在x后面的优先。 大写字母比所有的小写字母都靠后。也可以用findsym函数来自动确定。 自由变量的确定原则(The Default Symbolic Variables) .MATLAB 实用教程3.3.2符号表达式的化简(Simplificate)同一个多项式的符号表达式可以表示成三种形式:多项式形式的表达
8、方式:f(x)=x3+6x2+11x-6 因式形式表达方式:f(x)=(x-1)(x-2)(x-3) 嵌套形式的表达方式:f(x)=x(x(x-6)+11)-6 pretty:给出排版形式的输出结果。collect:将表达式写成多项式形式. 3 2 x - 6 x + 11 x - 6x3-6*x2+11*x-6.MATLAB 实用教程horner:将多项式形式写成嵌套形式factor:将表达式写成因式形式expand:将表达式写成多项式形式simplify:对表达式进行化简例如:k=sym(cos(x)2-sin(x)2)simplify(k)simple:寻求表达式的多种简化形式,使之包含
9、最少数目的字符-6+(11+(6+x)*x)*x2*cos(x)2-1(x-1)*(x-2)*(x-3).MATLAB 实用教程3.3.3符号表达式的替换(Substitutions)subs函数:对符号表达式中符号变量的替换。subs(s)%用给定值替换符号表达式s中的所有变量subs(s,new)%用new替换符号表达式s中的自由变量subs(s,old,new)%用new替换符号表达式s中的old变量例: f=sym(x3-6*x2+11*x-6) x=5 subs(f)subs(f,5)subs(f,x,5)可以用来计算多项式的值,以及化简。.MATLAB 实用教程3.3.4 求反函数
10、和复合函数1. 求反函数对于函数f(x),存在另一个函数g(.)使得g(f(x)x成立,则函数g(.)称为函数f(x)的反函数。g=finverse(f,v) %对指定自变量v的函数f(v)求反函数2. 求复合函数运用函数compose可以求符号函数f(x)和g(y)的复合函数。compose(f,g,z)%求f(x)和g(y)的复合函数f(g(z).MATLAB 实用教程3.3.5符号表达式的转换1. 符号表达式与多项式的转换构成多项式的符号表达式f(x)可以与多项式系数构成的行向量进行相互转换,MATLAB提供了函数sym2poly和poly2sym实现相互转换。2. 提取分子和分母如果符
11、号表达式是一个有理分式(两个多项式之比),可以利用numden函数来提取分子或分母,还可以进行通分。n,d=numden(f).MATLAB 实用教程EX:提取分子和分母系数。 f=sym(1+2*s)/(s2+2*s+1) pretty(f) 1 + 2 s - 2 s + 2 s + 1 n,d=numden(f) n1=sym2poly(n) d1=sym2poly(d).MATLAB 实用教程3.4 符号极限、微积分和级数求和3.4.1符号极限(Limits)【例3.14】分别求1/x在0处从两边趋近、从左边趋近和从右边趋近的三个极限值。 f=sym(1/x) limit(f) %对x
12、求趋近于0的极限 limit(f,x,0) %对x求趋近于0的极限 limit(f,x,0,left) %左趋近于0 limit(f,x,0,right) %右趋近于0.MATLAB 实用教程3.4.2符号微分(Differentiation)函数diff是用来求符号表达式的微分。 diff(f)%求f对自由变量的一阶微分diff(f,t)%求f对符号变量t的一阶微分diff(f,n)%求f对自由变量的n阶微分diff(f,t,n)%求f对符号变量t的n阶微分.MATLAB 实用教程3.4.3符号积分(Integration)积分有定积分和不定积分,运用函数int可以求得符号表达式的积分,即找
13、出一个符号表达式F使得diff(F)=f,也可以说是求微分的逆运算。int(f,t) %求符号变量t的不定积分int(f,t,a,b) %求符号变量t的定积分int(f,t,m,n) %求符号变量t的定积分.MATLAB 实用教程3.4.4符号级数1. symsum函数(SymbolicSummation)symsum(s,x,a,b)%计算表达式s的级数和说明:x为自变量,x省略则默认为对自由变量求和;s为符号表达式;a,b为参数x的取值范围。2. taylor函数(TaylorSeries)taylor(F,x,n) %求泰勒级数展开说明:x为自变量,F为符号表达式;对F进行泰勒级数展开至
14、n项,参数n省略则默认展开前5项。.MATLAB 实用教程3.5符号积分变换3.5.1傅里叶变换及其反变换1. fourier变换Ffourier(f,t,w)%求时域函数f(t)的fourier变换F说明:返回结果F是符号变量w的函数,f为t的函数。2. fourier反变换f=ifourier (F,w,t) 说明:ifourier函数的用法与fourier函数相同。 syms t w F=fourier(1/t,t,w) %fourier变换F =i*pi*(Heaviside(-w)-Heaviside(w).MATLAB 实用教程3.5.2拉普拉斯变换及其反变换1. Laplace变
15、换F=laplace(f,t,s) %求时域函数f的Laplace变换F说明:返回结果F为s的函数,当参数s省略,返回结果F默认为s的函数;f为t的函数,当参数t省略,默认自由变量为t。2. Laplace反变换filaplace(F,s,t)%求F的Laplace反变换f syms a t s F1=laplace(sin(a*t),t,s) %sinat的Laplace变换F1 =a/(s2+a2).MATLAB 实用教程3.5.3 Z变换及其反变换1. ztrans函数Fztrans(f,n,z) %求时域序列f的Z变换F说明:返回结果F是以符号变量z为自变量;当参数n省略,默认自变量为
16、n;当参数z省略,返回结果默认为z的函数。2. iztrans函数fiztrans(F,z,n) %求F的z反变换f syms a n z t Fz3=ztrans(exp(-a*t),n,z) %e-at的Z变换Fz3 =exp(-a*t)*z/(z-1).MATLAB 实用教程3.6 符号方程的求解3.6.1 代数方程MATLAB可以用solve命令给出方程的数值解。solve(eq,v)%求方程关于指定变量的解solve(eq1, eq2,v1,v2,) %求方程组关于指定变量的解 例如,解方程: solve(a*x2+b*x+c) solve(a*x2+b*x+c=0) solve(a*x2+b*x+c=0,x).MATLAB 实用教程【例3.22】求三元非线性方程组的解。 eq1=sym(x2+2*x+1); eq2=sym(x+3*z=4); eq3=sym(y*z=-1); x,y,z=solve(eq1,eq2,eq3) %解方程组并赋值给x,y,zx =-1y =-3/5z =5/3 .MATLAB 实用教程3.6.2 符号常微分方程MATLAB提供了dsolve命令