在MATLAB中,符号数学工具箱(Symbolic Math Toolbox)用于实现符号运算。和别的工具箱有所不同,该工具箱不是基于矩阵进行数值分析,而是使用字符串来进行符号分析与运算。
参与符号运算整个过程的是符号变量,在符号运算中出现的数字也按符号变量处理。在MATLAB中,sym和syms函数用于创建符号变量。
应先声明符号变量再使用,sym函数的调用方法如下:
sym ('变量名')
例如:
sym(' y ')
syms函数的调用方法如下:
syms 变量名列表 % 每个变量名需用空格分隔,不能用逗号分隔
例如:
syms x a
经上述定义后,x、y、a已成为符号变量。
MATLAB中的符号表达式和符号方程是两种不同的操作对象,它们的区别在于:符号表达式不包含等号(=),符号方程必须带等号。例如:
A=' sin(x)^2 ' % 表示符号表达式 Bq=' a*x^2+b*x+c=0 ' % 表示符号方程
在MATLAB中,必须事先定义符号矩阵才能对矩阵进行符号运算,将数值矩阵转换成符号矩阵的调用格式为:
sym(矩阵名)
【例2-20】将数值矩阵 A 转换成符号矩阵。
>> A=hilb(3) A = 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 >> A=sym(A) A = [ 1 , 1/2, 1/3] [ 1/2, 1/3, 1/4] [ 1/3, 1/4, 1/5]
在MATLAB中,subs函数用于符号变量的替换,适用于单个符号矩阵、符号表达式、符号代数方程和微分方程中的变量替换。该函数的调用方法如下:
subs(s, new) % 用新变量new替换s中的默认变量 subs(s, old, new) % 用新变量new替换s中的指定变量old
如果新变量是符号变量,就必须将新变量名以'new'形式给出。
【例2-21】以符号变量a替换表达式f中的x。
>> syms x y a >> syms f(x, y) >> f(x, y) = x + y; >> f = subs(f, x, a) f(x, y) = a + y
符号变量和数字变量之间可以转换,也可以用数字代替符号得到数值。符号运算的种类很多,限于篇幅,下面仅对常用的符号运算进行介绍,其他符号运算大同小异。
1. diff函数
在MATLAB中,diff函数是用于求微分的符号函数。该函数的调用方法如下:
diff(f) % 对符号表达式f进行微分运算 diff(f,a) % f对指定变量a进行微分运算 diff(f,a,n) % 计算f对默认变量或指定变量a的n 阶导数,n是正整数
【例2-22】对符号进行微分运算。
syms x n % 定义符号变量x和n f=x^n; % 定义符号表达式f diff(f,x) % 符号表达式f对x求导 diff(f,n) % 注意,是f对符号变量n求导 df2=diff(f,x,2) % 计算f对符号变量x的二阶导数
运行结果如下:
ans = n*x^(n - 1) ans = x^n*log(x) df2 = n*x^(n - 2)*(n - 1)
2. int函数
在MATLAB中,int函数是用于求积分的符号函数。该函数的调用方法如下:
int(f) % 对于符号变量f代表的符号表达式,求f关于默认变量的不定积分 int(f,v) % 计算f关于变量v的不定积分 int(f,a,b)或int(f,v,a,b) % 计算f关于默认变量或指定变量v从a到b的定积分
【例2-23】对于函数 s ( x , y )= x e - xy ,先求 s 关于 x 的不定积分,再求所得结果关于 y 的不定积分。
syms x y s=x*exp(-x*y); f=int(int(s),y)
运行结果如下:
f =exp(-x*y)/y
3. simplify函数
在MATLAB中,simplify函数用于包含和式、根式、分数、乘方、指数、对数、三角函数等的表达式化简。
4. solve函数
在MATLAB中,solve函数用于解代数方程组。该函数的调用方法如下:
solve(S1,S2)
其中,S1和S2是方程的符号表达式。例如,求解方程组 。
syms x y alpha [x,y] = solve(x^2*y^2==0,x-y/2-alpha==0)
运行后将返回符号变量x、y的解,返回的解即使是数字量也仍然是符号变量。
x = alpha 0 y = 0 -2*alpha
5. limit函数
在MATLAB中,limit是用于求极限的符号函数。该函数的调用方法如下:
limit (F,x,a) % 取符号表达式F在x趋于a时的极限 limit (F,a) % 按前面的规定自动搜索F中的符号变量,求其趋于a时F的极限 limit (F) % 指定a = 0为极限点 limit (F,x,a,'right')或limit (F,x,a,'left') % 规定x趋于a的方向,即用于取 % 左极限或右极限
6. dsolve函数
在MATLAB中,dsolve函数既可以解符号微分方程,也可以解普通微分方程。用符号D表示微分,D2,D3,…,D n 分别表示2阶,3阶,…, n 阶微分。如不加声明,则默认符号变量为t。D2y代表 ,Dy代表 。在解微分方程时,D不用作符号变量。如果还有初始条件,则需进行另外的说明。
【例2-24】利用dsolve函数解微分方程。
>> y = dsolve('Dy=1+y^2','y(0)=1') %符号变量y对默认变量t的一阶方程 y = tan(t + pi/4)