2.6 符号运算
MATLAB提供了符号数学工具箱(Symbolic Math Toolbox),大大增强了MATLAB的功能。符号数学工具箱的特点为:
(1)符号数学工具箱适用于广泛的用途,而不是针对一些特殊专业或专业分支。
(2)符号数学工具箱使用字符串来进行符号分析,而不是基于数组的数值分析。
2.6.1 符号运算基础
符号数学工具箱是操作和解决符号表达式的符号数学工具箱(函数)集合,有复合、简化、微分、积分以及求解代数方程和微分方程的工具。另外还有一些用于线性代数的工具,求解逆、行列式、正则形式的精确结果,找出符号矩阵的特征值而没有由数值计算引入的误差。工具箱还支持可变精度运算,即支持符号计算并能以指定的精度返回结果。
- 符号表达式
符号表达式是代表数字、函数、算子和变量的MATLAB字符串,或字符串数组。不要求变量有预先确定的值,符号方程式是含有等号的符号表达式。符号算术是使用已知的规则和给定符号恒等式求解这些符号方程的实践,它与代数和微积分所学到的求解方法完全一样。符号矩阵是数组,其元素是符号表达式。
MATLAB在内部把符号表达式表示成字符串,与数字变量或运算相区别;否则,这些符号表达式几乎完全像基本的MATLAB命令。
- 符号变量和符号表达式
在MATLAB中,用sym或syms命名符号变量和符号表达式,定义多个符号变量之间用空格分开。例如:
(1)“sym a”定义了符号变量a,“syms a b”定义了符号变量a和b;
(2)“X=sym('x')”创建变量x,“a=sym('alpha')”创建变量alpha;
(3)“syms a b c x; f=sym('ax^2+bx+c')”创建变量表达式f=ax2+bx+c;
(4)“fcn=sym('f(x)')”创建函数f(x)。
2.6.2 控制系统中常用的符号运算
符号变量和数字变量之间可转换,也可以用数字代替符号得到数值。符号运算种类非常之多,常用的符号运算有代数运算、积分和微分运算、极限运算、级数求和、进行方程求解等。
出于篇幅的考虑,下面仅对控制系统中常用的符号运算进行介绍,至于其他的符号运算,读者可参考MATLAB的帮助文档或其他关于符号函数工具箱的书籍,此处不再赘述。
控制系统中常用的符号运算有微积分、拉普拉斯变换和Z变换等积分变换,下面分别进行介绍。
diff是求微分最常用的函数,其输入参数既可以是函数表达式,也可以是符号矩阵。
常用的格式是:diff(f, x, n),表示f关于x求n阶导数。
int是求积分最常用的函数,其输入参数可以是函数表达式。
常用的格式是:int(f, r, x0, x1)。其中,f为所要积分的表达式,r为积分变量,若为定积分,则x0,x1为积分上下限。
【例2-7】 已知表达式f=sin(ax),分别对其中的x和a求导。
解:输入如下MATLAB程序代码。
- >> syms a x %定义符号变量a和x
- >> f=sin(a*x) %创建函数f
- >> dfx=diff(f, x) %对x求导
- >> dfa=diff(f, a) %对a求导
运行程序,输出结果如下:
- f =sin(a*x)
- dfx =cos(a*x)*a %f对x求导的结果
- dfa =cos(a*x)*x %f对a求导的结果
【例2-8】 已知表达式f=xlg(1+x),求对x的积分和x在[0,1]上的积分值。
解:输入如下MATLAB程序代码。
- >>syms x %定义符号变量x
- >>f=x*log(1+x) %创建函数f
- >>int1=int(f,x) %对x积分
- >>int2=int(f,x,0,1) %求[0,1]区间上的积分
运行程序,输出结果如下:
- int1 =1/2*(1+x)^2*log(1+x)+3/4+1/2*x-1/4*x^2-(1+x)*log(1+x) %积分表达式
- int2 =1/4 %积分值