《MATLAB图像处理超级学习手册》一一2.7 符号运算

本节书摘来自异步社区出版社《MATLAB图像处理超级学习手册》一书中的第2章,第2.7节,作者:MATLAB技术联盟 , 张岩 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.7 符号运算

MATLAB图像处理超级学习手册
在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=' ax^2+bx+c=0 '表示符号方程。

2.7.2 数值与符号的转换
在MATLAB中,可利用Sym函数将数值结果转换为符号表达式。调用方法如下。

Sym(r,' f '):表示返回符号浮点表示式。

Sym(r,' r '):表示返回符号有理数表示式。

Sym(r,' e '):表示返回符号有理数表示式。

Sym(r,' d '):表示返回符号十进制小数。
**
2.7.3 数值矩阵转换为符号矩阵**
在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.4 符号替换
在MATLAB中,subs函数用于符号变量的替换,该命令适用单个符号矩阵、符号表达式、符号代数方程和微分方程中的变量替换,该函数的调用方法如下。

subs(S, new):表示用新变量new替换S中的默认变量。

subs(S, new, old):表示用新变量new替换S中的指定变量old。

如果新变量是符号变量,则必须将新变量名以' new' 形式给出。  

【例2-21】以符号变量'5'替换符号表达式f中的'A' 。

>> f=sym('sin(1/3*A*pi)');
>> subs(f, '5','A')
ans =
sin((pi*A)/3)

在ans中,2仍然是符号变量。

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

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)=xe-xy,先求s 关于x 的不定积分,再求所得结果关于y 的不定积分。

>>syms x y
s='x*exp(-x*y)';
f=int(int(s),y)

运行结果如下:

f =1/y*exp(-x*y)

3.simplify与simple函数
在MATLAB中,simplify 函数用于包含和式、根式、分数、乘方、指数、对数、三角函数等的表达式的化简;simple 函数用于寻找最少字符的表达式。

4.solve函数
在MATLAB中,solve函数用于解代数方程组,该函数的调用方法如下:

solve(S1,S2)

其中,S1,S2是方程的符号表达式。
《MATLAB图像处理超级学习手册》一一2.7 符号运算

syms x y alpha
[x,y] = solve(x^2*y^2,x-y/2-alpha)

运行后将返回符号变量x、y的解,各4个。返回的解即使是数字量,也仍然是符号变量。

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,…,Dn”相应表示2阶,3阶,…,n阶微分。如不加声明,则默认符号变量为t。D2y代表frac{{d^2 y}}{{dt^2 }} ,Dy代表frac{{dy}}{{dt}}。在解微分方程时,D不用作符号变量。如果还有初始条件,则需作另外的方程说明。

【例2-24】利用dsolve函数解微分方程。

>> y = dsolve('Dy=1+y^2','y(0)=1')   %符号变量y对默认变量t的一阶方程。
y =
tan(pi/4 + t)
上一篇:马云最重要的一次“创业”,迎来五年“小考”


下一篇:品牌加速撤离京东的背后:除了“二选一”还有这个原因