第 3 章 matlab 符号计算 using symbolic math toolbox

35
MATLAB 实实实实 实3实 MATLAB 实实实实 Using Symbolic Math Toolbox 3.1 实实实实实实实实 3.2 实实实实实实实实实实 3.3 实实实实实实实实实实实 3.4 实实实实 实实实实实实实实 3.5 实实实实实实 3.6 实实实实实实实

Upload: ehren

Post on 22-Jan-2016

248 views

Category:

Documents


1 download

DESCRIPTION

第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox. 3.1 符号表达式的建立 3.2 符号表达式的代数运算 3.3 符号表达式的操作和转换 3.4 符号极限、微积分和级数求和 3.5 符号积分变换 3.6 符号方程的求解. MATLAB 具有符号数学工具箱 (Symbolic Math Toolbox) 。 符号计算是可以对未赋值的符号对象 ( 可以是常数、变量、表达式 ) 进行运算和处理。 与数值运算的区别 : ※ 数值运算中必须先对变量赋值,然后才能参与运算。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

      第 3章   MATLAB符号计算Using Symbolic Math Toolbox

3.1 符号表达式的建立 3.2符号表达式的代数运算 3.3符号表达式的操作和转换 3.4 符号极限、微积分和级数求和 3.5 符号积分变换 3.6符号方程的求解 

Page 2: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

MATLAB具有符号数学工具箱 (Symbolic Math Toolbox) 。符号计算是可以对未赋值的符号对象 (可以是常数、变量、表达式 )进行运算和处理。与数值运算的区别 :

      ※  数值运算中必须先对变量赋值,然后才能参与运算。   ※ 符号运算无须事先对独立变量赋值,运算结

果以标准的符号形式表达。

Page 3: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

符号运算的功能符号线性代数 (linear algebra)因式分解、展开和简化 (simplification an

d substitution)符号代数方程求解 (solving equations)符号微积分 (Calculus)符号微分方程

Page 4: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.1 符号表达式的建立  3.1.1 创建符号常量

符号常量是不含变量的符号表达式。sym(‘常量’ ) %创建符号常量 sym(常量 ,参数 ) %按某种格式转换为符号常量 说明:参数可以选择为’ d’ 、’ f’ 、’ e’或’ r’ 四种格式,也可省略。 

EX: >>a=sym('sin(2)') >> a=sym(sin(2),'r')

Page 5: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.1.2 创建符号变量和表达式  (Creating Symbolic Variables and Expression)

1. 使用 sym命令创建符号变量和表达式sym(‘ 变量’ , 参数 ) % 把变量定义为符号

对象

2.使用 syms 命令创建符号变量和符号表达式syms(‘arg1’, ‘arg2’, …, 参

数 ) syms arg1 arg2 …,参数 

Page 6: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

例如:>> f1=sym(‘a*x^2+b*x+c’) %创建表达式

>> syms a b c x %创建变量>> f2=a*x^2+b*x+c %创建表达式

>> syms('a','b','c','x') >> f3=a*x^2+b*x+c 符号表达式()中的参数一定要用 ' ' 单引号括起来。

Page 7: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.1.3 符号矩阵 例如,使用 sym命令创建的符号矩阵: >> A=sym('[a,b;c,d]')例如,使用 syms命令创建相同的符号矩阵:>> syms a b c d>> A=[a b;c d]

比较符号矩阵与字符串矩阵 :>> B=‘[a,b;c,d]’ % 创建字符串矩阵>> C=[a,b;c,d] % 创建数值矩阵??? Undefined function or variable 'a'.

Page 8: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.2符号表达式的代数运算 3.2.1符号表达式的代数运算 

由于 MATLAB 采用了重载技术,使得符号表达式的运算符和基本函数都与数值计算中的几乎完全相同 。例如:>> A+2>> A.’>> det(A)>> A^2

例如:>> f=sym('2*x^2+3*x+4')>> g=sym('5*x+6')>> f+g >> f*g

Page 9: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

1. 符号运算中的运算符(1)基本运算符运算符“+”,“-”,“ *”,“ \”,“ /”,“ ^”分别实现符号矩阵的加、减、乘、左除、右除、求幂运算。运算符“ .*”,“ ./”,“ .\”,“ .^”分别实现符号数组的乘、除、求幂,即数组间元素与元素的运算。运算符“′”,“ .′”分别实现符号矩阵的共轭转置、非共轭转置。(2)关系运算符运算符“ = =”、“ ~=”分别对运算符两边的符号对象进行“相等”、“不等”的比较。 

Page 10: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

2. 函数运算(1)三角函数和双曲函数(2) 指数和对数函数(3) 复数函数(4) 矩阵代数命令

Page 11: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.2.2 符号数值任意精度控制和运算

在 Symbolic Math Toolbox中有三种不同的算术运算:数值型:MATLAB的浮点运算。有理数型:Maple的精确符号运算。VPA型:Maple的任意精度运算。

任意精度的 VPA型运算可以使用 digits和 vpa命令来实现。

digits(n) %设定默认的精度S=vpa(s,n) %将 s表示为 n位有效位数的符号对象

Page 12: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.2.3 符号对象与数值对象的转换

将数值矩阵转化为符号矩阵    函数调用格式: sym(A)EX:>> A=[1/3,2.5;1/0.7,2/5]

>> sym(A)

将符号矩阵转化为数值矩阵函数调用格式:  numeric(A)EX:>> a=sym('2/3')

>> b=numeric(a)

Page 13: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.3符号表达式的操作和转换3.3.1符号表达式中自由变量的确定

符号表达式“ f=ax2+bx+c” 中只有一个变量是独立变量: 小写字母 i和 j不能作为自由变量。符号表达式中如果有多个符号变量,则按照以下顺序选择自由变量:首先选择 x 作为自由变量;如果没有 x ,则选择在字母顺序中最接近 x 的字符变量;如果与 x 相同距离,则在 x 后面的优先。大写字母比所有的小写字母都靠后。也可以用 findsym 函数来自动确定。

自由变量的确定原则( The Default Symbolic Variables)

Page 14: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.3.2符号表达式的化简 ( Simplificate)

同一个多项式的符号表达式可以表示成三种形式:多项式形式的表达方式:f(x)=x3+6x2+11x-6 因式形式表达方式:f(x)=(x-1)(x-2)(x-3) 嵌套形式的表达方式:f(x)=x(x(x-6)+11)-6

pretty:给出排版形式的输出结果 。collect:将表达式写成多项式形式 .

3 2 x - 6 x + 11 x - 6

x^3-6*x^2+11*x-6

Page 15: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

horner:将多项式形式写成嵌套形式

factor:将表达式写成因式形式

expand:将表达式写成多项式形式simplify:对表达式进行化简例如:  k=sym('cos(x)^2-sin(x)^2')

simplify(k)simple:寻求表达式的多种简化形式,使之包含

最少数目的字符

-6+(11+(6+x)*x)*x

2*cos(x)^2-1

(x-1)*(x-2)*(x-3)

Page 16: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.3.3 符号表达式的替换( Substitutions)

subs 函数:对符号表达式中符号变量的替换。subs(s)%用给定值替换符号表达式 s中的所有变量subs(s,new)%用 new替换符号表达式 s中的自由变量subs(s,old,new) %用 new替换符号表达式 s中的 old变量例:>> f=sym('x^3-6*x^2+11*x-6')

>> x=5

>> subs(f)

>>subs(f,5)

>>subs(f,’x’,5)

可以用来计算多项式的值,以及化简。

Page 17: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.3.4  求反函数和复合函数1. 求反函数对于函数 f(x) ,存在另一个函数 g(.) 使得 g(f(x))

= x成立,则函数 g(.) 称为函数 f(x) 的反函数。g=finverse(f,v) % 对指定自变量 v的函数 f(v) 求反函数

2. 求复合函数运用函数 compose 可以求符号函数 f(x) 和 g(y) 的复

合函数。compose(f,g,z)% 求 f(x) 和 g(y) 的复合函数 f(g(z))

Page 18: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.3.5 符号表达式的转换 1. 符号表达式与多项式的转换构成多项式的符号表达式 f(x) 可以与多项式系数

构成的行向量进行相互转换, MATLAB 提供了函数 sym2poly 和 poly2sym 实现相互转换。

2. 提取分子和分母如果符号表达式是一个有理分式 ( 两个多项式之

比 ) ,可以利用 numden 函数来提取分子或分母,还可以进行通分。

[n,d]=numden(f)

Page 19: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

EX:提取分子和分母系数。>> f=sym('(1+2*s)/(s^2+2*s+1)')>> pretty(f) 1 + 2 s ------------ 2 s + 2 s + 1>> [n,d]=numden(f)>> n1=sym2poly(n)>> d1=sym2poly(d)

Page 20: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.4  符号极限、微积分和级数求和3.4.1 符号极限( Limits)

【例 3.14 】分别求 1/x 在 0 处从两边趋近、从左边趋近和从右边趋近的三个极限值。

>> f=sym('1/x')>> limit(f) % 对 x 求趋近于 0 的极

限>> limit(f,'x',0) % 对 x 求趋近于 0 的极

限>> limit(f,'x',0,'left') % 左趋近于 0>> limit(f,'x',0,'right') % 右趋近于 0

Page 21: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.4.2 符号微分 ( Differentiation)

函数 diff 是用来求符号表达式的微分。

diff(f) % 求 f对自由变量的一阶微分diff(f,t)% 求 f 对符号变量 t 的一阶微

分diff(f,n)% 求 f对自由变量的 n阶微分diff(f,t,n)% 求 f 对符号变量 t 的 n 阶

微分

Page 22: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.4.3 符号积分( Integration)

积分有定积分和不定积分,运用函数 int 可以求得符号表达式的积分,即找出一个符号表达式 F 使得 diff(F)=f ,也可以说是求微分的逆运算。int(f,’t’) % 求符号变量 t 的不

定积分int(f,’t’,a,b) % 求符号变量 t 的定

积分int(f,’t’,’m’,’n’) % 求符号变量 t

的定积分

Page 23: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.4.4 符号级数 1. symsum 函数( Symbolic Summation)symsum(s,x,a,b) % 计算表达式 s的级数和说明: x为自变量, x省略则默认为对自由变量求

和; s为符号表达式; [a,b] 为参数 x的取值范围。

2. taylor 函数( Taylor Series)taylor(F,x,n) % 求泰勒级数展开说明: x 为自变量, F为符号表达式;对 F进行泰

勒级数展开至 n项,参数 n省略则默认展开前 5项。

Page 24: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.5 符号积分变换 3.5.1 傅里叶变换及其反变换

1. fourier 变换F = fourier(f,t,w)% 求时域函数 f(t) 的 fourier 变换 F说明:返回结果 F是符号变量 w的函数, f为 t的函数。 2. fourier 反变换

f=ifourier (F,w,t) 说明: ifourier 函数的用法与 fourier 函数相同。>> syms t w

>> F=fourier(1/t,t,w) %fourier变换F =i*pi*(Heaviside(-w)-Heaviside(w))

Page 25: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.5.2拉普拉斯变换及其反变换 

1. Laplace 变换F=laplace(f,t,s) % 求时域函数f的 Laplace 变换 F说明:返回结果 F 为 s 的函数,当参数 s 省略,返回

结果 F 默认为 's' 的函数; f 为 t 的函数,当参数 t 省略,默认自由变量为't'。

2. Laplace 反变换f = ilaplace(F,s,t) % 求 F 的 Laplace 反

变换 f>> syms a t s

>> F1=laplace(sin(a*t),t,s) %sinat的 Laplace变换F1 =a/(s^2+a^2)

Page 26: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.5.3 Z 变换及其反变换1. ztrans 函数F = ztrans(f,n,z) % 求时域序列 f 的 Z变换

F说明:返回结果 F是以符号变量 z为自变量;

当参数 n省略,默认自变量为 'n' ;当参数 z省略,返回结果默认为 'z' 的函数。2. iztrans 函数f= iztrans(F,z,n) % 求 F的 z反变换 f>> syms a n z t>> Fz3=ztrans(exp(-a*t),n,z) %e-at的 Z变换Fz3 =exp(-a*t)*z/(z-1)

Page 27: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.6  符号方程的求解3.6.1  代数方程

MATLAB可以用 solve命令给出方程的数值解。solve(‘eq’,’v’)% 求方程关于指定变量的解solve(‘eq1’, ’eq2’,’v1’,’v2’,…) %求方程组关于指定变量的解

例如,解方程:>> solve(‘a*x^2+b*x+c’)

>> solve('a*x^2+b*x+c=0')

>> solve('a*x^2+b*x+c=0','x')

Page 28: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

【例 3.22】求三元非线性方程组的解。>> eq1=sym('x^2+2*x+1');

>> eq2=sym('x+3*z=4');

>> eq3=sym('y*z=-1');

>> [x,y,z]=solve(eq1,eq2,eq3) %解方程组并赋值给 x,y,z

1z*y

43zx

012xx 2

1z*y

43zx

012xx 2

x =-1y =-3/5z =5/3

Page 29: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.6.2  符号常微分方程MATLAB 提供了 dsolve 命令可以用于对符号常微

分方程进行求解。

dsolve(‘eq’,’con’,’v’) % 求解微分方程dsolve(‘eq1,eq2…’,’con1,con2…’,’v1,v

2…’) %求解微分方程组说明:’ con’ 是微分初始条件,可省略;’

v’ 为指定自由变量,省略时则默认为 x 或 t 为自由变量。

y的一阶导数为Dy; y的 n阶导数表示为Dny 。

Page 30: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

EX: y(1)=0, y(0)=0

>> y=dsolve('x*D2y-3*Dy=x^2','x') %求微分方程的通解

y =-1/3*x^3+C1+C2*x^4>> y=dsolve('x*D2y-3*Dy=x^2','y(1)=0,y(0)=0','x')

%求微分方程的特解y =-1/3*x^3+1/3*x^4

22

2

xdx

dy3

dx

ydx

Page 31: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.7  符号函数的可视化3.7.2 图形化的符号函数计算器

在MATLAB命令窗口输入命令“ funtool”,就会出现该图形化函数计算器。 

Page 32: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.8 Maple函数的使用3.8.1访问Maple函数

1. maple函数maple函数用于进行符号运算,并将计算结果返回

到MATLAB的工作空间。maple(MapleStatement) %运行Maple格式的语句MapleSta

tementmaple(fun,arg1,arg2…) %运行以 arg1,arg2…为参数的Ma

ple的 fun函数

2. mfun函数mfun函数用于对Maple中的经典函数进行数值运

算。mfun('fun',p1,p2,…)

Page 33: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

3.8.2 获得Maple的帮助1. mfunlist命令mfunlist命令用来列出能被“mfun”命令计算的经

典特殊Maple函数。

2. mhelp命令mhelp命令用来寻求关于Maple库函数及其调用方

法的帮助:(1) 使用“mhelp index”可以查看Maple的索引目

录。(2) 使用“mhelp index [分类名 ]”可以进一步深

入查看Maple的某个具体类别。

Page 34: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

练习:

确定下面各符号表达式的自由符号变量:1/(sin(t)+cos(w*t))

2*a+theta

2*i+a*j

答案:w

theta

a

Page 35: 第 3 章 MATLAB 符号计算 Using Symbolic Math Toolbox

MATLAB 实用教程

练习:

计算 1*2+2*3+……+n*(n+1)的前 3项的和

>> symsum(k*(k+1),1,3)