第 9章 MATLAB符号计算
9.1 符号对象
9.2 符号微积分
9.3 级 数
9.4 符号方程求解
9.1 符号对象
9.1.1 建立符号对象
1.建立符号变量和符号常量
MATLAB提供了两个建立符号对象的函数,sym和
syms,两个函数的用法不同。
(1) sym函数
sym函数用来建立单个符号量,一般调用格式为:
符号量名 =sym('符号字符串 ')
该函数可以建立一个符号量,符号字符串可以是常
量、变量、函数或表达式。
应用 sym函数还可以定义符号常量,使用符号常量
进行代数运算时和数值常量进行的运算不同。下
面的命令用于比较符号常量与数值常量在代数运
算时的差别。
(2) syms函数
函数 sym一次只能定义一个符号变量,使用不方便。
MATLAB提供了另一个函数 syms,一次可以定义
多个符号变量。 syms函数的一般调用格式为:
syms 符号变量名 1 符号变量名 2 … 符号变量名 n
用这种格式定义符号变量时不要在变量名上加字符
串分界符 (‘),变量间用空格而不要用逗号分隔。
2.建立符号表达式
含有符号对象的表达式称为符号表达式。建立符号表达式有
以下 3种方法:
(1)利用单引号来生成符号表达式。
(2)用 sym函数建立符号表达式。
(3) 使用已经定义的符号变量组成符号表达式。
9.1.2 符号表达式运算
1.符号表达式的四则运算
符号表达式的加、减、乘、除运算可分别由函数 symadd、
symsub,symmul和 symdiv来实现,幂运算可以由 sympow
来实现。
2.符号表达式的提取分子和分母运算
如果符号表达式是一个有理分式或可以展开为有理分式,可
利用 numden函数来提取符号表达式中的分子或分母。其
一般调用格式为:
[n,d]=numden(s)
该函数提取符号表达式 s的分子和分母,分别将它们存放在 n
与 d中。
3.符号表达式的因式分解与展开
MATLAB提供了符号表达式的因式分解与展开的函数,函
数的调用格式为:
factor(s):对符号表达式 s分解因式。
expand(s):对符号表达式 s进行展开。
collect(s):对符号表达式 s合并同类项。
collect(s,v):对符号表达式 s按变量 v合并同类项。
4.符号表达式的化简
MATLAB提供的对符号表达式化简的函数有:
simplify(s):应用函数规则对 s进行化简。
simple(s):调用 MATLAB的其他函数对表达式进行综合化简,
并显示化简过程。
5.符号表达式与数值表达式之间的转换
利用函数 sym可以将数值表达式变换成它的符号表达式。
函数 numeric或 eval可以将符号表达式变换成数值表达式。
9.1.3 符号表达式中变量的确定
MATLAB中的符号可以表示符号变量和符号常量。 findsym
可以帮助用户查找一个符号表达式中的的符号变量。该函
数的调用格式为:
findsym(s,n)
函数返回符号表达式 s中的 n个符号变量,若没有指定 n,则
返回 s中的全部符号变量。
9.1.4 符号矩阵
符号矩阵也是一种符号表达式,所以前面介绍的符
号表达式运算都可以在矩阵意义下进行。但应注
意这些函数作用于符号矩阵时,是分别作用于矩
阵的每一个元素。
由于符号矩阵是一个矩阵,所以符号矩阵还能进行
有关矩阵的运算。 MATLAB还有一些专用于符号
矩阵的函数,这些函数作用于单个的数据无意义。
例如
transpose(s):返回 s矩阵的转置矩阵。
determ(s):返回 s矩阵的行列式值。
其实,曾介绍过的许多应用于数值矩阵的函数,如 diag,triu,tril,inv,det,rank,eig等,也可
直接应用于符号矩阵。
9.2 符号微积分
9.2.1 符号极限
limit函数的调用格式为:
(1) limit(f,x,a):求符号函数 f(x)的极限值。即计算当
变量 x趋近于常数 a时,f(x)函数的极限值。
(2) limit(f,a):求符号函数 f(x)的极限值。由于没有
指定符号函数 f(x)的自变量,则使用该格式时,符
号函数 f(x)的变量为函数 findsym(f)确定的默认自
变量,即变量 x趋近于 a。
(3) limit(f):求符号函数 f(x)的极限值。符号函数 f(x)的变量
为函数 findsym(f)确定的默认变量;没有指定变量的目标
值时,系统默认变量趋近于 0,即 a=0的情况。
(4) limit(f,x,a,'right'):求符号函数 f的极限值。 'right'表示变
量 x从右边趋近于 a。
(5) limit(f,x,a,‘left’):求符号函数 f的极限值。‘ left’表示变量
x从左边趋近于 a。
例 9-1 求下列极限。
极限 1:
syms a m x;
f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a);
limit(f,x,a)
ans =
(1/2*a*exp(sin(a))+1/2*a-exp(tan(a))+1)/a
极限 2:
syms x t;
limit((1+2*t/x)^(3*x),x,inf)
ans =
exp(6*t)
极限 3:
syms x;
f=x*(sqrt(x^2+1)-x);
limit(f,x,inf,'left')
ans =
1/2
极限 4:
syms x;
f=(sqrt(x)-sqrt(2)-sqrt(x-2))/sqrt(x*x-4);
limit(f,x,2,'right')
ans =
-1/2
9.2.2 符号导数
diff函数用于对符号表达式求导数。该函数的一般调用格式
为:
diff(s):没有指定变量和导数阶数,则系统按 findsym函数指
示的默认变量对符号表达式 s求一阶导数。
diff(s,'v'):以 v为自变量,对符号表达式 s求一阶导数。
diff(s,n):按 findsym函数指示的默认变量对符号表达式 s求 n
阶导数,n为正整数。
diff(s,'v',n):以 v为自变量,对符号表达式 s求 n阶导数。
例 9-2 求下列函数的导数。
9.2.3 符号积分
符号积分由函数 int来实现。该函数的一般调用格式为:
int(s):没有指定积分变量和积分阶数时,系统按 findsym函
数指示的默认变量对被积函数或符号表达式 s求不定积分。
int(s,v):以 v为自变量,对被积函数或符号表达式 s求不定积
分。
int(s,v,a,b):求定积分运算。 a,b分别表示定积分的下限和上
限。该函数求被积函数在区间 [a,b]上的定积分。 a和 b可以
是两个具体的数,也可以是一个符号表达式,还可以是无
穷 (inf)。当函数 f关于变量 x在闭区间 [a,b]上可积时,函数
返回一个定积分结果。当 a,b中有一个是 inf时,函数返回
一个广义积分。当 a,b中有一个符号表达式时,函数返回
一个符号函数。
例 9-3 求下列积分。
9.2.4 积分变换
常见的积分变换有傅立叶变换、拉普拉斯变换和 Z
变换。
1.傅立叶 (Fourier)变换
在 MATLAB中,进行傅立叶变换的函数是:
fourier(f,x,t):求函数 f(x)的傅立叶像函数 F(t)。
ifourier(F,t,x):求傅立叶像函数 F(t)的原函数 f(x)。
例 9-4 求函数 y=的傅立叶变换及其逆变换。
2.拉普拉斯 (Laplace)变换
在 MATLAB中,进行拉普拉斯变换的函数是:
laplace(fx,x,t):求函数 f(x)的拉普拉斯像函数 F(t)。
ilaplace(Fw,t,x):求拉普拉斯像函数 F(t)的原函数 f(x)。
例 9-5 计算 y=x3的拉普拉斯变换及其逆变换。
3,Z变换
当函数 f(x)呈现为一个离散的数列 f(n)时,对数列 f(n)进行 z变
换的 MATLAB函数是:
ztrans(fn,n,z):求 fn的 Z变换像函数 F(z)。
iztrans(Fz,z,n):求 Fz的 z变换原函数 f(n)。
例 9-6 求数列 fn=e-2n的 Z变换及其逆变换。
9.3 级 数
9.3.1 级数符号求和
求无穷级数的和需要符号表达式求和函数 symsum,其调用
格式为:
symsum(s,v,n,m)
其中 s表示一个级数的通项,是一个符号表达式。 v是求和变
量,v省略时使用系统的默认变量。 n和 m是求和的开始项
和末项。
例 9-7 求下列级数之和。
9.3.2 函数的泰勒级数
MATLAB提供了 taylor函数将函数展开为幂级数,
其调用格式为:
taylor(f,v,n,a)
该函数将函数 f按变量 v展开为泰勒级数,展开到第 n
项 (即变量 v的 n-1次幂 )为止,n的缺省值为 6。 v的
缺省值与 diff函数相同。参数 a指定将函数 f在自变
量 v=a处展开,a的缺省值是 0。
例 9-8 求函数在指定点的泰勒级数展开式。
9.4 符号方程求解
9.4.1 符号代数方程求解
在 MATLAB中,求解用符号表达式表示的代数方程可由函
数 solve实现,其调用格式为:
solve(s):求解符号表达式 s的代数方程,求解变量为默认变
量。
solve(s,v):求解符号表达式 s的代数方程,求解变量为 v。
solve(s1,s2,…,sn,v1,v2,…,vn),求解符号表达式 s1,s2,…,sn 组
成的代数方程组,求解变量分别 v1,v2,…,vn 。
例 9-9 解下列方程。
9.4.2 符号常微分方程求解
在 MATLAB中,用大写字母 D表示导数。例如,Dy表示 y',
D2y表示 y'',Dy(0)=5表示 y'(0)=5。 D3y+D2y+Dy-x+5=0表
示微分方程 y'''+y''+y'-x+5=0。符号常微分方程求解可以
通过函数 dsolve来实现,其调用格式为:
dsolve(e,c,v)
该函数求解常微分方程 e在初值条件 c下的特解。参数 v描述
方程中的自变量,省略时按缺省原则处理,若没有给出初
值条件 c,则求方程的通解。
dsolve在求常微分方程组时的调用格式为:
dsolve(e1,e2,…,en,c1,…,cn,v1,…,vn)
该函数求解常微分方程组 e1,…,en 在初值条件 c1,…,cn 下的特
解,若不给出初值条件,则求方程组的通解,v1,…,vn 给
出求解变量。
例 9-10 求下列微分方程的解。
9.1 符号对象
9.2 符号微积分
9.3 级 数
9.4 符号方程求解
9.1 符号对象
9.1.1 建立符号对象
1.建立符号变量和符号常量
MATLAB提供了两个建立符号对象的函数,sym和
syms,两个函数的用法不同。
(1) sym函数
sym函数用来建立单个符号量,一般调用格式为:
符号量名 =sym('符号字符串 ')
该函数可以建立一个符号量,符号字符串可以是常
量、变量、函数或表达式。
应用 sym函数还可以定义符号常量,使用符号常量
进行代数运算时和数值常量进行的运算不同。下
面的命令用于比较符号常量与数值常量在代数运
算时的差别。
(2) syms函数
函数 sym一次只能定义一个符号变量,使用不方便。
MATLAB提供了另一个函数 syms,一次可以定义
多个符号变量。 syms函数的一般调用格式为:
syms 符号变量名 1 符号变量名 2 … 符号变量名 n
用这种格式定义符号变量时不要在变量名上加字符
串分界符 (‘),变量间用空格而不要用逗号分隔。
2.建立符号表达式
含有符号对象的表达式称为符号表达式。建立符号表达式有
以下 3种方法:
(1)利用单引号来生成符号表达式。
(2)用 sym函数建立符号表达式。
(3) 使用已经定义的符号变量组成符号表达式。
9.1.2 符号表达式运算
1.符号表达式的四则运算
符号表达式的加、减、乘、除运算可分别由函数 symadd、
symsub,symmul和 symdiv来实现,幂运算可以由 sympow
来实现。
2.符号表达式的提取分子和分母运算
如果符号表达式是一个有理分式或可以展开为有理分式,可
利用 numden函数来提取符号表达式中的分子或分母。其
一般调用格式为:
[n,d]=numden(s)
该函数提取符号表达式 s的分子和分母,分别将它们存放在 n
与 d中。
3.符号表达式的因式分解与展开
MATLAB提供了符号表达式的因式分解与展开的函数,函
数的调用格式为:
factor(s):对符号表达式 s分解因式。
expand(s):对符号表达式 s进行展开。
collect(s):对符号表达式 s合并同类项。
collect(s,v):对符号表达式 s按变量 v合并同类项。
4.符号表达式的化简
MATLAB提供的对符号表达式化简的函数有:
simplify(s):应用函数规则对 s进行化简。
simple(s):调用 MATLAB的其他函数对表达式进行综合化简,
并显示化简过程。
5.符号表达式与数值表达式之间的转换
利用函数 sym可以将数值表达式变换成它的符号表达式。
函数 numeric或 eval可以将符号表达式变换成数值表达式。
9.1.3 符号表达式中变量的确定
MATLAB中的符号可以表示符号变量和符号常量。 findsym
可以帮助用户查找一个符号表达式中的的符号变量。该函
数的调用格式为:
findsym(s,n)
函数返回符号表达式 s中的 n个符号变量,若没有指定 n,则
返回 s中的全部符号变量。
9.1.4 符号矩阵
符号矩阵也是一种符号表达式,所以前面介绍的符
号表达式运算都可以在矩阵意义下进行。但应注
意这些函数作用于符号矩阵时,是分别作用于矩
阵的每一个元素。
由于符号矩阵是一个矩阵,所以符号矩阵还能进行
有关矩阵的运算。 MATLAB还有一些专用于符号
矩阵的函数,这些函数作用于单个的数据无意义。
例如
transpose(s):返回 s矩阵的转置矩阵。
determ(s):返回 s矩阵的行列式值。
其实,曾介绍过的许多应用于数值矩阵的函数,如 diag,triu,tril,inv,det,rank,eig等,也可
直接应用于符号矩阵。
9.2 符号微积分
9.2.1 符号极限
limit函数的调用格式为:
(1) limit(f,x,a):求符号函数 f(x)的极限值。即计算当
变量 x趋近于常数 a时,f(x)函数的极限值。
(2) limit(f,a):求符号函数 f(x)的极限值。由于没有
指定符号函数 f(x)的自变量,则使用该格式时,符
号函数 f(x)的变量为函数 findsym(f)确定的默认自
变量,即变量 x趋近于 a。
(3) limit(f):求符号函数 f(x)的极限值。符号函数 f(x)的变量
为函数 findsym(f)确定的默认变量;没有指定变量的目标
值时,系统默认变量趋近于 0,即 a=0的情况。
(4) limit(f,x,a,'right'):求符号函数 f的极限值。 'right'表示变
量 x从右边趋近于 a。
(5) limit(f,x,a,‘left’):求符号函数 f的极限值。‘ left’表示变量
x从左边趋近于 a。
例 9-1 求下列极限。
极限 1:
syms a m x;
f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a);
limit(f,x,a)
ans =
(1/2*a*exp(sin(a))+1/2*a-exp(tan(a))+1)/a
极限 2:
syms x t;
limit((1+2*t/x)^(3*x),x,inf)
ans =
exp(6*t)
极限 3:
syms x;
f=x*(sqrt(x^2+1)-x);
limit(f,x,inf,'left')
ans =
1/2
极限 4:
syms x;
f=(sqrt(x)-sqrt(2)-sqrt(x-2))/sqrt(x*x-4);
limit(f,x,2,'right')
ans =
-1/2
9.2.2 符号导数
diff函数用于对符号表达式求导数。该函数的一般调用格式
为:
diff(s):没有指定变量和导数阶数,则系统按 findsym函数指
示的默认变量对符号表达式 s求一阶导数。
diff(s,'v'):以 v为自变量,对符号表达式 s求一阶导数。
diff(s,n):按 findsym函数指示的默认变量对符号表达式 s求 n
阶导数,n为正整数。
diff(s,'v',n):以 v为自变量,对符号表达式 s求 n阶导数。
例 9-2 求下列函数的导数。
9.2.3 符号积分
符号积分由函数 int来实现。该函数的一般调用格式为:
int(s):没有指定积分变量和积分阶数时,系统按 findsym函
数指示的默认变量对被积函数或符号表达式 s求不定积分。
int(s,v):以 v为自变量,对被积函数或符号表达式 s求不定积
分。
int(s,v,a,b):求定积分运算。 a,b分别表示定积分的下限和上
限。该函数求被积函数在区间 [a,b]上的定积分。 a和 b可以
是两个具体的数,也可以是一个符号表达式,还可以是无
穷 (inf)。当函数 f关于变量 x在闭区间 [a,b]上可积时,函数
返回一个定积分结果。当 a,b中有一个是 inf时,函数返回
一个广义积分。当 a,b中有一个符号表达式时,函数返回
一个符号函数。
例 9-3 求下列积分。
9.2.4 积分变换
常见的积分变换有傅立叶变换、拉普拉斯变换和 Z
变换。
1.傅立叶 (Fourier)变换
在 MATLAB中,进行傅立叶变换的函数是:
fourier(f,x,t):求函数 f(x)的傅立叶像函数 F(t)。
ifourier(F,t,x):求傅立叶像函数 F(t)的原函数 f(x)。
例 9-4 求函数 y=的傅立叶变换及其逆变换。
2.拉普拉斯 (Laplace)变换
在 MATLAB中,进行拉普拉斯变换的函数是:
laplace(fx,x,t):求函数 f(x)的拉普拉斯像函数 F(t)。
ilaplace(Fw,t,x):求拉普拉斯像函数 F(t)的原函数 f(x)。
例 9-5 计算 y=x3的拉普拉斯变换及其逆变换。
3,Z变换
当函数 f(x)呈现为一个离散的数列 f(n)时,对数列 f(n)进行 z变
换的 MATLAB函数是:
ztrans(fn,n,z):求 fn的 Z变换像函数 F(z)。
iztrans(Fz,z,n):求 Fz的 z变换原函数 f(n)。
例 9-6 求数列 fn=e-2n的 Z变换及其逆变换。
9.3 级 数
9.3.1 级数符号求和
求无穷级数的和需要符号表达式求和函数 symsum,其调用
格式为:
symsum(s,v,n,m)
其中 s表示一个级数的通项,是一个符号表达式。 v是求和变
量,v省略时使用系统的默认变量。 n和 m是求和的开始项
和末项。
例 9-7 求下列级数之和。
9.3.2 函数的泰勒级数
MATLAB提供了 taylor函数将函数展开为幂级数,
其调用格式为:
taylor(f,v,n,a)
该函数将函数 f按变量 v展开为泰勒级数,展开到第 n
项 (即变量 v的 n-1次幂 )为止,n的缺省值为 6。 v的
缺省值与 diff函数相同。参数 a指定将函数 f在自变
量 v=a处展开,a的缺省值是 0。
例 9-8 求函数在指定点的泰勒级数展开式。
9.4 符号方程求解
9.4.1 符号代数方程求解
在 MATLAB中,求解用符号表达式表示的代数方程可由函
数 solve实现,其调用格式为:
solve(s):求解符号表达式 s的代数方程,求解变量为默认变
量。
solve(s,v):求解符号表达式 s的代数方程,求解变量为 v。
solve(s1,s2,…,sn,v1,v2,…,vn),求解符号表达式 s1,s2,…,sn 组
成的代数方程组,求解变量分别 v1,v2,…,vn 。
例 9-9 解下列方程。
9.4.2 符号常微分方程求解
在 MATLAB中,用大写字母 D表示导数。例如,Dy表示 y',
D2y表示 y'',Dy(0)=5表示 y'(0)=5。 D3y+D2y+Dy-x+5=0表
示微分方程 y'''+y''+y'-x+5=0。符号常微分方程求解可以
通过函数 dsolve来实现,其调用格式为:
dsolve(e,c,v)
该函数求解常微分方程 e在初值条件 c下的特解。参数 v描述
方程中的自变量,省略时按缺省原则处理,若没有给出初
值条件 c,则求方程的通解。
dsolve在求常微分方程组时的调用格式为:
dsolve(e1,e2,…,en,c1,…,cn,v1,…,vn)
该函数求解常微分方程组 e1,…,en 在初值条件 c1,…,cn 下的特
解,若不给出初值条件,则求方程组的通解,v1,…,vn 给
出求解变量。
例 9-10 求下列微分方程的解。