第2章 matlab符号运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第2章MATLAB符号计算
在科学研究和工程应用中,除了存在大量的数值计算外,还有对符号进行的运算,MATLAB符号计算是通过集成在MATLAB中的符号运算工具箱来实现的。

MATLAB中的符号运算工具箱是建立在功能强大的Maple软件的基础上,1993年,Math Works公司购买了数学软件Maple的使用权,随后,以其内核作为符号计算引擎,依赖Maple已有的函数库,开发了实现符号计算的两个工具箱:基本符号工具箱和扩展符号工具箱。

应用符号计算功能,可以直接对抽象的符号对象进行各种计算,并获得问题的解析结果。

2.1 符号对象的创建与基本运算
MATLAB数值运算的操作对象是数值,而MATLAB符号运算的操作对象是非数值的符号,通过MATLAB的符号运算功能来求解科学计算中符号数学问题的符号精确表达式精确解,具有极其重要的实用价值。

一、符号对象及其创建
符号对象是Symbolic Math Toolbox定义的一种新的数据类型(sym类型),用来储存字符符号。

符号对象可以是符号常量、符号变量、符号函数以及各种符号表达式(符号数学表达式、符号方程、符号矩阵)等。

创建符号对象的方法有2种:
1 用函数命令sym来创建,调用格式有两种:
S=sym(A) 符号常量的创建 A 是一个数字、数值矩阵或数学表达式,输出的是由数值转换成的符号对象S 。

例如:要把数值67转换为符号对象f,可以输入f=sym(67) 例:将矩阵[1 2 3;4 5 6;7 8 9]
S=sym(‘A ’) 符号变量的创建A 是一个字符串,输出的是将字符串转换成的符号对象S 。

例如:创建S=sym(‘sin(x)’)
2用命令函数syms 来创建,调用格式为syms s1 s2 s3…该函数可建立多个符号变量,是建立符号变量的简洁方法。

注意:此命令函数创建的符号函数同其他方法创建的符号函数效果相同,但不能用来创建符号方程。

二 建立符号表达式
含有符号对象表达式称为符号表达式,建立符号表达式有以下3种方法: 1 用单引号创建 例如:
3
21 x
例如:要创建符号方程 Ax 2+bx+c=0 2 用sym 函数建立符号表达式 U=sym('3*x^2-5*y+2*x*y+6')
3 使用已经定义的符号变量组成符号表达式。

例如:
V=3*^2-5*y+2*x*y+6
创建符号矩阵,例如:
[1/s+x,sin(x),cos(x)^2/(b+x);9,exp(x^2*y^2),log(y)]
(4)符号变量与数值变量的区别
一个非符号变量在参运算前必须赋值,变量的运算实际上是该变量所对应值的运算,其运算结果是一个和变量类型对应的值,而符号变量参与运算前无须赋值,其结果是一个由参与运算的变量名组成的表达式。

a=sym('a'); %定义符号变量a,b,c
>> b=sym('b');
>> c=sym('c');
>> x=5; %定义数值变量x,y,z
>> y=-8;
>> z=11;
>> w=a*a+b*b+c*c %符号运算
w=x*x+y*y+z*z %数值运算
注意:应用sym函数可以定义符号常量,使用符号常量进行代数运算时和数值常量进行的运算不同。

p1=sym('pi');a=sym('4'); >> b=sym('5');c=sym('7'); >> p2=pi;
>> x=4;
>> y=5;z=7;
>> sin(p1/3)
sin(p2/3)
cos((a+b+c)/2)-sin(p1/4) cos((x+y+z)/2)-sin(p2/4)
从命令的执行结果可以看出,用符号常量进行计算更像在进行数学演算,所得到的结果是精确的数学表达式,而数值计算将结果近似为一个有限小数。

2.2符号表达式运算
一符号表达式的四则运算
符号表达式的四则运算和其它表达式的运算并无不同,运算算符也可以用“+”、“-”、“*”、“/”、“^”来实现。

例如实现:
f=2x+x3-5x+e2
f=2x/5x
f=(x2-y2)/(x-y)
二符号表达式的因式分解和展开
a3-b3
(-7x2-8y2)(-x2+3y2)
7x4-13x2y2-23y4+8x4
MATLAB提供了符号表达式的因式分解与展开的函数,函数的调用格式为:
factor(s) 对符号表达式s分解因式
expand(s) 对符号表达式s进行展开
collect(s) 对符号表达式s合并同类项
collect(s,v) 对符号表达式s按变量v合并同类项
四符号表达式的化简:
MATLAB 提供了对符号表达式化简的函数 simplify (s ) 应用函数规则对s 进行化简
simple(s) 调用MATLAB 的其他函数对表达式进行综合化简,并显示化简过程
例如:ln(2x/y) (1-a 2)/(1-a)
函数simple 是用了几种不同的化简工具,然后选择在结果表达式中含有最少字符的那种形式。

例:
x x 2
sin cos -+ 五 符号矩阵
符号矩阵也是一种符号表达式,前面介绍的符号表达式的创建也可以用于符号矩阵。

符号矩阵的算符和阐述与树值运算的算符和函数有相统一的趋势。

我们可以采用前面介绍过的数值矩阵的运算算符和函数调用命令来进行符号矩阵的运算。

1 符号矩阵的四则运算
符号矩阵的加减运算,“+”、“-” 例:设矩阵a=
⎥⎥

⎥⎦

++⎢⎢⎢⎢⎣⎡+3111211x x x x ,b=⎥⎦⎤⎢⎣⎡+012x x
求a 、b 的和与差
a=sym('[1/x,1/(x+1);1/(x+2),1/(x+3)]')
b=sym('[x,1;x+2,0]')
c=a+b
d=a-b
符号矩阵的乘、除法,采用的是“*”、“\”、“/”
例:设矩阵a、b同上题,求a*b;a\b;a/b
符号矩阵的行列式运算、幂运算和指数运算
det(A)求符号矩阵的行列式运算
A^2 符号矩阵的2次幂运算
exp(A) 符号矩阵的指数运算
例:设符号矩阵d=[sinx,cosx;-cosx,sinx2]的行列式运算、二次幂运算和指数运算
符号矩阵的转置、逆和秩
与数值矩阵的上述变换相同
例:设矩阵h=[1/x,cosx;-sinx,x]求该矩阵的转置、逆、秩和迹
2.2符号微积分
2.2.1 符号极限
在MATLAB中求函数极限的函数是limit,(对于极限值没有意义的极限,用NaN来表示,极限值为无穷大,结果为inf)
limit 函数的调用格式为:
limit(f,x,a) 求符号函数f(x)的极限)(lim x f a
x →。

limit(f) 求符号函数f(x)的极限值,默认是自变量趋于0时的
极限值
limit(f,x,a,'right') 求符号函数f 的极限值)(lim x f a
x +→
limit(f,x,a,'left') 求符号函数f 的极限值)
(lim x f a
x -→
例:
(1)a
x e e x x x a x +--+→)
1(2)1(lim tan sin (2)x
x x
t 3)21(lim +∞→ (3))1(lim 2x x x x -++∞

(4) 4
2
2lim 2
2
----
+
→x x x x
解:(1) f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a); (2) f=(1+2*t/x)^(3*x) 2.2 符号导数
diff(s) 没有指定自变量和导数阶数,则系统按函数s 默认的自变量对函数表达式求一阶导数
diff(s,'v',n) 以v 为自变量,对符号表达式s 求n 阶导数 例:
(1)y=e -x +x. 求y' (2) y=cosx 2 求y'',y''' (3)z=y 2sinx 2 22y z ∂∂ 22x z
∂∂ y x z ∂∂∂2
解 :(3) syms x y; z=y^2*sin(x^2); D1=diff(z,'y',2) D2=diff(z,2) D3=diff(diff(z),'y') 2.2.2符号积分
符号积分由函数int 来实现。

该函数的一般调用格式为: int(s) : 对默认变量的被积函数s 求不定积分。

int(s,v) : 以v 为自变量,对被积函数或符号表达式s 求不定积分。

int(s,v,a,b) 求定积分运算,a,b 分别表示定积分的下限和上限 例:求下列积分
(1)dx x
⎰+2
11
(2)dt e t ⎰
(3)dx x

+2
11
(4)⎰
x
xtdt sin 2
4
解:
(1) f=1/(1+x^2);
int(s) (2) f=exp(t) int(f) 2.2.4 积分变换
积分变换就是通过积分运算把一个函数f (原函数)变成另一个函数F(像函数),变换过程是:

=
b
a
dx t x K x f t F ),()()(
其中二元函数K(x,t)称为变换的核,变换的核决定了变换的不同名称。

在一定条件下,像函数F(t)和原函数f(x)间是一一对应的,可以相互转化。

常见的积分变换有傅里叶变换、拉普拉斯变换和Z 变换
1 傅里叶(Fourier )变换
当积分变换的核K(x,t)=e -itx
称积分变换
⎰+∞
∞--=dx e x f t F itx )()(
为傅里叶变换,其逆变换为
⎰+∞
∞-=dt e t F x f ixt )(21)(π
在MATLAB 中,进行傅里叶变换的函数是:
fourier(f,x,t) 求函数f(x)的傅里叶像函数F(t)
ifourie(F,t,x) 求傅里叶像函数F(t)的原函数f(x)
例:求函数y=e-x2的傅里叶变换及其逆变换
2 拉普拉斯(Laplace)变换
拉普拉斯变换在微分方程、信号分析及自动控制方面有广泛的应用。

当积分变换的核为K(x,t)=e -xt ,称积分变换:
⎰+∞
-=0)()(dx e x f t F xt
为拉普拉斯变换,其逆变换为:
⎰+∞
=0)()(dt e t F x f xt
在MATLAB 中,进行拉普拉斯变换的函数是:
laplace(f,x,t) 求函数f(x)的拉普拉斯像函数 F(t)
ilaplace(F,t,x) 求拉普拉斯像函数 F(t)的原函数f(x)
例:计算y=x 3的拉普拉斯变换及其逆变换
2.3 级数
2.3.1 级数符号求和
对无穷级数的和需要用符号表达式求和函数symsum ,其调用格式为:
Symsum(s,v,n,m)
其中s 表示一个级数的通项,是一个符号表达式,v 是求和变量,n 和m 是求和的开始项和总项数。

例:求下列级数之和
(1)....1....914112+++++n
(2)10
1....51311++++
2.3.2 函数的泰勒级数
泰勒级数将一个任意函数表示为一个幂级数, !)()()(0n f a x x f n n n ∑∞=-=
在许多情况下,只需要取幂级数的前有限项来表示该函数。

taylor(f,v,n,a) 将函数f 按变量v=a 展成泰勒级数,展开到第n 项(阶数为n-1阶)
例:求函数在制定点的泰勒级数展开式
(1) 求2211x x x x +-++的12阶泰勒级数展开式
(2) 将ln(x)在x=1处按5阶多项式展开。

2.4 符号方程求解
2.4.1 符号代数方程求解
在MATLAB 中,求符号代数方程可以用函数solve 来实现,其调用格式为:
solve(’s ’, ’v ’):求解符号表达式s 的代数方程,变量为v
solve(’s1’,’s2’,...,’v1’,’v2’,…,’vn ’) :求解符号表达式s1,s2,…sn 组成的代数方程组,求解变量分别为v1,v2,…vn
例:解方程
(1)2121-=++x a x
(2)⎪⎩
⎪⎨⎧=+=+=-+123327222y x z x z y x
3.4.2 符号常微分方程求解 在MATLAB 中,用大写字母D 表示导数。

例如,Dy 表示y ’,D2y 表示y ’’,Dy(0)=5表示y'(0)=5。

符号常微分方程求解可以通过函数dsolve 来实现,其调用格式为:
dsolve(‘e ’,’c ’,’v ’)
该函数求解常微分方程e 在初值条件c 下的特解。

参数v 描述方程中的自变量。

dsolve(‘e1’,’e2’,…,’en ’,’c1’,..,’cn ’,’v1’,…,’vn ’)
该函数求解常微分方程组e1,…en 在初值条件c1,c2,…cn 下的特解
例:
(1) 求2222t y t dt dy +=的通解 (2) 22xy dt dy =当y(0)=1时的特解
(3) ⎪⎪⎩⎪⎪⎨⎧+=-=y x dt
dy y x dt dx 224的通解 (4)求满足条件的二阶常系数齐次微分方程的特解
,0222=++s dt ds dt
s d s|t=0=4,s ’|t=0=-2。

相关文档
最新文档