购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.7 符号运算

在MATLAB中,符号数学工具箱(Symbolic Math Toolbox)用于实现符号运算。和别的工具箱有所不同,该工具箱不是基于矩阵进行数值分析,而是使用字符串来进行符号分析与运算。

2.7.1 创建符号变量

参与符号运算整个过程的是符号变量,在符号运算中出现的数字也按符号变量处理。在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 '            % 表示符号方程

2.7.2 数值矩阵转换为符号矩阵

在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]

2.7.3 符号替换

在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

2.7.4 常用的符号运算

符号变量和数字变量之间可以转换,也可以用数字代替符号得到数值。符号运算的种类很多,限于篇幅,下面仅对常用的符号运算进行介绍,其他符号运算大同小异。

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是方程的符号表达式。例如,求解方程组 052-01

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代表 052-02 ,Dy代表 052-03 。在解微分方程时,D不用作符号变量。如果还有初始条件,则需进行另外的说明。

【例2-24】利用dsolve函数解微分方程。 hsjImdIHoicsEHG/ilnvxtZUL+dgncdPz+kNzSfoVa55Nr9wQ2/nAcPV+gEdmoZ0

>> y = dsolve('Dy=1+y^2','y(0)=1')         %符号变量y对默认变量t的一阶方程
y =
tan(t + pi/4)
点击中间区域
呼出菜单
上一章
目录
下一章
×