matlab符号运算及其应用 -...

436
MATLAB 符号运算及其应用 黄忠霖 编著

Upload: others

Post on 14-Oct-2019

40 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

MATLAB 符号运算及其应用

黄忠霖 黄 京 编著

Page 2: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

书书书

摇图书在版编目(悦陨孕)数据

摇酝粤栽蕴粤月符号运算及其应用辕黄忠霖,黄京编著援— 北

京:国防工业出版社,圆园园源援员摇陨杂月晕苑鄄员员愿鄄园猿猿苑园鄄苑

摇Ⅰ郾酝援援援摇Ⅱ郾①黄援援援②黄援援援摇Ⅲ郾计算机辅助计

算 原软件包,酝粤栽蕴粤月摇Ⅳ郾栽孕猿怨员援苑缘

摇中国版本图书馆 悦陨孕数据核字(圆园园猿)第 员员缘缘怨怨号

(北京市海淀区紫竹院南路 圆猿号)

(邮政编码摇员园园园源源)

腾飞胶印厂印刷

新华书店经售

开本 苑愿苑伊员园怨圆摇员辕员远摇印张 圆苑摇远怨苑千字

圆园园源年 员月第 员版摇摇圆园园源年 员月北京第 员次印刷

印数:员—猿缘园园册摇摇定价:猿愿援园园元

(本书如有印装错误,我社负责调换)

Page 3: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

前 言

一、关于 MATLAB 及其工具箱

美国 Mathworks 软件公司开发的 MATLAB(Matrix Laboratory,即“矩阵实验室”)

是目前最优秀的科学计算软件。MATLAB 强大的计算功能,丰富、方便的图形功能以及

编程效率高、扩充能力强、语句简单、易学易用等优点,正是它倍受欢迎的原因。MATLAB

的内容几乎涵盖了所有的数学知识门类:初等数学、高等数学、高等代数、线性代数、

向量代数、复变函数、积分变换、概率统计、模糊数学、计算方法等等,不一而足。凡

是要进行数学运算的人,都可以使用 MATLAB 这个数学工具。

Mathworks 公司还先后开发了许多软件工具包。特别是当今世界上各个学科的很多权

威专家,在各自从事研究的领域里开发了诸多具有特殊功能的软件工具箱,每一个工具

箱都是当今世界上该领域里最顶尖、最优秀的权威计算软件。

MATLAB 的数学运算主要有两类:数值运算与符号运算。MATLAB 具有强大的数值

运算功能。目前,国内出版的关于 MATLAB 的绝大部分书籍,都主要是介绍其数值运算

方面的。

二、关于符号运算

本书是来专门讨论符号运算的。在符号运算中,科学计算的对象从具体的某一数值

抽象化为一般的文字符号,即符号对象。运算时,无须事先对变量赋值,运算所得结果

以标准的符号形式表达,即函数关系式。无论多么复杂,都给出直观的符号形式的解析

解。各种重要函数关系表达式有的就成为不同学科的公式、定理或定律。与数值运算一

样,符号运算也是 MATLAB 的一个极其重要的组成部分。

通过符号运算可以进行如下方面的研究:

① 研究函数(函数关系式或表达式左边的物理量)与哪些自变量(关系式右边的物

理量)有关系,即研究关系式的物理意义。

② 研究函数与(诸多自变量中)指定自变量之间是什么样的函数关系,例如是线性的

还是非线性的关系以及是何种非线性关系,并研究自变量变化时对于函数产生的影响。

③ 研究函数的极值(即极大值与极小值)及其函数极值的条件。

④ 研究函数与指定的自变量之间,当自变量为 0 时的起始变化率与当自变量为某一

值时的特定点的变化率,即研究关系式的一些特殊点及其物理意义。

⑤ 研究函数曲线的凹凸性与拐点,以便深刻掌握函数及其曲线的性态。

⑥ 研究函数关系式左边的物理量的量纲(即单位)与关系式右边的各个物理量各取

何种单位时相等关系是成立的,即研究其量纲平衡。

以上仅仅是简单列举了符号运算的作用,这些作用是显而易见与极容易理解的。不

Page 4: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

IV

难看出,符号运算在学术理论教学、科学理论研究与工程技术应用中,都具有极强的理

论指导意义与极大的实用价值。

符号运算有其自身的一些特殊运算问题。文字符号形式的关系式也有各种不同类型

的计算、转换、化简、求解计算结果、方程求根等运算。符号运算的各类问题中,有的

与数值运算相同或相近,例如加、减、乘、除、乘方、开方,求解方程等等。但是有的

与符号对象相关联而在数值运算中是没法解算的问题,例如对于含文字符号的数学表达

式合并同类项;分解因式;化简函数表达式成特定的形式;分式通分等等,诸如此类的

这些解算问题,对于数学公式结论的推导与分析是必不可少的。

介绍 MATLAB 中的符号运算不得不提到 Maple 代数系统。Maple 是加拿大 Waterloo

University 开发并推出的一个数学软件,它有极强的符号运算功能。Maple 提供数学函数

2000 余种,其涉及范围几乎涵盖了所有数学领域。Maple 系统最主要的功能是符号运算,

其功能强大无与伦比,是举世公认的。

1993 年 Mathworks 公司从 Waterloo University 购得了对 Maple 的使用权,Mathworks

公司便以 Maple 的“内核”为符号计算“引擎”,根据已有的 Maple 函数库,开发了符号

数学工具包(Symbolic Math Toolbox),即用 MATLAB 语言写成的符号计算专用函数。

除此之外,MATLAB 还专门设计了与 Maple 连结的接口文件 maple.m,通过这个接口(实

际上是 MATLAB 的一个专用命令),可以直接调用 Maple 函数库中的函数。这样,MATLAB

就可以执行 Maple 函数库中绝大部分符号运算功能的函数,将 Maple 无与伦比的符号运

算功能为 MATLAB 所用。

毫无疑问,MATLAB 的符号运算功能是来解算符号对象问题的。但不尽然,符号运

算功能也仍然能解算数值对象问题。这如同对于某个公式,将其已知的数据代入公式来

求解得数的过程是完全一样的。将实际数据代入符号运算公式而求得数值解,从这一点

来看,这样的数值计算就是符号运算的应用。MATLAB 的符号运算功能既能解算符号对

象问题,又能解算数值对象问题,所以,MATLAB 的符号运算工具箱兼有数值运算与符

号运算两大功能。

本书主要讨论符号运算及应用的问题,但是在某些情况下,必须要进行数值运算。

首先,并不是所有数学问题都有解析解。例如,圆周率 π 的值就没有解析解。涉及 π 的

有关计算,必须进行数值运算。其次,涉及绘图的问题,必须有具体数量的大小,才能

绘制出具体的图形;再者,有些问题符号运算的结果非常复杂繁琐而不实用,必须在数

量的某种配合下才能有清晰而简单的答案;还有,工程实际的应用问题,绝大多数都

是要进行具体数值计算的。所以,实际上 MATLAB 符号运算与数值计算是密不可分

的。

三、关于 Notebook

需要特别说明的是,MATLAB 系统中有个特殊的软件“Notebook”,它不仅具有 Word

文字处理方面的全部功能,而且又具备 MATLAB 无与伦比的数学解算功能和灵活自如的

计算结果可视化能力。与 Word 相联结后,MATLAB Notebook 就像一个会进行运算的文

稿本,在 Word 的这个文稿本中,可以写作并编辑文字,又可以随意列写并修改纷繁复杂

的数学公式,还可以随时修改并运行 MATLAB 程序且按要求计算并绘制图形曲线。对于

Page 5: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

V

撰写科技著作与学术报告,推导与演算公式,研究与分析论文专著来说,MATLAB 中的

Notebook 是一个简单、方便、高效的工具,具有极大的实用价值。

顺便指出,本书正文的撰写、编辑以及其中 MATLAB 语句、命令与程序的运行,除

开带鼠标操作的图形交互指令以外都是在 Notebook 集成环境下完成的。

四、关于作者撰写本书的原因

目前国内还没有专门介绍 MATLAB 符号运算功能的书籍,作者于 2001 年撰写出版

的《控制系统 MATLAB 计算及仿真》也是全部介绍 MATLAB 数值计算功能的。由上所

述,MATLAB 符号运算功能是如此的重要而实用,所以作者认为有必要将这么好的数学

工具介绍给读者。再加上 MATLAB 具有强大的数值运算功能、独特的仿真功能与会运算

的文稿本 Notebook,于是笔者撰写了这本《MATLAB 符号运算及其应用》。

五、本书内容

如果没有 MATLAB 的基础,有很多读者可能对如何安装与进入 MATLAB、如何运

行程序以及基本的程序设计规则都还不知晓。这样,还是得要另外买一本有关 MATLAB

语言的书,先学学基础内容。这不仅不方便,而且也不经济。基于这个考虑,对于本书,

作者选定了 MATLAB 程序设计语言基础与 MATLAB 符号运算功能及其应用三大部分内

容。全书共分 9 章:第 1、2 章是最新版本的 MATLAB 系统概述与 MATLAB 的程序设计;

第 3 章简介符号运算的基础知识;第 4 章简介 MATLAB 常用图形命令与符号函数的图形

命令;第 5 章介绍 MATLAB 符号微积分运算的应用;第 6 章介绍 MATLAB 矩阵函数运

算及应用;第 7 章介绍 MATLAB 符号方程解算的应用;第 8 章介绍 MATLAB 符号积分

变换与反变换的应用;第 9 章介绍 MATLAB 符号运算在复变函数计算中的应用。

六、本书特点

1. 实用的数学工具

高等数学是自然科学与工程技术的理论研究的重要工具,在高等教育中起着奠基的

作用。本书以高校理工科各专业应学的高等数学、线性代数、积分变换与复变函数等的

内容为基础,以其中数学运算的不同类型算题为主要线索,选择安排了大量的实用例题,

每例都有解题的 MATLAB 参考程序及其答案,内容丰富详实。

2. 典型的实例应用

本书后 5 章是各种符号运算功能的应用。在这些篇章中,作者精心编写了多个学科

里有关数学运算方面的被广泛研究的实用学术算题实例,这些算题都具有极强的参考借

鉴作用与实际应用价值。作者认为必要的地方,还在例题的末尾附加说明,用来交代提

请读者注意的问题。本书例题解题程序都可以作为解算类似算题的公式来使用。

3. 学用紧密结合

全书在叙述方法上,每个章节首先复习有关数学运算问题的相关概念,然后介绍

MATLAB 的有关函数命令及其调用格式,最后,安排了大量的运算实例。通过各章的学

习,使读者了解、熟悉并掌握 MATLAB 符号运算功能,达到用以解算科学与工程实际问

题的目的。

Page 6: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

VI

4. 高深的数学通俗易懂

本书力求文字叙述清楚,概念阐述准确,深入浅出,通俗易懂,以便自学。

七、本书阅读对象

MATLAB 符号运算功能,对于经常完成各理工科课程作业、课程设计、毕业设计或

论文的高校学生,可以用来计算、检查校正作业、撰写设计书或论文;对于进行理论教

学的高校教师,可以用来编写课程教案、演算推导学术公式、撰写论文与著作;对于从

事科学研究的科研工作者,可以用来推导与演算公式与撰写科研报告;对于进行准确工

程计算的工程技术人员,可以用来计算、检查校正并撰写工程设计书等等。所以本书介

绍的 MATLAB 符号运算功能确是一个现代实用而高效的先进工具,掌握这个工具并学会

使用它,必将使您的工作面目一新。

在本书编写过程中,得到了左俊、汤见明、梁树声、王心海、白洛、蒋泰荣、张洪、

陈浩、夏浩先、刘福、关大海、盛和平、陈培敦、马男朋、姜迎春、李德阳、彭大臣、

戴同龄、周年庆、吴有方、王国君、孙重任、魏家常、申立方、杨本山等同志的关爱、

大力帮助与支持,在此一并表示衷心感谢。

由于时间仓促,加上作者学识水平有限,书中难免有错误与疏漏之处,恳请广大读

者批评指正。

作 者 2003年10月

Page 7: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

目 录

第 1 章 MATLAB 系统概述 .................................................................................................... 1

1.1 MATLAB 6.5 安装与启动 ......................................................................................... 1

1.1.1 MATLAB 6.5 的安装 ...................................................................................... 1

1.1.2 Notebook 的安装 ............................................................................................ 4

1.1.3 MATLAB 6.5(即 MATLAB R13)的启动 ....................................................... 6

1.1.4 Notebook 的启动 ............................................................................................ 7

1.2 MATLAB 6.5 的系统界面 ......................................................................................... 7

1.2.1 MATLAB 6.5 的系统界面 .............................................................................. 8

1.2.2 MATLAB 6.5 菜单项命令 .............................................................................. 8

1.2.3 MATLAB 6.5 工具栏按钮 ............................................................................ 18

1.2.4 MATLAB 6.5 系统界面的窗口 .................................................................... 18

1.2.5 Start 开始按钮............................................................................................... 20

1.3 MATLAB 6.5 的内容及其查找 ............................................................................... 21

1.3.1 MATLAB 6.5 的内容 .................................................................................... 21

1.3.2 MATLAB 6.5 的内容查找 ............................................................................ 23

1.3.3 MATLAB 6.5 的 Work 子目录 ..................................................................... 28

1.4 MATLAB 的文字处理工具 Notebook .................................................................... 28

1.4.1 Notebook 简介 .............................................................................................. 28

1.4.2 Notebook 菜单命令简介............................................................................... 28

1.4.3 Notebook 的使用 ......................................................................................... 29

1.4.4 Notebook 使用的几个问题.......................................................................... 33

第 2 章 MATLAB 程序设计 .................................................................................................. 34

2.1 M 文件、MATLAB 函数与 MATLAB 程序 .......................................................... 34

2.1.1 M 文件........................................................................................................... 34

2.1.2 MATLAB 函数.............................................................................................. 34

2.1.3 MATLAB 命令文件或程序 .......................................................................... 37

2.2 MATLAB 程序设计基础 ......................................................................................... 38

2.2.1 MATLAB 程序设计基本规则 ...................................................................... 38

2.2.2 表达式、表达式语句与赋值语句 ............................................................... 39

2.2.3 程序流程控制语句 ....................................................................................... 40

2.2.4 程序流程控制指令 ....................................................................................... 46

2.3 MATLAB 程序的交互式、调试与警示指令 ......................................................... 47

Page 8: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

VIII

2.3.1 MATLAB 程序的交互式指令 ...................................................................... 47

2.3.2 MATLAB 程序的调试指令 .......................................................................... 48

2.3.3 MATLAB 程序的常用警示指令 .................................................................. 49

第 3 章 符号运算的基础知识 ............................................................................................... 50

3.1 MATLAB 符号运算入门 ......................................................................................... 50

3.2 MATLAB 符号运算的几个基本概念 ..................................................................... 53

3.2.1 符号对象 ....................................................................................................... 53

3.2.2 创建符号对象与函数命令 sym( )、syms( )与 class( ) ................................ 53

3.2.3 符号常量 ....................................................................................................... 54

3.2.4 符号变量 ....................................................................................................... 55

3.2.5 符号表达式、符号函数与符号方程 ........................................................... 56

3.2.6 函数命令 findsym( )...................................................................................... 57

3.2.7 数组、矩阵与符号矩阵 ............................................................................... 57

3.3 MATLAB 符号对象的基本运算 ............................................................................. 59

3.3.1 MATLAB 的特殊变量与常量 ...................................................................... 59

3.3.2 MATLAB 的基本函数 .................................................................................. 59

3.3.3 MATLAB 的符号运算符 .............................................................................. 60

3.3.4 MATLAB 的特殊运算符 .............................................................................. 60

3.3.5 MATLAB 符号表达式的书写 ...................................................................... 60

3.3.6 MATLAB 符号对象的基本运算 .................................................................. 61

3.4 MATLAB 符号运算的基本内容 ............................................................................. 64

3.4.1 符号变量代换及其函数 subs( ).................................................................... 64

3.4.2 符号对象转换为数值对象的函数 double( )、digits( )、vap( )、

numeric( ) ...................................................................................................... 65

3.4.3 MATLAB 符号表达式的化简 ...................................................................... 67

3.4.4 MATLAB 符号运算的其它几个函数 .......................................................... 72

3.5 MATLAB 两种特定的符号函数运算 ..................................................................... 73

3.5.1 复合函数的运算与函数命令 compose ( ).................................................... 73

3.5.2 反函数的运算与函数命令 finverse ( ) ......................................................... 74

3.6 MATLAB 符号微积分运算 ..................................................................................... 75

3.6.1 MATLAB 符号极限运算 .............................................................................. 76

3.6.2 MATLAB 符号函数微分运算 ...................................................................... 79

3.6.3 MATLAB 符号函数积分运算 ...................................................................... 81

3.6.4 符号求和函数与 taylor(泰勒)级数展开函数............................................... 87

3.7 MATLAB 符号矩阵及其运算 ................................................................................. 92

3.7.1 符号矩阵的运算符 ....................................................................................... 93

3.7.2 符号矩阵的建立与访问 ............................................................................... 93

3.7.3 符号矩阵的基本运算 ................................................................................... 97

Page 9: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

IX

3.7.4 符号矩阵的化简 ......................................................................................... 101

3.7.5 矩阵微分与积分 ......................................................................................... 105

3.7.6 矩阵的 Laplace 变换................................................................................... 107

3.8 MATLAB 符号方程求解 ....................................................................................... 108

3.8.1 方程求解的有关概念 ................................................................................. 108

3.8.2 MATLAB 符号代数方程求解 .................................................................... 108

3.8.3 MATLAB 符号微分方程求解 .....................................................................112

3.9 MATLAB 符号积分变换 ....................................................................................... 125

3.9.1 Fourier 变换与 Fourier 反变换 ................................................................... 125

3.9.2 Laplace 变换与反变换............................................................................... 133

3.9.3 z 变换与 z 反变换....................................................................................... 147

3.10 MATLAB 符号函数图形计算器 FUNTOOL ..................................................... 155

3.10.1 符号函数图形计算器的界面 ................................................................... 155

3.10.2 符号函数图形计算器的输入框操作 ....................................................... 156

3.10.3 符号函数图形计算器的按钮操作 ........................................................... 156

第 4 章 MATLAB 常用图形命令与符号函数的图形命令................................................. 159

4.1 MATLAB 的常用图形命令 ................................................................................... 159

4.1.1 绘图函数 plot( ) .......................................................................................... 159

4.1.2 绘图坐标系的调整 ..................................................................................... 160

4.1.3 图形标注 ..................................................................................................... 161

4.1.4 多次重叠绘制图形 ..................................................................................... 163

4.1.5 图形窗口的分割 ......................................................................................... 167

4.2 MATLAB 的特殊坐标绘图函数 ........................................................................... 167

4.2.1 对数坐标曲线 ............................................................................................. 167

4.2.2 极坐标曲线 ................................................................................................. 169

4.2.3 双 y 轴坐标曲线 ......................................................................................... 170

4.2.4 复数的图形曲线 ......................................................................................... 170

4.3 MATLAB 离散数据与步进图形的绘图函数 ....................................................... 171

4.3.1 MATLAB 绘制离散数据图形的函数命令 stem( ) .................................... 171

4.3.2 MATLAB 绘制步进图形的函数命令 stairs( ) ........................................... 173

4.4 MATLAB 符号函数的图形命令 ........................................................................... 174

4.4.1 符号函数的简单绘图函数 ezplot( ) ........................................................ 174

4.4.2 符号函数的绘图函数 fplot( ) ..................................................................... 178

第 5 章 MATLAB 符号微积分运算的应用 ........................................................................ 180

5.1 MATLAB 符号极限运算的应用 ........................................................................... 180

5.1.1 用函数极限定义几个高等数学的概念 ..................................................... 180

5.1.2 用函数极限定义几个物理学的概念 ......................................................... 181

Page 10: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

X

5.1.3 用函数极限定义狄拉克(Dirac)函数 .......................................................... 182

5.1.4 MATLAB 符号函数极限运算在自动控制领域的几例应用 .................... 182

5.2 MATLAB 符号函数微分运算的应用 ................................................................... 185

5.2.1 MATLAB 符号函数极大值与极小值计算 ................................................ 186

5.2.2 函数曲线上某点斜率计算的应用 ............................................................. 196

5.2.3 函数曲线单调增减性判断 ......................................................................... 198

5.2.4 函数曲线凹凸性判定与拐点计算 ............................................................. 200

5.3 MATLAB 符号函数积分计算的应用 ................................................................... 202

5.3.1 平面图形面积的计算 ................................................................................. 202

5.3.2 立体体积的计算 ......................................................................................... 205

5.3.3 平面曲线弧长的计算 ................................................................................. 207

5.3.4 积分在物理学与力学上的几例应用 ......................................................... 209

5.3.5 正弦交流电的平均值与有效值的计算 ..................................................... 210

5.3.6 晶闸管整流输出电压的计算 ..................................................................... 213

5.4 函数的 Taylor 级数展开式在近似计算中的应用 ................................................ 217

第 6 章 MATLAB 符号矩阵函数运算及应用 .................................................................... 219

6.1 矩阵函数运算在线性代数中的应用 .................................................................... 219

6.1.1 矩阵函数 ..................................................................................................... 219

6.1.2 矩阵运算在线性代数中的应用 ................................................................. 223

6.2 矩阵运算在线性控制系统状态空间分析中的应用............................................. 244

6.2.1 控制系统状态空间分析的几个基本概念 ................................................. 244

6.2.2 系统状态方程的解 ..................................................................................... 246

6.2.3 系统状态方程的线性变换 ......................................................................... 249

6.2.4 矩阵运算在线性系统的可控性与可观性分析中的应用.......................... 257

6.2.5 矩阵运算在系统状态反馈与状态观测器分析中的应用.......................... 268

6.2.6 矩阵运算在系统稳定性分析中的应用 ..................................................... 280

6.3 线性二次型最优控制的 MATLAB 实现 .............................................................. 286

6.3.1 线性二次型最优控制的基本概念 ............................................................. 286

6.3.2 连续系统线性二次型最优控制的 MATLAB 实现 ................................... 289

6.3.3 离散系统线性二次型最优控制的 MATLAB 实现 ................................... 292

6.3.4 最优观测器的 MATLAB 实现 ................................................................... 297

6.3.5 线性二次型 Guass 最优控制的 MATLAB 实现 ....................................... 301

第 7 章 MATLAB 符号方程解算的应用 ............................................................................ 305

7.1 MATLAB 符号代数方程解算的应用 ................................................................... 305

7.1.1 分式方程求解 ............................................................................................. 305

7.1.2 无理方程求解 ............................................................................................. 307

7.1.3 符号代数方程求解应用题 ......................................................................... 309

Page 11: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

XI

7.2 MATLAB 符号超越方程解算的应用 ................................................................... 313

7.2.1 指数方程求解及应用 ................................................................................. 313

7.2.2 对数方程求解及应用 ................................................................................. 316

7.2.3 三角方程求解及应用 ................................................................................. 319

7.3 MATLAB 符号微分方程解算的应用 ................................................................... 322

第 8 章 MATLAB 符号积分变换与反变换的应用............................................................. 337

8.1 Fourier 变换与反变换运算的应用........................................................................ 337

8.1.1 求频谱函数及绘制频谱图 ......................................................................... 337

8.1.2 相关函数与能量谱密度 ............................................................................. 348

8.2 Laplace 变换与 Laplace 反变换运算的应用 ........................................................ 351

8.2.1 计算用图形表示的函数的 Laplace 变换 ................................................... 351

8.2.2 微分方程的 Laplace 变换解法................................................................... 357

8.2.3 求线性控制系统的传递函数 ..................................................................... 365

8.2.4 卷积与 Laplace 变换的卷积定理的应用 ................................................... 376

8.3 z 变换与 z 反变换运算的应用.............................................................................. 381

8.3.1 离散控制系统的有关概念 ......................................................................... 381

8.3.2 差分方程的 z 变换解法.............................................................................. 381

8.3.3 求离散控制系统的脉冲传递函数 ............................................................. 384

第 9 章 MATLAB 符号运算在复变函数计算中的应用..................................................... 390

9.1 复数与复矩阵的生成 ............................................................................................ 390

9.1.1 复数的概念 ................................................................................................. 390

9.1.2 MATLAB 关于复变量的函数命令 ............................................................ 391

9.1.3 复数的生成与创建复矩阵 ......................................................................... 392

9.2 复数的 MATLAB 符号运算 .................................................................................. 393

9.2.1 复数的几何表示 ......................................................................................... 393

9.2.2 复数代数运算的 MATLAB 实现 ............................................................... 395

9.2.3 复数乘幂与方根运算的 MATLAB 实现 ................................................... 398

9.2.4 复数指数与对数运算的 MATLAB 实现 ................................................... 399

9.2.5 复数三角函数与双曲函数及其反函数运算的 MATLAB 实现 ............... 401

9.3 MATLAB 符号运算在正弦交流电路计算中的应用 ........................................... 404

9.3.1 有关正弦交流电的几个问题 ..................................................................... 404

9.3.2 电阻、电感、电容三种电路元件电压与电流的复数关系...................... 406

9.3.3 电阻、电感、电容串联电路计算的 MATLAB 实现 ............................... 407

9.3.4 电阻、电感、电容并联电路计算的 MATLAB 实现 ................................411

9.3.5 电阻、电感、电容混联电路(或复杂电路)计算的 MATLAB 实现......... 412

9.3.6 三相正弦交流电路计算的 MATLAB 实现 ............................................... 415

9.4 在自动控制系统的频率特性计算中的应用 ........................................................ 417

Page 12: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

XII

9.4.1 自动控制系统的频率特性与复数计算的关系.......................................... 417

9.4.2 自动控制系统典型环节频率特性计算的 MATLAB 实现 ....................... 417

9.5 留数 ........................................................................................................................ 420

9.5.1 留数的概念 ................................................................................................. 420

9.5.2 计算留数的 MATLAB 函数命令 ............................................................... 421

9.5.3 计算留数的应用 ......................................................................................... 422

参考文献 ................................................................................................................................. 424

Page 13: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

第 1 章 MATLAB 系统概述

内 容 提 要 近几年 MATLAB 有了快速的发展。1999 年 Math Works 公司推出的 MATLAB 5.3

版,比老版本有了很大的改进。在 2001 年公司推出 MATLAB 6.0 版后不久,Math

Works 公司又于 2002 年将其升级到了 MATLAB 6.5。MATLAB 是 20 世纪末至今的

大型科学工程计算软件的优秀代表。经历了 10 多年的补充、完善与几个版本的升级

换代,它已经发展成为一个内容极为丰富的庞大系统。本章共分 4 节:1.1 节介绍了

MATLAB 6.5 的安装与启动;1.2 节介绍了 MATLAB 6.5 的系统界面;1.3 节介绍了

MATLAB 6.5 的内容及其查找;1.4 节介绍了 MATLAB 的文字处理工具 Notebook。

通过本章学习,能使读者对 MATLAB 6.5 有初步的了解,并达到能够进入与使用该

系统的目的。

1.1 M A T LA B 6.5 安装与启动

本节主要介绍 MATLAB 6.5 的安装与启动及其进入环境。MATLAB 6.5 的安装并不复杂,

安装步骤与老版本相似,只要按照安装过程中的提示逐一操作,就能安装成功。启动 MATLAB

6.5 也很简单容易。启动 MATLAB 6.5 后,就会看到它精彩的界面以及琳琅满目的内容,由此

读者会逐渐熟悉并掌握 MATLAB 系统。

1.1.1 MATLAB 6.5 的安装

MATLAB 6.5 比 MATLAB 的老版本提供了更多、更强的新功能和更全面、更方便的联机

帮助信息。当然,MATLAB 6.5 较之以前的版本,对于软、硬件的要求也更高。

MATLAB 6.5 可以安装到 IBM 或与之完全兼容的带数学协处理器的 Intel 486、Pentium 及

其以上的 PC 机上。

1.MATLAB 6.5 对 PC 机系统的资源要求

(1) Microsoft Windows 95(或 98 或 2000)或 Microsoft Windows NT 的操作系统;

(2) 推荐使用 16 倍速以上的光驱;

(3) 至少 8 位或以上显示器适配卡和至少能显示 256 色的彩色显示器;

(4) 推荐使用 128 MB 以上内存储器;

(5) 安装声卡;

(6) 如果用户想安装 Notebook,计算机里需先安装 Microsoft Word 97、Microsoft Word 2000

或者 Microsoft Word 2002 (XP)中的任何一种。

2.MATLAB 6.5 的安装过程

(1) 启动计算机后,将 MATLAB 6.5 的光盘放入光驱中。如果操作系统为 Windows 95(或

Page 14: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

2

Windows98 或 Windows2000),会立即自动运行 MATLAB 6.5 安装程序。也可以在图标【我的

电脑】中双击 MATLAB 6.5 的 setup 安装图标,接着显示如图 1-1 所示的欢迎进入 Math Works

的 Release 13 的安装工具,开始启动 MATLAB 6.5 的安装程序。

(2) 安装程序自动打开 Math Works 公司的安装工具(即图 1-1)后,按下【Next】按钮即继

续安装。

(3) 安装程序自动进入注册对话框,用户在相应的编辑框内输入产品注册码,然后按下

【Next】按钮继续安装。

(4) 用户认可 Math Works 公司的软件协议后,继续在用户名称与公司名称的编辑框内输

入用户名称与公司的相关信息。而后按下【Next】按钮继续安装。

图 1-1 Math Works 公司的软件安装工具界面

(5) 安装程序会自动打开 MATLAB 6.5 安装内容选择对话框(图 1-2),MATLAB 的组件、

安装目录路径以及安装所需要的磁盘空间等信息均显示在图中。在项目 1 下的编辑框内输入

安装的路径与目录,或点击【Browse】按钮,以浏览、选择并改变 MATLAB 的安装路径与子

目录。对于项目 2 下的 3 个单选钮可以选择仅安装系统或仅安装文件或系统文件都安装。在

项目 3 下的 2 个单选钮可以选择安装文件的语种:英语或英语与日语。对项目 4 下的多个复

选框可以勾选要安装的组件。

图 1-2 MATLAB 6.5 安装目录路径与组件选择界面

Page 15: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

3

在图 1-2 中,当移动下部的滚动条到最右端时,还显示全部安装 MATLAB 6.5 时所需要

的磁盘空间(约 1320MB)。按下【Help】按钮即可获得相关的帮助;按下【Back】按钮可返回

到上一步;按下【Cancel】按钮即可退出安装;按下【Next】按钮即可继续安装。在安装的任

何步骤,这 4 个按钮的作用均同此。

在项目 4 下用复选框勾选要安装的组件的细目,还可以在 MATLAB 6.5 光盘的 readme-

记事本中看到(参见 1.3 节)。

(6) 安装完成时,有 MATLAB R13 ( 即 MATLAB 6.5 ) 安装成功的提示界面,如图 1-3

所示。用单选钮选择“立即重新启动计算机”或“不立即重新启动计算机”,然后再按下【Finish】

按钮,则安装过程即告结束,同时在 Windows 的操作桌面上生成 MATLAB 快捷图标。

图 1-3 安装完成的提示界面

安装完后,MATLAB 6.5 系统的标识界面如图 1-4 所示。

图 1-4 MATLAB 6.5 系统的标识界面

3.MATLAB 6.5 的卸载

当需要将 MATLAB 6.5 删除时,则要按照要求对其进行卸载,即要执行卸载程序。有多

条路径执行卸载程序,现在介绍其中的一种。

在安装 MATLAB 6.5 的路径下打开 MATLAB 6.5 子目录下的“uninstall”文件夹(如图 1-5

所示),鼠标左键双击“uninstall”图标,便立即执行系统的卸载程序。

Page 16: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

4

图 1-5 打开 MATLAB 6.5 子目录下的“uninstall”文件夹

进入卸载状态即执行卸载程序,当卸载完毕(如图 1-6 所示),按下【Finish】按钮卸载程

序即告结束。

图 1-6 卸载状态

1.1.2 Notebook 的安装

需要说明的是,MATLAB 6.5 与 Word 组合成的中文 Notebook 字处理软件环境,作为

MATLAB 的一个组成部分,是需要另外特别安装的,并且 6.5 版与 MATLAB 所有老版本的

Notebook 的安装都不相同。

MATLAB Notebook 所需要的系统环境包括两个系统软件:

Microsoft Word 97、Microsoft Word 2000 或者 Microsoft Word 2002 (XP);

MATLAB 5.2 或 MATLAB 6.0 或 MATLAB 6.5。

当安装 MATLAB 5.2 或老版本时,Notebook 的安装是在 MATLAB 的安装过程中进行的。

即在其安装过程进行到 MATLAB 主体和工具箱安装完毕时,安装程序将询问用户是否安装

Notebook,只需按照提示步骤一步一步输入信息即可完成 Notebook 的安装。

MATLAB 5.3 或 MATLAB 6.0 或 MATLAB 6.5 中 Notebook 的安装是借助于执行函数命令

实现的。

1.MATLAB 5.3 或 MATLAB 6.0 的 Notebook 安装

MATLAB 5.3 或 6.0 的 Notebook 的安装是在 MATLAB 安装完成后进行的。Notebook 的

安装是借助 notebook.m 函数实现的。Notebook 安装的具体步骤如下:

(1) 启动 MATLAB 6.0(或 MATLAB 5.3),打开 MATLAB 命令窗口。

(2) 在 MATLAB 命令窗口中运行函数命令“notebook -setup”(请注意 notebook 后有空格

与‘-’号),按回车键后,有如图 1-7 所示的提示。

Page 17: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

5

图 1-7 命令窗口中运行“notebook -setup”

(3) 在“Microsoft Word Version:”后,回答其版本号。如果用户计算机上安装的是 Microsoft

Word 97 或者是 Microsoft Word 2000,回答时均可输入不带括号的“2”,按回车键后,则出现

如下提示:

You will be presented with a dialog box. Please use it to select your copy of the Microsoft

Word 97 executable (winword.exe).

Press any key to continue... (4) 按任意键,弹出如图 1-8 所示的对话框,供用户查询并找出 Winword.exe 文件所在的

路径,当确认找到该文件后,即选中“Winword.exe”,并按下【打开】按钮( 如果没有安装完

成的提示可重复这一步骤的操作)。此时,MATLAB 命令窗口即给出安装完成的提示:

Notebook setup is complete.

图 1-8 用户确认“Winword.exe”文件所在路径

2.MATLAB 6.5 的 Notebook 安装

与 MATLAB 6.0 版本不同,MATLAB 6.5 的 Notebook 的安装虽然也是在 MATALB 安装

完成后借助 notebook.m 函数实现的,但是安装过程却简化了。

MATLAB 6.5 的 Notebook 安装的具体步骤如下:

(1) 启动 MATLAB 6.5,打开 MATLAB 命令窗口。

(2) 在 MATLAB 命令窗口中输入函数命令“notebook -setup”(仍须注意 notebook 后有空

格与‘-’号),按回车键后,有如图 1-9 所示的提示。

Page 18: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

6

图 1-9 MATLAB 6.5 的 Notebook 安装

(3) 在“Microsoft Word Version:”后,回答其版本号。对于作者的计算机,回答即输入

不带括号的“2”。按回车键后,MATLAB 命令窗口即给出 Notebook 安装完成的提示(参看图

1-9):Notebook setup is complete.

1.1.3 MATLAB 6.5(即 MATLAB R13)的启动

当 MATLAB 及其 Notebook 成功安装完毕后,即可运行 MATLAB 6.5。MATLAB 的启动

有三种方法。

1.MATLAB 6.5 的图标快捷启动方式

在 Windows 98 (或 2000)的操作桌面上,双击其快捷图标即可启动 MATLAB。

2.MATLAB 6.5 的菜单启动方式

在 Windows 98 (或 2000)的操作桌面上(参见图 1-10),点击【开始】按钮,选择【程序】

选项,从其下拉的菜单中再搜寻并选择【MATLAB 6.5】选项,从其下拉菜单中再双击【MATLAB

6.5】选项,即可启动 MATLAB。

图 1-10 菜单方式启动 MATLAB 6.5

Page 19: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

7

3.MATLAB 6.5 随 Word 文件打开启动方式

在已经启用 M-book 模板,即主菜单栏含有菜单项【Notebook】的 Word 窗口里,若已经

有用户开发或编辑过的 Word 文件,那么在打开该文件时,就相应地启动了 MATLAB。

1.1.4 Notebook 的启动

安装 Notebook,实质上是在 Word 系统中,添加 M-book.dot 模板。

所谓启动 Notebook,就是启动带 M-book.dot 模板的 Word,即从不带【Notebook】主菜

单的 Word 常规窗口变成已启用 M-book.dot 模板的 Word 窗口,此时 Word 窗口已增添了

【Notebook】主菜单项,如图 1-11 所示。

图 1-11 Notebook 启动成功的 Word 界面

Notebook 有 3 种启动方法:从 MATLAB 中启动 Notebook;从 Word 中启动;随 Word 文

件的打开而启动。

第一种方法很简单。在MATLAB命令窗口里,输入“notebook”命令,回车后(即运行

该命令),即有如图1-11所示的Word 界面,主菜单上有【Notebook】菜单项,说明启动成功。

第二种方法稍微复杂些。在Windows 下启动 Word时,在主菜单的【文件】菜单项的下

拉菜单中选择【新建】子项命令,即有图1-12所示的“新建”对话框,选中“M-book.dot”图

标,按下【确定】按钮,同样有如图1-11所示的Notebook启动成功的Word界面。

图 1-12 在 Word 下创建 M-book 模板启动 Notebook

第三种方法是随已启用 M-book.dot 模板的 Word 文件的打开而启动 Notebook。

1.2 M A T LA B 6.5 的系统界面

MATLAB 既是一种高级计算机语言,又是一个编程环境。MATLAB 的系统界面,通常是

Page 20: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

8

指这个软件系统所具有的各种界面及这些界面里的诸多菜单命令、工具栏按钮与对话框,通

过对其操作,用来运行并管理系统:生成、编辑与运行程序,管理变量与工作空间, 输入输

出数据与相关信息以及生成与管理 M 文件等等。本节将介绍 MATLAB 6.5 的系统界面、系统

菜单项命令、系统工具栏按钮、系统界面的窗口、Start 开始按钮等。

1.2.1 MATLAB 6.5 的系统界面

MATLAB 6.5 的系统界面如图 1-13 所示。在图中,最上面有“MATLAB ”标题,标题

栏的右边从左到右依次为窗口最小化、缩放和关闭按钮。标题栏下是条形主菜单,主菜单下

是工具栏按钮与设置当前目录(Current Directory)的弹出式菜单框及其右侧的查看目录树的按

钮。在工具栏下的大窗口就是 MATLAB 的主窗口,在大窗口里设置有 4 个小窗口(这是桌面

平台的缺省设置):“Workspace”、“Current Directory”、“Command History”与“Command

Window”。在最下方是“Start”开始按钮。

图 1-13 MATLAB 6.5 的系统界面

1.2.2 MATLAB 6.5 菜单项命令

条形主菜单有【文件(File)】、【编辑(Edit)】、【查看(View)】、【网络(Web)】、【窗口(Window)】、

【帮助(Help)】等 6 个菜单项,参见图 1-14。

图 1-14 MATLAB 6.5 的【File】下拉菜单命令

Page 21: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

9

1.File(文件)菜单

点击菜单栏上的【File】菜单命令,就会弹出下拉菜单(图 1-14),其菜单项有:【New】、

【Open】、【Close Command Window】、【Import Data】、【Save Workspace As】、【Set Path】、

【Preferences】、【Page Setup】、【Print】、最近打开过的带路径的 M 文件名、【Exit MATLAB】。

现在来介绍其中几个子菜单项命令的作用。

(1) 【New】 这是建立新文件命令。执行后下拉菜单有 4 项子菜单命令:【M-file】、【Figure】、

【Model】和【GUI】。

【M-file】命令用于打开 MATLAB 的 M 文件编辑/调试器,并自动打开一个空白 M 文件

即“Untitled”窗口(图 1-15);通过 M 文件编辑/调试器,用户可以新建或编辑已有的 M 文件,

还可调试 MATLAB 程序。

图 1-15 MATLAB 6.5 的【M-file】窗口

【Figure】命令用来建立一个空白图形窗口。MATLAB6.5 的图形窗口(图 1-16)比以前

的版本增加了许多新功能。

图 1-16 MATLAB 6.5 的【Figure】窗口

【Model】命令用于自动打开 SIMULINK 仿真库(参见参考文献[28]),并打开一个用

于建立、编辑与运行仿真新模型的窗口“untitled”,如图 1-17 所示。对比图 1-15,虽标题名

称相同,但第一个字符不同,窗口功能不同,而且主菜单与工具栏也有差别。

图 1-17 MATLAB 6.5 的【Model】窗口

【GUI】命令用于创建与打开图形用户。

(2) 【Open】 这是打开文件命令。执行该命令时,MATLAB 6.5 将打开默认子目录“work”

的【Open】对话框(参见图 1-18)。用户可以在对话框中搜寻或更改要打开的 MATLAB 文件所

在的路径,进而选中文件并将其打开。

(3)【Close Command Window】(或【Close Workspace】或【Close Command History】或

【Close Current Directory】) 这是关闭小窗口命令。执行该命令时即关闭命令小窗口(或工作

Page 22: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

10

图 1-18 MATLAB 6.5 的【Open】窗口

空间小窗口或历史小窗口或当前目录小窗口)。在大窗口里选中哪个小窗口,在菜单里就显示

关闭哪个小窗口。

(4)【Save Workspace As】 该命令用来保存 MATLAB 文件,该命令使用二进制的 MAT

文件保存工作空间的内容。执行该项命令将打开一个对话框“Save to MAT-File”,在该框

中,有保存文件的“MATLAB 6.5\work”存储路径和子目录,即以后缀为.mat 的命名文件对

当前工作空间的内容在该处进行保存。

(5)【Set Path】 这是 MATLAB 6.5 搜索路径命令。执行该命令,系统则打开如图 1-19

所示的搜索路径对话框。

图 1-19 MATLAB 6.5【Set Path】窗口

Set Path 窗口包括两组按钮控件与一个列表框,列表框中所列出的就是 MATLAB 所有的

搜索路径。窗口左侧从上到下 7 个按钮的功能分别是:

【Add Folder】 添加忽略子目录的文件夹;

【Add With Subfolders】 添加带子目录的文件夹;

【Move to Top】 将选中的目录移动到搜索路径的顶端;

【Move Up】 将选中的目录在搜索路径中上移一位;

【Remove】 将选中的目录在搜索路径中删除;

【Move Down】 将选中的目录在搜索路径中下移一位;

【Move to Bottom】 将选中的目录移动到搜索路径的底端。

Page 23: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

11

Set Path 窗口下一行 5 个按钮的功能(从左到右)分别是:

【Save】 将搜索路径保存;

【Close】 关闭搜索路径;

【Revert】 恢复到上次改变搜索路径前的路径;

【Default】 恢复到 MATLAB 的原始默认路径;

【Help】 搜索路径的帮助。

(6)【Preferences】 这是开发环境的属性设置命令。执行该命令,即打开如图 1-20 所示

的“Preferences”窗口。

图 1-20 MATLAB 6.5【Preferences】窗口

属性设置窗口的左侧是属性设置的对象,其右侧则是每个对象属性设置的内容。图 1-20

所示就是“General”通用属性设置的界面。

除此以外,还有以下 10 个属性设置:

“Command Window”命令窗口属性设置;

“Command History”命令历史窗口属性设置;

“Editor/Debugger”编辑器/调试器属性设置;

“Help”帮助属性设置;

“Current Directory”当前目录路径属性设置;

“Workspace”工作空间属性设置;

“Array Edotor”数组编辑器属性设置;

“GUIDE”向导属性设置;

“Figure Copy Template”图形复制属性设置;

“Simulik”仿真属性设置。

(7) 【Page Setup】 这是页面设置命令。当选中“Command History”与“Command Window”

窗口时,分别对其进行设置。

(8)【Print】 这是打印命令。

Page 24: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

12

(9)【Print Selection】 这是选择打印的命令。

(10)【Exit MATLAB】 这是退出系统命令。执行该命令,立即关闭 MATLAB 所有对话

框或界面而退出系统。退出 MATLAB 的快捷键为 Ctrl+Q。退出 MATLAB 还可以在其命令窗

口中使用以下命令“quit”与“exit”,均可达到退出的目的。

2.Edit(编辑)菜单

【Edit】菜单项下拉后有 12 项菜单命令(参见图 1-21),从上到下依次为:【Undo】、【Redo】、

【Cut】、【Copy】、【Paste】、【Paste Special】、【Select All】、【Delete】、【Find】、【Clear Command

Window】、【Clear Command History】、【Clear Workspace】。这些菜单项命令的作用如下:

图 1-21 【Edit】下拉菜单命令

(1)【Undo】与【Redo】 这是撤销与重复上一次操作命令。

(2) 【Copy】与【Paste】 这是复制与粘贴命令。当选中文档或其一部分时,可以使用【Copy】

对其进行复制,并用【Paste】命令将其复制的内容粘贴到指定的位置。

(3) 【Cut】 这是剪切命令。当选中文档或其一部分时,可以使用【Cut】对其进行剪切(选

中的文档或其一部分被剪去),并用【Paste】命令将其剪切的内容粘贴到指定的位置。

(4)【Paste Special】 这是特殊粘贴命令。

(5)【Select All】 这是选择命令。用于选择命令窗口中的所有内容。

(6) 【Delete】 这是删除命令。在命令窗口编辑区输入命令出现错误或某些内容不需要时,

选中想删除的内容,可以使用【Delete】命令将其删除(已经敲回车键的命令不能删除)。

(7)【Find】 这是查找命令。命令执行后则打开“查找”对话框。

(8)【Clear Command Window】 该命令用来清除命令窗口中的所有内容。

(9)【Clear Command History】 该命令用来清除命令历史窗口中的所有内容。

(10)【Clear Workspace】 该命令用来清除工作空间窗口中的所有内容。

3.View(查看)菜单

【View】菜单的功能是用于查看各种界面(参见图 1-22)。下拉后的子菜单,从上到下依

次为:【Desktop Layout】、【Undock Command Window】、【Command Window】、

【Command History】、【Current Directory】、【Workspace】、【Launch Pad】、【Help】、【Current

Direectory Filter】、【Workspace View Options】。

(1)【Desktop Layout】 这是 MATLAB 桌面平台设置的命令。下拉后,可以将桌面平台

大窗口里的 4 个小窗口作不同形式的布局显示。

Page 25: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

13

图 2-22 【View】下拉菜单命令

(2)【Undock Command Window】 该命令将命令窗口从默认的桌面平台的缺省设置中分

离为单个的命令窗口。当执行【Undock Workspace】或【Undock Command History】或【Undock

Current Directory】时,也是将其相应窗口从桌面平台的缺省设置中分离为单个的窗口。

(3)【Command Window】 该命令将命令窗口从默认的桌面平台的缺省设置中隐藏不显示,

再次点击时即行显示。

(4)【Command History】 功能同(3),对象为命令的历史窗口。

(5)【Current Directory】 功能同(3),对象为当前目录窗口。

(6)【Workspace】 功能同(3),对象为命令的工作空间窗口。

(7)【Launch Pad】 功能同(3),对象为发行说明书窗口。

(8)【Help】 这是 MATLAB 的帮助命令。命令执行后,打开如图 1-23 所示的系统帮助窗

口。

图 1-23 MATLAB 6.5 的帮助窗口

Page 26: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

14

(9)【Current Directory Filter】 这是当前目录过滤器命令。命令执行后,打开如图 1-24

所示的下拉菜单。

图 1-24 【Current Directory Filter】下拉菜单

(10)【Workspace View Options】 该命令用来对工作空间进行查看选择。命令执行后,打

开如图 1-25 所示的下拉菜单。

图 1-25 【Workspace View Options】下拉菜单

4.Web(网络)菜单

【Web】菜单打开后如图 1-26 所示,有【The Math Works Web Site】、【MATLAB Central】、

【MATLAB File Exchange】、【MATLAB Newsgroup Access】、【Check for Updates】、【Products】、

【Membership】、【Technical Support Knowledge Base】等 8 项子命令。

Page 27: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

15

图 1-26 MATLAB 6.5 的【Web】下拉菜单命令

(1)【The Math Works Web Site】 这是打开 Math Works 公司网站的命令,Math Works 公

司的网站如图 1-27 所示。

图 1-27 Math Works 公司网站

(2)【MATLAB Central】 这是打开 MATLAB 中心网站的命令,MATLAB 中心网站如图

1-28 所示。

(3)【MATLAB File Exchange】 这是公司网站公布的 MATLAB 文件更新的命令。

(4)【MATLAB Newsgroup Access】 这是访问 MATLAB 新闻组的命令。

(5)【Check for Updates】 这是对您安装的 MATLAB 产品组件检验其升级版本号的命令。

(6)【Products】 这是公司网站公布的 MATLAB 产品的命令。

(7)【Membership】 这是公司网站公布的 MATLAB 会员资格的命令。

(8)【Technical Support Knowledge Base】 这是公司网站公布的技术支持知识库的命令。

Page 28: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

16

图 1-28 MATLAB 中心网站

5.Window(窗口)菜单

【Window】菜单项下拉后仅有【关闭所有窗口】的子项,如图 1-29 所示。

图 1-29 【Window】下拉菜单命令

6.Help(帮助)菜单

【Help】菜单项下拉后如图 1-30 所示,从上到下子项依次为:【Full Product Family Help】、

【MATLAB Help】、【Using the Desktop】、【Using the Command Window】、【Demos】、【About

MATLAB】。

图 1-30 MATLAB 6.5 的【Help】下拉菜单命令

Page 29: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

17

(1)【Full Product Family Help】 这是显示全部产品系列帮助的命令,执行后打开其帮助

窗口如图 1-31 所示。由图可见,在 Help 标题栏下的主菜单与 MATLAB 6.5 系统界面的主菜

单(图 1-13)没有太大区别。其下的主窗口左半部是帮助向导部分,右半部是帮助信息显示部分。

图 1-31 全部产品系列的帮助窗口

帮助向导部分由上部的工具栏与下部的 5 张选项卡组成。工具栏由 2 个选项按钮组

【Product filter】、【All】与 1 个单按钮【Selected】组成,它们都是用来对帮助主题即 MATLAB

的系列产品进行筛选或选择的。下部的 5 张选项卡分别为“Contents”(产品目录)、“Index”(产

品索引)、“Search”(产品查询)、“Demos”(产品演示)与“Favorites”(用户自选的帮助主题集),

供挑选。

帮助信息显示部分也由上部的工具栏与下部的信息显示窗口组成。工具栏的 4 个按钮(从

左至右)的功能分别是:返回前一个帮助页面、调用下一个帮助页面、重复帮助页面、打印当

前的帮助页面;工具栏还有一个指定帮助页码的文本输入框。下部的帮助信息显示窗口用来

对当前帮助主题显示帮助的详细信息,还可以用按钮【Add to Favorites】将帮助的主题添加到

用户自选的帮助主题集中,以方便用户日后的查找。

(2)【MATLAB Help】 这是显示 MATLAB 系统帮助的命令,执行后打开其帮助对话框,

如图 1-23 所示。

(3)【Using the Desktop】 这是使用桌面平台的帮助命令。

(4)【Using the Command Window】 这是使用命令窗口的帮助命令。

(5)【Demos】 这是 MATLAB 系统的演示命令。

(6)【About MATLAB】 这是关于 MATLAB 系统的子项命令,命令执行后显示图 1-4 所

示的 MATLAB 6.5 系统的标识界面。

Page 30: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

18

1.2.3 MATLAB 6.5 工具栏按钮

图 1-32 所示的工具栏按钮,是 MATLAB 为用户提供的部分常用菜单项命令的快捷方式。

熟练使用工具栏按钮,可使计算机操作更快捷高效、更简单方便。从左至右 9 个按钮的功能

如下:

图 1-32 MATLAB 6.5 工具栏按钮

单击该按钮将用 MATLAB 的 M 文件编辑/调试器打开一个新文件,相当于执行在菜

单项【File】选中的【New】命令;

单击该按钮将用 MATLAB 的 M 文件编辑/调试器打开一个已存在的 M 文件,相当

于执行在菜单项【File】选中的【Open】命令;

单击该按钮将选中的文档剪切到粘贴板上,相当于执行在菜单项【Edit】选中的【Cut】

命令;

单击该按钮将粘贴板上的内容复制到指定位置,相当于执行在菜单项【Edit】选中

的【Copy】命令;

单击该按钮将粘贴板上的文本内容粘贴到命令窗口中的指定位置,相当于执行在菜

单项【Edit】选中的【Paste】命令;

单击该按钮将撤销最近的一次操作,相当于执行在菜单项【Edit】选中的【Undo】

命令;

单击该按钮将重复最近的一次操作,相当于执行在菜单项【Edit】选中的【Redo】

命令;

单击该按钮将打开 SIMULINK 库浏览器,相当于执行在菜单项【File】选中【New】

下的【Model】命令;

单击该按钮将打开 MATLAB 的帮助窗口,相当于执行在菜单项【Help】选中的

【MATLAB Help】命令。

1.2.4 MATLAB 6.5 系统界面的窗口

与 MATLAB 的老版本不同,在大窗口里设置有 4 个小窗口:左上部是两张重叠卡形式的

工作空间窗口(Workspace)与当前目录窗口(Current Directory);左下部是历史窗口(Command

History);右部是命令窗口(Command window)。这样的设置使得用户既可方便地在桌面平台上

对大窗口里包含的相关内容进行直观操作,也可直接获得尽可能多的信息。每个小窗口的右

上角有两个按钮:左边一个是脱离主窗口而独立打开小窗口的按钮,右边一个是小窗口关闭

按钮。根据需要,可以任意选中(鼠标左键点击)某一个小窗口。当被选中时,小窗口的标题栏

由浅灰色变成蓝色。当任何一小窗口脱离主窗口而独立打开后,可以用主菜单【View】下的

【Desktop Layout】再下拉的【Default】的菜单命令还原,即回到图 1-13 所示的系统界面。

1. 工作空间窗口(Workspace)

所谓工作空间(Workspace),实际上是运行 MATLAB 的程序或命令时,所保存的所有变

量与 MATLAB 提供的常量所构成的空间。

Page 31: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

19

工作空间窗口如图 1-33 所示。它的工具栏由 4 个按钮控件与 1 个下拉菜单组成:4 个按

钮的功能分别是(自左到右):打开已保存的 MATLAB 数据文件、保存工作空间中的所有数据、

打开所选数据的矩阵编辑器、删除所选数据等。1 个下拉菜单用于调试 M 文件时实现不同工

作空间之间的切换。

图 1-33 工作空间窗口

可以随时查看工作空间中的变量名及变量的值。在命令窗口键入命令 who 和 whos 可以

看到当前工作空间里的所有变量。Who 命令只给出变量名;whos 还给出变量的大小、数据类

型等内容。使用命令 clear 可清除工作空间里的变量。

2. 当前目录窗口(Current Directory)

在当前目录窗口(图 1-34)中,可以显示当前路径与子目录及其所有文件的信息。还可用按

钮【Browse for Folder】打开文件夹浏览器(图 1-35),以便搜索选择并改变路径与子目录。选

择路径与子目录后,需要单击【确定】按钮予以确认。

图 1-34 当前目录窗口 图 1-35 浏览文件夹

3. 命令历史窗口(Command History)

命令历史窗口如图 1-36 所示。命令历史窗口中会保留自安装系统起到当前的所有执行过

的命令的历史纪录,并标明命令执行的时间,这就极大地方便了使用者的查询。而且,当双

击某一命令时,即刻在 MATLAB 命令窗口中执行该命令。

图 1-36 命令历史窗口

Page 32: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

20

4. 命令窗口(Command window)

MATLAB 的命令窗口是 MATLAB 的重要组成部分,MATLAB 系统在计算机里的存在,

主要是以命令窗口形式体现的。在 MATLAB 命令窗口里,使用者输入命令、程序、点击菜

单项命令或工具栏按钮,指挥 MATLAB 计算、仿真,其结果也都在命令窗口显示,所以命令

窗口是使用者和 MATLAB 交互的地方。打开 MATLAB 系统,主要就是指打开其命令窗口。

在 Windows 环境下,如果已经在 Windows 的桌面上建立了快捷方式的图标,那么双击

MATLAB 图标或者点击【开始】按钮的菜单里的 MATLAB 选项命令,都能打开如图 1-13 所

示 MATLAB 6.5 系统界面右下方的命令窗口。

在 MATLAB 命令窗口里,当输入、编辑、运行命令、函数、程序,或进行各种不同类型

的数学运算时,有很多的控制键和方向键可用于语句行的编辑。如果能熟练使用这些按键或

其快捷键将大大提高工作效率。表 1-1 列出了 MATLAB 命令窗口的按键及其作用。

表 1-1 命令窗口的快捷键

键 相应快捷键 功 能

Ctrl+P 光标回调上一行

Ctrl+N 光标回调下一行

Ctrl+B 光标回移一个字符

Ctrl+F 光标向右移动一个字符

Ctrl Ctrl+R 光标向右移动一个单词

Ctrl Ctrl+L 光标向左移动一个单词

Backspace Ctrl+H 删除光标前字符

Delete Ctrl+D 删除光标后字符

End Ctrl+E 光标移到行尾

Esc Ctrl+U 删除一行

Home Ctrl+A 光标移到行首

Ctrl+K 从光标处一直删除到行尾

注:Ctrl+E 表示同时按下 Ctrl 键和 E 键,其余同此。

在 MATLAB 的命令窗口里,在语句行尾加上 3 个英文句号表示续行;运算符“=”、“+”、

“-”前后的空格不影响计算结果;在输入命令后以分号结束,则不会显示命令执行结果,但

可使程序运行速度大大提高,这对有大量输出数据的程序特别有用。还可用键 Ctrl+C 来终止

正在运行的程序。

在 MATLAB 的命令窗口里,对于选中的语句行、程序或部分程序块等,可用复制、剪切

与粘贴等菜单项命令进行操作,用鼠标右键将其移动等。用这些手段可以对命令窗中的内容

进行各种不同的编辑。

1.2.5 Start 开始按钮

MATLAB 系统界面下的【Start】按钮,类似于 Windows 系统桌面平台左下角的【开始】

按钮,两者不仅名称、设置的位置,而且模式与功能都极相似。图 1-37 为按下【Start】按钮、

再选择【Toolboxes】后的全部下拉菜单。

Page 33: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

21

图 1-37 【Start】按钮下【Toolboxes】的下拉菜单

1.3 M A T LA B 6.5 的内容及其查找

在介绍了 MATLAB 系统的安装与启动后,又了解了它的各种界面,那么 MATLAB 6.5

究竟包含哪些内容呢?本节就来介绍 MATLAB 6.5 的内容及其内容查找。

1.3.1 MATLAB 6.5 的内容

Math Works 公司经过近 30 年的开发、扩充与不断完善,MATLAB 已经发展成为适合多

学科的功能强大、内容极为丰富的大型系统软件。首先接触 MATLAB 6.5 内容的是在安装过

程中勾选欲安装的 MATLAB 组件;其次,在 MATLAB 6.5 光盘的 readme-记事本中也可看到

安装的组件的细目;还有在【Web】菜单的【Check for Updates】子项命令执行后即可看到

MATLAB 6.5 全部内容;最后,执行命令 ver 也能达到同样目的(参看例[1-5])。现将其组件名、

组件版本号与组件相应功能列于表 1-2 中。

表 1-2 MATLAB 6.5 组件名称、版本号及其组件功能

组 件 名 称 版本号 组 件 功 能

MATLAB 6.5 MATLAB 主程序

Simulink 5.0 动态仿真工具

Aerospace Blockset 1.0.1 航空模块集

CDMA Reference Blockset 1.1 CDMA 参考模块集

Communications Blockset 2.5 通信模块集

Communications Toolbox 2.1 通信工具箱

Control System Toolbox 5.2 控制系统工具箱

Page 34: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

22

(续)

组 件 名 称 版本号 组 件 功 能

Curve Fitting Toolbox 1.1 曲线拟合工具箱

Data Acquisition Toolbox 2.2 数据采集工具箱

Database Toolbox 2.2.1 数据库工具箱

Datafeed Toolbox 1.3.1 数据流工具箱

Dials and Gauges Blockset 1.1.2 刻度标尺模块集

DSP Blockset 5.0 数字信号模块集

Embedded Target for Motorola MPC555 1.0.1 摩托罗拉 MPC555 内置对象

Embedded Target for TI C6000 DSP 1.0 TI C6000 DSP 内置对象

Excel Link 2.0 外链接

Extended Symbolic Math 2.1.3 扩展的符号运算

Filter Design Toolbox 2.2 滤波器设计工具箱

Financial Derivatives Toolbox 2.0 金融系统工具箱

Financial Time Series Toolbox 2.0 金融时间系列工具箱

Financial Toolbox 2.2.1 金融财政工具箱

Fixed-Point Blockset 4.0 定点模块集

Fuzzy Logic Toolbox 2.1.2 模糊逻辑工具箱

GARCH Toolbox 1.0.2 GARCH 工具箱

Image Processing Toolbox 3.2 图像处理工具箱

Instrument Control Toolbox 1.2 仪表控制工具箱

LMI Control Toolbox 1.0.8 LMI 控制工具箱

Mapping Toolbox 1.3 制图工具箱

MATLAB COM Builder 1.0 MATLAB COM 构成器

MATLAB Compiler 3.0 MATLAB 编译器

MATLAB Excel Builder 1.1 MATLAB Excel 构成器

MATLAB Link for Code Composer Studio 1.0 代码设计室的 MATLAB 链接

MATLAB Report Generator 1.3 MATLAB 报表生成器

MATLAB Runtime Server 6.1.1 MATLAB 运行时间服务器

MATLAB Web Server 1.2.2 MATLAB 网站服务器

Model-Based Calibration Toolbox 1.1 模型基本标准工具箱

Model Predictive Control Toolbox 1.0.7 模型预测工具箱

Mu-Analysis and Synthesis Toolbox 3.0.7 Mu 分析与合成工具箱

Neural Network Toolbox 4.0.2 神经网络工具箱

Nonlinear Control Design Blockset 1.1.6 非线性控制设计模块集

Optimization Toolbox 2.2 优化工具箱

Partial Differential Equation Toolbox 1.0.4 偏微分方程工具箱

Real-Time Workshop 5.0 实时工作间

Real-Time Workshop Embedded Coder 3.0 实时工作间内置编码器

Real-Time Windows Target 2.2 实时工作间对象

Page 35: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

23

(续)

组 件 名 称 版本号 组 件 功 能

Requirements Management Interface 1.0.4 需求管理界面

Robust Control Toolbox 2.0.9 鲁棒控制工具箱

Signal Processing Toolbox 6.0 信号处理工具箱

SimMechanics 1.1 模拟机械系统

SimPowerSystems 2.3 模拟动力系统

Simulink Performance Tools 1.2 仿真执行工具

Simulink Report Generator 1.3 仿真报表生成器

Spline Toolbox 3.1.1 样条工具箱

Stateflow 5.0 状态流工具箱

Stateflow Coder 5.0 状态流编码器

Statistics Toolbox 4.0 统计工具箱

Symbolic Math Toolbox 2.1.3 符号运算工具箱

System Identification Toolbox 5.0.2 系统识别工具箱

Virtual Reality Toolbox 3.0 虚拟现实工具箱

Wavelet Toolbox 2.2 小波工具箱

xPC Target 2.0 xPC 对象

xPC Target Embedded Option 2.0 xPC 内置属性

1.3.2 MATLAB 6.5 的内容查找

庞大的系统 MATLAB 有如此丰富的内容,如何找到其中的某一项呢?

在主菜单【File】下的【Set Path】子菜单项就是 MATLAB 6.5 的搜索路径命令。对于熟

悉计算机 DOS 系统的读者,复习几条能在 MATLAB 命令窗口中运行的 DOS 命令,用来搜索

MATLAB 系统内的任何路径、子目录乃至函数命令与文件,并显示函数与文件的内容,都是

极具使用价值的。因为这种方法既简单方便,又灵活实用。

在表 1-3 中,列出了能在 MATLAB 命令窗口中运行的最常用的几条 DOS 命令及其命令

的功能。

表 1-3 在 MATLAB 中运行的 10 条 DOS 命令及其功能

DOS 命令 命 令 功 能

cd 改变当前目录

clear 清除内存中的变量与函数

dir 显示目录或目录下的文件

help 显示在命令窗口的在线帮助

path 设置或显示路径

type 显示 M 文件内容

ver 显示 MATLAB 及工具箱的版本信息

who 显示当前变量

whos 显示当前变量的详细信息

! 执行操作系统命令

Page 36: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

24

下面来举例说明这些 DOS 命令的使用。

【例 1-1】在 Word 中,利用 Notebook,运行 DOS 命令显示 MATLAB 6.5 的子目录。

【解】

在 Word 窗口中,用英语输入状态输入以下两条 DOS 命令:

cd f:\matlab6p5

dir 用鼠标左键将这两条命令选中(或叫“刷黑”),然后运行主菜单【Notebook】下的下拉菜

单项【Evaluate Cell】命令,即可看到 MATLAB 6.5 的子目录如下:

. extern notebook toolbox

.. help rtw uninstall

MATLAB 6.5.lnk ja simulink work

bin java stateflow

demos license.txt sys 顺便指出:用 DOS 命令显示 MATLAB 6.5 的上述子目录,与在图 1-35 文件夹浏览器中

看到的 MATLAB 6.5 树形结构是完全相同的;最常用的几个组成模块“notebook”、“simulink”、

“sys”、“toolbox”与“work”等等都是 MATLAB 下的二级子目录。

【例 1-2】运行 DOS 命令显示 MATLAB 6.5 下 Notebook 的子目录及其文件。

【解】

在 Word 窗口中,输入以下 3 条 DOS 命令:

cd f:\matlab6p5

cd notebook\pc

dir

用鼠标左键将其“刷黑”,然后运行主菜单【Notebook】下的下拉菜单项【Evaluate Cell】

命令,即可看到 MATLAB 6.5 的 Notebook 子目录与文件如下:

. M-BOOK.DOT Readme.doc

.. M-BOOK95.DOT sigproc.doc

由上可见,MATLAB 6.5 的 Notebook 下面还有一级子目录 pc,该子目录下才有上述 4 个

文件。

【例 1-3】运行 DOS 命令显示 MATLAB 6.5 下 Toolbox 的组成部分即子目录。

【解】

按上例运行以下 3 条 DOS 命令:

cd f:\matlab6p5

cd toolbox

dir 命令执行后,即可看到 MATLAB 6.5 的 Toolbox 子目录如下:

. database ident nnet signal

.. datafeed images optim simulink

aeroblks dials instrument pde splines

ccslink dspblks lmi physmod stateflow

cdma exlink local powersys stats

Page 37: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

25

combuilder filterdesign map reqmgt symbolic

comm finance matlab robust vr

commblks finderiv matlabxl rptgen wavelet

compiler fixpoint mbc rptgenext

control ftseries mpc rtw

curvefit fuzzy mutools runtime

daq garch ncd sb2sl

由上可见:MATLAB 6.5 的 Toolbox 子目录下面全部是子目录,没有文件;符号运算工

具箱“symbolic”就是“Toolbox”下的一个子目录。

【例 1-4】运行 DOS 命令显示 MATLAB 6.5 下 Toolbox\symbolic 符号运算工具箱的组成部分

即子目录与文件,并显示符号工具箱中一个文件的源程序内容。

【解】

(1) 按上例运行以下 3 条 DOS 命令:

cd f:\matlab6p5

cd toolbox\symbolic

dir 命令执行后,即可看到 MATLAB 6.5 下 Toolbox\symbolic 符号运算工具箱的组成部分如

下:

. eigensys.m maplemex.dll solve.m sympow.m

.. funtool.m maplemex.m subs.m symrotdemo.m

@char html mfun.m symadd.m syms.m

@sym hypergeom.m mfunlist.m symcalcdemo.m symsub.m

@symlibs info.xml mhelp.m symdemos.m symvpademo.m

Contents.m ja numeric.m symdiv.m taylortool.m

cosint.m jordan.m poly2sym.m symeqndemo.m vpa.m

demos.xml lambertw.m procread.m symintro.m zeta.m

determ.m linsolve.m rsums.m symlindemo.m

digits.m maple.m singvals.m symmul.m

dsolve.m mapleinit.m sinint.m symop.m 由上可见:MATLAB 6.5 下 Toolbox\symbolic 符号运算工具箱的组成部分中既有子目录,

也有文件;符号工具箱中大部分是带扩展名 .m 的 MATLAB 文件,其它的都应是子目录。

(2) 运行以下 DOS 命令显示约当标准形函数 jordan ( )的 MATLAB 源程序:

type jordan.m

即得函数 jordan ( )的 MATLAB 源程序为:

function [V,J] = jordan(A)

%JORDAN Jordan Canonical Form.

% JORDAN(A) computes the Jordan Canonical/Normal Form of the matrix A.

% The matrix must be known exactly, so its elements must be integers

% or ratios of small integers. Any errors in the input matrix may

% completely change its JCF.

Page 38: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

26

%

% [V,J] = JORDAN(A) also computes the similarity transformation, V, so

% that V\A*V = J. The columns of V are the generalized eigenvectors.

%

% Example:

% A = gallery(5);

% [V,J] = jordan(A)

%

% See also EIG, POLY.

% Copyright 1993-2002 The Math Works, Inc.

% $Revision: 1.11 $ $Date: 2002/03/13 14:05:11 $

if nargout < 2

V = double(jordan(sym(A)));

else

[V,J] = jordan(sym(A));

V = double(V);

J = double(J);

end 顺便指出:所有 MATLAB 的 .m 文件,都在 MATLAB 的各级子目录下。在 Word 中,借

助于 Notebook,运行 type 命令,即可显示所有 .m 文件的 MATLAB 源程序。

[说明]

命令 type 的调用格式为:

type filename

即在 type 命令后输入文件名(带文件扩展名更为清晰),执行后就可以显示 .m 文件的

MATLAB 源程序。

【例 1-5】运行 DOS 命令显示 MATLAB 6.5 各个组件的版本号。

【解】

运行以下 DOS 命令,即显示如表 1-2 所列的 MATLAB 6.5 各个组件及其版本号:

cd f:\matlab6p5

ver 【例 1-6】运行 DOS 命令对微分函数 diff ( )作联机帮助。

【解】

运行以下 DOS 命令,即显示函数命令 diff ( )的联机帮助:

help diff.m

即显示函数命令 diff ( )的联机帮助信息如下:

DIFF Difference and approximate derivative.

DIFF(X), for a vector X, is [X(2)-X(1) X(3)-X(2) ... X(n)-X(n-1)].

DIFF(X), for a matrix X, is the matrix of row differences,[X(2:n,:) - X(1:n-1,:)].

DIFF(X), for an N-D array X, is the difference along the firstnon-singleton dimension of X.

DIFF(X,N) is the N-th order difference along the first non-singleton dimension (denote it by

Page 39: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

27

DIM). If N >= size(X,DIM), DIFF takes successive differences along the next non-singleton

dimension.

DIFF(X,N,DIM) is the Nth difference function along dimension DIM.

If N >= size(X,DIM), DIFF returns an empty array.

Examples:

h = .001; x = 0:h:pi;

diff(sin(x.^2))/h is an approximation to 2*cos(x.^2).*x

diff((1:10).^2) is 3:2:19

If X = [3 7 5; 0 9 2]

then diff(X,1,1) is [-3 2 -3], diff(X,1,2) is [4 –2;9 -7],

diff(X,2,2) is the 2nd order difference along the dimension 2, and

diff(X,3,2) is the empty matrix.

See also GRADIENT, SUM, PROD.

Overloaded methods

help sym/diff.m

help char/diff.m

help fints/diff.m

help localtruncps/diff.m

help localpspline/diff.m

help localpoly/diff.m 顺便指出:所有 MATLAB 的 .m 文件,都在 MATLAB 的各级子目录下。在 Word 中,借

助于 Notebook,运行 help 命令,即可显示所有函数命令的联机帮助。

[说明]

命令 help 的调用格式为:

help filename

即在 help 命令后输入函数名(带文件扩展名更为清晰),执行后就可以显示该函数命令的

联机帮助。

【例 1-7】运行 DOS 命令搜索 MATLAB 6.5 下的所有路径与子目录。

【解】

运行以下 DOS 命令,搜索 MATLAB 6.5 下的所有路径与子目录:

cd f:\matlab6p5

path

即搜索 MATLAB 的所有路径如下(仅列出搜索路径的首三行与末三行):

MATLABPATH

F:\MATLAB6P5\toolbox\matlab\general

F:\MATLAB6P5\toolbox\matlab\ops

F:\MATLAB6P5\toolbox\matlab\lang

F:\MATLAB6P5\toolbox\rtw\targets\xpc\xpcdemos

F:\MATLAB6P5\toolbox\rtw\targets\xpc\target\kernel\embedded

F:\MATLAB6P5\work

Page 40: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

28

1.3.3 MATLAB 6.5 的 Work 子目录

MATLAB 系统的目录结构中有个子目录“Work”,它是 MATLAB 默认存储文件的地方。

当在 MATLAB 命令窗口中存储或者打开文件时,只要没有设置文件路径与子目录,MATLAB

系统就默认为是“MATLAB 6.5\Work”。

所以,MATLAB 系统下的子目录“Work”,是一个既有用又方便的“舞台”,将设计或欲

调试的 M 文件、MATLAB 程序存储在这里是最佳选择。因为在 MATLAB 命令窗口中存储或

者打开文件时,可以省略路径,这会给编辑、输入、设计与调试运行程序以及对控制系统仿

真带来很大的方便。

1.4 M A T LA B 的文字处理工具 N otebook

MATLAB Notebook 像一个会进行运算的文稿本,在该文稿本中,可以编辑汉字,可以随

时修改计算命令,随时计算与显示计算结果并绘制图形。这对于撰写科技报告、论文、专著

的科学工作者与教师,以及对于演算理工科习题的广大学生,MATLAB Notebook 都极具实用

价值。

1.4.1 Notebook 简介

众所周知,当今世界微软公司的 Word 软件在字处理方面功能最强,而 MATLAB 的数值

计算功能最优,如果能够将两者结合起来,就能集二者之所长。

MATLAB Notebook 就是一个兼有两者优点的工具。这个工具是 Math Works 公司为文字

处理、科学计算、工程设计而开发的一个集成运行环境,它不仅有 Word 的全部功能,而且还

具备 MATLAB 无与伦比的数学解算功能和灵活自如的计算结果可视化能力。

在 MATLAB Notebook 中有一个称为“M-book”的特殊文档,就是模板文件 M-book.dot。

所谓启动 Notebook,就是启动带 M-book.dot 模板的 Word,即从不带【Notebook】主菜单的

Word 常规窗口变成已启用 M-book.dot 模板的 Word 窗口,此时 Word 窗口已增添了【Notebook】

主菜单项(如图 1-11 所示)。

一个 M-book 被打开时,MATLAB 即随之启动。当创建和编辑一个 M-book 时,Word 将

启动 M-book 模板。正是由于 M-book 模板,才可以在 Word 和 MATLAB 两者之间交互。一个

M-book 文档就是一个交互式 MATLAB 过程的记录。在这个记录中,包含了汉字文字(对于经

过汉化的 Word)、MATLAB 命令、计算结果和图形等,并可以借助 Word 的功能对之进行编

辑处理。

Notebook 是这样工作的:用户在 Word 文档中输入的命令送到后台的 MATLAB 中运行,

然后 MATLAB 将计算结果和绘制的图形送回到 Word,并插入到文档中。

1.4.2 Notebook 菜单命令简介

启动 Notebook,即启动带【Notebook】主菜单项(如图 1-11 所示)的 Word 窗口后,用鼠

标点击【Notebook】菜单项,即下拉出 15 项子菜单命令,表 1-4 列出了所有这些子项命令及

其功能。

Page 41: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

29

表 1-4 Notebook 菜单子项命令及其功能

选 项 功 能

Define Iput Cell 定义输入细胞

Define AutoInit Cell 定义自活细胞

Define Calc Zone 定义计算区

Undefine Cells 将细胞转换为文本

Purge Selected Output Cells 从所选篇幅中删除所有输出细胞

Group Cells 生成细胞群

Ungroup Cells 将细胞群转换为输入细胞或自活细胞

Hide (Show )Cell Markers 是否显示生成细胞的中括号

Toggle Graph Output for Cell 是否嵌入生成的图形

Evaluate Cell 运行细胞

Evaluate Calc Zone 运行计算区

Evaluate M-book 运行整个 M-book 中的所有输入细胞

Evaluate Loop 多次运行输入细胞

Bring MATLAB to Front 把 MATLAB 命令窗口调到前台

Notebook Options 设置数值和图形的输入格式

1.4.3 Notebook 的使用

使用 Notebook ,某种意义上即是在 Word 中使用 M-book 模板文档。Notebook 是通过动

态链接来和 MATLAB 交互的。Word 中的 M-book 和 MATLAB 交互的基本单位为细胞。在

Notebook 中,Word 与 MATLAB 之间交换的信息,叫做“细胞(群)”。M-book 需要把在 Word

中输入的 MATLAB 命令或者语句行组成细胞(群),传送到 MATLAB 中运行,运行输出的结

果再以细胞(群)的方式传回 M-book 中。

1. 输入、输出细胞与使用

所谓“输入细胞”,是由 M-book 送向 MATLAB 中运行的指令。输入细胞可包含一行,

也可包含多行;可以是只包含嵌在文本之中的命令,还可以是 MATLAB 程序。定义细胞的目

的是要使用它,即在 Word 中运行 MATLAB,使之返回运算结果。由 MATLAB 返回到 M-book

的计算结果叫做“输出细胞”。

(1) 生成输入细胞的具体步骤如下:

首先,在 Word 中,用文本格式输入指令,在命令结束时不要按回车键或空格键。然后,

在【Notebook】菜单中选中【Define Input Cell】命令项或者按下组合键【Alt+D】。

完成以上操作后,Notebook 即用普通文本输入的命令生成输入细胞,并用黑色中括号把

指令括起来,括号中的指令为绿色字体显示,看起来很醒目。

(2) 生成输入细胞与把命令送到 MATLAB 中运行合在一起,其步骤为:

首先,采用文本格式输入命令,在命令结束时不要按回车键或空格键,让光标停在命令

的末尾。其次,在【Notebook】菜单中选中【Evaluate Cell】子项或者按组合键【Ctrl+Enter】。

完成以上操作后,生成的输入细胞,是用黑色中括号括起来的,括号中的指令显示为绿色字

体,并在其后跟着显示蓝色字符的运算结果。

Page 42: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

30

需要说明,可以用鼠标的操作代替选中并执行【Define Input Cell】项命令的操作,即用

鼠标将 Word 中文本格式的指令选中即“刷黑”,然后运行【Notebook】中的【Evaluate Cell】

子项命令即可。这种方法简单而方便,常被普遍采用。

当输入的指令内容比较多时,应选中所有的指令行来定义输入细胞或者直接运行。如果

仅在输入结束后而不选中所有的命令行就运行命令或定义输入细胞,则只有最后一行被定义

或执行。

再次说明,Notebook 采用了丰富多彩的颜色分别显示不同的操作内容:输入细胞用黑色

方括号把指令括起来,括号中的指令为绿色字体显示;输出细胞输出 MATLAB 的运算结果时,

也用黑色方括号把结果括起来,输出结果放在输入细胞的后面;Notebook 采用蓝色字符显示

计算数值结果和文本结果;采用红色字符显示错误信息。需要指出,这些色彩在计算机显示

器上一目了然,而在书本上是不能看到的。

2. 自活细胞与使用

(1) 自活细胞的概念 用【Notebook】菜单中【Define AutoInit Cell】命令定义的输入细

胞,叫做自活细胞。采用自活细胞的方式来定义 MATLAB 命令的目的是,无须任何别的操作

就可以很方便地恢复上次的 MATLAB 工作空间。

自活细胞和输入细胞的不同之处在于:其一,每次打开 M-book 时会自动运行自活细胞,

而不能自动运行输入细胞;其二,自活细胞字符用深蓝色来显示,而输入细胞用绿色显示其

字符,但两者均用黑色方括号括起来。

自活细胞的来源有两种,不论对用文本格式输入 MATLAB 命令还是对输入细胞,选中后

均可用【Notebook】菜单中的【Define AutoInit Cell】项命令生成。对用输入细胞生成方式的

操作,可以选中或把光标放在输入细胞的末尾,选择【Notebook】菜单中的【Define AutoInit Cell】

项命令把输入细胞转换为自活细胞。定义自活细胞也就是创建自活细胞。

(2) 自活细胞的使用 自活细胞的使用就是运行自活细胞,即在 Word 中运行 MATLAB,

使之返回运算结果。运行自活细胞的步骤为:

首先,把光标放在自活细胞中;然后,选择【Notebook】菜单中的【Evaluate Cell】项或

按组合键【Ctrl+Enter】。

3. 细胞群及其使用

(1) 细胞群的概念 在 Notebook 中,把包含多句 MATLAB 命令的多行输入细胞或自活

细胞称为细胞群。所以,Notebook 允许多行 MATLAB 命令当作一个细胞群整体来运行。

MATLAB 程序一般都有多行语句,所以把一个在 Word 中的 MATLAB 程序应该当作一个细

胞群。

对于当作一个整体的细胞群,Notebook 中有一些运行规则:在细胞群中,不能包含 Word

文本和输出细胞;细胞群的输出结果用一个输出细胞显示并紧跟在细胞群的后面;当生成细

胞群时,除非第一行为自活细胞,否则,Notebook 将把该细胞群当作输入细胞;如果细胞群

中的一条命令会生成文本或数值形式的结果,而另一句会生成图形结果,则文本或数值结果

总放在图形的前面。

(2) 细胞群的创建 当用多条命令进行数据计算并生成一个图形时,细胞群是必需的。采

用细胞群把这些命令生成一个输入细胞,最后数据计算结果与绘制的图形将成为一个输出细

胞。

创建或生成细胞群的具体步骤为:

Page 43: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

31

首先,选中将要生成细胞群的所有输入细胞;然后,选中【Notebook】菜单中的【Group

Cells】选项命令执行或者按组合键【Alt+G】。必须注意,如果选中内容中包含输出细胞,

Notebook 将自动删除输出细胞;如果选中内容中包含普通的 Word 文本,第一个输入细胞前

的文本位置不变,第一个输入细胞后的文本全部放在细胞群后。

若是 Notebook 把选中的多行输入细胞或自活细胞已转换为细胞群,则会去掉原来多个细

胞的黑色方括号,用一对方括号把所有内容括起来。

(3) 细胞群的运行 细胞群的运行与输入细胞相同:将光标放在细胞群中的任何位置,选

中【Evaluate Cell】选项命令后执行或按组合键【Ctrl+Enter】。运行细胞群后,输出结果用一

个输出细胞显示,默认情况下,Notebook 把输出细胞紧放在细胞群的后面,当细胞群已有一

个输出细胞时,无论输出细胞位于 M-book 的任何地方,输出结果都将在该输出细胞中显示。

正如已经指出的,用鼠标将 Word 中的细胞群或 MATLAB 程序选中“刷黑”,然后运行

【Notebook】中的【Evaluate Cell】子项命令,这是最常用的操作方法。

4. 计算区及其使用

(1) 计算区的概念 计算区(calc zone)是 M-book 中连续的一块,它把 M-book 分为几个相

互独立的部分,这些部分包括:描述一个特定问题或特定操作的文本、输入细胞、输出细胞。

当定义一个计算区时,Notebook 将该部分和 M-book 中的其它部分独立出来。

一个 M-book 文件可包含任意个计算区。计算区对于较为独立的问题很有用。值得注意的

是,计算区中的变量并不仅在该计算区中起作用。

(2) 计算区的生成 计算区的生成的步骤为:首先,用光标选中所有欲包含在一个计算区

中的文本、输入细胞和输出细胞。当选取输入细胞和输出细胞时,必须选中输入细胞和输出

细胞的所有内容。然后,选中【Notebook】菜单中的【Define Calc Zone】选项命令后并执行

或者按组合键【Alt+Z】。

(3) 计算区的运行 计算区的运行与细胞群的运行相同:首先,把光标置于计算区内的任

何位置;然后,选中【Notebook】菜单中的【Evaluate Calc Zone】选项命令执行或者按组合

键【Alt+Enter】。

须注意,Notebook 默认情况下,计算区的输出细胞放在第一个输入细胞后面;当计算区

已有一个输出细胞时,无论输出细胞在什么地方,输出结果将在输出细胞中显示。

5. 细胞循环运行及其使用

Notebook 还提供循环运行细胞的命令。循环运行细胞的具体步骤如下:

首先选中欲重复运行的输入细胞(一定要是绿色字符的输入细胞);接着在【Notebook】

菜单中选中【Evaluate Loop】选项命令或者按组合键【Alt+L】,将弹出如图 1-38 所示的对话

框。在图 1-38 中选择各个选项进行设置:在“Stop After”区域中输入重复运行次数,单击【Stat】

图 1-38 循环运行对话框

Page 44: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

32

按钮开始运行 Notebook,同时【Stat】按钮变为【Stop】,并显示已运行的次数;在“Loop Speed”

区域中单击【Slower】或【Faster】按钮,可以改变每一次循环的快慢速度。点击【Pause】或

【Continue】按钮,循环可暂停或继续运行;点击【Stop】按钮循环停止运行。

6. 输出细胞的控制

MATLAB 以输出细胞将计算数值结果、图形、提示的错误信息返回到 M-book 中。M-book

模板中缺省设置的细胞字体样式如表 1-5 所示。

表 1-5 M-book 模缺省设置细胞样式

对象名称 字 体 字体大小 是否黑体 颜 色

一般文本 Times New Roman 10 黑色

输入细胞 Courier New 10 Bold 深绿

输出细胞 Courier New 10 蓝色

自活细胞 Courier New 10 Bold 深蓝

错误信息 Courier New 10 Bold 红色

输出细胞其它格式的控制,可以通过【Notebook】菜单中的【Notebook Options】选项命

令执行后的对话框(图 1-39)来进行设置。

(1) 在“Numeric Format”区域中,可以设置的输出数据格式有 8 种:“Short”、“Long”、

“Hex”、“Bank”、“Plus”、“Short e”、“Long e”、“Rationsl”等。

(2)“Loose”与“Compact”选项,可以设置在输入细胞与输出细胞之间是否加空白行。

选“Loose”时加空行,选“Compact”时不加空行。设置后须按下按钮【OK】才生效。

(3) 在“Figure Options”区域中,选项“Embed Figures in M-book”被选中是默认值,所

有的图形输出都以输出细胞的方式嵌在 M-book 文档中;不选中该选项,图形将以独立的图

形窗口输出,与单独使用 MATLAB 一样。

(4) 在“Figure Options”区域中,选项“Use 16-Color Figures”被选中是默认值,所有的

图形输出都以 16 种颜色显示;不选中该选项,图形将以 256 种颜色显示。

(5) 选项“Height”与“Width”用来控制嵌入到 M-book 中图形的尺寸大小,“Height”

为图形的高,“Width”为图形的宽,其“Units”选项是设置尺寸大小的单位:英吋或厘米等。

图 1-39 Notebook 设置对话框

Page 45: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

33

1.4.4 Notebook 使用的几个问题

最后强调一下 Notebook 使用中应该特别注意的几个问题。

(1) M-book 文档即在 Word 中输入的 MATLAB 函数命令、语句或程序,其指令与标点符

号都必须在英语状态下输入。

(2) 带鼠标操作的图形 MATLAB 交互指令最好不在 M-book 文档中运行。

(3) Windows 是一种多任务操作系统。但在运行 M-book 文档时,最好不运行其它程序,

不执行其它任务,以免影响 M-book 文档中程序的正确执行。

(4) 由于计算机硬件与软件配合方面诸多不确定因素的影响,M-book 文档中的程序执行

可能出现异常情况。这可用以下方法解决:第一,MATLAB 主程序首行用语句以清除内存中

的变量与函数;第二,重新启动计算机后,再执行 M-book 文档中的程序;第三,将 M-book

文档中的程序拷贝成 M 文件,然后到 MATLAB 的命令窗口下去执行;最后,还要建议读者

应经常对自己的计算机进行杀毒并进行各种整理,这对 M-book 文档中的程序正常执行是必不

可少的。

(5) MATLAB 指令在 M-book 文档中运行的速度比在 MATLAB 命令窗口中执行要慢很

多,但这对于撰写科技文章或书籍没有什么影响。

(6) 可将细胞(群)转换为普通文本。输入细胞在 Word 里编辑的文件中是绿色字符,而

输出细胞是蓝色字符,这会影响 Word 文件的印刷效果。可以将 Notebook 中的输入细胞、自

活细胞、输出细胞转换为普通文本,其转换步骤为:

先将光标放在细胞中;然后选中【Notebook】菜单中的【Undefine Cells】选项命令或者

按组合键【Alt+U】。更简单方便的方法是:用鼠标左键选中输入细胞即“刷黑”,接着运行

【Notebook】菜单中的【Undefine Cells】子项命令,全部输入细胞与输出细胞都会被转换为

文本格式显示,黑色的方括号对也被取消。所有绿色字符的输入细胞与蓝色字符的输出细胞

均变成黑色字符。此时黑色字符为“Courier New”字体的 10 号字。在 Word 中,就可以按照

撰写要求对其进行编辑。

(7) 如果需要的话,使用【Notebook】菜单中的【Bring MATLAB to Front】命令或者按

组合键【Alt+M】可把 MATLAB 的命令窗口调到前台。

(8) 使用【Notebook】菜单中的【Toggle Graph Output for Cell】命令可以控制是否显示输

入细胞或输出细胞的输出图形。若控制为不输出图形,可将光标置于欲运行的细胞(群)内,

选中该【Toggle Graph Output for Cell】命令项,在细胞(群)后将生成“no graph”,运行细

胞(群)就不输出图形;再一次选中该项,即可输出图形。

Page 46: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

第 2 章 MATLAB 程序设计

内 容 提 要 对于科学研究与工程技术的各类计算问题,都要用到 MATLAB 程序设计。

MATLAB 是一种高效的编程语言,它有自身程序设计的要求、格式、语法规则、设

计与调试命令等。本章共 3 节:2.1 节介绍 M 文件、MATLAB 函数与 MATLAB 程

序;2.2 节介绍 MATLAB 程序设计基础;2.3 节介绍 MATLAB 程序的交互、调试与

警示指令。通过本章的介绍,能使读者了解并熟悉 M 文件、MATLAB 函数与

MATLAB 程序的概念,学习并掌握程序设计的基本方法,进而达到能够设计、调试

与运行 MATLAB 程序的目的。

2.1 M 文件、M A T LA B 函数与 M A T LA B 程序

2.1.1 M 文件

M 文件是使用 MATLAB 语言编写的程序代码文件。之所以称为 M 文件,是因为这种文

件都以“.m”作为文件的扩展名。用户可以通过任何文本编辑器或字处理器来生成或编辑 M

文件,但是在 MATLAB 提供的“Untitled”窗口(即图 1-16 所示的 M-file 编辑/调试器)里生成

或编辑 M 文件最为简单、方便而且高效。M 文件可以分为两种类型:一种是函数文件,另一

种是命令文件。

2.1.2 MATLAB 函数

1.MATLAB 函数概念

MATLAB 函数(Function)通常是指 MATLAB 系统内已设计好的完成某一种特定的运算或

实现某一特定功能的一个子程序。MATLAB 函数或函数文件是 MATLAB 语言最重要的组成

部分,MATLAB 提供的各种各样的工具箱几乎都是以函数形式给出的。MATLAB 的工具箱是

内容极为丰富的函数库,可以实现各种各样的功能。这些函数使用时,是作为命令来对待的。

故函数有时又称为函数命令。

MATLAB 中的函数即函数文件,是 M 文件最主要的形式。函数是能够接受输入参数

并返回输出参数的 M 文件。在 MATLAB 中,函数名和 M 文件名必须相同。

函数只能在函数体内对变量进行操作,也就是只能访问函数本身工作空间中的变量。

MATLAB 中的函数是以两种不同的形式提供给用户的。一种是内置在 MATLAB 核心中

最基本的运算函数,如 sqrt( )函数和 sin( )函数,其执行效率非常高。另一种是通过 M 文件实

现的函数,如 gamma( )函数,这些函数大部分是在最基本运算函数的基础上扩展而来,扩展

的目的是为了实现与完善 MATLAB 新的功能。

Page 47: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

35

2.MATLAB 函数分类

MATLAB 为用户提供了门类多样、内容丰富、功能各异的函数。在 MATLAB 6.5 版本的

函数库里,不包括 MATLAB 各种控制工具箱(函数)就有 25 大类函数,它们存放在 MATLAB

系统的 toolbox 子目录下的 matlab 子目录里,可以用以下 DOS 命令查看到:

cd f:\matlab6p5\toolbox\matlab

dir 运行以上两条 DOS 命令后就可得到:

. datatypes funfun graphics matfun specfun uitools

.. demos general icons ops specgraph verctrl

audio elfun graph2d iofun polyfun strfun winfun

datafun elmat graph3d lang sparfun timefun

它们的名称(即子目录名)与其相应函数类型分别为:

(1) 音频处理函数(audio);

(2) 数据分析与傅里叶变换函数(datafun);

(3) 数据类型与结构函数(datatypes);

(4) 演示示例函数(demos);

(5) 基本数学函数(elfun);

(6) 基本矩阵与数组运算函数(elmat);

(7) 泛函与常微分方程解算器函数(funfun);

(8) 通用命令函数(general);

(9) 二维图形函数(graph2d);

(10) 三维图形函数(graph3d);

(11) 通用图形函数(graphics);

(12) 图标(icons);

(13) 文件输入与输出函数(iofun);

(14) MATLAB 程序语言结构函数(lang);

(15) 矩阵函数(matfun);

(16) 运算符与特殊运算符函数(ops);

(17) 多项式与插值函数(polyfun);

(18) 稀疏矩阵函数(sparfun);

(19) 特殊数学函数(specfun);

(20) 特殊图形函数(specgraph);

(21) 字符串函数(strfun);

(22) 时间与日期函数(timefun);

(23) 图形用户界面工具函数(uitools);

(24) 版本控制函数(verctrl);

(25) 视窗界面操作系统函数(winfun)。

[说明]

除图标(icons)子目录里存放的是.gif 文件外,其它 24 个子目录里都是存放的.m 文件。

由上可知,这些函数文件子目录所在的路径为:MARLAB6p5\toolbox\matlab。

Page 48: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

36

【例 2-1】运行 DOS 命令显示 MATLAB 6.5 下基本数学函数(elfun)的组成。

【解】

用鼠标左键将以下两条命令选中即“刷黑”,然后运行主菜单【Notebook】下的下拉菜单

项【Evaluate Cell】命令,也就是运行以下两条 DOS 命令(以后举例同此):

cd f:\matlab6p5\toolbox\matlab\elfun

dir

命令执行后,即可看到 MATLAB 6.5 下基本数学函数类(elfun)由以下函数组成:

. angle.m conj.m floor.m real.m sinh.m

.. asec.m cos.m imag.m reallog.m sqrt.m

Contents.m asech.m cosh.m isreal.m realpow.m tan.m

abs.m asin.m cot.m ja realsqrt.m tanh.m

acos.m asinh.m coth.m log.m rem.m unwrap.m

acosh.m atan.m cplxpair.m log10.m round.m

acot.m atan2.m csc.m log2.m sec.m

acoth.m atanh.m csch.m mod.m sech.m

acsc.m ceil.m exp.m nextpow2.m sign.m

acsch.m complex.m fix.m pow2.m sin.m

由上可见,诸多三角函数、指数函数、对数函数等都属于这类函数。

3.MATLAB 函数文件的结构

为了说明函数文件的结构,先来看一个 MATLAB 函数文件的例子。

【例 2-2】查看 MATLAB 函数文件“angle.m”的源代码。

【解】

运行以下 DOS 命令:

type angle.m 指令运行后显示函数文件“angle.m”的源代码如下:

function p = angle(h)

% ANGLE Phase angle.

% ANGLE(H) returns the phase angles, in radians, of a matrix with

% complex elements.

%

% See also ABS, UNWRAP.

% Copyright 1984-2002 The MathWorks, Inc.

% $Revision: 5.7 $ $Date: 2002/04/08 20:11:19 $

% Clever way:

% p = imag(log(h));

% Way we’ll do it:

p = atan2(imag(h), real(h));

由此例可见,函数 M 文件一般由 5 部分组成:函数定义行;H1 行;函数帮助文本;函

数体;注释。现将各组成部分的作用简介如下。

(1) 函数定义行 函数 M 文件首行总是以关键字“function”开头,并在首行中列出全部

Page 49: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

37

输入、输出参量以及函数名。函数名应置于等号右侧并与对应的 M 文件名相同。输出参量紧

跟在“function”之后,常用方括号括起来(若仅有一个输出参量则无需方括号);输入参量紧

跟在函数名之后,常用圆括号括起来。也有输出参量是由函数体的相关语句确定的,而不跟

在“function”之后。

如果函数有多个输入或输出参数,则多个参数之间用英文状态下的逗号加以分隔。

(2) H1 行 H1 行是函数帮助文本的第一行,以“%”号开头,用来概要说明该函数的功

能。在 MATLAB 中用命令“lookfor”查找某个函数时,查找到的就是函数 H1 行及其相关信

息。

(3) 函数帮助文本 在 H1 之后而在函数体之前的说明文本就是函数帮助文本。它可以有

多行,每行均以“%”号开头,用来比较详细地对该函数进行注释,说明函数的功能与用法、

函数开发与修改的日期等等。

在 MATLAB 中用命令“help 函数名”联机帮助时,就会显示函数 H1 行与帮助文本的内容。

(4) 函数体 函数体是函数的主要部分,是实现该函数功能、进行运算所有程序代码的执

行语句。在函数体中,除了进行运算外,还包括函数调用与程序调用的必要注释。函数体是

函数的精华所在,函数编制水平的高低主要体现在函数体里。函数体中的所有参数都是函数

内部变量,这些变量与 MATLAB 工作空间内的变量是分离的。

(5) 注释 除在 H1 行、函数帮助文本、函数体里以“%”号开头的注释外, 有的函数在

函数体后还跟注释行,用以说明各种需要交代的问题。以“%”号开头的注释行不论在函数

的什么地方,都不是 MATLAB 的执行语句,而仅仅是解释性的说明。

需要说明,MATLAB 系统内的函数文件结构都是很完整的。由用户开发的函数文件,函

数的定义行及其格式必须按照要求,函数文件的函数体也是必不可少的,关于函数帮助文本

与注释部分并不是必须的。

2.1.3 MATLAB 命令文件或程序

在 MATLAB 中,实现某项功能的一串 MATLAB 语句命令与函数组合成的 M 文件叫命令文

件。有些 MATLAB 书籍、文献将“Script file”译为“脚本文件”的就是 MATLAB 命令文件。

这种 M 文件在 MATLAB 的工作空间内对数据进行操作,能在 MATLAB 环境下直接执行。命

令文件不仅能够对工作空间内已存在的变量进行操作,并能将建立的变量及其执行后的结果

保存在 MATLAB 的工作空间里,供在以后的计算中被使用。除此之外,命令文件执行后的结

果既可以显示输出,也能够使用 MATLAB 的绘图函数来产生图形输出结果。与函数文件相比,

命令文件既不带输入参量也不带输出参量。

多个、多种(既有函数文件又有命令文件的组成成分)M 文件组合成为一个 MATLAB

程序,所以 MATLAB 程序也是一种类似命令文件的 M 文件。

为了对 MATLAB 程序有个初步的认识,特举一个符号运算程序设计的例子。

【例 2-3】试设计一个 MATLAB 程序,用来生成以下形式的 5 阶 Vandermonde 矩阵:

=

45

44

43

42

41

35

34

33

32

31

25

24

23

22

21

54321

5

xxxxx

xxxxx

xxxxx

xxxxx

D

1 1 1 1 1

Page 50: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

38

【解】

生成 5 阶 Vandermonde 矩阵的 MATLAB 程序如下:

syms x1 x2 x3 x4 x5;

c=[x1 x2 x3 x4 x5];

n=max(size(c));

for j=1:n

for i=1:n

D(i,j)=c(j)^(i-1);

end

end

D

程序运行结果如下:

D =

[ 1, 1, 1, 1, 1]

[ x1, x2, x3, x4, x5]

[ x1^2, x2^2, x3^2, x4^2, x5^2]

[ x1^3, x2^3, x3^3, x4^3, x5^3]

[ x1^4, x2^4, x3^4, x4^4, x5^4]

即得题目要求的 5 阶 Vandermonde 矩阵。

有关这个程序的相关命令、语句与函数的使用,会在后面逐一予以介绍。

2.2 M A T LA B 程序设计基础

MATLAB 是一种高效的编程语言。MATLAB 语言为解释性程序设计语言,程序中的语句

边解释边执行。MATLAB 程序与其它任何高级语言一样,是由顺序、选择和循环三种基本控

制结构所构成的。MATLAB 语句由表达式语句、赋值语句、控制语句、调试语句和空语句组

成。控制语句包括条件语句、循环语句及一些转移语句。MATLAB 的任何一个语句键入后,

键入 Enter 键(回车)即可执行,故又把语句称为命令。

由 MATLAB 各种函数与诸多 MATLAB 语句、命令组成的 M 文件就是 MATLAB 程序,

所以 MATLAB 程序也是一种类似命令文件的 M 文件。本节就来介绍 MATLAB 程序设计的有

关问题。

2.2.1 MATLAB 程序设计基本规则

MATLAB 程序设计可以在图 1-15 所示的 MATLAB 的 M 文件编辑/调试器里进行,在这

个窗口能够简单方便、快捷高效地编辑与调试程序。

MATLAB 程序书写格式与函数的结构类似,也比较简单。掌握以下原则对于设计或编写

程序是很有用的。程序的基本结构组成示意如下:

Page 51: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

39

对于示意的程序基本组成结构作如下简要说明。

(1) 工程问题 MATLAB 程序的分析、设计、调试和运行是一个完整设计过程,应充分利

用编辑/调试器以及各种调试指令。

(2) %后面的内容是程序的注释说明,包含有程序的名称、功能与对用户交代的问题等。

它可以只有一行,也可有多行,它不是程序的正式内容,可以没有。

(3) 在主程序开头用 clear 指令清除变量。注意在子程序中不要用 clear,以免将主程序传

送到子程序的重要变量、参数清除了而丢失信息。

(4) 已经介绍过,最好将程序文件放在 MATLAB 默认路径 matlab6p5/work 的目录下,这

样可以省略程序的路径,否则 MATLAB 程序的路径与子目录必须填写完整。

(5) 定义变量参数值要集中放在程序的开始部分,以便于以后的程序检查、维护。在语句

行的最后输入分号时,执行语句行的结果不会显示在屏幕上,以提高执行速度。

(6) 程序尽量模块化,也就是采用主程序调用子程序的方法。

(7) MATLAB 程序的语句与程序流程控制应符合 MATLAB 的语法规则。

(8) 注意编辑/调试器用颜色区分程序内容的类别,分别为:

绿色:注释部分,程序并不执行;

黑色:程序主体部分;

红色:属性值设定或标识的部分;

蓝色:流程控制部分,比如 for,if…else等语句;

以便一见字符颜色就会知道是程序的哪一部分内容。

2.2.2 表达式、表达式语句与赋值语句

在 MATLAB 程序中,广泛使用表达式语句与赋值语句。

1. 表达式

对于 MATLAB 的数值运算,数字表达式是由常量、数值变量、数值函数或数值矩阵用运

算符连接而成的数学关系式。而在 MATLAB 符号运算中,符号表达式是由符号常量、符号变

量、符号函数用运算符或专用函数连接而成的符号对象。符号表达式有两类:符号函数与符

号方程。MATLAB 程序中,既经常使用数值表达式,也大量使用符号表达式。

2. 表达式语句

单个表达式就是表达式语句。一行可以只有一个语句,也可有多个语句。此时语句之间

以英文输入状态下的分号“;”或逗号“,”或回车换行而结束。已经介绍过, MATLAB 语

言中一个语句可以占多行,由多行构成一个语句时需使用续行符“⋯”;以分号结束的语句执

% 说明

清除命令

定义变量

逐行执行命令

⋯⋯⋯⋯

控制循环

逐行执行命令

⋯⋯⋯⋯

end

Page 52: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

40

行后不显示运行结果。以逗号或回车换行结束的语句执行后显示运行结果(即表达式的值);

表达式语句运行后,其表达式的值暂时保留在固定变量 ans 中。变量 ans 只保留最近的一次结果。

3. 赋值语句

将表达式的值赋值给变量构成赋值语句。

2.2.3 程序流程控制语句

在 MATLAB 程序中,还广泛使用程序流程控制语句。MATLAB 程序设计也与其它高级

计算机程序设计语言一样,有顺序、选择、循环三大基本结构控制语句用以实现各种不同的

运算功能。那么程序流程的控制必定是这种程序设计语言的重要组成部分,并且有自身的语

法规则。

还需要指出,在解决实际问题的 MATLAB 程序设计中,选择与循环语句结构往往相互嵌

套使用,以提高设计程序的有效性与质量。在以下的示例中,将会经常看到多种结构相互嵌

套使用的情况。

1. 顺序结构语句

将 MATLAB 函数与语句根据解决问题的需要依照顺序列写出的 MATLAB 程序即 M 文件

就是顺序结构程序。本书,将这种顺序结构语句数量太少者(例如少于 5)就叫做 MATLAB 语句。

任何计算机的总体程序都是属于从上到下的顺序而执行的顺序结构,MATLAB 程序也不例外。

2. 分支选择结构语句

分支选择语句有两种:if 条件分支语句与 switch 开关分支语句。

(1) if 条件分支语句

if-else-end 条件语句为程序流程控制提供了一种条件分支结构,这种语句有三种格式。这

三种格式均以“if” 开头,以“end”结束。

① 最简 if-end 语句格式为:

if expression

statements

end “expression”为关系表达式,“statements”为执行语句。这种条件语句执行规则是,判

断或计算 if 后面所跟关系表达式的值,当关系表达式的值为真“1”时,则执行 if 与 end 之间

的执行语句,执行完之后继续向下执行;当关系表达式的值为假“0”时,将跳过 if 与 end 之

间的执行语句而继续执行下面的语句。

【例 2-4】在 MATLAB 中,magic ( )函数叫做魔方阵函数,该函数能够自动生成一种特别的 N

阶方阵(其中,N =1,3,4,5,…)。这些 N 阶方阵具有一个共同的奇妙特性,即每一行、每一列或

对角线上的元素之和都相等且为某一常数。试设计一程序,对 N 阶魔方阵验证其奇妙特性。

【解】

设计的 MATLAB 程序为 mag.m,其源程序如下:

function f=mag(n)

if n>2

x=magic(n)

for j=1:n

s1=0;

Page 53: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

41

for i=1:n

s1=s1+x(j,i);

end

s1

end

for i=1:n

s2=0;

for j=1:n

s2=s2+x(i,j);

end

s2

end

s3=sum((diag(x)))

else

break

end

需要再次强调,在“Untitled”窗口,编辑、调试设计好的源程序 mag.m,即该 M 文件,

应该被存放在 matlab6p5\work 的子目录里,这样,会给函数的调用带来方便。

根据 MATLAB 函数文件的结构要求,M 文件 mag ( ) 是一个函数文件,其输入参数是

魔方矩阵的阶数 N,即把 N 置于 mag ( ) 的小括号内,运行这个函数,就可得到 N 阶魔

方矩阵,并计算其每行、每列或对角线上元素之和。

例如,对于 3 阶魔方矩阵,有调用函数的命令:

mag(3)

将其选中即“刷黑”并运行【Notebook】中的【Evaluate Cell】子项命令则有:

x =

8 1 6

3 5 7

4 9 2

s1 =

15

s2 =

15

s3 =

15

即得 3 阶魔方矩阵 x,并计算其每行、每列或对角线上元素之和都是 15。

再例如,对于 8 阶魔方矩阵,有调用函数的命令:

mag(8) 运行后则有:

x =

64 2 3 61 60 6 7 57

Page 54: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

42

9 55 54 12 13 51 50 16

17 47 46 20 21 43 42 24

40 26 27 37 36 30 31 33

32 34 35 29 28 38 39 25

41 23 22 44 45 19 18 48

49 15 14 52 53 11 10 56

8 58 59 5 4 62 63 1

s1 =

260

s2 =

260

s3 =

260

即得 8 阶魔方矩阵 x,并计算其每行、每列或对角线上元素之和都是 260。

最后还要指出,不允许 N=2 与 N<2,因为这就不称其为魔方矩阵了。所以,在源程序中,

用了最简 if-end 语句格式结构。

② if-else-end 条件语句格式为:

if expression

statements1

else

statements2

end “expression”为关系表达式,“statements1”为执行语句 1,“statements2”为执行语句 2。

这种条件语句的执行规则是,当关系表达式的值为真时,则执行语句 1,然后跳过语句 2 向下

执行;当关系表达式的值为假时,则执行语句 2,然后向下执行。

【例2-5】利用 if-else-end条件语句结构,将一数组作特殊排列。

【解】

将数组作特殊排列的 MATLAB 程序如下:

clear

for i=1:9;

if i<=5

a(i)=i;

else

a(i)=10-i;

end

end

a

程序运行后特殊排列的数组为:

a = 1 2 3 4 5 4 3 2 1

③ 完整 if-elseif-end 条件语句格式为:

Page 55: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

43

if expression1

statements1

elseif expression2

statements2

…………

else

statements3

end 这种条件语句执行规则是,若关系表达式 1 的值为真时,则执行语句 1;如果为假,则要

判断关系表达式 2 的值是真还是假,如果为真,则执行语句 2,如果关系表达式 2 的值也为假,

则执行语句 3,然后向下执行。

【例 2-6】将矩阵 a=[1 2 3;4 5 6;7 8 9]进行满足一定条件的处理。

【解】

将矩阵进行满足一定条件的处理的 MATLAB 程序如下:

clear

a=[1 2 3;4 5 6;7 8 9];

i=2;j=3;

if i==j

a(i,j)=0;

elseif abs(i-j)==2

a((i-1),(j-1))=-1

else

a(i,j)=-5

end 运行这一段程序后得:

a =

1 2 3

4 5 -5

7 8 9

(2) switch 开关分支语句

switch 开关分支语句格式为:

switch expression

case test1

statements1

case test2

statements2

…………

otherwise

statements3

end

Page 56: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

44

“expression”表达式应为一标量或字符串。switch 开关分支语句执行规则是,将表达式

的值依次与 case 后的检测值进行比较,一旦比较结果为真,就执行相应的语句;如果表达式

的值与列出的所有情况的检测值都不相同,则执行 otherwise 后的执行语句。switch 开关语句

中可以不包括 otherwise 及其后的执行语句。 【例 2-7】已知一个单位负反馈系统开环传递函数为 ( )sG :

( )( )( )( )2265

3)(

2 +++++=

sssss

sksG

当比例系数 35=k 与 36=k 时,其系统的单位阶跃响应为两种完全不同的状态。试用

switch 开关分支语句绘制系统的单位阶跃响应曲线,并判断响应的性质。

【解】

用switch开关语句绘制单位阶跃响应曲线的MATLAB程序如下:

clear

n1=[1 3];d1=conv(conv(conv([1 0],[1 5]),[1 6]),[1 2 2]);

K=input(’input k:’);

switch K

case ’35’

n=35*n1;

s1=tf(n,d1);

G=feedback(s1,1);

step(G);

case ’36’

n=36*n1;

s1=tf(n,d1);

G=feedback(s1,1);

step(G);

otherwise

break

end

运行这一程序后可以看到:当比例系数 35=k 时,系统的单位阶跃响应曲线是衰减的振

荡(图 2-1);而当 36=k 时,响应曲线则是发散的振荡(图 2-2)。

图 2-1 衰减振荡的阶跃响应 图 2-2 振荡发散的阶跃响应

Page 57: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

45

还需要说明,本程序使用了 input( )函数命令(参见 2.3 节),所以只能在 MATLAB 的命令

窗口里运行,而不能在 Notebook 中运行。

3. 循环结构语句

MATLAB 中的循环结构语句分为 for 循环语句(指定循环次数的)和 while 循环语句(不

指定循环次数的)两种,各有其不同的使用场合。

(1) for 循环语句

for 循环语句的语句格式为:

for v= expression

statements

end “v”为循环变量,“expression”表达式为循环变量的起始值、步长、终了值,三者之间

用英文状态下的冒号分隔。“statements”为循环语句的循环体。

for 型循环语句执行规则是:循环语句第一次先将循环变量的起始值赋值给循环变量,然

后执行 for 与 end 之间的循环体,第二次则将循环变量的起始值与一个步长之和赋值给循环变

量,再执行 for 与 end 之间的循环体,直到终了值为止,循环便终止,系统的控制转向循环语

句 end 之后继续执行。可见,循环体被执行的次数是确定的。当然,在这种场合下,采用 for

循环语句结构是最佳选择。

除此之外,还需要说明:for 循环语句的循环变量可以是一个数组;当步长=1 时,可以省

略;for 循环语句可以嵌套使用;for 循环语句的循环体内对循环变量的重新赋值不会终止循

环的执行也不会改变循环执行的结果;for 循环语句可被等价的数组运算代替;为了提高运行

效率,对循环体内所使用的数组应该预先分配其存储单元。

关于 for 型循环语句,已经有以上的一些示例,以下再举一个这种循环结构的例子,以体

会 for 型循环语句执行的过程。

【例 2-8】计算控制系统 Bode 图横坐标 1~10 的对数(以 10 为底)刻度值。

【解】

计算1~10 对数刻度值的MATLAB程序如下:

clear

for n=1:10;

x(n)=log10(n);

end;

x

当程序运行后,显示结果如下:

x =

Columns 1 through 7

0 0.3010 0.4771 0.6021 0.6990 0.7782 0.8451

Columns 8 through 10

0.9031 0.9542 1.0000

(2) while 循环语句

while 循环语句的语句格式为:

while expression

Page 58: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

46

statements

end “expression”为关系表达式,“statements”为循环体语句。while 循环语句执行的规则是:

当关系表达式为真时,则执行循环体,执行后再判断关系表达式的值是否还为真,若表达式

为真时,则继续执行循环体,直到判断关系表达式为假时为止,跳出循环体,继续往下执行。

由 while 循环语句执行的规则可见:一是 while 循环语句执行循环体的次数为不确定的,

当然在这种循环次数不定的场合下,采用 while 循环语句结构是合适的;二是循环体的执行

一定会改变 while 后面所跟关系表达式的值,否则这个 while 循环会是一个死循环。

【例 2-9】Fibonnaci 级数是这样的一个级数:它的前两个元素为 1 与 1,第三个元素是前两个

元素的和,以后的每个元素都是前两个元素的和。试计算并列写出小于 100 的 Fibonnaci 级数

的所有元素。

【解】

计算小于 100 的 Fibonnaci 级数所有元素的 MATLAB 程序如下:

clear

f=[1,1]; j=1;

while f(j)+f(j+1)<100

f(j+2)=f(j)+f(j+1);

j=j+1;

end

f

return

当程序运行后,计算并显示小于 100 的 Fibonnaci 级数所有元素如下:

f =

1 1 2 3 5 8 13 21 34 55 89

2.2.4 程序流程控制指令

MATLAB 程序的语句流程除了有分支选择结构与循环结构来进行控制外,还有几个程序

流程控制指令。所谓 MATLAB 指令,是不带输入参数的命令。

1.break 指令

break 指令的作用是中断循环语句的执行。中断的循环语句可以是 for 语句,也可以是 while

语句。当满足在循环体内设置的条件时,可以通过使用的 break 指令使之强行退出循环,而不

是达到循环终止条件时再退出循环。显然,循环体内设置的条件必须在 break 指令之前。对于

嵌套的循环结构,break 指令只能退出包含它的最内层循环。

【例 2-10】计算介于 510 ~ 610 之间 n!的数值及其 n 的值。

计算介于 510 ~ 610 之间 n!及其 n 值的 MATLAB 程序如下:

clear

n=1;

while prod(1:n)<1e10

if prod(1:n)>1e5 & prod(1:n)<1e6

break

Page 59: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

47

end

n=n+1;

end

c1=prod(1:n)

n

c2=maple(’9!’)

return 程序运行后,求得介于 510 ~ 610 之间 n!的数值及其 n 的值为:

c1 = 362880

n = 9

c2 = 362880

2.return 指令

return 指令的作用是中断函数的运行,返回到上级调用函数。return 指令既可以用在循环

体内,也可以用在非循环体内。

3.pause 指令

pause 指令是暂停指令。运行程序时,到 pause 指令执行后,程序将暂停,等待用户敲任

一键后而继续执行。除此之外,pause 指令还有几种使用形式:形式 pause(n)的功能为暂停 n

秒(这是一个带输入参数的特例);形式 pause off 的功能为其后的任何暂停语句无效;形式

pause on 的功能为其后的暂停命令有效。

2.3 M A T LA B 程序的交互式、调试与警示指令

2.3.1 MATLAB 程序的交互式指令

用户可以通过交互式指令协调 MATLAB 程序的运行。例如可以使用 MATLAB 的 input( )

函数指令、yesinput( )函数指令、keyboard 指令以及选择菜单功能等不同程度地响应程序运行

过程中出现的各种提示。需要特别注意的是,由于交互式指令无法在 Notebook 环境中运行,

含有本节指令的程序都只能在 MATLAB 命令窗口中运行。

1.input( )函数指令

input( )函数指令是带有询问提示的输入指令。其格式 1 为:

v=input(’string’)

这种格式的功能是以文本字符串 string 为信息给出用户提示,将用户键入的内容赋值给

变量 v 。

input( )函数指令格式2为:

v=input(’string’,‘s’)

这种格式的功能是以文本字符串 string 给出用户提示,将用户键入的内容作为字符串赋

值给变量 v (参见例 2-7)。

2.yesinput( )指令

yesinput( )函数指令是带有询问提示和应答检查的智能输入指令。其指令格式为:

answer=yesinput(question,default,possib)

Page 60: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

48

这种格式的功能是执行该命令时,首先显示字符串 question 和缺省的应答值 default 作为

输入提示。如果按下 Enter 键,则缺省值 default 就是默认的输入值。本命令自动检查应答的

正确性。

命令中的输入参数:

question 为询问字符串,显示在命令窗中作为对用户输入的提示。

default 是指定数据的缺省值。用来检查 default 是否为字符串,以断定读入变量的类型。

possib 为可供选择的应答范围。命令中的输出参数 answer 为允许应答值。

3. keyboard 指令

keyboard 指令是调用键盘指令。

当 keyboard 指令用在一个 M 文件中时,执行该命令则程序暂停并将“控制权”转交给

键盘。此时用户通过操作键盘可输入各种合法的MATLAB 指令。当用户使用 return 指令并敲

Enter 键后,“控制权”才交还给M文件。

4.menu ( ) 函数指令

menu ( ) 函数指令用来生成选择菜单。

menu ( ) 函数指令调用格式为:

k=menu(’menuname’,s1,s2⋯s32)

menu ( ) 函数指令的功能是生成一个按钮式菜单系统,用于用户选择输入。其中字符串

si(i=1,2,…32)为菜单项,最多 32 项。k 为用户选择菜单号的返回值。

2.3.2 MATLAB 程序的调试指令

MATLAB 程序设计完后,程序并不是也不可能完美无缺,没有任何问题。甚至有些设计

的 MATLAB 程序根本不能运行。此时,一方面可以按程序的功能逐一检查其正确性;另一方

面,可以用 MATLAB 程序的的调试命令对程序进行调试。MATLAB 有多个调试函数指令,

如 dbstop、dbstep、dbquit 等等。在 MATLAB 命令窗中,由执行 dbstop 命令设置断点开始进

入调试模式。此时用户可以跟踪程序(M-函数文件)的运行,考察程序执行状况,直到键入

命令 dbquit 命令而退出调试模式。

必须特别强调,调试命令不能用于非函数文件;Notebook 环境中无法使用调试指令;在

调试模式下程序中断后命令窗中的提示符为 k。

1.dbstop 指令

dbstop 指令的功能是设置断点。用来临时中断一个函数文件的执行,给用户提供一个考

察函数局部变量的机会。dbstop 指令有以下 4 种使用格式:

格式 1 dbstop at <行号> in <文件名>

这种格式的功能是:在指定文件的指定行处设置断点。

格式 2 dbstop in <文件名>

这种格式的功能是:在函数文件的第一个可执行处设置断点。

格式 3 dbstop if erro

这种格式的功能是:在任何函数文件运行出错时产生中断(不包括语法错误)。出错中断

后用户不能恢复程序运行。

格式 4 dbstop if naninf 或 dbstop if infnan

这种格式的功能是:当出现 INF 或 NaN 值时产生中断。

Page 61: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

49

2.dbcont 指令

dbcont 指令用来恢复对于执行 dbstop 指令而导致中断(中断后的提示符为 k)的程序。

用 dbcont 指令恢复程序执行,一直到遇到其它已设置的断点或出现错误,或返回基本工作空

间。

3.dbstep 指令

dbstep 指令用于执行一行或多行代码。在调试模式下,dbstep 允许用户实现逐行跟踪。

4.dbstack 指令

dbstack 指令用于列出调用关系。在调试模式下, dbstack 指令显示当前的文件名及中断

点的行号,其调用者的、调用者的调用者的⋯文件名和断点行号,直到最外层的函数文件。

5.dbstatus 指令

dbstatus 指令用来列出全部断点。在调试模式下,执行以下格式的指令:

dbstatus(filename) 可列出指定文件的全部断点。

6. dbtype 指令

dbtype 指令用来显示带行号的文件内容,以协助用户设置断点。该命令有两种格式:

格式 1 dbtype(文件名)

这种格式的功能是:列出指定文件的全部内容,每行前带有行号。

格式 2 dbtype <文件名><始行号:><末行号>

这种格式的功能是:列出指定文件自起始行号到末行号部分的内容。

7.dbquit 指令

dbquit 指令用来退出调试模式。在调试模式下,dbquit 指令立即强制终止调试模式,将控

制转向基本工作空间。此时,函数文件的执行没有完成,也没有产生返回结果。

2.3.3 MATLAB 程序的常用警示指令

为了提请程序使用者应该注意与防止出现的问题,以及关注程序运行、判断出错原因并

指挥程序继续运行与否等等,在设计 MATLAB 程序时,常常使用一些警示函数指令。常用的

警示函数指令及其功能如下:

error (’message’):显示出错信息 message,终止程序运行;

errortrap:程序出错后是否继续执行的双位开关;

lasterr:显示 MATLAB 自动判断的最新出错原因并终止程序运行;

warning (’message’):显示警告信息 message,程序继续运行;

lastwarn:显示 MATLAB 自动给出的最新警告提示,程序继续运行。

Page 62: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

第 3 章 符号运算的基础知识

内 容 提 要 MATLAB 的科学运算包含有两大类:MATLAB 的数值运算与 MATLAB 的符号

运算,因此符号运算工具箱 Symbolic Math Toolbox 也是 MATLAB 的重要组成部分。

在此就来专门介绍 MATLAB 的符号运算功能。本章共有 10 节:3.1 节介绍 MATLAB

符号运算入门;3.2 节介绍 MATLAB 符号运算的几个基本概念;3.3 节介绍 MATLAB

符号运算的基本内容;3.4 节介绍 MATLAB 符号表达式的基本运算;3.5 节介绍

MATLAB 符号函数运算;3.6 节介绍 MATLAB 符号微积分;3.7 节介绍 MATLAB

符号矩阵及其运算;3.8 节介绍 MATLAB 符号方程求解;3.9 节介绍 MATLAB 符号

积分变换;3.10 节介绍 MATLAB 符号函数图形计算器 FUNTOOL。有关 MATLAB

与 Maple 的接口 maple.m 本书偶尔有几处使用,若要详细论述 MATLAB 与 Maple

的联接,则要另书介绍了。通过本章的介绍,使读者了解、熟悉并掌握符号运算的

基本概念、主要内容与 MATLAB 符号运算函数命令的功能及其调用格式,为符号

运算的应用打下基础。

3.1 M A T LA B 符号运算入门

科学与工程技术中的数值运算固然重要,但自然科学理论分析中各种各样的公式、关系式

及其推导就是符号运算要解决的问题。它与数值运算一样,都是科学计算研究的重要内容。

MATLAB 数值运算的对象是数值,而 MATLAB 符号运算的对象则是非数值的符号对象。符号

对象就是代表非数值的符号字符串。以下就来列举一些实例引入 MATLAB 的符号运算功能。

【例 3-1】求解一元二次方程 0222 =++ xx 的根。

这是一个求解一元二次方程数值根的数字计算问题。根据求根公式,很容易求得方程的

两个数值根为: j12,1 ±−=x

如果求解方程一般式 02 =++ cbxax 的根,根据一元二次方程求根公式,则方程的两个

根为:

a

acbbx

2

42

2,1−±−=

这便是一个求一元二次方程根的符号运算问题。

MATLAB 里的符号运算功能正是用来解决这类问题的。只要运行以下 MATLAB 的函数

命令:

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

Page 63: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

51

即可立刻求得一元二次方程的两个根:

ans = [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]

[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]

运行的 MATLAB 语句还可以是如下的格式:

x=solve(’a*x^2+b*x+c’)

或者 y=’a*x^2+b*x+c’;

x=solve(y)

其结(效)果都是一样的。特别要提请注意的是:第一种格式中函数名后小括号内的符号函数两

侧必须有西文字符输入状态下的单引号;第二种格式(的第一行)中与函数名相等的符号函数两

侧也必须有西文字符输入下的单引号。这两种格式的功能都是对方程式 02 =++ cbxax 求解。

甚至求解一元二次方程数值根的计算问题也可以运行相同的 MATLAB 函数命令。例如求

方程 0222 =++ xx 的根时,可运行如下的 MATLAB 语句:

solve(’x^2+2*x+2=0’)

即可立刻求得方程的根:

ans = [ -1+i]

[ -1-i]

在以下的符号运算举例中,将不再作过多的说明。

【例 3-2】对于数学表达式 xxyxyx 222 −−+ 合并关于 x 的同类项,作如下运算

( ) ( ) ( ) ( ) xyxyxyxxyxxxyxyx 2122 22222 −+−=−+−=−−+

以上运算可以运行以下两条 MATLAB 语句来实现:

syms x y; collect(x^2*y+y*x-x^2-2*x)

即可得到合并上式关于 x 的同类项:

ans =(y-1)*x^2+(y-2)*x

【 例 3-3 】 求 数 学 表 达 式 ( ) ( ) ( )3212 −⋅+⋅+ xxx 即 三 因 式 连 乘 积 的 展 开 式 , 作 如 下 运 算

( ) ( ) ( ) ( ) ( ) 6561321 234222 −−−−=−−⋅+=−⋅+⋅+ xxxxxxxxxx 。

以上运算可以运行以下格式 MATLAB 语句:

syms x; collect((x^2+1)*(x+2)*(x-3))

即求得三因式连乘积的展开式: ans =x^4-x^3-5*x^2-x-6

【例 3-4】求导(函)数 ( )xx

2cosd

d。根据复合函数求导公式,有:

( ) ( ) xxxxxx

cossin2sincos2cosd

d 2 −=−=

可以运行以下 MATLAB 语句求复合函数的导数:

x=sym(’x’);

diff(cos(x)^2) 即求得导数

Page 64: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

52

ans = -2*cos(x)*sin(x)

若求导数 ( )2cosd

dx

x,即作运算: ( ) ( ) ( ) 222 sin22sincos

d

dxxxxx

x−=⋅−= 。可以运行以下

MATLAB 函数命令,求复合函数的导数。

sym x;

diff(cos(x^2)) 即求得导数 ans = -2*sin(x^2)*x

【例 3-5】计算不定积分 ∫ xx d 。即作运算 Cxxx +=∫ 2

2

1d 。可运行以下两条 MATLAB 语句:

sym x;

int(x)

即得不定积分的结果: ans = 1/2*x^2

[说明]

MATLAB 的不定积分计算结果,无积分常数部分。

【例 3-6】计算定积分 ∫b

axx d2 。即作运算 ( )3332

3

1

3

1d abxxx

b

a

b

a−==∫ 。可运行以下两条

MATLAB 语句:

syms x a b;

int(x^2,a,b)

即得定积分的结果: ans =1/3*b^3-1/3*a^3

【例3-7】求以下矩阵行列式的值

=

dc

bap 。即作运算 ( ) bcaddet −=p 。可以运行以下

MATLAB 语句:

syms a b c d;

p=[a b;c d];

det(p) 即求得行列式的值: ans = a*d-b*c

【例 3-8】求解一阶微分方程 yat

y=

d

d。即作运算

∫∫ = tay

yd

d

caty +=ln

( ) atcatcat cty eeee 1=== +

可以运行以下 MATLAB 语句:

syms a y; dsolve(’Dy=a*y’)

Page 65: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

53

即求得一阶微分方程的解: ans = C1*exp(a*t)

由以上几例已经可以看出:运算的对象全是文字符号,算得的结果也是文字符号;运算

差不多覆盖了初等数学与高等数学的绝大部分内容;这些运算都能用 MATLAB 函数命令的运

行来实现。

3.2 M A T LA B 符号运算的几个基本概念

MATLAB 数值运算的操作对象是数值,而 MATLAB 符号运算的操作对象则是非数值的符

号对象。

通过 MATLAB 的符号运算功能,可以求解科学计算中符号数学问题的符号解析表达精确

解,这在自然科学与工程计算的理论分析中有着极其重要的作用与实用价值。

3.2.1 符号对象

何谓符号对象? 符号对象(symbolic object)是 Symbolic Math Toolbox 定义的一种新的数据

类型(sym 类型),用来存储代表非数值的字符符号(通常是大或小写的英文字母及其字符串)。符

号对象可以是符号常量(符号形式的数)、符号变量、符号函数以及各种符号表达式(符号数

学表达式、符号方程与符号矩阵)等。

在 MATLAB 中,符号对象可利用函数命令 sym( )、syms( )来建立,而利用函数命令 class( )

来测试建立的操作对象为何种操作对象类型、是否为符号对象类型(即 sym 类型)。以下就来

介绍函数命令 sym( )、syms( )与 class( )的调用格式、功能及其使用说明。

3.2.2 创建符号对象与函数命令 sym( )、syms( )与 class( )

在一个 MATLAB 程序中,作为符号对象的符号常量、符号变量、符号函数以及符号表达

式,首先得用函数命令 sym( )、syms( )加以规定即创建。

1. 函数命令 sym( )的调用格式

格式 1 S=sym(A)

格式 2 S=sym(’A’)

命令功能是由 A 来建立一个符号对象 S,其类型为 sym 类型。如果 A(不带单引号) 是一

个数字(值)或数值矩阵或数值表达式,则输出是将数值对象转换成的符号对象。如果 A(带单

引号) 是一个字符串,输出则是将字符串转换成的符号对象。

格式 3 S=sym(A,flag)

命令功能同 S=sym(A)。只不过转换成的符号对象应符合 flag 格式。flag 可取以下选项:

’d’——最接近的十进制浮点精确表示;

’e’——带(数值计算时)估计误差的有理表示;

’f’——十六进制浮点表示;

’r’——为缺省设置,是最接近有理表示的形式。这种形式是指用两个正整数 p,q 构成的

p/q,p*pi/q,sqrt(p),2^p,10^q 表示的形式之一。

格式 4 S=sym(’A’,flag)

命令功能同 S=sym(’A’)。只不过转换成的符号对象应按 flag 指定的要求。flag 可取以下

Page 66: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

54

“限定性”选项:

’positive’——限定 A 为正的实型符号变量;

’real’——限定 A 为实型符号变量;

’unreal’——限定 A 为非实型符号变量。

2. 函数命令 syms( )的调用格式

syms s1 s2 s3 flag; 命令功能是建立 3(多)个符号对象:s1、s2、s3。指定的要求即按 flag 取的“限定性”选

项同上。

3. 函数命令 class( )的调用格式

str=class(object) 命令功能是返回指代数据对象类型的字符串。数据对象类型计有:

cell CELL 数组

char 字符数组

double 双精度浮点数值类型

int8 8 位带符号整型数组

int16 16 位带符号整型数组

int32 32 位带符号整型数组

sparse 实(或复)稀疏矩阵

struct 结构数组

unint8 8 位不带符号整型数组

unint16 16 位不带符号整型数组

unint32 32 位不带符号整型数组

<class_name> 用户定义的对象类型

<java_class> java 对象的 java 类型

sym 符号对象类型

3.2.3 符号常量

符号常量是一种符号对象。数值常量如果作为函数命令 sym( )的输入参量,这就建立了

一个符号对象—符号常量,即看上去的一个数值量,但它已是一个符号对象了。创建的这个

符号对象可以用 class( ) 函数来检测其数据类型的。请看以下示例。

【例 3-9】对数值量 1/8 创建符号对象并检测数据的类型。

【解】

用以下 MATLAB 语句来创建符号对象并检测数据的类型:

a=1/8;

b=’1/8’;

c=sym(1/8);

d=sym(’1/8’);

classa=class(a)

classb=class(b)

classc=class(c)

Page 67: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

55

classd=class(d)

语句执行结果

classa = double

classb = char

classc = sym

classd = sym

即 a 是双精度浮点数值类型;b 是字符类型;c 与 d 都是符号对象类型。

3.2.4 符号变量

变量是程序设计语言的基本元素之一。MATLAB 数值运算中,变量是内容可变的数据。而

MATLAB 符号运算中,符号变量是内容可变的符号对象。符号变量通常是指一个或几个特定的

字符,不是指符号表达式,虽然可以将一符号表达式赋值给一个符号变量。符号变量有时也

叫做自由变量。符号变量与 MATLAB 数值运算的数值变量名称的命名规则相同:

(1) 变量名可以由英语字母、数字和下划线组成;

(2) 变量名应以英语字母开头;

(3) 组成变量名的字符长度不大于 31 个;

(4) MATLAB 区分大小写英语字母。

在 MATLAB 中,可以用函数命令 sym ( ) 或 syms ( ) 来建立符号变量。 【例 3-10】用函数命令 sym ( ) 与 syms ( ) 建立符号变量α 、 β 、γ 。

【解】

(1) 用函数命令 sym ( ) 来创建符号对象并检测数据的类型:

a=sym(’alpha’);

b=sym(’beta’);

c=sym(’gama’);

classa=class(a)

classb=class(b)

classc=class(c) 语句执行,检测数据对象α 、 β 、γ 均为符号对象类型。

classa = sym

classb = sym

classc = sym

(2) 用函数命令 syms ( ) 来创建符号对象并检测数据的类型:

syms alpha beta gama;

classa=class(alpha)

classb=class(beta)

classg=class(gama)

语句执行,检测数据对象α 、 β 、γ 也是符号对象类型: classa = sym

classb = sym

classg = sym

Page 68: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

56

3.2.5 符号表达式、符号函数与符号方程

表达式也是程序设计语言的基本元素之一。MATLAB 数值运算中,数字表达式是由常量、

数值变量、数值函数或数值矩阵用运算符连接而成的数学关系式。而 MATLAB 符号运算中,

符号表达式是由符号常量、符号变量、符号函数用运算符或专用函数连接而成的符号对象。

符号表达式有两类:符号函数与符号方程。符号函数不带等号,而符号方程是带等号的。

在 MATLAB 中,同样用命令 sym ( ) 来建立符号表达式。

【例 3-11】用函数命令 sym ( ) 与 syms ( ) 建立符号函数 1f 、 2f 、 3f 、 4f 并检测符号对象的

类型。

【解】

用函数命令 syms ( ) 与 sym ( ) 来创建符号函数并检测数据的类型:

syms n x T wc; f1=n*x^n/x;

classf1=class(f1) f2=sym(log(t)^2*t+p);

classf2=class(f2) f3=sym(’w+sin(a*z)’);

classf3=class(f3) f4=pi+atan(T*wc);

classf4=class(f4)

语句执行,检测符号函数均为符号对象类型:

classf1 = sym

classf2 = sym

classf3 = sym

classf4 = sym 【例 3-12】用函数命令 sym ( ) 建立符号方程 1e 、 2e 、 3e 、 4e 并检测符号对象的类型。

【解】

用函数命令 sym ( ) 来创建符号方程并检测数据的类型:

e1=sym(’a*x^2+b*x+c=0’)

classe1=class(e1) e2=sym(’log(t)^2*t=p’)

classe2=class(e2)

e3=sym(’sin(x)^2+cos(x)=0’)

classe3=class(e3)

e4=sym(’Dy-y=x’)

classe4=class(e4)

语句执行,检测符号方程均为符号对象类型:

classe1 = sym

classe2 = sym

classe3 = sym

Page 69: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

57

classe4 = sym

3.2.6 函数命令 findsym( )

在微积分、函数表达式化简、解方程中,确定自变量是必不可少的。在不指定自变量的

情况下,按照数学常规,自变量通常都是小写英文字母,并且为字母表末尾的几个如 t 、 w 、

x 、 y 、 z 等等。在 MATLAB 中,可以用函数 findsym ( )按这种数学习惯来确定一个符号表

达式中的自变量,这对于按照特定要求进行某种计算是非常有实用价值的。

函数命令 findsym ( ) 的调用格式为:

格式 1 findsym (f,n )

这种格式的功能是按数学习惯确定符号函数 f 中的 n 个自变量。当指定的 n=1 时,从符

号函数 f 中找出在字母表中与 x 最近的字母;如果有两个字母与 x 的距离相等,则取较后的一

个。当输入参数 n 缺省时,函数命令将给出 f 中所有的符号变量。

格式 2 findsym (e,n)

这种格式的功能是按数学习惯确定符号方程 e 中的 n 个自变量,其余功能同上。 【例 3-13】用函数命令 findsym ( ) 确定符号函数 1f 、 2f 中的自变量。

【解】 用以下 MATLAB 语句来确定符号函数 1f 、 2f 中的自变量:

syms k m n w y z; f=n*y^n+m*y+w;

ans1=findsym(f,1) f2=m*y+n*log(z)+exp(k*y*z);

ans2=findsym(f2,2) 语句执行结果

ans1 = y

ans2 = y,z 【例 3-14】用函数命令 findsym ( ) 确定符号方程 1e 、 2e 中的自变量。

【解】 用以下 MATLAB 语句来确定符号方程 1e 、 2e 中的自变量:

syms a b c x p q t w;

e1=sym(’a*x^2+b*x+c=0’);

ans1=findsym(e1,1) e2=sym(’w*(sin(p*t+q))=0’);

ans2=findsym(e2)

语句执行结果如下:

ans1 = x

ans2 = p, q, t, w

3.2.7 数组、矩阵与符号矩阵

1. 数组

数组(Array)是由一组复数排成的长方形阵列(而实数可视为复数的虚部为零的特例)。

Page 70: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

58

对于 MATLAB,在线性代数范畴之外,数组也是进行数值计算的基本处理单元。一行多列的

数组是行向量;一列多行的数组就是列向量;数组可以是二维的“矩形”,也可以是三维的,

甚至还可以是多维的。多行多列的“矩形”数组与数学中的矩阵从外观形式与数据结构上看,

没有什么区别。

在 MATLAB 中,定义了一套数组运算规则及其运算符,但数组运算是 MATLAB 软件所

定义的规则,规则是为了管理数据方便、操作简单、指令形式自然、程序简单易读与运算高

效。在 MATLAB 中的大量数值计算是以数组形式进行的。而在 MATLAB 中凡是涉及线性代

数范畴的问题,其运算则是以矩阵作为基本的运算单元。

2. 矩阵 线性代数中矩阵是这样定义的:有 nm× 个数 ),2,1;,,2,1( njmiaij == 的数组,将其排

成如下格式(用方括号括起来):

=

mnmm

n

n

aaa

aaa

aaa

21

22221

11211

A

此表作为整体,将它当作一个抽象的量称为矩阵,且是 m 行 n 列的矩阵。横向每一行所有元

素依次序排列则为行向量;纵向每一列所有元素依次序排列则为列向量。请特别注意,数组

用方括号括起来后已作为一个抽象的特殊量——矩阵。在线性代数中,矩阵有特定的数学涵

义,并且有其自身严格的运算规则。矩阵概念是线性代数范畴内特有的。

在 MATLAB 中,也定义了矩阵运算规则及其运算符。MATLAB 中的矩阵运算规则与线

性代数中的矩阵运算规则相同。

MATLAB 既支持数组的运算也支持矩阵的运算。但在 MATLAB 中,数组与矩阵的运算

却有很大的差别。在 MATLAB 中,数组的所有运算都是对被运算数组中的每个元素平等地执

行同样的操作。矩阵运算是从把矩阵整体当作一个特殊的量这个基点出发,依照线性代数的

规则来进行的运算。

3. 符号矩阵

元素是符号对象(非数值符号的字符符号即符号变量与符号形式的数即符号常量)的矩阵

叫做符号矩阵。符号矩阵既可以构成符号矩阵函数(不代等号),也可以构成符号矩阵方程(代

等号),它们都是符号表达式。

数值矩阵与符号矩阵的 MATLAB 表达式的书写特点是:矩阵必须用一对方括号括起来,

行之间用分号分隔,一行的元素之间用逗号或空格分隔。有关符号矩阵的运算及其应用将在

后面予以介绍,这里只举一例说明符号矩阵的创建。 【例 3-15】用函数命令 sym ( ) 建立符号矩阵函数 1m 、 2m 与符号矩阵方程 3m 并检测符号对

象的类型。

【解】 用函数命令 sym ( ) 来创建符号矩阵 1m 、 2m 、 3m 并检测符号对象的类型:

m1=sym(’[ab bc cd;de ef fg;h I j]’);

clam1=class(m1)

m2=sym(’[1 12;23 34]’);

clam2=class(m2)

Page 71: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

59

m3=sym(’[a b;c d]*x=0’);

clam3=class(m3) 语句执行结果

clam1 = sym

clam2 = sym

clam3 = sym

3.3 M A T LA B 符号对象的基本运算

3.3.1 MATLAB 的特殊变量与常量

MATLAB 的符号对象中有符号常量与符号变量。MATLAB 中设置了一些特殊的变量与

常量,现列于表 3-1 中。

表 3-1 MATLAB 的特殊变量与常量

变 量 名 功 能 说 明 变 量 名 功 能 说 明

ANS(或 ans) 缺省变量名,以应答最近一次操作运算结果 realmix 最小的正实数

i 或 j 虚数单位,定义为 1− INF(或 inf) 代表无穷大

pi 圆周率 NaN(或 nan) 代表不定值(即 0/0)

eps 浮点数的相对误差 nargin 函数实际输入参数个数

realman 最大的正实数 nargout 函数实际输出参数个数

3.3.2 MATLAB 的基本函数

在 MATLAB 中,数值计算与符号计算的基本函数是一样的,都是指三角函数、对数函数、

指数函数、复数函数等。

MATLAB 的基本函数如表 3-2 所示。

表 3-2 MATLAB 的基本函数

函 数 名 功 能 函 数 名 功 能

sin 正弦 asech 反双曲正割

cos 余弦 acsch 反双曲余割

tan 正切 exp 指数

cot 余切 log 自然对数

sec 正割 log10 常用对数

csc 余割 log2 以 2 为底的对数

asin 反正弦 pow2 以 2 为底的指数

acos 反余弦 sqrt 平方根

atan 反正切 abs 绝对值(复数的模)

atan2 四象限反正切 angle 复数的相角

Page 72: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

60

(续)

函 数 名 功 能 函 数 名 功 能

acot 反余切 conj 复数的共轭

asec 反正割 imag 复数的虚部

acsc 反余割 real 复数的实部

sinh 双曲正弦 isreal 是否为复数

cosh 双曲余弦 fix 向 0 取整

tanh 双曲正切 floor 向负无穷方向取整

coth 双曲余切 ceil 向正无穷方向取整

asinh 反双曲正弦 round 四舍五入

acosh 反双曲余弦 mod 除法求余(与除数同号)

atanh 反双曲正切 rem 除法求余(与被除数同号)

acoth 反双曲余切 sign 符号函数

3.3.3 MATLAB 的符号运算符

运算符“+”、“-”、“*”、“\”、“/”与“^”分别用来实现符号对象的加、减、乘、左除、

右除与求幂运算。运算符“.*”、“.\”、“./”与“.^”分别用来实现

符号数组的乘、左除、右除与求幂运算。

对于符号对象的关系运算,只有是否“等于”的关系概念,没有“大于”、“小于”等的

概念。运算符“= =”、“~ =”分别对算符两端的对象进行“相等”、“不等”的比较。当比较

的结果为“真”时,语句执行后返回“1”;当比较的结果为“假”时,语句执行后返回“0”。

3.3.4 MATLAB 的特殊运算符

MATLAB 中经常使用的特殊运算符如表 3-3 所示。需要特别指出,表 3-3 中的特殊运算

符是指在英语输入状态下输入的字符,若在汉字输入状态下输入则无效。

表 3-3 MATLAB 特殊运算符

符 号 功 能 说 明 符 号 功 能 说 明

: 冒号,在 MATLAB 中非常重要(参见表 3-702) . 小数点或域访问符

; 分号,用于分隔行 .. 父目录

, 逗号,用于分隔列 … 用于语句行尾端表示该行未完

( ) 圆括号,指出在算术表达式中先后次序 % 用于注释

[ ] 方括号,用于构成向量和矩阵 ! 用于调用操作系统命令

大括号,用于构成单元数组 = 用于赋值

3.3.5 MATLAB 符号表达式的书写

不论 MATLAB 的数值表达式还是符号表达式,其书写格式都与其它计算机高级语言几

乎相同。但是,当输入 MATLAB 表达式时还是会经常出错。笔者根据自己的体会,提出以

下几条请予以特别注意。

Page 73: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

61

(1) 表达式需在同一行内书写。

(2) 自然常数 π 的书写形式为“pi”;虚数单位的书写形式为“i”或“j”;无穷大的书写

形式为“inf”或“INF”。

(3) 符号变量相乘不能连写,必须用乘号“*”将两变量加以连接。

(4) 一般数学表达式中可以使用大括号、中括号与小括号,而 MATLAB 的表达式只能用

一种小括号。当 MATLAB 函数嵌套调用时,多重小括号嵌套使用,要特别当心出错。

(5) 三角函数与双曲函数及其反函数、对数函数的自变量必须用小括号加以限定。

(6) 分式的书写,注意分子分母最好都分别用小括号加以限定。特别是分母,当省略小括

号的限定时,往往容易出错。

(7) 求幂运算的指数两侧最好用小括号加以限定,否则,指数为分式时极易出错。

(8) 某量 k 的平方根的表示,书写形式 sqrt(k)与 k^(1/2)等效。

(9) 自然常数 e 的指数运算的书写形式为 exp( ),这种对应关系必须记住。

(10) MATLAB 的符号计算中,只有求以 e 为底的自然对数(数学中的 ln),特别注意其函

数书写形式为 log( )。MATLAB 的符号计算中没有数值计算中的函数 log2( )与 log10( )。

至于还有一些特殊的书写规定,例如微分方程的微分符号、积分变换中的单位阶跃函数

与单位脉冲函数等,将在以后的相关部分予以介绍。

【例 3-16】将数学表达式 ( ) 11ln

1

Caxay

+−−⋅= 写成 MATLAB 表达式。

【解】

根据 MATLAB 书写规则,上式的 MATLAB 表达式为:

y=1/(a*log(1-x-a)+C1)

【例 3-17】将数学表达式 ( ) ( ) xx xCxCy e2cose2sin 21 ⋅⋅+⋅⋅= 写成 MATLAB 表达式。

【解】

根据 MATLAB 书写规则,上式的 MATLAB 表达式为:

y=C1*exp(x)*sin(2*x)+C2*exp(x)*cos(2*x)

【例 3-18】将数学表达式π

⋅= tf at 2e 写成 MATLAB 表达式。

【解】

根据 MATLAB 书写规则,上式的 MATLAB 表达式为:

f=exp(a*t)*2*sqrt(t/pi)

【例 3-19】将数学表达式 ( ) =zFaTz

zlne ⋅−

写成 MATLAB 表达式。

【解】

根据 MATLAB 书写规则,上式的 MATLAB 表达式为:

F=z/(z-exp(log(a)*T))

3.3.6 MATLAB 符号对象的基本运算

在 MATLAB 数值运算中,操作对象的加、减、乘、左除、右除与幂指数运算是分别使

用运算符“+”、“—”、“*”、“\”、“/”与“^”实现的。而在 MATLAB 符号运算中,除使用以

上运算符外还可分别调用函数 symadd ( ) 、symsub ( ) 、symmul ( ) 、symdiv ( ) (操作

Page 74: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

62

对象的右除)与 sympow ( ) 来实现操作对象相应的运算。在此,仅就采用函数命令实现的符

号对象的基本运算作介绍并简单举例。

1. 符号加

使用函数 symadd ( ) 实现符号对象的加法运算。其函数调用格式为:

symadd ( A,B )

用来实现符号表达式或符号矩阵 A、B 相加:A+B。

【例 3-20】已知表达式 1321 ++= xxf 与 8465 23

2 +++= xxxf ,试计算 =+ 21 ff ?

【解】

用以下 MATLAB 语句来进行计算:

f1=sym (’x^2+3*x+1’);

f2=sym (’5*x^3+6*x^2+4*x+8’);

f12=symadd(f1,f2)

语句执行结果 f12 = 7*x^2+7*x+9+5*x^3

【例 3-21】已知符号矩阵

=

3423

1211f 与

=

55

552f ,试计算 =+ 21 ff ?

【解】

用以下 MATLAB 语句来进行计算:

f1=sym(’[1 12;23 34]’);

f2=sym(’[5 5;5 5]’) ;

f12=symadd(f1,f2) 语句执行结果

f12 = [ 6, 17]

[ 28, 39]

=+

3928

17621 ff 。

2. 符号减

使用函数 symsub ( ) 实现符号对象的减法运算。其函数调用格式为:

symsub ( A,B )

用来实现符号表达式或符号矩阵 A、B 相减:A-B。 【例 3-22】已知表达式 taf cos1 += 与 tbf sin2 = ,试计算 =− 12 ff ?

【解】

用以下 MATLAB 语句来进行计算:

f1=sym (’a+cos(t)’); f2=sym (’b*sin(t)’);

symsub(f2,f1) 语句执行结果

ans = b*sin(t)-a-cos(t)

3. 符号乘

使用函数 symmul ( ) 实现符号对象的乘法运算。其函数调用格式为:

Page 75: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

63

symmul ( A,B )

用来实现符号表达式或符号矩阵 A、B 相乘:A×B。 【例 3-23】已知表达式 baf +=1 与 caf +=2 ,试计算 =× 21 ff ?

【解】

用以下 MATLAB 语句来进行计算:

f1=sym (’a+b’);

f2=sym (’a+c’);

f12=expand(symmul(f1,f2)) 语句执行结果

f12 = a^2+a*c+b*a+b*c

4. 符号除

矩阵除法运算有左除与右除之分,即运算符“\” 和“/” 指代的运算。其运算规则是:

a\b=inv(a)*b,a/b=a*inv(b)。inv( )为矩阵求逆的函数命令,将在第 6 章中介绍。使用函数 symdiv

( ) 只能实现符号对象的右除(相当于“/” 运算符)运算。其函数调用格式为:

symdiv ( A,B )

用来实现符号表达式或符号矩阵 A、B 的右除运算:A/B。

【例 3-24】有符号表达式 kpckybpxbcxyapxyacxe +++++= 221 与 pcye +=2 ,试计算

=21 / ee ?

【解】

用以下 MATLAB 语句来进行计算: syms a b c p k x y e e1 e2;

e1=a*c*x^2*y+a*p*x^2+b*c*x*y+b*p*x+c*k*y+k*p;

e2=c*y+p;

ans1=simple(e1/e2)

ans2=simple(symdiv(e1,e2)) ans3=simple(e1*inv(e2))

语句执行结果 ans1 = a*x^2+b*x+k

ans2 = a*x^2+b*x+k

ans3 = a*x^2+b*x+k

即使用函数 symdiv ( ) 与使用“/”运算符实现右除运算的结果相同,并且其运算规则是:

a/b=a*inv(b)。

5. 符号表达式的幂运算

使用函数 sympow ( ) 实现符号对象的幂指数运算。其函数调用格式为:

sympow ( S, p ) 用来计算 pS (即 S^p)。如果 S 是一个纯量的符号表达式, p 可以是一个纯量的符号表达

式,也可以是一个纯量的数值表达式;如果 S 是一个符号矩阵,则 S 必须是方阵,且 p 必须

是整数。

【例 3-25】已知表达式 baxf +=1 与

=

dc

baf 2 ,试计算 =3

1f ?与 =21f ?

Page 76: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

64

【解】

用以下 MATLAB 语句来进行计算: f1=sym (’(a*x+b)’);

p1=sym (’3’);

f1p1=expand(sympow(f1,p1)) fp1=expand(f1*f1*f1)

f2=sym(’[a b;c d]’);

p2=sym(’2’);

f2p2=f2^p2

语句执行结果 f1p1 = a^3*x^3+3*a^2*x^2*b+3*a*x*b^2+b^3

fp1 = a^3*x^3+3*a^2*x^2*b+3*a*x*b^2+b^3

f2p2 = [ a^2+b*c, a*b+b*d]

[ a*c+d*c, b*c+d^2]

即计算 31f 就是求 111 fff ×× ,两者运算效果相同。

3.4 M A T LA B 符号运算的基本内容

除符号对象的加减乘除、乘方开方基本运算外,本节介绍的几个函数在符号运算中非常

重要,因为它们极具实用价值。

3.4.1 符号变量代换及其函数 subs( )

使用函数 subs ( ) 实现符号变量代换。其函数调用格式为:

subs (S, old , new) 这种格式的功能是将符号表达式 S 中的 old 变量替换为 new。old 一定是符号表达式 S 中

的符号变量,而 new 可以是符号变量、符号常量、双精度数值与数值数组等。

subs (S, new )

这种格式的功能是用 new 置换符号表达式 S 中的自变量。其它同上。

【例 3-26】已知 kbyaxf n ++= ,试对其进行符号变量替换: ta sin= 、 wb ln= 、 tck de −= ;

符号常量替换: 5=n 、 π=k 与数值数组替换: 4:1:1=k 。

【解】

用以下 MATLAB 程序进行符号变量、符号常量与数值数组替换: syms a b c d k n x y w t; f=a*x^n+b*y+k

f1=subs(f,[a b],[sin(t) log(w)]) f2=subs(f,[a b k],[sin(t) log(w) c*exp(-d*t)])

f3=subs(f,[n k],[5 pi])

f4=subs(f1,k,1:4) 程序运行结果

Page 77: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

65

f = a*x^n+b*y+k

f1 = sin(t)*x^n+log(w)*y+k

f2 = sin(t)*x^n+log(w)*y+c*exp(-d*t)

f3 = a*x^5+b*y+pi

f4 = [sin(t)*x^n+log(w)*y+1, sin(t)*x^n+log(w)*y+2,

sin(t)*x^n+log(w)*y+3, sin(t)*x^n+log(w)*y+4]

若要对符号表达式进行两个变量的数值数组替换,可以用循环程序来实现,不必使用函

数 subs ( )。这样既简单,又明了而高效。请看以下示例。

【例 3-27】已知 kxaf += sin ,试求当 2:1:1=a 与3

:6

:0ππ=x 时函数 f 的值。

【解】

用以下 MATLAB 程序进行求值:

syms a k; f=a*sin(x)+k;

for a=1:2;

for x=0:pi/6:pi/3; f1=a*sin(x)+k

end

end 程序运行第一组(当 1=a 时)结果:

f1 = k

f1 = 1/2+k f1 = 1/2*3^(1/2)+k

程序运行第二组(当 2=a 时)结果:

f1 = k

f1 = 1+k

f1 = 3^(1/2)+k

3.4.2 符号对象转换为数值对象的函数 double( )、digits( )、vap( )、numeric( )

大多数 MATLAB 符号运算的目的是为了计算表达式的数值解,于是需要将符号表达式的

解析解转换为数值解。

当要得到双精度数值解时,可使用函数 double( ) ;当要得到指定精度的精确数值解时,

可联合使用以下 digits( )与 vpa( )两个函数来实现解析解的数值转换。

1. 函数 double( )

double(C) 这种格式的功能是将符号常量 C 转换为双精度数值。

2. 函数 digits( )

要得到指定精度的数值解时,使用函数 digits ( )设置精度,其函数调用格式为:

digits(D)

这种格式的功能是设置有效数字个数为 D 的近似解精度。

Page 78: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

66

3. 函数 vpa ( )

使用函数 vpa ( ) 精确计算表达式的值。其函数调用格式有两种:

格式 1. R=vpa ( E )

这种格式必须与函数 digits ( D )连用,在其设置下,求得符号表达式 E 的设定精度的数值

解,请注意,返回的数值解则为符号对象类型了。

格式 2. R=vpa ( E, D )

这种格式的功能是求得符号表达式 E 的 D 位精度的数值解,返回的数值解也是符号对象

类型。

4. 函数 numeric( )

使用函数 numeric ( ) 将符号对象转换为数值形式。其函数调用格式为:

N=numeric (E)

这种格式的功能是将不含变量的符号表达式 E 转换为 double 双精度浮点数值形式,其效

果与 N=double( sym(E) ) 相同。请看以下示例。

【例 3-28】计算以下三个符号常量的值: 7ln21 =c 、 3.12 e

5sin

ππ=c 与 π= 83 ec ,并将结

果转换为双精度型数值。

【解】

用以下 MATLAB 程序进行双精度数值转换:

syms c1 c2 c3; c1=sym(’sqrt(2)*log(7)’);

c2=sym(’pi*sin(pi/5)*exp(1.3)’);

c3=sym(’exp(pi*sqrt(8))’);

ans1=double(c1)

ans2=double(c2)

ans3=double(c3)

class(ans1)

class(ans2)

class(ans3)

程序运行结果

ans1 = 2.7519

ans2 = 6.7757

ans3 = 7.2283e+003

ans = double

ans = double

ans = double

即 7519.27ln21 ==c 、 7757.6e5

sin 3.12 =ππ=c 与 3.7228e 8

3 == πc ,并且它们都是双精

度型数值。

【例 3-29】计算以下符号常量的值: π= 79ec 并将结果转换为指定精度 8 位与 18 位的精确

数值解。

Page 79: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

67

【解】

用以下 MATLAB 程序进行数值转换:

c=sym(’exp(pi*sqrt(79))’);

c1=double(c)

ans1=class(c1)

c2=vpa(c1,8)

ans2=class(c2)

digits 18

c3=vpa(c1)

ans3=class(c3)

c4=numeric(c3)

ans4=class(c4) 程序运行结果

c1 = 1.3392e+012

ans1 = double

c2 = .13391903e13

ans2 = sym

c3 = 1339190288739.15527

ans3 = sym

c4 = 1.3392e+012

ans4 = double

3.4.3 MATLAB 符号表达式的化简

在 MATLAB 中,提供了多个对符号表达式进行化简的函数,诸如因式分解、同类项合并、

符号表达式的展开、符号表达式的化简与通分等,它们都是表达式的恒等变换。

1. 函数 factor( )

符号表达式因式分解的函数命令 factor( ),其调用格式为:

factor(E) 这是一种恒等变换,格式的功能是对符号表达式 E 进行因式分解,如果 E 包含的所有元

素为整数,则计算其最佳因式分解式。对于大于 522 的整数的分解,可使用语句 factor

(sym(’N’))。 【例 3-30】已知 123 −−+= xxxf ,试对其因式分解。

【解】

用以下 MATLAB 语句进行因式分解: syms x;

f=x^3+x^2-x-1;

f1=factor(f)

语句执行结果 f1 = (x-1)*(x+1)^2

即 ( ) ( )223 111 +⋅−=−−+= xxxxxf 。

Page 80: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

68

【例 3-31】已知 ( ) ( ) ( )224224224 bacacbcbaf −+−+−= ,试对其因式分解。

【解】

用以下 MATLAB 语句进行因式分解:

syms a b c; f=a^4*(b^2-c^2)+b^4*(c^2-a^2)+c^4*(a^2-b^2);

f1=factor(f) 语句执行结果

f1 = (b-c)*(b+c)*(a-c)*(a+c)*(a-b)*(a+b)

( ) ( ) ( )224224224 bacacbcbaf −+−+−=

( ) ( ) ( ) ( ) ( ) ( )babacacacbcb +⋅−⋅+⋅−⋅+⋅−= 。

【例 3-32】已知 c=1234567890 1234567890,试对其进行质因子分解。

【解】

以下 MATLAB 语句进行质因子分解:

c=sym(’12345678901234567890’);

factor(c) 语句执行结果

ans = (2)*(3)^2*(5)*(101)*(3803)*(3607)*(27961)*(3541)

即 3541279613607380310153212345678901234567890 ×××××××==c 。

2. 函数 expand( )

符号表达式展开的函数 expand( ),其调用格式为:

expand(E ) 格式的功能是将符号表达式 E 展开,这种恒等变换常用在多项式表示式、三角函数、指

数函数与对数函数的展开中。

【例 3-33】已知 ( )3yxf += ,试将其展开。

【解】

用以下 MATLAB 语句进行展开:

syms x y;

f=(x+y)^3;

f1=expand(f)

语句执行结果 f1 = x^3+3*x^2*y+3*x*y^2+y^3

即 ( ) 32233 33 yxyyxxyxf +++=+= 。

【例 3-34】已知 ( )xf arccos3cos= ,试将其展开。

【解】

用以下 MATLAB 语句进行展开:

syms x; f=cos(3*acos(x));

f1=expand(f)

Page 81: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

69

语句执行结果 f1 = 4*x^3-3*x

即 ( ) xxxf 34arccos3cos 3 −== 。

3. 函数 collect ( )

符号表达式同类项合并的函数 collect( ),其调用格式有两种:

格式 1. collect (E, v)

这是一种恒等变换,格式的功能是将符号表达式 E 中的 v 的同幂项系数合并。

格式 2. collect ( E)

这种格式的功能是将符号表达式 E 中由函数 findsym( )确定的默认变量的系数合并。

【例 3-35】已知 cxcx baxf −− +−= ee ,试对其同类项进行合并。

【解】

用以下 MATLAB 程序对同类项进合并:

syms a b c x; f=-a*x*exp(-c*x)+b*exp(-c*x);

f1=collect(f,exp(-c*x))

语句执行结果 f1 = (-a*x+b)*exp(-c*x)

即 ( ) cxcxcx axbbaxf −−− −=+−= eee 。

【例 3-36】已知 bxaxxyyxf −−+= 22 ,试对其同类项进行合并。

【解】

用以下 MATLAB 语句对同类项进合并:

syms a b n x y; f=x^2*y+y*x-a*x^2-b*x;

f1=collect(f) 语句执行结果

f1 = (y-a)*x^2+(y-b)*x

即 ( ) ( ) xbyxaybxaxxyyxf −+−=−−+= 222 。

4. 函数 simplify( )与 simple( )

符号表达式化简的函数 simplify( )与 simple( ),函数命令 simplify( )调用格式为:

simplify(E) 这种格式的功能是将符号表达式 E 运用多种恒等式变换进行综合化简。

【例 3-37】试对 xxe 221 cossin += 与 ( )βα +⋅= ln

2 ece 进行综合化简。

【解】

用以下 MATLAB 语句进行综合化简:

syms x n c alph beta;

e10=sin(x)^2+cos(x)^2;

e1=simplify(e10) e20=exp(c*log(alph+beta));

e2=simplify(e20)

Page 82: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

70

语句执行结果

e1 = 1

e2 = (alph+beta)^c

即 1cossin 221 =+= xxe , ( ) ( )cce βαβα +== +⋅ln

2 e 。

函数命令 simple( )调用格式为:

格式 1. simple(E)

这种格式的功能是对符号表达式 E 尝试多种不同(包括 simplify)的简化算法,以得到符号

表达式 E 的长度最短的简化形式。若 E 为一符号矩阵,则结果为全矩阵的最短形,而可能不

是每个元素的最短形。

格式 2. [R,HOW]=simple(E)

这种格式的功能是对符号表达式 E 尝试多种不同(包括 simplify)的简化算法,返回参数 R

为表达式的简化型,HOW 为简化过程中使用的简化方法。 【例 3-38】试对 yxe lnln1 += 、 xxe 22

2 sincos2 −= 、 xxe sinjcos3 += 、 133 234 +++= xxxe

与 xxe 225 sincos −= 进行化简,并返回使用的简化方法。

【解】

用以下 MATLAB 语句进行化简: syms x y;

e1=log(x)+log(y);

[R1,HOW1]=simple(e1) e2=2*cos(x)^2-sin(x)^2;

[R2,HOW2]=simple(e2) e3=cos(x)+j*sin(x);

[R3,HOW3]=simple(e3) e4=x^3+3*x^2+3*x+1;

[R4,HOW4]=simple(e4)

e5=cos(x)^2-sin(x)^2;

[R5,HOW5]=simple(e5)

语句执行结果

R1 = log(x)+log(y)

HOW1 = collect(x) R2 = 3*cos(x)^2-1

HOW2 = simplify R3 = exp(i*x)

HOW3 = convert(exp)

R4 = (x+1)^3

HOW4 = factor R5 = cos(2*x)

HOW5 = combine

由计算的结果,可以列出表 3-4。由此而知 simple( )函数所使用的方法非常多,当然函数

的应用也就十分广泛。

Page 83: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

71

表 3-4 符号函数简化示例表

S R How

cos(x)^2+sin(x)^2 1 combine(trig)

2*cos(x)^2-sin(x)^2 3*cos(x)^2-1 simplify

cos(x)^2-sin(x)^2 cos(2*x) combine(trig)

cos(x)+(-sin(x)^2)^(1/2) cos(x)+i*sin(x) radsimp

cos(x)+i*sin(x) exp(i*x) convert(exp)

(x+1)*x*(x-1) x^3-x collect(x)

x^3+3*x^2+3*x+1 (x+1)^3 factor

cos(3*acos(x)) 4*x^3-3*x expand

log(x) + log(y) log(x*y) collect

5. 函数 numden( )

符号表达式通分的函数 numden( ),其调用格式为:

[N, D]=numden(E)

这是一种恒等变换,格式的功能是将符号表达式 E 通分,分别返回 E 通分后的分子 N 与

分母 D,并转换成的分子与分母都是整系数的最佳多项式形式。只需要再计算 N/D 即求得符

号表达式 E 通分的结果。若无等号左边的输出参数,则仅返回 E 通分后的分子 N。请看以下

示例。

【例 3-39】已知px

y

ky

xf += ,试对其进行通分。

【解】

用以下 MATLAB 语句对同类项进合并:

syms k p x y; f=x/(k*y)+y/(p*x);

[n,d]=numden(f)

f1=n/d

numden(f) 语句执行结果

n = x^2*p+y^2*k

d = k*y*p*x

f1 = (x^2*p+y^2*k)/k/y/p/x

ans = x^2*p+y^2*k

即kpxy

kypx

px

y

ky

xf

22 +=+= ,当无等号左边的输出参数时,仅返回通分后的分子 N。

6. 函数 horner( )

对符号表达式进行嵌套型分解的函数 horner( ),其调用格式为:

horner(E)

这是一种恒等变换,格式的功能是将符号表达式 E 转换成嵌套形式表达式。

Page 84: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

72

【例 3-40】已知 dxcxbxaxf ++−+−= 234 ,试将其转换成嵌套形式表达式。

【解】

用以下 MATLAB 语句将其转换成嵌套形式表达式:

syms a b c d x; f=-a*x^4+b*x^3-c*x^2+x+d;

f1=horner(f) 语句执行结果

f1 = d+(1+(-c+(b-a*x)*x)*x)*x

即 ( )( )( ) xxxaxbcddxcxbxaxf ⋅⋅⋅−+−++=++−+−= 1234 。

3.4.4 MATLAB 符号运算的其它几个函数

1. 函数 char( )

将数值对象、符号对象转换与为字符对象的函数 char( ),其调用格式为:

char(S) 这种格式的功能是将数值对象或符号对象 S 转换为字符对象。

【例 3-41】试将数值对象 123456=c 与符号对象 zyxf ++= 转换成字符对象。

【解】

用以下 MATLAB 语句进行转换:

syms a b c x y;

c=123456;

ans1=class(c)

c1=char(sym(c))

ans2=class(c1)

f=sym(’x+y+z’);

ans3=class(f)

f1=char(f)

ans4=class(f1) 语句执行结果

ans1 = double

c1 = 123456

ans2 = char

ans3 = sym

f1 = x+y+z

ans4 = char

即原数值对象与符号对象均都转换成字符对象。

2. 函数 pretty( )

以习惯的方式显示符号表达式的函数 pretty( ),其调用格式为:

pretty( E)

以习惯的“书写”方式显示符号表达式 E (包括符号矩阵)。 【例 3-42】 试将 MATLAB 符号表达式 f=a*x/b+c/(d*y)与 sqrt(b^2-4*a*c) 以习惯的“书写”

Page 85: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

73

方式显示。

【解】

用以下 MATLAB 语句进行“书写”显示:

syms a b c d x y; f=a*x/b+c/(d*y);

f1=sqrt(b^2-4*a*c);

pretty(f)

pretty(f1) 语句执行结果

a x c --- + ---

b d y

2 1/2

(b - 4 a c)

即dy

c

b

axf += 与 acbf 41 2 −= 。

3. 函数 clear

清除 MATLAB 工作空间的命令 clear,其调用格式为:

clear 这是一个不带输入参数的命令,其功能是清除 MATLAB 工作空间中保存的变量与函数。

通常置于程序之首,以免原来 MATLAB 工作空间中保存的变量与函数影响新的程序。

3.5 M A T LA B 两种特定的符号函数运算

MATLAB 两种特定的符号函数运算是指复合函数运算与反函数运算。

3.5.1 复合函数的运算与函数命令 compose ( )

设 z 是 y (自变量)的函数 ( )yfz = ,而 y 又是 x (自变量)的函数 ( )xy ϕ= ,则 z 对 x 的函数:

( )( )xfz ϕ= 叫做 z 对 x 的复合函数。求 z 对 x 的复合函数 ( )( )xfz ϕ= 的过程叫做复合函数运

算。

MATLAB 求复合函数的函数命令为 compose ( )。其函数调用格式有以下 6 种:

格式 1. compose ( f, g ) 这种格式的功能是当 ( )xff = 与 ( )ygg = 时返回复合函数 ( )( )ygf ,即用 ( )ygg = 代入

( )xf 中的 x,且 x 为函数命令 findsym( )确定的 f 的自变量,y 为 findsym( )确定的 g 的自变量。

格式 2. compose ( f, g, z ) 这种格式的功能是当 ( )xff = 与 ( )ygg = 时返回以 z 为自变量的复合函数 ( )( )zgf ,即用

( )ygg = 代入 ( )xf 中的 x,且 ( )yg 中的自变量 y 改换为 z。

格式 3. compose ( f, g, x, z )

这种格式的功能同格式 2 的功能。

格式 4. compose ( f, g, t, z )

Page 86: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

74

格式的功能是当 ( )tff = 与 ( )ygg = 时返回以 z 为自变量的复合函数 ( )( )zgf ,即用

( )ygg = 代入 ( )tf 中的 t,且 ( )yg 中的自变量 y 改换为 z。

格式 5. compose ( f, h, x, y, z )

这种格式的功能同格式 2 与格式 3 的功能。

格式 6. compose ( f, g, t, u, z ) 格式的功能是当 ( )tff = 与 ( )ugg = 时返回以 z 为自变量的复合函数 ( )( )zgf ,即用

( )ugg = 代入 ( )tf 中的 t,且 ( )ug 中的自变量 u 改换为 z。

【例 3-43】已知

=

t

xf ln 与 yug cos×= ,求其复合函数 ( )( )xf ϕ 与 ( )( )zgf 。

【解】

用以下 MATLAB 程序计算其复合函数:

syms f g t u x y z;

f=log(x/t); g=u*cos(y);

cfg=compose(f,g)

cfgt=compose(f,g,z)

cfgxz=compose(f,g,x,z)

cfgtz=compose(f,g,t,z)

cfgxyz=compose(f,g,x,y,z)

cfgxyz=compose(f,g,t,u,z) 程序运行结果

cfg = log(cos(y)*u/t)

cfgt = log(cos(z)*u/t)

cfgxz = log(cos(z)*u/t)

cfgtz = log(x/cos(z)/u) cfgxyz = log(cos(z)*u/t)

cfgxyz = log(x/cos(y)/z)

3.5.2 反函数的运算与函数命令 finverse ( )

设 y 是 x (自变量)的函数 ( )xfy = ,若将 y 当作自变量, x 当作函数,则上式所确定的函

数 ( )yx ϕ= 叫做函数 ( )xf 的反函数,而 ( )xf 叫做直接函数。在同一坐标系中,直接函数

( )xfy = 与反函数 ( )yx ϕ= 表示同一图形。通常把 x 当作自变量,而把 y 当作函数,故反函数

( )yx ϕ= 写为 ( )xy ϕ= 。

MATLAB 提供的求反函数的函数命令为 finverse ( )。其函数调用格式有以下 2 种:

格式 1. g=finverse (f, v )

这种格式的功能是求符号函数 f 的自变量为 v 的反函数 g。

格式 2. g=finverse (f )

这种格式的功能是求符号函数 f 的反函数 g,符号函数表达式 f 有单变量 x,函数 g 也是

符号函数,并且有 ( )( ) xxfg = 。

【例 3-44】求函数 baxy += 的反函数。

Page 87: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

75

【解】

(1) 数学分析

有 baxy += ,经恒等变换 axby =− ,得( )

a

ybx

−−= 。若换写 x 作自变量,y 作函数,

则( )

a

xby

−−= 。

(2) 求 baxy += 的反函数的 MATLAB 实现

syms a b x y; y=a*x+b

g=finverse(y)

compose(y,g) 语句执行结果

y = a*x+b

g = -(b-x)/a

ans = x

即 baxy += 的反函数为( )

a

xby

−−= ,且 ( )( ) xxfg = 。

【例 3-45】求函数 yxf += 2 的反函数。

【解】

求 yxf += 2 的反函数的 MATLAB 实现:

syms x y;

f = x^2+y;

g=finverse(f,x)

compose(f,g)

语句执行结果

Warning: finverse(x^2+y) is not unique.

> In F:\MATLAB6.5\toolbox\symbolic\@sym\finverse.m at line 43

g = (-y+x)^(1/2)

ans = x

即 yxf += 2 的反函数为 yxg −= ,且 ( )( ) xxfg = 。

3.6 M A T LA B 符号微积分运算

微分学是微积分的首要组成部分。它的基本概念是导数与微分,其中导数是曲线切线的

斜率,反应函数相对于自变量变化的速度;而微分则表明当自变量有微小变化时函数大体上

变化多少。积分是微分的逆运算。求给定函数为导函数的原函数的运算,此乃是不定积分—

积分学的第一个基本问题。被积函数在积分的上下限区间的计算问题,是定积分—积分学的

第二个基本问题,该问题已由牛顿—莱布尼茨公式解决。微积分学是高等数学重要的基本内容。

Page 88: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

76

3.6.1 MATLAB 符号极限运算

众所周知,微积分中导数的定义是通过极限给出的,即极限概念是数学分析或高等数学

最基本的概念,所以极限运算就是微积分运算的前提与基础。函数极限的概念及其运算在高

等数学中已经学习过,在此来介绍 MATLAB 的符号极限运算的函数命令 limit ( ) 。函数 limit

( ) 的调用格式有以下 5 种。

1.limit(F,x,a)

这种格式用来实现计算符号函数或符号表达式 F 当变量 ax → 条件下的极限值。

【例 3-46】试证明 en

n

n=

+

∞→

11lim 与 e

x

xx

x=

++ +

∞→

1

12

32lim 。

【证】

(1) 可以运行以下 MATLAB 语句来证明:

syms n

limit((1+(1/n))^n,n,inf) 语句运行结果

ans = exp(1)

即 en

n

n=

+

∞→

11lim 得证。

(2) 可以运行以下 MATLAB 语句来证明:

syms x; limit(((2*x+3)/(2*x+1))^(x+1),x,inf)

语句运行结果

ans = exp(1)

即 ex

xx

x=

++ +

∞→

1

12

32lim 得证。

【例 3-47】试求 =−−

→ 1

1lim

1 n

m

x x

x?与 ( ) =

π−

→ 2tan1lim

1

xx

x?

【解】

(1) 可以运行以下 MATLAB 语句来计算:

syms x m n limit(((x^m-1)/(x^n-1)),x,1)

语句运行结果

ans = m/n

=

−−

→ n

m

x

xn

m

x 1

1lim

1

(2) 可以运行以下 MATLAB 语句来计算:

syms x limit((1-x)*tan(pi*x/2),x,1)

语句运行结果

Page 89: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

77

ans = 2/pi

即 ( )π

−→

2

2tan1lim

1

xx

x

2.limit(F,a)

这种格式用来实现计算符号函数或符号表达式 F 中由函数命令 findsym ( )返回的独立变

量趋向于 a 时的极限值。

【例 3-48】试求 =−−

→ ax

ax mm

axlim ?与 =

−−

→ ax

axax

sinsinlim ?

【解】

(1) 可以运行以下 MATLAB 语句来计算:

syms x m a

limit(((x^(1/m)-a^(1/m))/(x-a)),a)

语句运行结果

ans = a^(1/m)/a/m

=

−−

→ ma

a

ax

ax mmm

axlim

(2) 可以运行以下 MATLAB 语句来计算:

syms x a

limit(((sin(x)-sin(a))/(x-a)),a)

语句运行结果

ans = cos(a)

即 aax

axax

cossinsin

lim =−−

3.limit(F)

这种格式用来实现计算符号函数或符号表达式 F 在 0=x 时的极限。

【例 3-49】试求 =→ x

xx

sinlim

0?与

( )( ) =

→ x

xx 5sin

2tanlim

0?

【解】

(1) 可以运行以下 MATLAB 语句来计算:

syms x

limit(sin(x)/x) 语句运行结果

ans = 1

即 1sin

lim0

=→ x

xx

(2) 可以运行以下 MATLAB 语句来计算:

syms x c=limit(tan(2*x)/sin(5*x))

语句运行结果

c = 2/5

Page 90: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

78

即 ( )( ) 5

2

5sin

2tanlim

0=

→ x

xx

4.limit(F,x,a,’right’)

这种格式用来实现计算符号函数或符号表达式 F 在 ax → (从右趋向于 a )条件下的极限值。

5.limit(F,x,a,’left’)

这种格式用来实现计算符号函数或符号表达式 F 在 ax → (从左趋向于 a )条件下的极限

值。

【例 3-50】试求 =−

−+−+→ 220

limax

axaxax

?与 =−

−+−−→ 220

limax

axaxax

【解】

(1) 可以运行以下 MATLAB 语句来计算右极限:

syms x a c=limit(((sqrt(x)-sqrt(a)+sqrt(x-a))/sqrt(x^2-a^2)),x,a,’right’);

c=collect(c) 语句运行结果

c = 1/2*2^(1/2)/a^(1/2)

=

−+−+→ aax

axaxax 2

1lim

220

(2) 可以运行以下 MATLAB 语句来计算左极限:

syms x a

c=limit(((sqrt(x)-sqrt(a)+sqrt(x-a))/sqrt(x^2-a^2)),x,a,’left’);

c=collect(c)

语句运行结果 c = i/(-2*a)^(1/2)

即 jaax

axaxax 2

10lim

220 −+=

−+−−→

【例 3-51】试求 =+→

x

x

1

0elim ?与 =

−→x

x

1

0elim ?

【解】

(1) 可以运行以下 MATLAB 语句来计算右极限:

syms x

c=limit((exp(1))^(1/x),x,0,’right’) 语句运行结果

c = inf

即 ∞=−→

x

x

1

0elim

(2) 可以运行以下 MATLAB 语句来计算左极限:

syms x

c=limit((exp(1))^(1/x),x,0,’left’)

Page 91: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

79

语句运行结果

c = 0

即 0elim1

0=

−→x

x

3.6.2 MATLAB 符号函数微分运算

微分运算是高等数学中除极限运算外的最重要的基本内容。

MATLAB 的符号微分运算,实际上是计算函数的导(函)数。MATLAB 系统提供的函数命

令 diff ( ) 不仅可求函数的一阶导数,而且还可计算函数的高阶导数与偏导数。函数命令 diff ( )

的调用格式有以下 3 种:

1.dfvn=diff(f,’v’,n)

这种格式的功能是对符号表达式或函数 f 按指定的自变量 v计算其 n 阶导(函)数。函数可

以有左端的返回变量,也可以没有。

2.dfn=diff(f,n)

这种格式的功能是对符号表达式或函数 f 按 findsym ( )命令确定的自变量计算其 n 阶导

(函)数。函数可以有左端的返回变量,也可以没有。

3.df=diff(f)

这种格式的功能是对符号表达式或函数 f 按 findsym ( )命令确定的自变量计算其一阶导

(函)数(即函数默认 n=1)。函数可以有左端的返回变量,也可以没有。

从以上 diff ( ) 函数的调用格式可知,计算函数的高阶导数很容易通过输入参数 n 的值来

实现;对于求多元函数的偏导数,除开指定的自变量外的其它变量均当作常数处理就可以了。

必须指出,以上几种格式中的函数 f 若为矩阵时,求导时则对元素逐个进行,且自变量

定义在整个矩阵上。请看以下示例。

【例 3-52】已知函数 ( ) ( )

=

xxt

taf

lnsin

5

,试求x

f

d

d、

2

2

d

d

t

f与

tx

f

dd

d 2

【解】

用以下 MATLAB 语句进行计算:

syms a t x; f=[a t^5;t*sin(x) log(x)];

df=diff(f)

dfdt2=diff(f,t,2)

dfdxdt=diff(diff(f,x),t) 语句执行结果

df = [ 0, 0] [ t*cos(x), 1/x]

dfdt2 = [ 0, 20*t^3]

[ 0, 0]

dfdxdt = [ 0, 0]

[ cos(x), 0]

Page 92: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

80

即 ( )

=

xxtx

f

/1cos

00

d

d、

=

00

200

d

d 3

2

2 t

t

f与 ( )

=

0cos

00

dd

d 2

xtx

f。

【例 3-53】已知函数( )

( )

=

x

axf

bx

x

tane

ln,试求

x

f

d

d。

【解】

用以下 MATLAB 语句进行计算:

syms a b x; f=[log(x) a^x;exp(b*x) tan(x)];

dfdx=diff(f) 语句执行结果

dfdx = [ 1/x, a^x*log(a)]

[ b*exp(b*x), 1+tan(x)^2]

即 ( )( )

+=

xb

aax

x

fbx

x

2tan1e

ln/1

d

d

【例 3-54】已知函数( )

( )

+−−=

xx

xxxxf

210

cos13

42

,试求3

3

d

d

x

f。

【解】

用以下 MATLAB 语句进行计算:

syms x; f=[(1-x^2-x^4) x*(cos(x));(x+10)^3 2^x];

dfdx=collect(diff(f,3)) 语句执行结果

dfdx = [ -24*x, -3*cos(x)+x*sin(x)]

[ 6, 2^x*log(2)^3]

即 3

3

d

d

x

f

( )

+−−= 32ln26

sincos324

x

xxxx

【例 3-55】已知函数 yxf 2sin2= ,试求x

f

∂∂

与y

f

∂∂

【解】

用以下 MATLAB 语句进行计算:

syms x y; f=[x^2*sin(2*y)];

dfdx=diff(f,x)

dfdy=diff(f,y) 语句执行结果

dfdx = 2*x*sin(2*y)

dfdy = 2*x^2*cos(2*y)

Page 93: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

81

即 yxx

f2sin2=

∂∂

与 yxy

f2cos2 2=

∂∂

【例 3-56】已知函数2

e

y

xf

y

= ,试求x

f

∂∂

与y

f

∂∂

【解】

用以下 MATLAB 语句进行计算:

syms x y; f=[x*exp(y)/y^2];

dfdx=collect(diff(f,x))

dfdy=collect(diff(f,y)) 语句执行结果

dfdx = exp(y)/y^2 dfdy = (exp(y)/y^2-2*exp(y)/y^3)*x

即2

e

yx

f y

=∂∂

与 ( )2e3

−=∂∂

yy

x

y

f y

【例 3-57】已知函数zyxf = ,试求

x

f

∂∂

、y

f

∂∂

与z

f

∂∂

【解】

用以下 MATLAB 语句进行计算:

syms x y z;

f=x^(y^z);

dfdx=collect(diff(f,x))

dfdy=collect(diff(f,y))

dfdz=collect(diff(f,z)) 语句执行结果

dfdx = x^(y^z)*y^z/x

dfdy = x^(y^z)*y^z*z/y*log(x)

dfdz = x^(y^z)*y^z*log(y)*log(x)

即 =∂∂

x

f 1−zyz xy

=∂∂

y

fxxzy

zyz ln1−

=∂∂

z

fyxxy

zyz lnln

3.6.3 MATLAB 符号函数积分运算

函数的积分是微分的逆运算,即由已知导(函)数求原函数的过程。函数的积分有不定积分

与定积分两种运算。定积分中,若是积分区间为无穷或被积函数在积分区间上有无穷不连续

点但积分存在或收敛者叫做广义积分。MATLAB 系统提供的函数命令 int ( ) 不仅可计算函数

Page 94: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

82

的不定积分,而且还可计算函数的定积分以及广义积分。函数命令 int ( ) 的调用格式有以下 4 种:

1.int(S)

这种格式的功能是计算符号函数或表达式 S 对函数 findsym ( )返回的符号变量的不定积

分。如果 S 为常数,则积分针对 x 。函数可以有左端的返回变量,也可以没有。

2.int(S,v)

这种格式的功能是计算符号函数或表达式 S 对指定的符号变量 v 的不定积分。函数可以

有左端的返回变量,也可以没有。

3.int(S,v,a,b)

这种格式的功能是计算符号函数或表达式 S 对指定的符号变量 v 从下限 a 到上限 b 的定

积分。函数可以有左端的返回变量,也可以没有。积分下限 a 与积分上限 b 都是有限数的定

积分叫做常义积分。

4.int(S,a,b)

这种格式的功能是计算符号函数或表达式 S 对函数 findsym ( )返回的符号变量从 a 到 b

的定积分。函数可以有左端的返回变量,也可以没有。

需要注意:MATLAB 的函数命令 int ( ) 计算的函数不定积分,没有积分常数这一部分;

高等数学中,有分部积分、换元积分、分解成部分分式的积分等等各种积分方法,但在

MATLAB 中,都只使用一个函数命令 int ( ) 来计算。一般来说,当多次使用 int ( ) 时,计算

的就是重积分;当积分下限 a 或积分上限 b 或上下限 a、b 均为无穷大时,计算的就是广义积

分,广义积分是相对于常义积分而言的。请看以下各示例。

【例 3-58】已知导函数x

f

d

d

=

x

n

ax

xx

/1

2,试求原函数 ( )xf 。

【解】

用以下 MATLAB 语句进行计算:

syms a n x; dfdx=[2*x x^n;1/x a^x];

f=int(dfdx) 语句执行结果

f = [ x^2, x^(n+1)/(n+1)] [ log(x), 1/log(a)*a^x]

即 ( )

+=

+

a

ax

n

xx

xf x

n

lnln

1

12

【例 3-59】已知导函数x

f

d

d

=

xxx

xxx x

lnln

sinecos,试求原函数 ( )xf 。

【解】

用以下 MATLAB 语句进行计算:

syms x; dfdx=[x*cos(x) exp(x)*sin(x);x*log(x) log(x)];

Page 95: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

83

f=int(dfdx)

语句执行结果 f = [cos(x)+x*sin(x), -1/2*exp(x)*cos(x)+1/2*exp(x)*sin(x)]

[1/2*x^2*log(x)-1/4*x^2, x*log(x)-x]

即 ( )( )

( )

−−

−+=

1ln4

1ln

2

cossin2

ecossin

22

xxxxx

xxxxxxf

x

【例 3-60】已知导函数x

f

d

d

+=

xx

xxa

sin

1cot

tan1

22,试求原函数 ( )xf 。

【解】

用以下 MATLAB 语句进行计算:

syms a x;

dfdx=[1/(a^2+x^2) tan(x);cot(x) 1/sin(x)];

f=collect(int(dfdx)) 语句执行结果

f = [ 1/a*atan(x/a), -log(cos(x))]

[ log(sin(x)), log(csc(x)-cot(x))]

即 ( )( )

−=xxx

xa

x

axfcotcsclnsinln

coslnarctan1

【例 3-61】已知导函数x

f

d

d ( )

++

−−=

xxx

ax

A

ax

An

2sin45

1

4

43

,试求原函数 ( )xf 。

【解】

用以下 MATLAB 语句进行计算:

syms A a n x; dfdx=[A/(x-a) A/((x-a)^n);4/(x^3+4*x) 1/(5+4*sin(2*x))];

f=simple(factor(collect(int(dfdx))))

语句执行结果 f = [ A*log(x-a), -A*(x-a)^(1-n)/(-1+n)]

[ log(x)-1/2*log(x^2+4), 1/3*atan(5/3*tan(x)+4/3)]

即 ( )( )

( )( )( )

++−

−−−

=−

3

4tan5arctan

3

14ln

2

1ln

1ln

2

1

xxx

axn

AaxA

xfn

【例 3-62】已知函数 ( ) 1=xf 与 ( ) 2xxf = ,试求定积分 ( )∫b

axxf d 。

Page 96: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

84

【解】

(1) 用以下 MATLAB 语句进行计算:

syms a b x

I=int(sym(’1’),x,a,b) 语句执行结果

I = b-a

即 ( )∫b

axxf d abx

b

a−== ∫ d1

(2) 用以下 MATLAB 语句进行计算:

syms x a b;

I=int(x^2,a,b) 语句执行结果

I = 1/3*b^3-1/3*a^3

即 ( )∫b

axxf d ( )332

3

1d abxx

b

a−== ∫

【例 3-63】试计算定积分 =∫∞

ωω

ωd

sin20

?与 =

πx

xd

2sin

0

6 ?

【解】

(1) 用以下 MATLAB 语句进行计算:

syms w I=int(2*sin(w)/w,w,0,inf)

语句执行结果

I = pi

即 π=∫∞

ωω

ωd

sin20

(2) 用以下 MATLAB 语句进行计算:

syms x;

f=sin(x/2)^6;

I=int(f,x,0,pi)

语句执行结果 I = 5/16*pi

即 π=

π

16

5d

2sin

0

6 xx

【例 3-64】试计算重积分 == ∫ ∫π2

0 0

2 dsinda

rrI θθ ?与 == ∫ ∫π −2

0 0ded

2ar rrI θ ?

【解】

(1) 用以下 MATLAB 语句计算:

syms a r theta; f=r^2*sin(theta);

I=int(int(f,r,0,a),theta,0,pi/2)

Page 97: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

85

语句执行结果 I = 1/3*a^3

即 32

0 0

2

3

1dsind arrI

a== ∫ ∫

π

θθ

(2) 用以下 MATLAB 语句计算:

syms a r theta; f=r*exp(-r^2);

I=factor(int(int(f,r,0,a),theta,0,2*pi))

语句执行结果 I = -pi*(exp(-a^2)-1)

即 ( )22

e1ded2

0 0

aa

r rrI −π − −π== ∫ ∫θ

【例 3-65】计算 =−= ∫ ∫−

−r

r

xryxryxI

22

0

222 dd ?与 == ∫ ∫ −

1

0

0

1ded yxxI xy ?

【解】

(1) 用以下 MATLAB 语句计算:

syms r x y; f=y^2*sqrt(r^2-x^2);

I=int(int(f,y,0,sqrt(r^2-x^2)),x,-r,r)

语句执行结果 I = 16/45*r^5

即 5

0

222

45

16dd

22

ryxryxIr

r

xr=−= ∫ ∫−

(2) 用以下 MATLAB 语句计算:

syms x y; f=x*exp(x*y);

I=int(int(f,y,-1,0),x,0,1)

语句执行结果

I = exp(-1)

即 e

yxxI xy 1ded

1

0

0

1== ∫ ∫ −

【例 3-66】试计算 ( ) =+= ∫ ∫ ∫π π

rrIa

dsincos1dd2

0

4

0

cos2

0

2 θϕθϕθ

【解】

用以下 MATLAB 语句计算:

syms a r theta phi; f=r^2*(1+cos(phi))*sin(theta);

I=int(int(int(f,r,0,2*a*cos(theta)),theta,0,pi/4),phi,0,2*pi)

语句执行结果 I = pi*a^3

Page 98: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

86

即 ( ) 32

0

4

0

cos2

0

2 dsincos1dd arrIa

π=+= ∫ ∫ ∫π

π

θϕθϕθ

【例 3-67】计算广义积分 =+∫

∞+

∞−x

xd

1

12

?与 =∫∞+

1 4d

1x

x?

【解】

(1) 用以下 MATLAB 语句进行计算 ∫∞+

∞− +x

xd

1

12

syms x int((1/(1+x^2)),x,-inf,inf)

语句执行结果

ans = pi

即 π=+∫

∞+

∞−x

xd

1

12

(2) 用以下 MATLAB 语句进行计算 ∫∞+

1 4d

1x

x:

syms x a

int(1/x^4,x,1,inf) 语句执行结果

ans = 1/3

即3

1d

11 4

=∫∞+

xx

【例 3-68】计算广义积分 ( ) =∫π2

0dsinln xx ?与 =∫

∞+

1 2d

arctanx

x

x?

【解】

(1) 用以下 MATLAB 语句进行计算 ∫π2

0dsinln xx :

syms x

int((log(sin(x))),x,0,pi/2) 语句执行结果

ans = -1/2*pi*log(2)

即 2ln2

dsinln2

0

π−=∫π

xx 。

(2) 用以下 MATLAB 语句进行计算 ∫∞+

1 2d

arctanx

x

x:

syms x

int(((atan(x))/(x^2)),x,1,inf) 语句执行结果

ans = 1/4*pi+1/2*log(2)

即 2ln2

1

4d

arctan1 2

+π=∫∞+

xx

x。

Page 99: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

87

【例 3-69】计算广义积分 =∫ xxtt

d4sin

2?与 ( ) =+∫ xxx d1log

1

0?

【解】

(1) 用以下 MATLAB 语句计算 xxtt

d4sin

2∫ :

syms t x; int(4*x*t,x,2,sin(t))

语句执行结果 ans = 2*t*(sin(t)^2-4)

即 tttxxtt

8sin2d4 2sin

2−=∫

(2) 用以下 MATLAB 语句计算 ( ) xxx d1log1

0∫ + :

syms x; int(x1*log(1+x1),0,1)

语句执行结果

ans = 1/4

即 ( )4

1d1log

1

0=+∫ xxx 。

3.6.4 符号求和函数与 taylor(泰勒)级数展开函数

无穷级数是高等数学的一个重要组成部分,它是表示函数、研究函数性质以及进行数值

近似计算的一种有效工具。高等数学中,无穷级数只介绍常数项级数与函数项级数。级数的

收敛性是其重要特征,这是数学分析中讨论的内容。在此主要介绍与级数有关的 MATLAB 符

号函数求和与函数展开成 taylor(泰勒)级数的问题。 给定一个数列

,,,,, 321 nuuuu

则由这数列构成的表达式 +++++ nuuuu 321

叫做常数项无穷级数,记为∑∞

=1nnu ,即

=∑∞

=1nnu +++++ nuuuu 321

给定一个定义在区间 I 上的函数列

( ) ( ) ( ) ( ) ,,,, 321 xuxuxuxu n

则由这个函数列构成的表达式

( ) ( ) ( ) ( ) +++++ xuxuxuxu n321

叫做定义在区间 I 上的函数项无穷级数。

函数项级数中,简单又常见的一类级数是各项都为幂函数的函数项级数即所谓幂级数,

其形式为

Page 100: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

88

++++++ nn xaxaxaxaa 3

32

210

其中常数 ,,,, 321 naaaa 叫做幂级数的系数。

3.6.4.1 符号求和函数

收敛的幂级数,不论是常数项级数还是函数项级数,都有求和的问题。在 MATLAB 中提

供了级数求和的函数命令 symsum ( ),它有以下 4 种调用格式。

1. 格式 1 s=symsum(S,v,a,b)

这种调用格式的功能是,对输入参数 S (为求和的对象函数或表达式),在对指定变量 v 取

遍 [ ]ba 中(即从 a 到 b )所有整数时,对 S 求和,即左端输出参数 s 。

2. 格式 2 s=symsum(S,v)

这种调用格式为以上格式同时缺省指定变量 v 取值的上下限 a 与 b 的特例。此时系统默认

求和的指定变量 v 的区间为 [ ]10 −v ,其它参数同上。

3. 格式 3 s=symsum(S,a,b)

这种调用格式为第一种格式缺省指定变量 v 的特例。函数或表达式 S 的自变量 v 由函数

findsym ( )自动辨认;取遍 [ ]ba 中(即从 a 到 b )所有整数时,对 S 求和,即左端输出参数 s 。

b 可以取有限整数,也可以取无穷大。

4. 格式 4 s=symsum(S)

这种调用格式为第一种格式同时缺省指定变量 v 与其取值的上下限 a 与 b 的特例。请看以

下示例。 【例 3-70】求级数 ( )1321 −++++ k 与前 4 项的和。

【解】 (1) 用以下 MATLAB 语句来求级数 ( )1321 −++++ k 与前 4 项的和:

syms k v a b;

s=factor(symsum(k,a,b))

k=1;a=0;b=4;

s4=subs(s,’[k a b]’,[k a b]) 语句执行结果

s = -1/2*(a+b)*(-b-1+a)

s4 = 10

(2) 还可用以下 MATLAB 语句来求解:

syms k

s=factor(symsum(k))

k=5;

s4=subs(s,’k’,k)

则得级数求和的一般表达式为:

( ) ( )12

11321 −=−++++ kkk

(3) 也还可用以下 MATLAB 语句来进行计算:

syms k n;

s=factor(symsum(k,0,n-1))

n=5;

Page 101: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

89

s4=subs(s,’n’,n)

则得级数求和的一般表达式为:

( ) ( )12

11321 −=−++++ nnn

【例 3-71】求级数 +++++222

1

3

1

2

11

k的和。

【解】

用以下 MATLAB 语句来进行计算:

syms k

s=symsum(1/k^2,1,Inf) 语句执行结果 s = 1/6*pi^2

即 6

1

3

1

2

11

2

222

π=+++++= k

s

【例 3-72】求幂级数∑∞

= +0

1n

n

n

x与

( )∑∞

=

−+

1

1

2

1

n

nxnn

的和函数。

【解】

(1) 用以下 MATLAB 语句来求幂级数∑∞

= +0

1n

n

n

x的和:

syms x n;

f=x^n/(n+1);

s=collect(symsum(f,n,0,inf)) 语句执行结果

s = -1/x*log(1-x)

即 ( )

x

x

n

x

n

n −−=+∑

=

1ln

10

(2) 用以下 MATLAB 语句来求幂级数( )∑

=

−+

1

1

2

1

n

nxnn

的和:

syms x n; f=n*(n+1)/2*x^(n-1);

s=collect(symsum(f,n,1,inf)) 语句执行结果

s = -1/(x-1)^3

即 ( )

( )31

1

1

1

2

1

−−=+∑

=

xx

nn

n

n

3.6.4.2 Taylor 级数展开函数

给定函数 ( )xf ,是否能找到这样一个幂级数,它在某区间内收敛,且其和正好是给定函

数 ( )xf 。若能够找到这样的幂级数,则说函数 ( )xf 在该区间内能展开成幂级数。

若函数 ( )xf 在点 0x 的某一邻域内具有从 1(阶)直到 ( )1+n 阶的导数,则在该邻域内,函数

Page 102: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

90

( )xf 在点 0xx = 时,项数趋向无穷的幂级数如下:

( ) ( ) ( )( ) ( ) ( )( )( ) ( ) +−++−

′′+−′+= n

n

xxn

xfxx

xfxxxfxfxf 0

020

0000 !!2

这个幂级数叫做函数 ( )xf 的 Taylor 级数(展开)。在 MATLAB 系统中,有函数展开成 Taylor

级数的函数命令 taylor ( ),它也有 5 种调用格式。

1. 格式 1 taylor(f)

这种调用格式的功能是,将输入函数 f 展开成 Taylor 级数,求其五次幂的近似多项式。

函数 f 的自变量是由函数 findsym( )确定的。

2. 格式 2 taylor(f,x)

这种调用格式的功能是,将输入函数 f 展开成 Taylor 级数,求其五次幂的近似多项式。

函数 f 的自变量不是由函数 findsym( )确定的,而是指定为 x 。

3. 格式 3 taylor(f,n)

这种调用格式的功能是,将输入函数 f 展开成 Taylor 级数,求其 1−n 次幂的近似多项式。

函数 f 的自变量是由函数 findsym( )确定的。

4. 格式 4 taylor(f,c,n)

这种调用格式的功能是,将输入函数 f 展开成 cx − 的 Taylor 级数,求其 1−n 次幂的近似

多项式。函数 f 的自变量是由函数 findsym( )确定的。

5. 格式 5 taylor(f,a)

这种调用格式的功能是,将输入函数 f 展开成在 a 点附近的 Taylor 级数,求其五次幂的

近似多项式。函数 f 的自变量是由函数 findsym( )确定的。请看以下示例。 【例 3-73】试求函数 ( )xf 在 00 =x 时的 Taylor 级数展开式。

【解】 用以下 MATLAB 语句来求函数 ( )xf 在 00 =x 时的 Taylor 级数展开式:

syms x n;

T=taylor(sym(’f(x)’),0)

语句执行结果

T = f(0)+D(f)(0)*x+1/2*‘@@‘(D,2)(f)(0)*x^2+1/6*‘@@‘(D,3)(f)(0)*x^3+1/24*‘@@‘(D,4)(f)(0)*x^4

+1/120*‘@@‘(D,5)(f)(0)*x^5 即函数 ( )xf 在 00 =x 时的 Taylor 级数展开式为:

( ) ( ) ( )( ) ( ) ( ) ( ) ( ) +−′′′

+−′′

+−′+= 30

020

0000 !3!2

xxxf

xxxf

xxxfxfxf

( ) ( ) ( )( ) ( ) ( ) =−+− 5

00

54

00

4

!!4xx

n

xfxx

xf

( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) 55

44

33

2

!5

0

!4

0

!3

0

!2

000 x

fx

fx

fx

fxff +++

′′+∗′+

【例 3-74】试求函数 ( ) xxf e= 的 Taylor 级数展开式。

【解】

用以下 MATLAB 语句来求 ( ) xxf e= 的 Taylor 级数展开式:

Page 103: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

91

syms x prod2;

f=exp(x);

T=taylor(f)

prod2=maple(’2!’)

prod3=maple(’3!’)

prod4=maple(’4!’)

prod5=maple(’5!’)

语句执行结果 T = 1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5

prod2 = 2

prod3 = 6

prod4 = 24

prod5 = 120

即 ( ) xxf e= 的 Taylor 级数展开式为:

!5!4!3!21e

5432 xxxxxx +++++=

【例 3-75】试求函数 ( ) ( )xxf sin= 的 Taylor 级数展开式。

【解】 用以下 MATLAB 语句来求 ( ) ( )xxf sin= 的 Taylor 级数展开式:

syms x;

f=sin(x);

T=taylor(f,10)

prod3=maple(’3!’)

prod5=maple(’5!’)

prod7=maple(’7!’)

prod9=maple(’9!’) 语句执行结果

T = x-1/6*x^3+1/120*x^5-1/5040*x^7+1/362880*x^9

prod3 = 6

prod5 = 120

prod7 = 5040

prod9 = 362880 即 ( ) ( )xxf sin= 的 Taylor 级数展开式为:

( )!9!7!5!3

sin9753 xxxx

xx +−+−=

【例 3-76】试求函数 ( ) ( )xxf += 1ln 的 Taylor 级数展开式。

【解】 用以下 MATLAB 语句来求 ( ) ( )xxf += 1ln 的 Taylor 级数展开式:

syms x;

f=log(1+x);

Page 104: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

92

T=taylor(f)

语句执行结果 T = x-1/2*x^2+1/3*x^3-1/4*x^4+1/5*x^5 即 ( ) ( )xxf += 1ln 的 Taylor 级数展开式为:

( )5432

1ln5432 xxxx

xx +−+−=+

【例 3-77】试求函数 ( ) ( )mxxf += 1 的 Taylor 级数展开式。

【解】

用以下 MATLAB 语句来求 ( ) ( )mxxf += 1 的 Taylor 级数展开式:

syms x m;

f=(1+x)^m;

T=taylor(f,4)

语句执行结果 T = 1+m*x+1/2*m*(m-1)*x^2+1/6*m*(m-1)*(m-2)*x^3

prod2 = 2

prod3 = 6

即 ( ) ( )mxxf += 1 的 Taylor 级数展开式为:

( ) ( ) ( ) ( )( ) 32

!3

21

!2

111 x

mmmx

mmmxxxf m −−+−++=+=

【例 3-78】试将函数 ( ) ( )xxf sin= 展开成

π−

4x 的幂级数。

【解】

用以下 MATLAB 语句将函数 ( ) ( )xxf sin= 展开成

π−

4x 的幂级数:

syms x;

f=sin(x);

T=taylor(f,pi/4,4)

语句执行结果

T = 1/2*2^(1/2)+1/2*2^(1/2)*(x-1/4*pi)-1/4*2^(1/2)*(x-1/4*pi)^2-1/12*2^(1/2)*(x-1/4*pi)^3

即函数 ( ) ( )xxf sin= 展开成

π−

4x 的幂级数为:

( ) ( )

π−−

π−−

π−+==

32

4!3

1

4!2

1

41

2

1sin xxxxxf

3.7 M A T LA B 符号矩阵及其运算

线性代数中矩阵是这样定义的:有 nm× 个数 ),,2,1;,,2,1( njmia ji == 的数组将其排

成如下格式:

Page 105: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

93

=

mnmm

n

n

aaa

aaa

aaa

21

22221

11211

A

这是一个 m 行 n 列的矩阵。横向每一行所有元素依次序排列为行向量;纵向每一列所有元素

依次序排列则为列向量。请特别注意,数组用方括号括起来后已作为一个抽象的特殊量——

矩阵。在线性代数中,矩阵有特定的数学涵义,并且有其自身严格的运算规则。矩阵概念是

线性代数范畴内特有的。

在 MATLAB 中,定义了矩阵运算规则及其运算符。MATLAB 中的矩阵运算规则与线性

代数中的矩阵运算规则相同。本节就专门介绍 MATLAB 中的矩阵运算的函数命令格式及其使

用方法。

3.7.1 符号矩阵的运算符

现将 MATLAB 的代数运算符介绍如表 3-5 所示。数组不是本书介绍的主要内容,请特

别关注其中的符号矩阵运算符。

表 3-5 MATLAB 代数运算符

操 作 符 功能说明 操 作 符 功能说明

+ 加 \ 矩阵左除

- 减 .\ 数组左除

* 矩阵乘 / 矩阵右除

.* 数组乘 ./ 数组右除

^ 矩阵乘方 ’ 矩阵转置

.^ 数组乘方 .’ 数组转置

3.7.2 符号矩阵的建立与访问

1. 符号矩阵的建立

(1) 定义矩阵的元素为符号对象,然后用创建矩阵的联接算子——方括号括起来成为符

号矩阵。每行内的元素间用逗号或空格分开;行与行之间用分号隔开。

【例 3-79】创建符号矩阵示例一。

【解】

用以下 MATLAB 语句创建符号矩阵:

syms a11 a12 a13 a21 a22 a23 a31 a32 a33;

A=[a11 a12 a13; a21 a22 a23; a31 a32 a33]

语句执行后得到符号矩阵 A

A = [ a11, a12, a13]

[ a21, a22, a23]

[ a31, a32, a33]

(2) 定义整个矩阵为符号对象。矩阵元素可以是任何不带等号的符号表达式或数值表达

Page 106: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

94

式,各符号表达式的长度可以不同;矩阵每行内的元素间用逗号或空格分隔;行与行之间用

分号隔开。

【例 3-80】创建符号矩阵示例二。

【解】

用以下 MATLAB 语句创建符号矩阵:

P=sym(’[a b c;d e f;g h k]’)

Q=sym(’[1 2 3;4 5 6;7 8 9]’) S=P+Q*j

语句执行后得到符号矩阵 P、Q 和 S:

P = [ a, b, c]

[ d, e, f]

[ g, h, k]

Q = [ 1, 2, 3]

[ 4, 5, 6]

[ 7, 8, 9] S = [ a+i, b+2*i, c+3*i]

[ d+4*i, e+5*i, f+6*i]

[ g+7*i, h+8*i, k+9*i]

[说明]

使用函数命令 sym()定义整个矩阵为符号对象时,作为函数输入参量的矩阵方括号[ ]两端

必须加英文输入状态下的单引号“’”。

(3) 用子矩阵创建矩阵。在 MATLAB 的符号运算中,利用联接算子——方括号[ ]可将小

矩阵联接为一个大矩阵。

【例 3-81】利用方括号[ ]-联接算子将小矩阵联接成大矩阵示例。

【解】

用以下 MATLAB 语句创建大符号矩阵:

syms p q x y;A=sym(’[a b;c d]’);

A1=A+p

A2=A-q A3=A*x

A4=A/y

G1=[A A3;A1 A4]

G2=[A1 A2;A3 A4] 当指令运行后可生成矩阵:

A1 = [ a+p, b+p]

[ c+p, d+p]

A2 = [ a-q, b-q]

[ c-q, d-q] A3 = [ x*a, x*b]

[ x*c, x*d]

Page 107: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

95

A4 = [ a/y, b/y]

[ c/y, d/y]

G1 = [ a, b, x*a, x*b]

[ c, d, x*c, x*d]

[ a+p, b+p, a/y, b/y]

[ c+p, d+p, c/y, d/y]

G2 =

[ a+p, b+p, a-q, b-q]

[ c+p, d+p, c-q, d-q] [ x*a, x*b, a/y, b/y]

[ x*c, x*d, c/y, d/y]

由上可见,4 个 2*2 的子矩阵组成一个 4*4 的大矩阵。

2. 符号矩阵的访问

符号矩阵的访问是针对矩阵的行或列与矩阵元素进行的。矩阵元素的标识或定位地址的

通用双下标格式如下:

A(r,c)

其中, r 为行号; c 为列号。有了元素的标识方法,矩阵元素的访问与赋值常用的相关指令

格式如表 3-6 所示。

表 3-6 矩阵访问与赋值常用的相关指令格式

指 令 格 式 指 令 功 能

A(r,c) 由矩阵 A 中 r 指定行、c 指定列之元素组成的子数组

A(r,:) 由矩阵 A 中 r 指定行对应的所有列之元素组成的子数组

A(:,c) 由矩阵 A 中 c 指定列对应的所有行之元素组成的子数组

A(:) 由矩阵 A 的各个列按从左到右的次序首尾相接的“一维长列”子数组

A(i) “一维长列”子数组的第 i 个元素

A(r,c)=Sa 对矩阵 A 赋值,Sa 也必须为 Sa (r,c)

A(:)=D(:) 矩阵全元素赋值,保持 A 的行宽、列长不变,A、D 两矩阵元素总数应相同,但行宽、列长可不同

[说明]

数组是由一组复数排成的长方形阵列。对于发展了的 MATLAB,在线性代数范畴之外,

数组也是进行数值计算的基本处理单元。一行多列的数组是行向量;一列多行的数组就是列

向量;数组可以是二维的“矩形”,也可以是三维的,甚至还可以是多维的。多行多列的“矩

形”数组与线性代数中的矩阵从外观形式与数据结构上看,没有什么区别。

【例 3-82】矩阵元素的标识与访问示例。

【解】

用以下 MATLAB 语句对符号矩阵元素进行访问:

(1) 查询 A 数组的行号为 2 列号为 3 的元素。

A=sym(’[a11 a12 a13; a21 a22 a23; a31 a32 a33]’);

Page 108: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

96

A(2,3)

ans = a23

(2) 查询 A 数组第三行所有的元素。

A=sym(’[a11 a12 a13; a21 a22 a23; a31 a32 a33]’);

A(3,:)

ans = [ a31, a32, a33]

(3) 查询 A 数组第二列转置后所有的元素。

A=sym(’[a11 a12 a13; a21 a22 a23; a31 a32 a33]’);

(A(:,2))

(A(:,2))’ 语句执行后得到

ans = [ a12]

[ a22]

[ a32]

ans = [ conj(a12), conj(a22), conj(a32)]

(4) 查询 A 数组按列拉长转置后所有的元素。

A=sym(’[a11 a12 a13; a21 a22 a23; a31 a32 a33]’);

B=(A(:))’

C(A(:)).’

语句执行后得到

B = [ conj(a11), conj(a21), conj(a31), conj(a12), conj(a22), conj(a32), conj(a13), conj(a23),

conj(a33)]

C = [ a11, a21, a31, a12, a22, a32, a13, a23, a33]

[说明]

在 MATLAB 中,数组的转置与矩阵的转置是不同的。用运算符“’”定义的矩阵转置,

是其元素的共轭转置;运算符“.’”定义的数组的转置则是其元素的非共轭转置。请参见第 6 章。

(5) 查询“一维长列”数组的第 6 个元素。

A=sym(’[a11 a12 a13; a21 a22 a23; a31 a32 a33]’);

A(6)

语句执行后得到

ans = a32

(6) 查询原 A 矩阵所有的元素。

A=sym(’[a11 a12 a13; a21 a22 a23; a31 a32 a33]’);

A 语句执行后得到

A = [ a11, a12, a13]

[ a21, a22, a23]

[ a31, a32, a33]

(7) 创建 S 矩阵,所有的元素以“双下标”方式对矩阵 A 赋值。

P=sym(’[p p p ;p p p;p p p]’);

Page 109: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

97

A=P

语句执行后得到

A = [ p, p, p]

[ p, p, p]

[ p, p, p]

(8) 创建 T 数组所有的元素,以数组全元素赋值方式对矩阵 A 赋值。

T=sym(’[t t t t t t t t t]’) ;

A(:)=T(:) 语句执行后得到

A = [ t, t, t]

[ t, t, t]

[ t, t, t]

3.7.3 符号矩阵的基本运算

符号矩阵基本运算的规则是把矩阵当作一个整体,依照线性代数的规则进行运算。

1. 符号矩阵的加减运算

矩阵加减运算的条件是两个矩阵的行数与列数分别相同即为同型矩阵,其运算规则是矩

阵相应元素的加减运算。需要指出,标量与矩阵间也可以进行加减运算,其规则是标量与矩

阵的每一个元素进行加减操作。

【例 3-83】符号矩阵的加减运算示例。

【解】

用以下 MATLAB 语句对符号矩阵的加减运算:

syms x y;

A=sym(’[a11 a12 a13; a21 a22 a23; a31 a32 a33]’);

B=sym(’[b11 b12 b13; b21 b22 b23; b31 b32 b33]’);

P=A+(5+8j) Q=A-(x+y*j)

S=A+B 语句执行结果 P = [ a11+5+8*i, a12+5+8*i, a13+5+8*i]

[ a21+5+8*i, a22+5+8*i, a23+5+8*i]

[ a31+5+8*i, a32+5+8*i, a33+5+8*i]

Q = [ a11-x-i*y, a12-x-i*y, a13-x-i*y]

[ a21-x-i*y, a22-x-i*y, a23-x-i*y]

[ a31-x-i*y, a32-x-i*y, a33-x-i*y]

S = [ a11+b11, a12+b12, a13+b13]

[ a21+b21, a22+b22, a23+b23]

[ a31+b31, a32+b32, a33+b33]

[说明]

在 MATLAB 里,维数为 1×1 的数组叫做标量。而 MATLAB 里的数值元素是复数,所

Page 110: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

98

以一个标量就是有一个复数。

2. 符号矩阵的乘法运算

矩阵与标量间可以进行乘法运算,而两矩阵相乘必须服从数学中矩阵叉乘的条件与规则。

(1) 符号矩阵与标量的乘法运算 矩阵与一个标量之间的乘法运算都是指该矩阵的每个

元素与这个标量分别进行乘法运算。矩阵与一个标量相乘符合交换律。

【例 3-84】标量与矩阵之间的乘法运算示例。

用以下 MATLAB 语句对符号矩阵与标量之间进行乘法运算:

syms k;

s=5;

P=sym(’[a b c;d e f;g h i]’); sP=s*P

Ps=P*s

kP=k*P

Pk=P*k

语句执行结果 sP = [ 5*a, 5*b, 5*c]

[ 5*d, 5*e, 5*f]

[ 5*g, 5*h, 5*i]

Ps = [ 5*a, 5*b, 5*c]

[ 5*d, 5*e, 5*f]

[ 5*g, 5*h, 5*i]

kP = [ k*a, k*b, k*c]

[ k*d, k*e, k*f]

[ k*g, k*h, i*k]

Pk = [ k*a, k*b, k*c]

[ k*d, k*e, k*f]

[ k*g, k*h, i*k]

运算结果表明:①与矩阵相乘的标量既可以是数值对象也可以是符号对象;②由 ×s

s×= PP 与 kk ×=× PP ,即矩阵与一个标量相乘符合交换律。

(2) 符号矩阵的乘法运算 两矩阵相乘的条件是左矩阵的列数必须等于右矩阵的行数,

两矩阵相乘必须服从线性代数中矩阵叉乘的规则。请看以下示例。

【例 3-85】符号矩阵的乘法运算示例。

用以下 MATLAB 语句对符号矩阵进行乘法运算:

A=sym(’[a11 a12; a21 a22]’)

B=sym(’[b11 b12; b21 b22]’) AB=A*B

BA=B*A

语句执行结果

A = [ a11, a12]

[ a21, a22]

Page 111: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

99

B = [ b11, b12]

[ b21, b22] AB = [ a11*b11+a12*b21, a11*b12+a12*b22]

[ a21*b11+a22*b21, a21*b12+a22*b22]

BA = [ a11*b11+a21*b12, b11*a12+b12*a22]

[ b21*a11+b22*a21, a12*b21+a22*b22]

运算结果表明:①矩阵的乘法的规则是左行元素依次乘右列元素之和作为不同行元素,

行元素依次乘不同列元素之和作为不同列元素;②由 ABBA ×≠× ,即矩阵乘法不满足交换

律。

3. 符号矩阵的除法运算

两矩阵相除的条件是两矩阵均为方阵,且两方阵的阶数相等。矩阵除法运算有左除与右

除之分,即运算符号“\”和“/” 所指代的运算。其运算规则是:A\B=inv(A)*B,A/B=A*inv(B)。

请看以下示例。

【例 3-86】符号矩阵与数值矩阵的除法运算示例。

(1) 用以下 MATLAB 语句对符号矩阵进行除法运算:

A=sym(’[a11 a12; a21 a22]’);

B=sym(’[b11 b12; b21 b22]’);

C1=A\B [C2]=simple(inv(A)*B)

D1=A/B [D2]=simple(A*inv(B))

语句执行结果

C1 = [-(a12*b21-b11*a22)/(a11*a22-a21*a12), -(a12*b22-b12*a22)/(a11*a22-a21*a12)]

[(-a21*b11+a11*b21)/(a11*a22-a21*a12), (a11*b22-a21*b12)/(a11*a22-a21*a12)]

C2 = [(-a12*b21+b11*a22)/(a11*a22-a21*a12), (b12*a22-a12*b22)/(a11*a22-a21*a12)]

[(-a21*b11+a11*b21)/(a11*a22-a21*a12), (a11*b22-a21*b12)/(a11*a22-a21*a12)]

D1 = [(-a12*b21+a11*b22)/(b11*b22-b12*b21), -(b12*a11-a12*b11)/(b11*b22-b12*b21)]

[ (b22*a21-b21*a22)/(b11*b22-b12*b21), -(a21*b12-b11*a22)/(b11*b22-b12*b21)]

D2 = [(-a12*b21+a11*b22)/(b11*b22-b12*b21), -(b12*a11-a12*b11)/(b11*b22-b12*b21)]

[ (b22*a21-b21*a22)/(b11*b22-b12*b21), -(a21*b12-b11*a22)/(b11*b22-b12*b21)]

由运算结果可知, 21 CC = , 21 DD = ,即验证了以上运算规则。

(2) 用以下 MATLAB 语句对数值矩阵进行除法运算:

① 求 C/D

C=[1 2 3;4 5 6;7 8 9];

D=[1 0 0;0 2 0;0 0 3];

P1=C/D

Page 112: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

100

P2=C*inv(D)

语句执行结果 P1 = 1.0000 1.0000 1.0000

4.0000 2.5000 2.0000

7.0000 4.0000 3.0000

P2 = 1.0000 1.0000 1.0000

4.0000 2.5000 2.0000

7.0000 4.0000 3.0000

② 求 C\D

C=[1 2 3;4 5 6;7 8 9];

D=[1 0 0;0 2 0;0 0 3];

Q1=C\D Q2=inv(C)*D

指令运行结果为:

Q1 = 1.0e+016 *

-0.4504 1.8014 -1.3511

0.9007 -3.6029 2.7022

-0.4504 1.8014 -1.3511 Q2 = 1.0e+016 *

-0.4504 1.8014 -1.3511

0.9007 -3.6029 2.7022

-0.4504 1.8014 -1.3511

由运算结果可知,数值矩阵的除法也符合以上符号矩阵运算规则。

4. 符号矩阵的乘方运算

在 MATLAB 的符号运算中定义了矩阵的整数乘方运算,其运算规则是矩阵 A 的 b 次乘

方 bA 是矩阵 A 自乘 b 次。请看以下示例。

【例 3-87】符号矩阵的乘方运算示例。

用以下 MATLAB 语句对符号矩阵进行乘方运算:

A=sym(’[a11 a12; a21 a22]’);

b=2;

C1=A^b C2=A*A

语句执行结果 C1 = [ a11^2+a21*a12, a11*a12+a12*a22]

[ a21*a11+a22*a21, a21*a12+a22^2]

C2 = [ a11^2+a21*a12, a11*a12+a12*a22]

[ a21*a11+a22*a21, a21*a12+a22^2]

由运算结果可知, 21 CC = ,即验证了以上运算规则。

5. 符号矩阵的指数运算

在 MATLAB 的符号运算中定义了符号矩阵的指数运算,运算由函数 exp ( )来实现。请看

Page 113: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

101

以下示例。

【例 3-88】符号矩阵的指数运算示例。

用以下 MATLAB 语句对符号矩阵进行指数运算:

A=sym(’[a11 a12; a21 a22]’);

B=exp(A)

语句执行结果

B = [ exp(a11), exp(a12)]

[ exp(a21), exp(a22)]

由运算结果可知,符号矩阵的指数运算的规则是得到一个与原矩阵行列数相同的矩阵,

而以 e 为底以矩阵的每一个元素作指数进行运算的结果作为新矩阵的对应元素。

3.7.4 符号矩阵的化简

在科学研究与工程技术的计算中,通常都要对于数值表达式与符号表达式进行化简,诸

如分解因式、表达式展开、合并同类项、通分以及表达式的化简等等运算,MATLAB 就提供

了进行这些运算的函数命令。表达式化简不论在数值运算还是在符号运算中都有十分重要的

意义,极具使用价值。需要说明,以下介绍化简的符号矩阵的元素如果只有一行一列,那就

是对于单个数值或符号表达式进行化简,这种情况是极为普遍的。

1. 符号矩阵的因式分解函数 factor ( )

因式分解函数 factor ( )的调用格式为:

factor(S) 函数的输入参量是一符号矩阵,这个函数格式的功能是对矩阵的各个元素进行因式分解。

如果 S 包含的所有元素均为整数,则计算最佳因式分解式。

【例 3-89】符号矩阵的因式分解示例。

用以下 MATLAB 语句对符号矩阵进行因式分解:

syms x a b c d e; A=sym(’[a^2+a*b c^2+2*c*d+d^2;e^2+4*e+3 f^2-1]’)

B=factor(A) 语句执行结果 A = [ a^2+a*b, c^2+2*c*d+d^2]

[ e^2+4*e+3, f^2-1]

B = [ a*(a+b), (d+c)^2]

[ (e+3)*(e+1), (f-1)*(f+1)]

由运算结果可知,B 矩阵各个元素是 A 矩阵各个元素因式分解的结果。

2. 符号矩阵的展开函数 expand ( )

符号矩阵展开函数 expand ( )的调用格式为:

expand(S) 函数的输入参量是一符号矩阵,这个函数格式的功能是对矩阵的各个元素进行展开。此

函数多用在多项式表达式的展开中,也经常用于含有三角函数、指数函数与对数函数表达式

的展开中。

【例 3-90】符号矩阵的展开示例。

Page 114: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

102

用以下 MATLAB 语句对符号矩阵进行展开:

syms x y a b c d e f; A=sym(’[(a+b)^3 sin(x+y);(c+d)*(e+f) exp(x+y)]’)

B=expand(A) 语句执行结果

A = [ (a+b)^3, sin(x+y)] [ (c+d)*(e+f), exp(x+y)]

B = [ a^3+3*a^2*b+3*a*b^2+b^3, sin(x)*cos(y)+cos(x)*sin(y)]

[ c*e+c*f+d*e+d*f, exp(x)*exp(y)]

由运算结果可知,B 矩阵各个元素是 A 矩阵各个元素展开的结果。

3. 符号矩阵的同类式合并函数 collect ( )

符号矩阵的同类式合并函数 collect ( )有两种调用格式:

collect (S,v)

collect (S) 第一种格式的功能是将符号矩阵 S 中的各元素对于字符串 v 的同幂项系数合并。第二种

格式的功能是将符号矩阵 S 中各元素的对由函数 findsym ( )返回的默认变量进行同幂项系数

合并。

【例 3-91】符号矩阵的同类式合并示例。

用以下 MATLAB 语句对符号矩阵进行同类式合并:

syms x y a b c d e f; A=sym(’[x^3*y-x^3 exp(c)+d*exp(c);8*sin(a)+sin(a)*b f*log(e)-f]’)

B11=collect(A(1,1),x^3);

B12=collect(A(1,2),exp(c));

B21=collect(A(2,1),sin(a));

B22=collect(A(2,2),f);

B=[B11 B12;B21 B22] 语句执行结果 A = [ x^3*y-x^3, exp(c)+d*exp(c)]

[ 8*sin(a)+sin(a)*b, f*log(e)-f]

B = [ (y-1)*x^3, (1+d)*exp(c)]

[ (8+b)*sin(a), (log(e)-1)*f]

由运算结果可知,B 矩阵各个元素是 A 矩阵各个元素同类式合并的结果。

4. 符号矩阵的简化函数 simple ( )或 simplify ( )

符号矩阵的简化函数 simple ( )的调用格式有以下两种:

simple (S)

[R,HOW]=simple (S) 第一种格式函数命令的功能是对矩阵 S 试用多种不同的算法化简,以求得 S 矩阵的最短

形,但可能不是每个元素的最短形;若 S 只有一个元素,则求得的是 S 元素表达式的最短简

化形式。第二种格式函数命令的功能与第一种的相同,只是多了两个输出参数:R 是返回的 S

简化形式,返回的 HOW 为简化过程中使用的主要方法。

Page 115: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

103

【例 3-92】符号表达式的化简示例。

用以下 MATLAB 语句对符号表达式1

12

−−=

x

xS 进行化简:

syms x;S=(x^2-1)/(x-1);

[R,h]=simple(S)

语句执行结果

R = x+1

h = factor

第二种格式函数命令的应用非常广泛,现举几例,将其计算结果列入表 3-7 中。

表 3-7 符号表达式化简示例表

S R HOW

(x^2-1)/(x-1) x+1 factor

(x+1)*(x-1) x^2-1 collect

cos(x)^2+sin(x)^2 1 combine

2*cos(x)^2-sin(x)^2 3cos(x)^2-1 simplify

cos(x)+(-sin(x)^2)^(1/2) cos(x)+j*sin(x) radsimp

cos(x)+j*sin(x) exp(j*x) convert

cos(3*acos(x)) 4*x^3-3*x expand

【例 3-93】符号矩阵的化简示例。

用以下 MATLAB 语句对符号矩阵进行化简:

syms x y; A=sym(’[sin(x)^2+cos(x)^2 (x^2-1)/(x+1);log(exp(2)) exp(x)*exp(y)]’)

[B]=simple(A) 语句执行结果

A = [ sin(x)^2+cos(x)^2, (x^2-1)/(x+1)] [ log(exp(2)), exp(x)*exp(y)]

B = [ 1, x-1]

[ 2, exp(x+y)]

由运算结果可知,B 矩阵各个元素是 A 矩阵各个元素化简的结果。

5. 符号矩阵的分式通分函数 numden ( )

分式通分 numden ( )的调用格式为:

[N,D] = numden (A)

这个函数格式的功能是求解符号矩阵 A 各元素表达式的分子与分母,并且把 A 的各元素

转换成为分子与分母都是整系数的最佳多项式形式。计算出的分子依次对应存放在输出参量

N 矩阵中,计算出的分母依次对应存放在输出参量 D 矩阵中,请看以下示例。

【例 3-94】符号矩阵的分式通分并示例。

用以下 MATLAB 语句对符号矩阵进行分式通分: syms x y a b c d e f s;

A=sym(’[x/y+y/x 1+a/b;1+(s+c)/(s*(s+d)) e+e/f]’)

Page 116: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

104

[N,D]=numden(A) 语句执行结果

A = [ x/y+y/x, 1+a/b] [ 1+(s+c)/(s*(s+d)), e+e/f]

N = [ x^2+y^2, a+b] [ s^2+s*d+s+c, e*(f+1)]

D = [ y*x, b]

[ s*(s+d), f]

即符号矩阵 A 的四元素通分的结果分别为

xy

yx

x

y

y

x 22 +=+ ,

b

ba

b

a +=+1

( ) ( )dss

cssds

dss

cs

++++=

+++

2

1 ,f

eef

f

ee

+=+

6. 符号矩阵的求值函数 subs ( )

求值函数 subs ( )的调用格式有以下几种:

subs (S,OLD,NEW )

subs (S,NEW ) 第一种格式的功能是将符号矩阵 S 的中 OLD 变量替换为 NEW 变量;第二种格式的功能

是对符号矩阵 S 用新变量 NEW 替代其中的自由变量。需要注意, OLD 与 NEW 变量内可能

存放多个参量,替换的参量既可是符号对象,也可是数值对象。请看以下示例,并注意求值

函数的书写格式。

【例 3-95】符号矩阵的求值示例。

用以下 MATLAB 语句对符号矩阵进行符号代换与数值求值:

syms a b c d e f a1 b1 c1 d1 e1 f1; A=sym(’[a^2+a*b c^2+2*c*d+d^2;e^2+4*e+3 f^2-1]’)

a=a1;b=b1;c=c1;d=d1;e=e1;f=f1;

B=subs(A,’[a b c d e f]’,[a b c d e f])

a=1;b=2;c=3;d=4;e=5;f=6;

C=subs(A,’[a b c d e f]’,[a b c d e f])

语句执行结果 A = [ a^2+a*b, c^2+2*c*d+d^2]

[ e^2+4*e+3, f^2-1]

B = [ a1^2+a1*b1, c1^2+2*c1*d1+d1^2]

[ e1^2+4*e1+3, f1^2-1]

C = 3 49

48 35 由运算结果可知,B 矩阵各个元素是 A 矩阵各个元素当 1aa = 、 1bb = 、 1cc = 、 1dd = 、

1ee = 、 1ff = 代换的结果,C 矩阵各个元素是 A 矩阵各个元素当 1=a 、 2=b 、 3=c 、 4=d 、

5=e 、 6=f 求值的结果。

7. 矩阵元素分解成嵌套形式的函数 horner ( )

Page 117: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

105

矩阵元素分解成嵌套形式的函数 horner ( )的调用格式为:

horner ( S ) 这个函数格式的功能是把矩阵 S 的各元素分解成嵌套形式或叫“秦九昭型”多项式表达

式。

【例 3-96】符号矩阵各元素分解成嵌套形式示例。

【解】

用以下 MATLAB 语句对符号矩阵各元素分解成嵌套形式:

syms x y a b c d e; S=[x^3+a*x^2+b*x-c x^5+c*x^3-a*x+b;y^4+y^3+y^2+1 y^5+e*y^2+d]

Q=horner(S) 语句执行结果 S = [ x^3+a*x^2+b*x-c, x^5+c*x^3-a*x+b]

[ y^4+y^3+y^2+1, y^5+e*y^2+d]

Q = [ -c+(b+(a+x)*x)*x, b+(-a+(c+x^2)*x^2)*x]

[ 1+(1+(1+y)*y)*y^2, d+(e+y^3)*y^2]

3.7.5 矩阵微分与积分

矩阵的微分与积分是将通常函数的微分与积分概念推广到矩阵的结果。

如果矩阵 ( )nmija

×=A 的每个元素都是变量 t 的函数,即

( ) ( ) ( )( ) ( ) ( )

( ) ( ) ( )

=

tatata

tatata

tatata

mnmm

n

n

21

22221

11211

A

则称 A 为一个函数矩阵,记为 ( )tA 。若 [ ]bat ,∈ ,则称 ( )tA 定义在 [ ]ba, 上;又若每个元素 ( )taij

在 [ ]ba, 上连续、可微、可积,则称 ( )tA 在 [ ]ba, 上连续、可微、可积,并定义函数矩阵的导数:

( ) ( ) ( )

( ) ( ) ( )

( ) ( ) ( )

=

tat

tat

tat

tat

tat

tat

tat

tat

tat

t

mnmm

n

n

d

d

d

d

d

d

d

d

d

d

d

dd

d

d

d

d

d

d

d

21

22221

11211

A

与函数矩阵的积分:

( ) ( ) ( )( ) ( ) ( )

( ) ( ) ( )

=

∫∫∫

∫∫∫∫∫∫

∫ttattatta

ttattatta

ttattatta

tA

mnmm

n

n

ddd

ddd

ddd

d

21

22221

11211

应用较多的还有矩阵函数相对于列向量( 或行向量)导数,就是 Jacobian 矩阵。请参见 6.1

节。

Page 118: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

106

【例 3-97】已知符号矩阵( ) ( )( ) ( )

=

tata

tata

2221

2111A 与数值矩阵( )( )

=

te

ttt ln

sin2B ,试计算

td

d A与

td

d B。

【解】

(1) 用以下 MATLAB 语句计算符号矩阵的微分:

syms t a11 a12 a21 a22;

A=[sym(’a11(t)’) sym(’a12(t)’);sym(’a21(t)’) sym(’a22(t)’)]

dA=diff(A,’t’) 语句执行结果

A = [ a11(t), a12(t)]

[ a21(t), a22(t)]

dA = [ diff(a11(t),t), diff(a12(t),t)]

[ diff(a21(t),t), diff(a22(t),t)]

(2) 用以下 MATLAB 语句计算数值矩阵的微分:

syms t a11 a12 a21 a22; a11=2*t;a12=sin(t);a21=exp(t);a22=log(t);

A=[a11 a12;a21 a22];

B=subs(A,[a11 a12 a21 a22],[a11 a12 a21 a22])

dB=diff(B,’t’)

语句执行结果

B = [ 2*t, sin(t)]

[ exp(t), log(t)]

dB = [ 2, cos(t)]

[ exp(t), 1/t]

即 ( )( )

( )

=

=

t

t

t

tt

tttt 1e

cos2

lne

sin2

d

d

d

d B。

【例 3-98】已知符号矩阵( ) ( )( ) ( )

=

tata

tata

2221

2111A 与数值矩阵( )( )

=

t

ttt lne

sin2B ,试计算 ∫ tdA 与

∫ tdB 。

【解】

(1) 用以下 MATLAB 语句计算符号矩阵的积分:

syms t a11 a12 a21 a22;

A=[sym(’a11(t)’) sym(’a12(t)’);sym(’a21(t)’) sym(’a22(t)’)]

iA=int(A,’t’)

语句执行结果

A = [ a11(t), a12(t)]

[ a21(t), a22(t)]

iA = [ int(a11(t),t), int(a12(t),t)]

[ int(a21(t),t), int(a22(t),t)]

Page 119: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

107

(2) 用以下 MATLAB 语句计算数值矩阵的积分:

syms t a11 a12 a21 a22; a11=2*t;a12=sin(t);a21=exp(t);a22=log(t);

A=[a11 a12;a21 a22];

B=subs(A,[a11 a12 a21 a22],[a11 a12 a21 a22])

iB=int(B,’t’)

语句执行结果 B = [ 2*t, sin(t)]

[ exp(t), log(t)]

iB = [ t^2, -cos(t)] [ exp(t), t*log(t)-t]

即( )( )

( )( )

−−=

= ∫∫ ttt

ttt

t

ttt

ttlne

cosd

lne

sin2d

2

A 。

3.7.6 矩阵的 Laplace 变换

矩阵的 Laplace 变换是将通常函数的 Laplace 变换(参见 3.9 节)概念推广到矩阵的结果。设

函数矩阵 ( )tA 的每个元素 ( )taij 在 t ≥ 0 有定义,而且积分在 s 的某一域内收敛,则称

( )[ ] ( ) ttAtL st de0

−∞

∫=A

为函数矩阵 ( )tA 的 Laplace 变换。

【例 3-99】已知矩阵 ( ) ( )

=

tt

At at

δωsin

eP ,试计算 P 的 Laplace 变换 ( )[ ]tL P 。

【解】

用以下 MATLAB 语句计算矩阵的 Laplace 变换:

syms t s A a omega;f=sym(’Dirac(t)’); P=[A*t exp(a*t);sin(omega*t) f]

Q=laplace(P) 语句执行结果 P = [ A*t,exp(a*t)]

[ sin(omega*t),Dirac(t)]

Q = [ A/s^2, 1/(s-a)]

[ omega/(s^2+omega^2), 1]

即 P 的 Laplace 变换 ( )[ ]( )

+

−==1

1

22

2

ωω

s

ass

A

tL PQ 。

[说明]

本题的 MATLAB 程序语句中,f=sym(’Dirac(t)’)为定义的单位脉冲函数 ( )tδ 。请参见 3.9

节。

Page 120: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

108

3.8 M A T LA B 符号方程求解

我们从初中甚至从小学就开始接触方程,现在还是来复习一下有关方程及其求解的概念。

3.8.1 方程求解的有关概念

1. 方程与解方程

含有未知量的等式叫做方程。把若干方程合在一起,就组成一个方程组。在未知量可取

值的范围内,找出的变量的值代入方程,能使等式成立,这些变量的值叫做方程的解。若是

未知量可取值的范围内,没有一个值能使方程的两边相等,则此方程无解。找出方程的解或

证明方程无解的过程叫做解方程。方程的未知量简称为元,根据元的个数把方程分为一元方

程、二元方程以及多元方程。

2. 同解方程(组)与同解变换

在解方程(或方程组)的过程中,往往需要把方程变形。方程的变形有多种形式。

如果第一个方程(组)的解都是第二个方程(组)的解,并且第二个方程(组)的解也都是第一

个方程(组)的解,那这两个方程就叫做同解方程(组)。从第一个方程变换到与它同解的第二个

方程,这个变换叫做同解变换或同价变换。方程两边都加上同一个数或都加上同一整式或都

乘(或除)以不等号于零的同一个数的变换都是同解变换。

通过同解变换,不会改变方程解的性质,也不会改变方程解的个数。

3. 使变形后的方程是原方程的结果

如果第一个方程的解都是第二个方程的解,那么第二个方程就叫做第一个方程的结果。

方程两边都乘以同一个整式或方程两边都乘方同一次数,那么所得的方程是原方程的结果。

因为没有说第二个方程的解都是第一个方程的解,很显然,这两个方程不一定是同解方

程。两个方程不同解,也就是出现了多根(增根)与少根(遗根)的现象。

在方程变形中,有时还需要将方程两边的代数式分别进行恒等变换。如果变换时扩大或

缩小了自变量可取值范围,往往会引进增解(即增根)或失去解(即减根)。

4. 方程解的验算

求出方程的解后,要将其解代入原方程验证等式是否成立,这就是方程解的验算。对于

方程变形中出现的增解,容易用验算将其剔除,但遗根就较难发现。如果在变换过程中,随

时注意到自变量可取值的范围,可以帮助克服遗根。

3.8.2 MATLAB 符号代数方程求解

在中学的初等数学里,主要有代数方程与超越方程。能够通过有限次的代数运算(加、减、

乘、除、乘方、开方)求解的方程叫代数方程;不能够通过有限次的代数运算求解的方程叫超

越方程。超越方程有指数方程、对数方程与三角方程。

在高等数学里,主要有微分方程。

方程的种类繁多,但用 MATLAB 符号方程解算的函数命令来求解方程,其函数的调用格

式简明而精炼,其求解过程很简单,使用也很方便。

众所周知,MATLAB 的函数是已经设计好的子程序。需要特别强调,函数命令的执行过

程是看不到的,也就是方程如何变形的情况,变形中是否有引起增根或遗根的可能,不得而

Page 121: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

109

知,只能看到函数命令最后执行的结果。所以,对方程所求出的所有解,一定要逐一带回到

原方程进行校验。

符号代数方程求解函数命令 solve ( )的调用格式有以下三种:

格式 1 solve(’eqn1’,’eqn2’,...,’eqnN’,’v1’,’v2’,...,’vN’)

这种格式函数是对’eqn1’,’eqn2’,...,’eqnN’方程组关于指定变量’v1’,’v2’,...,’vN’联立求解,

函数无输出参数。函数的输入参数 eqn1,eqn2,...,eqnN 是字符串表达的方程(是指 eqn1=0,

eqn2=0,...,eqnN=0 等),或是字符串表达式(即将等式等号右边的非零项部分移项到左边后得到

的没有等号的左端表达式),函数的输入参数 v1,v2,...,vN 是对方程组求解的指定变量。每一方

程与变量的字符串,其两端必须用英文输入状态下的单引号“’”加以限定,方程组的多个方

程之间用英文输入状态下的逗号“,”加以分隔。这种调用格式有输出参数的形式为:

S=solve(’eqn1’,’eqn2’,...,’eqnN’,’v1’,’v2’,...,’vN’)

函数输出参数 S 是一个“构架数组”。如果要显示求解结果,必须再执行 Sv1,Sv2,...,Svn。

这是最规范的推荐格式,使用最为广泛。

函数输出参数也可以不采用构架数组的形式,而是直接用指定变量行向量的形式。这样,

函数命令 solve ( )的调用格式则为

[v1,v2,...,vN]=solve(’eqn1’,’eqn2’,...,’eqnN’,’v1’,’v2’,...,’vN’)

【例 3-100】对以下联立方程组:

=−=+

=−

cbxx

azy

xzy

2

222

求 1=a , 2=b , 3=c 时的 x 、 y 、 z 。

【解】

(1) 根据函数命令 solve ( )的调用格式的要求,求方程组的解的 MATLAB 语句段如下: syms x y z a b c;

a=1;b=2;c=3;

eq1=y^2-z^2-x^2

eq2=y+z-a eq3=x^2-b*x-c

语句段运行结果

eq1 = y^2-z^2-x^2

eq2 = y+z-1 eq3 = x^2-2*x-3

再执行以下 MATLAB 语句

[x,y,z]=solve(’y^2-z^2-x^2’,’y+z-1’,’x^2-2*x-3 ’,’x’,’y’,’z’)

语句运行结果

x = [ -1]

[ 3]

y = [ 1]

[ 5]

z = [ 0]

Page 122: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

110

[ -4]

即方程组的解有 2 组: 当 11 −=x 时, 11 =y , 01 =z ;

当 32 =x 时, 52 =y , 42 −=z 。

(2) 经验算,两组 111 ,, zyx 与 222 ,, zyx 均为方程组的解。

(3) 求方程组的构架数组 S,然后计算 x、y、z,分别执行以下 MATLAB 语句段会求得同

样的结果。

① 先求方程组的构架数组 S,其 MATLAB 语句段如下:

syms x y z a b c; S=solve(’y^2-z^2=x^2’,’y+z=a’,’x^2-b*x=c’,’x’,’y’,’z’)

② 求方程组的 x 解的 MATLAB 语句段如下:

syms x y z a b c;

a=1;b=2;c=3;

x=simple(subs(S.x,’[a b c]’,[a b c]))

③ 求方程组的 y 解的 MATLAB 语句段如下:

syms x y z a b c;

a=1;b=2;c=3;

y=simple(subs(S.y,’[a b c x]’,[a b c x]))

④ 求方程组的 z 解的 MATLAB 语句段如下:

syms x y z a b c;

a=1;b=2;c=3;

z=simple(subs(S.z,’[a b c x]’,[a b c x]))

格式 2 solve(’eqn1’,’eqn2’,...,’eqnN’,’var1,var2,...,varN’)

S=solve(’eqn1’,’eqn2’,...,’eqnN’,’var1,var2,...,varN’)

[v1,v2,...,vN]=solve(’eqn1’,’eqn2’,...,’eqnN’,’var1,var2,...,varN’)

这种调用格式函数命令与第一种调用格式的区别仅在函数输入参数的指定变量不需将每

个变量都用单引号“’”加以限定,而只要将所有指定变量的前后用单引号“’”分隔就可以,

即’v1,v2,...,vN’。

【例 3-101】对以下联立方程组:

=++=++

02

2

cbxx

ayxyx

求 3=a , 4−=b , 3=c 时的 x 、 y 。

【解】

(1) 求方程组的解的 MATLAB 语句如下:

syms x y a b c; [x,y]=solve(’x^2+x*y+y=a’,’x^2+b*x+c=0’,’x,y’);

a=3;b=-4;c=3;

x=simple(subs(x,’[a b c]’,[a b c]))

y=subs(y,’[a b c]’,[a b c])

Page 123: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

111

语句执行结果

x = [ 3]

[ 1]

y =-1.5000

1.0000

即方程组的解有 2 组: 当 11 =x 时, 11 =y ;

当 32 =x 时, 2/32 −=y 。

(2) 经验算,两组 11, yx 与 22 , yx 均为方程组的解。

格式 3 solve(’eqn1’,’eqn2’,...,’eqnN’)

S=solve(’eqn1’,’eqn2’,...,’eqnN’)

[v1,v2,...,vN]=solve(’eqn1’,’eqn2’,...,’eqnN’) 这种调用格式函数命令与第二种调用格式的区别仅在函数输入参数无指定变量部分,其

它部分均相同。

【例 3-102】对联立方程组: ( )( )( )

=++=++=++

czyxz

bzyxy

azyxx

求 6=a , 12=b , 18=c 时的 x 、 y 、 z 。

【解】

(1) 求方程组的解的 MATLAB 语句段如下:

syms x y z a b c; [x,y,z]= solve(’x*(x+y+z)-a’,’y*(x+y+z)-b’,’z*(x+y+z)-c’);

a=6;b=12;c=18;

x=subs(x,’[a b c]’,[a b c])

y=subs(y,’[a b c]’,[a b c])

z=subs(z,’[a b c]’,[a b c]) 语句段运行结果

x = 1 -1

y = 2 -2

z = 3 -3

即方程组的解有 2 组: 当 11 =x 时, 21 =y , 31 =z ;

当 12 −=x 时, 22 −=y , 32 −=z 。

(2) 经验算,两组 111 ,, zyx 与 222 ,, zyx 均为方程组的解。

对于符号代数方程求解的函数命令 solve ( ),以上三种调用格式有一个重要特例,那就是当

方程组的方程个数为 1 时,即为求解单个方程的根。3 种调用格式中输入、输出参数的含义同前。

Page 124: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

112

【例 3-103】解方程:

02 =++ cbxax

并求 1=a , 2=b , 2=c 时的数值解。

【解】

(1) 求方程解的 MATLAB 语句如下:

syms x a b c; [x]= solve(’a*x^2+b*x+c=0’)

a=1;b=2;c=2;

x=subs(x,’[a b c]’,[a b c]) 语句执行结果 x = [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]

[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]

x = -1.0000 + 1.0000i

-1.0000 - 1.0000i

即一元二次方程的求根公式为

a

acbbx

2

42

2,1−±−=

还有当 1=a , 2=b , 2=c 时的方程的解为

j12,1 ±−=x

(2) 经验算, 21,x 均为方程的解。

【例 3-104】解方程:

02155 22 =−−−+ xxxx

【解】

(1) 求方程解的 MATLAB 语句如下:

syms x; [x]= solve(’5*x^2+x-x*(5*x^2-1)^(1/2)-2’,’x’)

语句执行结果 x = [ 1/5*10^(1/2)]

[ -1/5*10^(1/2)]

即方程的解为

5

102,1 ±=x

(2) 经验算, 2,1x 均为方程的解。

3.8.3 MATLAB 符号微分方程求解

1. 有关微分方程及其求解的基本概念

凡表示未知函数与未知函数的导数以及自变量之间的关系的方程叫做微分方程。如果在

一个微分方程中出现的未知函数只含一个自变量,这个方程叫做常微分方程。如果在一个微

分方程中出现有多元函数的偏导数,这个方程叫做偏微分方程。

Page 125: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

113

微分方程中所出现的未知函数的最高阶导数的阶数,叫做微分方程的阶。

找出这样的函数,把该函数代入微分方程能使该方程成为恒等式,这个函数叫做该微分

方程的解。如果微分方程的解中含有相互独立的任意常数,且任意常数的个数与微分方程的

阶数相同,这样的解叫做微分方程的通解。

由于通解中含有任意常数,所以它还不能完全确定地反映某一客观事物的规律性。要完

全确定地反映某一客观事物的规律性,必须确定这些常数的值。为此,要根据实际问题的具

体情况,提出确定这些常数的条件,此即叫做初始条件。设微分方程的未知函数为 ( )xyy = ,

一阶微分方程的初始条件通常是 00

yyxx

== ;二阶微分方程的初始条件通常是 00

yyxx

== ,

00

yyxx

′=′= 。由初始条件确定了通解的任意常数后的解叫做微分方程的特解。求微分方程

( )yxfy ,=′ 满足初始条件 00

yyxx

== 的特解的问题叫做一阶微分方程的初始问题,记作

( )

==′

= 00

,

yy

yxfy

xx

(3-1)

微分方程的一个解的图形是一条曲线,叫做微分方程的积分曲线。一阶微分方程的特解

的几何意义就是求微分方程的通过已知点 ( )00 , yx 的那条积分曲线。二阶微分方程的特解的几

何意义就是求微分方程的通过已知点 ( )00 , yx 且在该点处的切线斜率为 0y′ 的那条积分曲线,即

二阶微分方程的初始问题,记作

( )

′=′=′=′′

== 0000

,

,,

yyyy

yyxfy

xxxx

(3-2)

2.MATLAB 符号微分方程求解的函数命令

常微分方程的符号解由函数命令 dsolve ( )来计算,其不带输出参数的调用格式如下:

dsolve(’eqn1’,’eqn2’,...,’初始条件部分’,’指定独立变量部分’)

函数命令 dsolve ( )的输入参数包括 3 部分内容:微分方程部分、初始条件部分、指定独

立变量部分。每一部分两端必须加英文输入状态下的单引号“’”,同等成分间用英文输入状态

下的逗号“,”加以分隔。三部分中微分方程是必不可少的输入参数,其余两部分可有可无,

视问题的需要而定。输入参数必须以字符形式书写。

这种调用格式的功能是对’eqn1’,’eqn2’,...微分方程组联立求符号解,而被求解的微分方程

不论什么类型。请注意,微分方程组的每一个方程式的两端必须加英文输入状态下的单引号

“’”,同等成分间用英文输入状态下的逗号“,”加以分隔;或者在微分方程组的所有方程式

间用英文输入状态下的逗号“,”加以分隔,其首末两端再用英文输入状态下的单引号“’”加

以限定。

关于微分方程部分中导函数书写格式的特别规定:当 y 为“因变量”时,用“Dny”表示

“ y 的 n 阶导函数”。例如 Dy 表示 y 对默认独立变量 t 的一阶导函数t

y

d

d;Dny 表示 y 对默认

独立变量 t 的 n 阶导函数n

n

t

y

d

d。

关于初始条件的书写格式规定:初始或边界条件 byax

== 与 dycx

=′= 分别写成 ( ) bay =

与 ( ) dcDy = 等。 a ,b,c,d 可以是除因变量、独立变量字符以外的其它字符。对于一个高

Page 126: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

114

阶微分方程而言,当初始条件的个数少于微分方程的阶数时,在微分方程的解中将出现任意

常数 ,2,1 CC ,任意常数的个数等于微分方程的阶数与初始条件个数的差;对于一微分方程

组而言,当初始条件的个数少于微分方程组中方程的个数时,任意常数的个数等于所缺少的

初始条件的个数。

关于独立变量的书写格式规定:若要指定独立变量,需要在输入参数的第三部分中加以

规定。若不对独立变量作专门的定义,则本函数命令默认小写英文字母 t 为独立变量。

函数命令 dsolve ( )带输出参数的调用格式如下:

S=dsolve(’eqn1’,’eqn2’,...,’初始条件部分’,’指定独立变量部分’)

函数命令 dsolve ( )的输入参数的含义同上。其输出参数 S 是“架构数组”。数组元素是微

分方程或微分方程组的因变量。

需要特别强调,如要对微分方程进行验算,不能用求解微分方程的导函数的特定符号

“ Dny ”,只能用 MATLAB 微分的函数命令 diff( )。

3. 各类微分方程求解举例

高等数学中,按微分方程的不同结构形式,可以有多种解法。在此,将要着重复习科学

研究与实际工程中 6 类最常用的微分方程,并且都用 MATLAB 的求解符号微分方程的函数命

令来进行求解。

(1) 微分方程组及其求解

科学研究与实际工程中会遇到由几个微分方程联立起来共同确定几个具有同一个自变量

的函数的情形,这些联立的微分方程叫做微分方程组。下面示例就来求解几个微分方程组。

【例 3-105】求微分方程组的通解:

=++

=+++

235d

dd

d2

d

d

tyxt

y

tyt

yx

t

x

【解】

① 求微分方程组通解的 MATLAB 语句如下:

syms t x y; S=dsolve(’Dx+2*x+Dy+y=t’,’Dy+5*x+3*y=t^2’,’t’);

x=collect(collect(collect(S.x,t),sin(t)),cos(t))

y=collect(collect(collect(S.y,t),sin(t)),cos(t)) 语句执行结果 x = (2*C2+3*C1)*sin(t)+C1*cos(t)+t-t^2+3

y = (-3*C2-5*C1)*sin(t)-4+C2*cos(t)+2*t^2-3*t

即方程组的通解为

( ) ( ) ( )( ) ( ) ( )

−−+⋅+⋅⋅−⋅−=++−⋅+⋅⋅+⋅=

432cossin35

3cossin322

221

2112

tttCtCCy

tttCtCCx

② 验算微分方程的解,其 MATLAB 语句如下:

syms t x y C1 C2; x=(2*C2+3*C1)*sin(t)+C1*cos(t)+t-t^2+3;

y=(-3*C2-5*C1)*sin(t)-4+C2*cos(t)+2*t^2-3*t;

Page 127: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

115

L1=diff(x,t)+2*x+diff(y,t)+y-t;

L1=collect(collect(L1,sin(t)),cos(t))

R1=0 L2=diff(y,t)+5*x+3*y-t^2;

L2=collect(collect(L2,sin(t)),cos(t))

R2=0 语句执行结果

L1 = 0

R1 = 0

L2 = 0

R2 = 0

即第一式左=第一式右;第二式左=第二式右。

③ 结论:验算结果表明,

( ) ( ) ( )( ) ( ) ( )

−−+⋅+⋅⋅−⋅−=++−⋅+⋅⋅+⋅=

432cossin35

3cossin322

221

2112

tttCtCCy

tttCtCCx

是微分方程的通解。

【例 3-106】求微分方程组的通解以及满足所给初始条件的特解:

=−=

==

=

=

1,d

d

,0,d

d

0

0

t

t

yxt

y

xyt

x

【解】

① 求微分方程组通解的 MATLAB 语句如下:

syms x y;

S=dsolve(’Dx=y’,’Dy=-x’,’t’);

x=S.x

y=S.y

语句执行结果 x = cos(t)*C1+sin(t)*C2

y = -sin(t)*C1+cos(t)*C2

即方程组的通解为

( ) ( )( ) ( )

⋅+⋅−=⋅+⋅=

21

21

cossin

sincos

CtCty

CtCtx

② 求微分方程组特解的 MATLAB 语句如下: syms t x y;

S=dsolve(’Dx=y’,’Dy=-x’,’x(0)=0’,’y(0)=1’,’t’);

x=S.x

y=S.y 语句执行结果

x = sin(t)

Page 128: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

116

y = cos(t)

即方程组满足所给初始条件的特解为 ( )( )

==

ty

tx

cos

sin

③ 验算微分方程组的特解,其 MATLAB 语句如下:

syms t x y;

x=sin(t);

y=cos(t);

L1=diff(x,t)

R1=y

L2=diff(y,t) R2=-x

语句执行结果

L1 = cos(t)

R1 = cos(t)

L2 = -sin(t)

R2 = -sin(t)

即第一式左=第一式右;第二式左=第二式右。

④ 结论:验算结果表明,( )( )

==

ty

tx

cos

sin是微分方程组的特解。同理验算可知,

( ) ( )( ) ( )

⋅+⋅−=⋅+⋅=

21

21

cossin

sincos

CtCty

CtCtx

是微分方程组的通解。

(2) 可分离变量的微分方程及其求解

如果一个一阶微分方程能写成 ( ) ( ) xxfyyg dd = (3-3)

的形式,即能把微分方程写成一端只含 y 的函数 ( )yg 与 yd ,另一端只含 x 的函数 ( )xf 与 xd ,

那么原方程就叫做可分离变量的微分方程。

【例 3-107】求可分离变量微分方程的通解:

( )yyayxy ′+=′−′ 2

【解】

① 求微分方程解的 MATLAB 语句如下:

syms x y a; y=dsolve(’Dy-x*Dy=a*(y^2+Dy)’,’x’)

语句执行结果 y = 1/(a*log(1-x-a)+C1)

即方程的解为

( ) 11ln

1

Caxay

+−−⋅=

Page 129: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

117

② 验算微分方程的解,其 MATLAB 语句如下:

syms x y C1 a; y=1/(a*log(1-x-a)+C1);

L=simple(diff(y,x)-x*diff(y,x))

R=simple(a*(y^2+diff(y,x)))

语句执行结果 L = a*(-1+x)/(a*log(1-x-a)+C1)^2/(-1+x+a)

R = a*(-1+x)/(a*log(1-x-a)+C1)^2/(-1+x+a)

即左式=右式。

③ 结论:验算结果表明, ( ) 11ln

1

Caxay

+−−⋅= 是微分方程的通解。

【例 3-108】求满足初始条件的可分离变量微分方程的特解:

0,e0

2 ==′=

−x

yx yy

【解】

①求微分方程解的 MATLAB 语句如下:

syms x y; y=dsolve(’Dy=exp(2*x-y)’,’y(0)=0’,’x’)

语句执行结果 y = log(1/2*exp(2*x)+1/2)

即方程的解为

+=

2

1e

2

1ln 2xy

② 验算微分方程的解,其 MATLAB 语句如下:

syms x y; y=log(1/2*exp(2*x)+1/2);

L=simple(diff(y,x)) R=simple(exp(2*x-y))

语句执行结果 L = 2*exp(2*x)/(exp(2*x)+1)

R = 2*exp(x)^2/(exp(x)^2+1)

即左式=右式。

③ 结论:验算结果表明,

+=

2

1e

2

1ln 2xy 是方程的特解。

(3) 齐次微分方程及其求解

如果一阶微分方程 ( )yxfx

y,

d

d= 中的函数 ( )yxf , 可以写成比值

x

y的函数,即

( )

=

x

yyxf ϕ,

则称这种方程为齐次微分方程。

【例 3-109】求齐次微分方程的通解:

Page 130: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

118

( ) 0dd22 =−+ yxyxyx

【解】

① 求微分方程解的 MATLAB 语句如下:

syms x y; y=dsolve(’Dy=(x^2+y^2)/(x*y)’,’x’)

语句执行结果 y = [ (2*log(x)+C1)^(1/2)*x]

[ -(2*log(x)+C1)^(1/2)*x]

即方程的解为

( ) 1ln2 Cxxy += 与 ( ) 1ln2 Cxxy +−=

② 验算微分方程的解

验算第一个解的 MATLAB 语句如下:

syms x y C1; y=(2*log(x)+C1)^(1/2)*x;

L=factor(diff(y,x)) R=simple((x^2+y^2)/(x*y))

语句执行结果 L = (1+2*log(x)+C1)/(2*log(x)+C1)^(1/2)

R = (1+2*log(x)+C1)/(2*log(x)+C1)^(1/2)

即左式=右式。

验算第二个解的 MATLAB 语句如下:

syms x y C1; y=-(2*log(x)+C1)^(1/2)*x;

L=factor(diff(y,x)) R=simple((x^2+y^2)/(x*y))

语句执行结果 L = -(1+2*log(x)+C1)/(2*log(x)+C1)^(1/2)

R = -(1+2*log(x)+C1)/(2*log(x)+C1)^(1/2)

即左式=右式。

③ 结论:验算结果表明, ( ) 1ln2 Cxxy += 与 ( ) 1ln2 Cxxy +−= 都是方程的解。

【例 3-110】求满足初始条件的齐次微分方程的特解:

5

1

d

d

+−+−

=xy

xy

x

y1,

0==x

y

【解】

① 求微分方程组解的 MATLAB 语句如下:

syms x y;

y=dsolve(’Dy=(y-x+1)/(y-x+5)’,’y(0)=1’,’x’)

语句执行结果 y = -5+x-2*(9-2*x)^(1/2)

Page 131: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

119

即方程的解为

xxy 2925 −−+−=

② 验算微分方程的解,其 MATLAB 语句如下:

syms x y C1; y=-5+x-2*(9-2*x)^(1/2);

L=diff(y,x) R=simple((y-x+1)/(y-x+5))

语句执行结果 L = 1+2/(9-2*x)^(1/2)

R = 1+2/(9-2*x)^(1/2)

即左式=右式。

③ 结论:验算结果表明, xxy 2925 −−+−= 是方程的特解。

(4) 一阶线性微分方程与伯努利方程及其求解

若微分方程是未知函数及其各阶导函数的一次方程,这样的微分方程叫做线性微分方程。

方程

( ) ( )xQyxPx

y=+

d

d (3-4)

叫做一阶线性微分方程。如果 ( ) 0≡xQ ,则方程(3-4)称为齐次的;如果 ( )xQ 不恒等于零,

则方程(3-4)称为非齐次的。

方程

( ) ( ) ( )1,0d

d≠=+ nyxQyxP

x

y n (3-5)

叫做伯努利微分方程。当 0=n 或 1=n 时,此乃线性微分方程;当 0≠n 与 1≠n 时,这个方程

不是线性的。

【例 3-111】求一阶线性微分方程的通解:

( ) ( )xxyy sinecos −=+′

【解】

① 求微分方程解的 MATLAB 语句如下:

syms a x y; y=dsolve(’Dy+y*cos(x)=exp(-sin(x))’,’x’);

y=simple(y) 语句执行结果 y = exp(-sin(x))*(x+C1)

即方程的解为

( ) ( )xCxy sin1 e −⋅+=

② 验算微分方程的解,其 MATLAB 语句如下:

syms x y C1; y=exp(-sin(x))*(x+C1);

L=diff(y,x)+y*cos(x)

Page 132: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

120

R=exp(-sin(x))

语句执行结果

L = exp(-sin(x))

R = exp(-sin(x))

即左式=右式。

③ 结论:验算结果表明, ( ) ( )xCxy sin1 e−⋅+= 是方程的通解。

【例 3-112】求满足初始条件的一阶线性微分方程的特解:

83d

d=+ y

x

y2,

0==x

y

【解】

① 求微分方程解的 MATLAB 语句如下:

syms a x y; y=dsolve(’Dy+3*y=8’,’y(0)=2’,’x’);

y=simple(y) 语句执行结果

y = 8/3-2/3/exp(x)^3

即方程的解为

( )xy 3e43

2 −−=

② 验算微分方程的解,其 MATLAB 语句如下:

syms x y;

y=8/3-2/3/exp(x)^3; L=diff(y,x)+3*y

R=8 语句执行结果

L = 8

R = 8

即左式=右式。

③ 结论:验算结果表明, ( )xy 3e43

2 −−= 是方程的特解。

【例 3-113】求伯努利微分方程的通解:

( )( ) 2lnd

dyxa

x

y

x

y=+

【解】

① 求微分方程解的 MATLAB 语句如下:

syms a x y; y=dsolve(’Dy=-y/x+a*log(x)*y^2’,’x’)

语句执行结果 y = -2/x/(a*log(x)^2-2*C1)

即方程的解为

Page 133: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

121

( ) ]2ln[

2

12 Cxax

y−

−=

② 验算微分方程的解,其 MATLAB 语句如下:

syms x y C1; y=-2/x/(a*log(x)^2-2*C1);

L=diff(y,x) R=-y/x+a*log(x)*y^2

语句执行结果 L = 2/x^2/(a*log(x)^2-2*C1)+4/x^2/(a*log(x)^2-2*C1)^2*a*log(x)

R = 2/x^2/(a*log(x)^2-2*C1)+4/x^2/(a*log(x)^2-2*C1)^2*a*log(x)

即左式=右式。

③ 结论:验算结果表明,( ) ]2ln[

2

12 Cxax

y−

−= 是方程的通解。

【例 3-114】求满足初始条件的伯努利微分方程的特解:

23d

dxyxy

x

y=− 1,

0==x

y

【解】

① 求微分方程解的 MATLAB 语句如下:

syms x y; y=dsolve(’Dy-3*x*y=x*y^2’,’y(0)=1’,’x’)

语句执行结果 y = 3/(-1+4*exp(-3/2*x^2))

即方程的解为

1e4

32

2

3

=− x

y

② 验算微分方程的解,其 MATLAB 语句如下:

syms x y; y=3/(-1+4*exp(-3/2*x^2));

L=simple(diff(y,x)-3*x*y)

R=x*y^2

语句执行结果 L = 9/(-1+4*exp(-3/2*x^2))^2*x

R = 9/(-1+4*exp(-3/2*x^2))^2*x

即左式=右式。

③ 结论:验算结果表明,

1e4

32

2

3

=− x

y 是方程的特解。

(5) 二阶常系数齐次与非齐次线性微分方程及其求解

在二阶齐次线性微分方程 ( ) ( ) 0=+′+′′ yxQyxPy (3-6)

Page 134: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

122

中,如果 yy ,′ 的系数 ( ) ( )xQxP , 均为常数,即式(3-6)成为

0=+′+′′ yqypy (3-7)

其中 qp, 是常数,则称式(3-7)为二阶常系数齐次线性微分方程。如果 qp, 不全为常数,称

式(3-7)为二阶变系数齐次线性微分方程。

当式(3-7)右端不为零时,若有

( )xfyqypy =+′+′′ (3-8)

式(3-8)叫做二阶常系数非齐次线性微分方程。

二阶常系数齐次与非齐次线性微分方程在科学研究与实际工程上应用极为广泛。

【例 3-115】求二阶常系数齐次微分方程的通解: 052 =+′−′′ yyy

【解】

① 求微分方程解的 MATLAB 语句如下:

syms x y; y=dsolve(’D2y-2*Dy+5*y=0’,’x’)

语句执行结果

y = C1*exp(x)*sin(2*x)+C2*exp(x)*cos(2*x)

即方程的解为

( ) ( ) xx xCxCy e2cose2sin 21 ⋅⋅+⋅⋅=

② 验算微分方程的解,其 MATLAB 语句如下:

syms x y C1 C2; y=C1*exp(x)*sin(2*x)+C2*exp(x)*cos(2*x);

L=diff(diff(y,x))-2*diff(y,x)+5*y

R=0

语句执行结果

L = 0

R = 0

即左式=右式。

③ 结论:验算结果表明, ( ) ( ) xx xCxCy e2cose2sin 21 ⋅⋅+⋅⋅= 是方程的通解。

【例 3-116】求满足初始条件的二阶常系数齐次微分方程的特解:

2,4,0d

d2

d

d002

2

−=′==++ == ttsss

t

s

t

s

【解】

① 求微分方程组解的 MATLAB 语句如下:

syms x y; s=dsolve(’D2s+2*Ds+s=0’,’s(0)=4,Ds(0)=-2’,’t’);

s=simple(factor(s)) 语句执行结果 s = 2*exp(-t)*(2+t)

即方程的解为

Page 135: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

123

( ) tts −⋅+= e22

② 验算微分方程的解,其 MATLAB 语句如下:

syms x y; s=2*exp(-t)*(2+t);

L=diff(diff(s,t))+2*diff(s,t)+s

R=0

语句执行结果

L = 0

R = 0

即左式=右式。

③ 结论:验算结果表明, ( ) tts −⋅+= e22 是方程的特解。

【例 3-117】求二阶常系数非齐次微分方程的通解: xxyyy 2e65 ⋅=+′−′′

【解】

① 求微分方程解的 MATLAB 语句如下:

syms x y; y=dsolve(’D2y-5*Dy+6*y=x*exp(2*x)’,’x’)

语句执行结果 y =-1/2*exp(2*x)*(2*x+2+x^2)+C1*exp(3*x)+C2*exp(2*x)

即方程的解为

( ) xxx xxCCy 2231

22 e22

2

1ee ⋅++−⋅+⋅=

② 验算微分方程的解,其 MATLAB 语句如下:

syms x y C1 C2; y=-1/2*exp(2*x)*(2*x+2+x^2)+C1*exp(3*x)+C2*exp(2*x);

L=diff(diff(y,x))-5*diff(y,x)+6*y;

L=simple(L) R=x*exp(2*x)

语句执行结果 L = x*exp(2*x)

R = x*exp(2*x)

即左式=右式。

③ 结论:验算结果表明 ( ) xxx xxCCy 2231

22 e22

2

1ee ⋅++−⋅+⋅= 是微分方程的通解。

【例 3-118】求满足初始条件的二阶常系数非齐次微分方程的特解:

( ) 02sin =++′′ xyy 1,1, =′=π=π= xx

yy

【解】

① 求微分方程解的 MATLAB 语句如下: syms x y;

y=dsolve(’D2y+y+sin(2*x)=0’,’y(pi)=1,Dy(pi)=1’,’x’);

Page 136: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

124

y=simple(y)

语句执行结果 y = 1/3*sin(2*x)-cos(x)-1/3*sin(x)

( ) ( ) ( )xxxy 2sin3

1sin

3

1cos +−−=

② 用如下 MATLAB 语句验算微分方程的解:

syms x y; y=1/3*sin(2*x)-cos(x)-1/3*sin(x);

L=diff(diff(y,x))+y+sin(2*x)

R=0 语句执行结果

L = 0

R = 0

即左式=右式。

③ 结论:验算结果表明 ( ) ( ) ( )xxxy 2sin3

1sin

3

1cos +−−= 是微分方程的特解。

(6) 欧拉方程及其求解

形如

( ) ( ) ( )xfypyxpyxpyx nnnnnn =+′+++ −

−−1

111 (3-9)

的方程(其中 nppp ,,, 21 为常数)叫做欧拉方程。欧拉方程是变系数的线性微分方程。

【例 3-119】求欧拉方程的通解: 223 34 xyxyxyx =′−′′+′′′

【解】

① 求微分方程解的 MATLAB 语句如下:

syms x y; y=dsolve(’x^3*D3y+x^2*D2y-4*x*Dy=3*x^2’,’x’)

语句执行结果 y = -1/2*x^2+C1+C2/x+C3*x^3

233

21 2

1xxC

x

CCy −⋅++=

② 用如下 MATLAB 语句验算微分方程的解:

syms x y C1 C2 C3; y=-1/2*x^2+C1+C2/x+C3*x^3;

L=x^3*diff(diff(diff(y,x)))+x^2*diff(diff(y,x))-4*x*diff(y,x);

L=simple(L) R=3*x^2

语句执行结果 L = 3*x^2

Page 137: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

125

R = 3*x^2

即左式=右式。

③ 结论:验算结果表明 233

21 2

1xxC

x

CCy −⋅++= 是欧拉方程的通解。

3.9 M A T LA B 符号积分变换

在数学中,为了把较复杂的运算转化为较简单的运算,经常采用一种变换手段。例如数

量的乘积或商可以通过对数变换成对数的和或差,然后再取反对数即可求得原来数量的乘积

或商。这一变换方法的目的就是把较复杂的乘除运算通过对数变换转化为简单的加减运算。

再如解析几何中的坐标变换、复变函数中的保角变换等亦是如此。

所谓积分变换,就是通过积分运算,把一类函数 A 变换成另一类函数 B,函数 B 一般是

含有参变量α 的积分

( ) ( ) ( )∫=b

attKtfF d,αα

这一变换的目的,就是把某函数类 A 中的函数 ( )tf 通过积分运算变成另一类函数 B 中的函数

( )αF 。这里 ( )α,tK 是一个确定的二元函数,叫做积分变换的核。当选取不同的积分区间与变

换核时,就成为不同的积分变换。 ( )tf 叫做(象)原函数, ( )αF 叫做 ( )tf 的象函数。在一定条

件下,原函数与象函数两者一一对应,成为一个积分变换对。变换是可逆的, 由原函数求象函

数叫做正变换,反之则是逆变换。

积分变换的理论与方法,在自然科学与工程技术的各个领域中都有着极为广泛的应用,

成为不可缺少的运算工具。所有变换的使用,都会极大地简化计算(例如 Laplace 变换用来解

微分方程等等),有的变换则为开创新的学科领域奠定了基础(例如 z 变换用于采样控制系统

定义脉冲传递函数等等)。

以下将要介绍三种积分变换:Fourier 变换、Laplace 变换与 z 变换。前两种变换完全符合

式(3-9)的形式,后一种 z 变换则又有所不同。

3.9.1 Fourier 变换与 Fourier 反变换

1.Fourier 变换与反变换的概念 先来复习 Fourier 级数。由工程数学积分变换的原理,一个以T 为周期的函数 ( )tfT ,

如果在

2,

2

TT上满足狄利克雷条件,则在

2,

2

TT上就可以展开成 Fourier 级数,在 ( )tfT 的

连续点处,级数和的三角形式为:

( ) ( )∑∞

=

++=1

0 sincos2

nnnT tnbtna

atf ωω (3-10)

式中角频率T

π= 2ω 。利用欧拉公式,可得 Fourier 级数的复指数形式

( ) ( ) t

n

T

T TTnnf

Ttf ωτω ττ j2

2

j ede1 ∑ ∫

∞+

−∞= −

= (3-11)

Page 138: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

126

式中 ( ),2,1,0 ±±== nnn ωω 。 (3-12)

再来复习一下 Fourier 积分公式。任何一个非周期函数 ( )tf 可看成是由某个周期函数 ( )tfT

当周期 +∞→T ,角频率 0/20 →π= Tω 时转化而来,即

( ) ( )tftfTT

=+∞→

lim (3-13)

那么式(3-11)成为

( ) ( ) t

n

T

T TT

nnfT

tf ωτω ττ j2

2

j ede1

lim ∑ ∫∞+

−∞= −

+∞→

= (3-14)

由 ( ),2,1,00 ±±== nnn ωω ,当 n 取一切整数时, nω 所对应的点便均匀地排在整个数轴

上。若两个相邻点间的距离用 ω∆ 表示,它仍是对应着一个周期里的弧度数,即

Tnnπ=−=∆ −

21ωωω 或

π∆=2

1 ωT

(3-15)

当 +∞→T 时,有 0→∆ω ,所以式 (3-14)可写为

( ) ( ) ωττ ωτωω

π= ∑ ∫

∞+

−∞= −

→∆

t

n

T

T Tnnftf j2

2

j

0ede

2

1lim (3-16)

由于 0→∆ω ,谐波频率 nω = 0ωn 须用一个变量 ω 来代替。于是式 (3-16)成为以下形式的

Fourier 积分公式:

( ) ( ) ωττ ωωτ dede2

1 jj tftf ∫ ∫∞+

∞−

∞+

∞−

π= (3-17)

现在来说明 Fourier 变换的概念 。若令

( ) ( )∫∞+

∞−

−= ttfF t de jωω (3-18)

式(3-17)则为

( ) ( ) ωω ω de2

1 j tFtf ∫∞+

∞−π= (3-19)

则 ( )ωF 叫做 ( )tf 的 Fourier 变换(式),记为

( ) ( )[ ]tfFF =ω (3-20)

这里请注意,等式左边的 F 是指变换式的函数关系,等式右边的 F 是指代对原函数 ( )tf 进行

Fourier 变换。 ( )ωF 叫做 ( )tf 的象函数,用 ( )ωF 表示 ( )tf 的关系式叫做 ( )ωF 的 Fourier 反变

换(式),可记为

( ) ( )[ ]ωFFtf 1−= (3-21)

( )tf 叫做 ( )ωF 的(象)原函数。 ( )tf 与 ( )ωF 构成了一个 Fourier 变换对。

由上可见,在 Fourier 变换里,积分变换的核为tωje ,积分区间为 −∞ 与 +∞ 。

要应用 Fourier 变换,还必须了解 Fourier 变换的性质。这些性质有:线性性质、位移性

质、微分性质、积分性质、乘积定理、能量积分与卷积定理等。有些性质将结合 Fourier 变换

的举例加以介绍,另一些性质则在第 8 章 Fourier 变换的应用中介绍。

Page 139: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

127

2. 两个特殊函数的表示法

在积分变换中有两个非常重要而又特殊的函数:单位阶跃函数与单位脉冲(或叫单位冲

激)函数。MATLAB 本身并没有定义这两个函数,但又必须使用,而且使用极其广泛。如何

指代这两个函数呢?MATLAB 只得借用了 Maple 函数库中的有关定义,以便编写 MATLAB

语句或程序时使用。

在 Maple 函数库中,单位阶跃函数 ( )

<=−

at

atatu

0

1是用“Heaviside (t-a)”来定义的(以

数学家 Heaviside 的名字来命名)。所以在 MATLAB 符号运算中使用该函数时,必须把

“Heaviside (t-a)”整体当作一个符号对象加以定义与使用,即用“u = sym (’ Heaviside ( t-a ) ’ )”

语句形式来定义,而不能当做 MATLAB 的函数来加以调用。

单位阶跃函数 ( )tu 在近代物理与工程技术中有极为广泛的应用。在自动控制中,指令的

突然接通、电源的接通、电压的突然变化、负荷的变化等均可视为阶跃函数作用。

在工程数学中,单位脉冲函数 ( )tδ 定义为: ( )

≠=∞

=0,0

0,

t

ttδ 且 ( )∫

∞+

∞−= 1d ttδ 。在 Maple

函数库中,单位脉冲函数 ( )tδ 是用“Dirac”来命名的(为纪念数学家 Dirac)。Maple 库中的 函

数 Dirac (n, t) 表示求单位脉冲函数的 n 阶导数,Dirac (t)被默认为 Dirac (0, t)。所以在 MATLAB

符号运算中使用该函数时,也必须把 Dirac (t)整体作为一个符号对象加以定义与使用,即用“u

= sym (’ Dirac (t) ’ )”语句形式来定义,也不能将其当做 MATLAB 的函数来加以调用。

单位脉冲函数 ( )tδ 在现实中是不存在的,它只有数学上的意义,但在近代物理与工程技

术中它却是一个重要的数学工具。在自动控制理论分析及计算与无线电技术中,常常用来近

视指代冲击力、阵风、大气湍流、脉动电压信号等等。

单位阶跃函数是一个非常重要的函数。在积分变换中,时间连续函数的书写格式有着极

其独特的要求:即函数的书写描述应包括两部分,一部分是函数本身,另一部分是表明这个

函数发生的时刻与函数幅值大小的 1 个单位,用单位阶跃函数来表示。这个规则在自动控制

的理论研究中尤其关键,因为函数发生的时刻对理论分析与计算是至关重要的,要予以特别

关注。 例如单位斜坡函数或叫单位速度函数,一般写为 ( ) ttf = 。其实这种书写格式是不严密也

不 符 合 上 述 规 则 的 。 符 合 上 述 规 则 要 求 的 函 数 描 述 应 为 ( ) ( )01 −⋅= tttf , 其 含 义 为

( )

<=

0,0

0,

t

tttf 。单位斜坡函数描述 ( ) ( )01 −⋅= tttf 中的部分 ( )01 −t ,它表明描述的函数 t 发

生的时刻为 0,而且函数 t 幅值的单位为一个单位。当时间连续函数发生的时刻为τ 时,函数

描述的第二部分应为 ( )τ−t1 , τ− 为延迟发生的函数, τ+ 为超前发生的函数。当 0=τ 时,可

以省略不写,即为 ( )t1 。为简便,在要求不是特别严格的情况下, ( )t1 也被省略不写。但是,

当 0≠τ 时,则绝对不能省略。这一点务必倍加注意。关于在 MATLAB 中如何实现这一要求,

请参见后面 Laplace 变换的时域位移定理的举例。

3.MATLAB 的 Fourier 变换函数命令

Fourier 变换函数命令 fourier ( )的调用格式有以下三种:

(1) 格式1 F = fourier(f) 这种格式函数是对默认独立变量为 t 或 x 的符号表达式 f 即

( )tf 或 ( )tf 求其Fourier变换 ( )wF ,变换式 F 被默认为 w 的函数。这种函数格式中的 ( )tf 或

Page 140: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

128

( )tf 是原函数, ( )wF 是象函数。

( )wF 为被积函数对 t 或 x 的积分,其相应的MATLAB语句为:

F(w)=int(f(t)*exp(-i*w*t),t,-inf,inf)或者F(w)=int(f(x)*exp(-i*w*x),x,-inf,inf),即式(3-18) 。

这一种函数调用格式既符合工程数学积分变换中建立的对时间 t 的函数求 Fourier 变换的

习惯,而且相对后两种调用格式来说,这种格式简捷,函数的参数只有一个 f ,所以经常而

广泛地被采用。 如果 ( )wff = ,则 fourier ( )函数返回 t 的函数 ( )tFF = 。这种约定很别扭,不符合使用习

惯,很少被采用。 【例 3-120】求 ( )tf 为单位冲激函数 ( )tδ 与函数 ( ) 1=tf 的 Fourier 变换 ( )ωF 。

【解】 ① 求单位冲激函数 ( )tδ 即 Dirac 函数的 Fourier 变换 ( )ωF ,可以运行以下 MATLAB 语句:

syms t w

f=sym(’Dirac(t)’);

F=fourier(f) 语句运行结果

F = 1 即 Fourier 变换

( ) ( )[ ] ( )[ ] 1=== tFtfFF δω

② 求函数 ( ) 1=tf 的 Fourier 变换 ( )ωF ,可以运行以下 MATLAB 语句:

syms t w f=sym(’1*1(t)’);

F=fourier(f)

语句运行结果 F = 2*pi*Dirac(w)

即 Fourier 变换 ( ) ( )[ ] [ ] ( )ωδω ⋅π=== 21FtfFF

[说明] MATLAB 语句功能如下:第一句,定义符号变量 t 、w ;第二句,定义函数 ( ) 1=tf 为符

号对象;第三句,对函数 ( ) 1=tf 作 Fourier 变换。

【例 3-121】求单位延迟阶跃函数 ( )ctu − 即 ( )

<=

ct

cttf

0

1与函数 ( ) ttAu −e 的 Fourier 变换

( )ωF 。

【解】 ① 求单位延迟阶跃函数 ( )ctu − 的 Fourier 变换 ( )ωF ,可以运行以下 MATLAB 语句:

syms t w

f=sym(’Heaviside(t-a)’);

a=c;

f=subs(f,’a’,a)

F=simple(fourier(f))

运行结果

Page 141: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

129

f = Heaviside(t-c) F = -i*exp(-i*c*w)/w

即 Fourier 变换

( ) ( )[ ] ( )[ ] cctuFtfFF ω

ωω je

j

1 −=−==

② 求函数 ( ) ttAu −e 的 Fourier 变换 ( )ωF ,可以运行以下 MATLAB 语句:

syms t w A F=A*exp(-t)*sym(’Heaviside(t)’);

F=fourier(F,w) 运行结果 F = A/(1+i*w)

( ) ( )ωω

j1+= A

F

若推广到求一般延迟函数 ( )atf − 的 Fourier 变换,即为 Fourier 变换的位移定理。解算

( )[ ]atfF − 可以运行以下 MATLAB 语句:

syms t w a F=fourier((sym(’f(t-a)’)*sym(’Heaviside(t-a)’)),t,w)

运行结果 F = exp(-i*a*w)*fourier(Heaviside(t)*f(t),t,w)

( ) ( )[ ] ( )[ ]tfFatfFF aωω je−=−=

【例3-122】 求余弦函数 ( ) ( )bttf cos= 与 fourier 变换核函数 ( ) ( )t

bttf

π= sin

的 Fourier 变换 ( )ωF 。

【解】 ① 求函数 ( ) ( )bttf cos= 的 Fourier 变换 ( )ωF ,可以运行以下 MATLAB 语句:

syms t w b

f=cos(b*t);

F=fourier(f,t,w);

F=factor(F) 运行结果 F = pi*(Dirac(-w+b)+Dirac(w+b))

即 ( ) ( )[ ] ( ) ( )[ ]bDiracbDiracbtFF −++π== ωωω cos

② 求 fourier 变换的核函数 ( ) ( )t

bttf

π= sin

的 Fourier 变换 ( )ωF ,可以运行以下 MATLAB

语句:

syms t w b f=fourier(sin(b*t)/(pi*t));

F=simple(F)

Page 142: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

130

运行结果

F= -Heaviside(w-b)+Heaviside(w+b)

即 Fourier 变换

( )

=

π

=其它,0

,1sin b

t

btFF

ωω

fourier 变换核函数的 Fourier 变换 ( )ωF 的频谱图像如图 3-1 所示。

图 3-1 核函数频谱图像

【例 3-123】求函数( )t

tf

d

d与函数 ( )

ttf

1= 的 Fourier 变换 ( )ωF 。

【解】

① 求函数( )t

tf

d

d的 Fourier 变换 ( )ωF ,可以运行以下 MATLAB 语句:

syms t w

F=fourier(diff(sym(’f(t)’)),t,w) 运行结果 F = i*w*fourier(f(t),t,w)

即 Fourier 变换 ( ) ( )[ ] ( )[ ]tfFtfFF ωω j=′=

此乃 Fourier 变换的微分定理。若求二阶导函数的 Fourier 变换可有以下 MATLAB 语句:

syms t w

F=fourier(diff(diff(sym(’f(t)’))),t,w) 运行结果 F = -w^2*fourier(f(t),t,w)

( ) ( )[ ] ( ) ( )[ ]tfFtfFF 2jωω =′′=

② 求函数 ( )t

tf1= 的 Fourier 变换 ( )ωF ,可以运行以下 MATLAB 语句:

syms t w

F=fourier(1/t)

simple(F) 运行结果 F = i*pi*(Heaviside(-w)-Heaviside(w))

即 Fourier 变换

( ) π

=

= +−

其它,0

00,j1 ωω

tFF

≤ ≤

Page 143: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

131

(2) 格式 2 F = fourier(f,v) 这种格式函数命令返回以 v (代替原来的 w )为自变量的

Fourier 变换 ( )vF 。 ( )vF 为被积函数对 x 的积分,其 MATLAB 语句为:

F(v) = int(f(x)*exp(-i*v*x),x,-inf,inf)。

这种函数格式中的 ( )xf 是原函数, ( )vF 是象函数。这一种函数命令调用格式不符合常用

习惯,所以一般很少采用。 (3) 格式 3 F = fourier(f,u,v) 这种格式函数命令的原函数是以 u 为自变量的 ( )uf ,返

回以 v (代替原来的 w )为自变量的 Fourier 变换 ( )vF 。 ( )vF 为被积函数对 u 的积分,其

MATLAB 语句为:F(v) = int(f(u)*exp(-i*v*u),u,-inf,inf)。这种函数格式中的 ( )uf 是原函数,

( )vF 是象函数。

这一种函数命令调用格式也不符合一般习惯,一般也很少采用。

4.MATLAB 的 Fourier 反变换函数命令

Fourier 反变换函数命令 ifourier ( )的调用格式有以下三种:

(1) 格式1 f = ifourier(F) 这种格式函数命令是对默认独立变量为 w 的符号表达式

( )wF 求其Fourier反变换 ( )tf 或 ( )xf 。这种函数命令格式是从象函数 ( )wF 求原函数 ( )tf 或

( )xf 。 ( )tf 或 ( )xf 为被积函数对 w 的积分,其相应的MATLAB语句为:

f(t)=1/(2*pi)*int(F(w)*exp(i*w*t),w,-inf,inf)

或f(x)=1/(2*pi)*int(F(w)*exp(i*w*x),w,-inf,inf)即式(3-19)。

这一种函数调用格式,既符合工程数学积分变换中建立的对变量为 w 的变换式 ( )wF 求

Fourier 反变换的习惯,其格式又简捷,所以被广泛地采用。

如果变换式 ( )xFF = ,则 ifourier ( )函数返回 t 的函数 ( )tff = 。这种约定很别扭,不符

合使用习惯,很少被采用。

【例 3-124】对 Fourier 变换式 ( ) ( )ωδω ⋅π= 2F 与 ( ) cF ωω je −= 求原函数 ( )tf 。

【解】 ① 求 Fourier 变换式 ( ) ( )ωδω ⋅π= 2F 的反变换 ( )tf ,可以运行以下 MATLAB 语句:

syms t w F = 2*pi*sym(’Dirac(w)’);

f=ifourier(F,t) 运行结果

f = 1

即原函数

( )[ ] ( ) 121 ==⋅π− tfF ωδ

② 求 Fourier 变换式 ( ) cF ωω je −= 的反变换 ( )tf ,可以运行以下 MATLAB 语句:

syms t w c F = exp(-j*w*c);

f=ifourier(F,t) 运行结果

f = Dirac(t-c)

即原函数

[ ] ( ) ( )cttfF c −==−− δωj1 e

Page 144: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

132

【例 3-125】对 Fourier 变换式 ( )ω

ωω sin=F 与 ( )ω

ωj

1

+=

bF 求原函数 ( )tf 。

【解】

① 求 Fourier 变换式 ( )ω

ωω sin=F 的反变换 ( )tf ,可以运行以下 MATLAB 语句:

syms t w

F=sin(w)/w;

f0=ifourier(F,t)

f=simple(f0)

语句运行结果

f0 = 1/4*Heaviside(t+1)-1/4*Heaviside(-t-1)-1/4*Heaviside(t-1)+1/4*Heaviside(-t+1)

f = 1/2*Heaviside(t+1)-1/2*Heaviside(t-1)

即原函数

( ) ( )( ) ( )112

111

2

1 −⋅−−−⋅= tttf

② 求 Fourier 变换式 ( )ω

ωj

1

+=

bF 的反变换 ( )tf ,可以运行以下 MATLAB 语句:

syms t w b F = 1/(b+j*w);

f=collect(ifourier(F,t)) 运行结果 f = exp(-b*t)*Heaviside(t)

即原函数

( ) <

= − 0,e

0,0

t

ttf tb

【例 3-126】对 ( ) ( )[ ]tfFF =ω 与 ( )ω

ωj

2=F 求原函数 ( )tf 。

【解】 ① 求 Fourier 变换式 ( ) ( )[ ]tfFF =ω 的反变换 ( )tf ,可以运行以下 MATLAB 语句:

syms t w

f=ifourier(sym(’fourier(f(t),t,w)’),w,t) 运行结果

f = f(t) 即原函数

( )[ ] ( )[ ] ( )tftfFFFF == −− 11 ω

② Fourier 变换式 ( )ω

ωj

2=F

syms t w F=2/(j*w);

Page 145: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

133

f=simple(ifourier(F,t))

运行结果 f = 2*Heaviside(t)-1

即原函数

( )[ ] ( ) ( ) 121 −==− tutfFF ω

(2) 格式2 f= ifourier(F,u) 这种格式函数命令是对默认独立变量为 w 的符号表达式

( )wF 求其Fourier反变换 ( )uf 。这种函数命令格式是从象函数 ( )wF 求原函数 ( )uf 。 ( )uf 为被

积函数对 w 的积分,其相应的MATLAB语句为: f(u)=1/(2*pi)*int(F(w)*exp(i*w*u),w,-inf,inf),即

( ) ( ) ωω ω de2

1 j uFuf ∫∞+

∞−π=

这一种函数调用格式不符合使用习惯,很少被采用。

(3) 格式 3 f= ifourier(F,v,u) 这种格式函数命令是对默认独立变量为 v (以代替 w )的符

号表达式 ( )vF 求其 Fourier 反变换 ( )uf 。这种函数命令格式是从象函数 ( )vF 求原函数 ( )uf 。

( )uf 为被积函数对 v 的积分,其相应的 MATLAB 语句为:

f(u)=1/(2*pi)*int(F(v)*exp(i*v*u),v,-inf,inf),即

( ) ( ) vvFuf uv de2

1 j∫∞+

∞−π=

这一种函数调用格式不符合使用习惯,也很少被采用。

3.9.2 Laplace 变换与反变换

Laplace 变换是要介绍的另一种积分变换,它是研究与分析线性电路或控制系统的一个重

要的工具。首先,作为电路或系统基本数学模型之一的网络函数或传递函数就是用拉氏变换

来定义的,那么电路或系统的分析、研究与计算必然离不开拉氏变换。其次,拉氏变换还能

把微分方程转换为代数方程,为微分方程的求解另辟蹊径,不仅解算简便,而且能把初始条

件直接反映在方程中。用 MATLAB 符号运算的拉氏变换函数命令的计算过程就更加简单方

便。(参见 8.2 节)

1.Laplace 变换与反变换的概念

Laplace 变换是将连续(时间)函数这样的实变函数经过积分变换运算变换为一个复变函

数的过程,Laplace 反变换正好相反,将一个复变函数经过变换运算转换为一个实变(时间)

函数。 有函数 ( )tf , t 为实变量( 通常是指时间 )且 0≤ ∞<t ,若以下线性积分

( ) ( ) ttfsF st de0

−∞

∫= ( 复变量 =s ωσ j+ )

存在,则称此积分 ( )sF 为函数 ( )tf 的 Laplace 变换简称拉氏变换或象函数。变换得到的新函

数即积分则是复变量( ωσ j+=s )的函数,记作 ( )sF 或 ( )[ ]tfL ,即有

( )[ ]tfL ( ) ( )sFttf st == −∞

∫ de0

(3-22)

常称 ( )sF 为 ( )tf 的变换函数或象函数,而 ( )tf 为 ( )sF 的原函数。

由上可见,在 Laplace 变换里,积分变换的核取为ts−e ,积分区间为 0 与 +∞ 。

Page 146: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

134

与 Laplace 变换相对应的逆运算叫拉氏反变换,即是已知的象函数求原函数的过程:

( )[ ] ( ) ( )tfssFj

sFL st =π

= ∫∞+

∞−

− j

j

1 de2

1 σ

σ (3-23)

这就是要介绍的第二个积分变换对,Laplace 变换对。

与 Fourier 变换一样,Laplace 变换的诸多性质在其计算中也是很有用的。Laplace 变换的

性质有:线性性质、微分性质、积分性质、位移性质、延迟性质、初值定理、终值定理与卷

积定理等。就其符号计算而言,将有些性质结合 Laplace 变换的举例予以介绍,还有些性质则

在第 8 章 Laplace 变换的应用中介绍。

2.MATLAB 的 Laplace 变换函数命令

Laplace 变换函数命令 laplace ( )的调用格式有以下三种: (1) 格式 1 F = laplace(f) 这种格式函数是对默认独立变量为 t 的符号表达式 f (即 ( )tf )

求其 Laplace 变换 ( )sF ,变换式 F 被默认为复变量 s 的函数。这种命令格式中的 ( )tf 是原函

数, ( )sF 是象函数。 ( )sF 为被积函数对 t 的积分,即 ( ) ( ) ttfsF st de0

−∞

∫= 。其相应的 MATLAB

语句为: F(s)=int(f(t)*exp(-s*t),t,0,inf)

这一种函数调用格式既符合积分变换数学与自动控制中建立的对时间 t 的函数求拉氏变

换的习惯,相对后两种调用格式来说,这种格式简捷,函数的参数只有一个 f,所以经常而广

泛地被采用。由于 Laplace 变换应用极为广泛,它是线性控制系统分析计算的重要数学工具。

以下举例多为 Laplace 变换的性质,以便观察诸性质的时间连续函数表达式与象函数表达式间

的对应关系。

【例 3-127】已知单位冲激函数 ( ) ( )ttf δ= 与单位阶跃函数 ( )

<∞

=0,0

0,1

t

ttf ,求其 Laplace

变换 ( )sF 。

【解】 ① 求单位冲激函数 ( ) ( )ttf δ= 的 Laplace 变换 ( )sF 可以执行以下 MATLAB 语句:

syms s t

f=sym(’Dirac(t)’)

F=laplace(f,t,s)

语句执行结果

f = Dirac(t)

F = 1 即 Laplace 变换为

( ) ( )[ ] ( )[ ] 1=== tLtfLsF δ

再次提请注意:在 MATLAB 中,单位冲激函数 ( )tδ 规定写成 ( )tDirac ,而且第一个字母 D

必须为大写;定义符号变量 ( )tDirac ,在函数 sym ( )的参数引用时两端必须加单引号。单位阶

跃函数写成 ( )tHeaviside 的规则同此。

② 对单位阶跃函数 ( )

<∞

=0,0

0,1

t

ttf ,求其单位阶跃函数的 Laplace 变换 ( )sF 可以执

行以下 MATLAB 语句:

≤ ≤

≤ ≤

Page 147: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

135

syms t s

f=sym(’Heaviside(t)’);

F=laplace(f) 语句执行结果

F = 1/s

即 Laplace 变换为

( ) ( )[ ] ( )[ ]s

tLtfLsF1

11 =⋅==

以下求单位阶跃函数 Laplace 变换的 MATLAB 语句,其执行结果均与上相同。

syms s t

F=laplace(1,t,s)

【例 3-128】已知斜坡函数 ( ) tAtf ⋅= 与指数函数 ( ) atAtf e⋅= ,求其拉氏变换 ( )sF 。

【解】 ① 对斜坡函数 ( ) tAtf ⋅= 求解 ( )sF 可以执行以下 MATLAB 语句:

syms A s t F=laplace(A*t)

语句执行结果

F = A/s^2 即 Laplace 变换为

( ) ( )[ ] [ ]2s

AtLtfLsF ===

② 对指数函数 ( ) atAtf e⋅= 求解 ( )sF 可以执行以下 MATLAB 语句:

syms A a s t F=laplace(A*exp(a*t))

语句执行结果

F = A/(s-a)

即 Laplace 变换为

( ) ( )[ ] [ ]as

AALtfLsF at

−=⋅== e

【例 3-129】求正弦函数 ( ) ( )ttf ωsin= 与余弦函数 ( ) ( )ttf ωcos= 的拉氏变换 ( )sF 。

【解】 ① 对正弦函数 ( ) ( )ttf ωsin= 求解 ( )sF 可以执行以下 MATLAB 语句:

syms s t omega laplace(sin(t*omega))

语句执行结果

ans =omega/(s^2+omega^2)

即 Laplace 变换为

( ) ( )[ ] [ ]22

sinω

ωω+

===s

tLtfLsF

② 对余弦函数 ( ) ( )ttf ωcos= 求解 ( )sF 可以执行以下 MATLAB 语句:

Page 148: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

136

syms s t omega laplace(cos(t*omega))

语句执行结果

ans = s/(s^2+omega^2)

即 Laplace 变换为

( ) ( )[ ] [ ]22

cosω

ω+

===s

stLtfLsF

【例 3-130】 已知加速函数 ( ) 2tAtf ⋅= 与函数 ( ) 3tBtf ⋅= ,求其 Laplace 变换 ( )sF 并验证

Laplace 变换的线性性质。

【解】

① 对加速函数 ( ) 2tAtf ⋅= ,求解 ( )sF 可以执行以下 MATLAB 语句:

syms s t F=laplace(A*t^2)

语句运行结果 F = 2*A/s^3

即 Laplace 变换为

( ) ( )[ ] [ ]3

2 2

s

AtALtfLsF =⋅==

② 对函数 ( ) 3tBtf ⋅= ,求解 ( )sF 可以执行以下 MATLAB 语句:

syms s t F=laplace(B*t^3)

语句运行结果 F = 6*B/s^4

即 Laplace 变换为

( ) ( )[ ] [ ]4

3 6

s

BtBLtfLsF =⋅==

③ 对函数 ( ) 32 tBtAtf ⋅+⋅= ,求解 ( )sF 可以执行以下 MATLAB 语句:

syms s t A B F=laplace(A*t^2+B*t^3)

语句运行结果 F = 2*A/s^3+6*B/s^4

( ) ( )[ ] [ ]43

32 62

s

B

s

AtBtALtfLsF +=⋅+⋅==

由此可得 Laplace 变换的线性性质: 设 ( ) ( )[ ]tfLsF 11 = 与 ( ) ( )[ ]tfLsF 22 = , A 与 B 为常数,则有

( ) ( ) ( )[ ] ( ) ( )sFBsFAtfBtfALsF 2121 ⋅+⋅=⋅+⋅= (3-24)

也可以执行以下 MATLAB 语句来验证:

syms s t A B laplace(A*(sym(’f1(t)’))+B*(’f2(t)’))

Page 149: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

137

即有运行结果: ans = A*laplace(f1(t),t,s)+B*laplace(f2(t),t,s)

【例 3-131】Gamma 函数及幂函数1−mt 的 Laplace 变换。

【解】

MATLAB 中有很多特殊函数,Gamma 函数就是其中之一。

① Gamma 函数的概念 积分变换中定义定积分 ∫∞+ −−

0

1 de tt mt 为 Gamma 函数,记为

( )mΓ 。即

( ) 0,de0

1 >= ∫∞+ −− mttm mtΓ (3-25)

有以下 MATLAB 语句实现 Gamma 函数的定义:

syms s t;m=sym(’m’,’positive’); f=exp(-t)*t^(m-1);

F=int(f,t,0,inf)

语句运行结果:

F = gamma(m)

将 1−mt 改为 mt 再运行一次以下语句:

syms s t;m=sym(’m’,’positive’); f=exp(-t)*t^m;

F=int(f,t,0,inf)

语句运行结果: F = gamma(m)*m

( ) ∫∞+ −=+

0de1 ttm mtΓ ( )mmΓ=

由上可知,当 m 为正整数时,有关系式

( ) ( ) !1 mmmm ==+ ΓΓ (3-26)

与关系式 ( ) ( )!1−= mmΓ

成立。

[说明]

当 m 为正整数的 MATLAB 实现语句:m=sym(’m’,’positive’)是必须的,否则不能解算。

阶乘 mm ××××= 321! 。

② 求解幂函数 1−mt 的 ( )sF 可以执行以下 MATLAB 语句:

syms s t;m=sym(’m’,’positive’);

f=t^(m-1);

F=laplace(f,t,s)

语句执行结果 F = s^(-m)*gamma(m)

即 ( )sF 为

Page 150: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

138

( ) =sF [ ] ( ) ( )mm

m

s

m

s

mtL

!11 −==− Γ

【例 3-132】验证 Laplace 变换的微分性质。

【解】

Laplace 变换的微分性质就是求(时间)连续函数的导函数的象函数。例如求

( )

t

tfL

d

d

连续函数的一阶导函数的象函数,可以运行以下 MATLAB 语句:

syms a s t

F=laplace(diff(sym(’f(t)’)))

语句运行结果: F = s*laplace(f(t),t,s)-f(0)

即若 ( )[ ] ( )sFtfL = ,则( ) ( ) ( )0

d

dfsFs

t

tfL −=

若求连续函数的二阶导函数的象函数,可以运行以下 MATLAB 语句:

syms a s t w x

laplace(diff(sym(’f(t)’),2))

语句运行结果: ans = s*(s*laplace(f(t),t,s)-f(0))-D(f)(0)

即有若 ( )[ ] ( )sFtfL = , 则( ) ( ) ( ) ( )

0

22

2

d

d0

d

d

=

−−=

tt

tffssFs

t

tfL 。

[说明]

本例的结论为 Laplace 变换的微分性质,又叫做 Laplace 变换的微分定理。这个定理

非常重要,它是应用 Laplace 变换法解算微分方程的原理性公式与有效工具。

运行结果中的“laplace(f(t),t,s)”为 ( )[ ] ( )sFtfL = 。

运行结果中的“f(0)”为: ( ) ( )0

0 ==t

tff 。

运行结果中的“D(f)(0)”为: ( )( ) ( )0d

d0

==

tt

tffD 。

【例 3-133】验证 Laplace 变换的实域位移定理并举例。

【解】

① Laplace 变换的实域位移定理就是求延迟时间函数的象函数。其一般表达式为求

( )τ−tf 即 ( ) ( )

<=

ττt

ttftf

,0

,

的象函数 ( )sF 。为此可以运行以下 MATLAB 语句:

syms s t y;tao=sym(’tao’,’positive’); f=sym(’f(t-tao)’)*sym(’Heaviside(t-tao)’)

F=laplace(f,t,s) 运行结果 f = f(t-tao)*Heaviside(t-tao)

Page 151: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

139

F = exp(-s*tao)*laplace(f(t),t,s)

即有若 ( )[ ] ( )sFtfL = , 则

( )[ ] ( )sFtfL sττ −=− e (3-27)

② 对延迟单位阶跃函数 ( ) ( ) ( )ττ −⋅−= tttf 11 ,求其象函数 ( )sF 可以运行以下 MATLAB

语句:

syms s t;tao=sym(’tao’,’positive’); f=sym(’1(t-tao)’)*sym(’Heaviside(t-tao)’)

F=laplace(ft,t,s) 运行结果

f = Heaviside(t-tao) F = exp(-tao*s)/s 即延迟单位阶跃函数的 ( )sF 为

( ) ( )[ ] s

sttL τττ −=−⋅− e

111

③ 对延迟单位斜坡函数 ( ) ( ) ( )ττ −⋅−= tttf 1 ,求其象函数可以运行以下 MATLAB 语句:

syms s t;tao=sym(’tao’,’positive’); f=sym(’(t-tao)’)*sym(’Heaviside(t-tao)’)

F=laplace(ft,t,s) 语句运行结果 f = (t-tao)*Heaviside(t-tao)

F = exp(-tao*s)/s^2

即延迟单位斜坡函数的 ( )sF 为

( ) ( )[ ] s

sttL τττ −=−⋅− e

11

2

④ 延迟正弦函数 ( ) ( )[ ] ( )ττω −⋅−= tttf 1sin 求其象函数,可以运行以下 MATLAB 语句:

syms s t y;tao=sym(’tao’,’positive’); f=sym(’sin(omega*(t-tao))’)*sym(’Heaviside(t-tao)’)

F=laplace(f,t,s)

语句运行结果 f = sin(omega*(t-tao))*Heaviside(t-tao)

F = exp(-s*tao)*omega/(s^2+omega^2)

即延迟正弦函数的 ( )sF 为

( ) ( )[ ] s

sttL τ

ωωττ −

+=−⋅− e1sin

22

[说明]

本例讨论的是 Laplace 变换的实域位移定理,所举各例的函数发生的时刻是至关重要的

信息。正如在介绍单位阶跃函数时所强调的,函数的第二部分描述必不可少,所以每个函数

都要乘以 sym(’Heaviside(t-tao)’)。这一点特别重要,否则,不是计算会产生错误就是根本不能

进行解算。

【例 3-134】求以下各函数的 Laplace 变换并归纳出 Laplace 变换复域位移定理。

Page 152: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

140

【解】

Laplace 变换的复域位移定理就是求函数 ( )tf 乘以 ate 的 Laplace 变换,即求 ( )[ ]tfL ate 。

① 求解 ( )tat ωsine 的 ( )sF 可以执行以下 MATLAB 语句:

syms s t a omega f=exp(a*t)*sin(omega*t);

F=laplace(f,t,s) 语句执行结果

F = omega/((s-a)^2+omega^2)

即 ( )tat ωsine 的象函数 ( )sF 为

( )( ) 22 ω

ω+−

=as

sF

② 求 mat te 的 Laplace 变换 ( )sF 可以执行以下 MATLAB 语句:

syms s t a;m=sym(’m’,’positive’); f=exp(a*t)*t^m;

F=laplace(f,t,s) 语句执行结果 F =gamma(m+1)*(s-a)^(-m-1)

即 mat te 的象函数 ( )sF 为

( ) ( )( ) ( ) 11

!1++ −

=−

+=mm as

m

as

msF

Γ

③ 求 ( )tbat sinhe 的象函数 ( )sF 可以执行以下 MATLAB 语句:

syms s t a b;m=sym(’m’,’positive’); f=exp(a*t)*sinh(b*t);

F=laplace(f,t,s)

语句执行结果

F = b/((s-a)^2-b^2)

即 ( )tbat sinhe 的象函数 ( )sF 为

( ) ( )[ ] ( )[ ]( ) 22

sinhebas

bbtLtfLsF at

−−===

④ 求π

⋅ tat 2e 的象函数 ( )sF 可以执行以下 MATLAB 语句:

syms s t a b;m=sym(’m’,’positive’); f=exp(a*t)*2*sqrt(t/pi);

F=laplace(f,t,s) 语句执行结果

F = 1/(s-a)^(3/2)

即π

⋅ tat 2e 的象函数 ( )sF 为

Page 153: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

141

( )( ) ( )asas

tLsF at

−−=

π

×= 12e

由以上举例,查对原函数的 Laplace 变换:

syms s t b omega;m=sym(’m’,’positive’); f1=sin(omega*t)

f2=t^m; f3=sinh(b*t);

f4=2*sqrt(t/pi);

F1=laplace(f1,t,s)

F2=laplace(f2,t,s)

F3=laplace(f3,t,s)

F4=laplace(f4,t,s) f1 = sin(omega*t)

语句执行结果

F1 = omega/(s^2+omega^2) F2 = s^(-m-1)*gamma(m+1)

F3 = b/(s^2-b^2)

F4 = 1/s^(3/2)

即有

( ) ( )[ ]221 sin

ωωω+

==s

tLsF

( ) [ ] ( )112

!1++ =+==

mmm

s

m

s

mtLsF

Γ

( ) ( )[ ] ( )[ ]223 sinh

bs

bbtLtfLsF

−===

( )ss

tLsF

124 =

π

=

可得 Laplace 变换的复域位移定理如下:

若 ( )[ ] ( )sFtfL = ,则

( )[ ] ( )asFtfL at −=×e (3-28)

(2) 格式 2 F = laplace(f,t) 这种格式函数命令是求以 x 代替原来的 t ,以 t 代替 s 为变

量的 Laplace 变换(是对于变量 x 的积分),即 F=laplace(f,t) 等价于

( ) ( ) xxftF tx de0

−∞

∫=

其MATLAB语句为:F(t)=int(f(x)*exp(-t*x),x,0,inf) 。这种函数格式中的 ( )xf 是原函数, ( )tF

是象函数。

这一种函数命令调用格式将原函数与象函数的自变量改用 x 与 t 来代替,t 为复变量这不

符合使用习惯,所以一般很少被采用。

Page 154: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

142

(3) 格式 3 F = laplace(f,w,z) 这种格式函数命令是求以 w 代替原来的 t ,以 z 代替 s

为变量的拉普拉斯变换(是对于变量 w 的积分),即 F=laplace(f,t) 等价于

( ) ( ) wwfzF zw de0

−∞

∫=

其MATLAB语句为:F(z)=int(f(w)*exp(-z*w),w,0,inf)。这种函数格式中的 ( )wf 是原函数, ( )zF

是象函数。

这一种函数命令调用格式将原函数与象函数的自变量改用 w 与 z 来代替,也不符合一般

习惯,容易出错,所以一般也很少采用。

3.MATLAB 的 Laplace 反变换函数命令

Laplace反变换函数命令ilaplace ( )的调用格式有以下三种:

(1) 格式 1 f=ilaplace(F) 这种格式函数是对默认独立变量为 s 的象函数表达式 ( )sF 求

其原函数( ( )tf ),MATLAB 语句为:f(t)=int(F(s)*exp(s*t),s,c-i*inf,c+i*inf)。

其中 c 为选定的实数,使得 ( )sF 的所有奇点都在直线 cs = 的左侧, ( )1sqrt −=i ,积分函

数对 s 取积分。这种格式已知的象函数是 ( )sF ,返回的原函数形式是 ( )tf 。

这一种函数命令调用格式既符合积分变换数学与自动控制中建立的对复变量 ( )sF 求拉氏

反变换(即原函数 ( )tf )的习惯,相对后两种调用格式来说,这种格式也很简捷,不要输入其它

的多余字符,所以被广泛地采用。 如果这种格式已知的象函数形式是 ( )tFF = ,则返回的原函数形式是 ( )xf 。其中 ( )xf 定

义为对 s 的积分。

【例 3-135】求象函数 ( )1

1ln

−+=

s

ssF 与 ( ) ( )22 1−

=s

ssF 的原函数 ( )tf 。

【解】

① 求象函数 ( )1

1ln

−+=

s

ssF 的原函数 ( )tf ,可以执行以下 MATLAB 语句:

syms s w t

F=log((s+1)/(s-1));

f0=ilaplace(F);

f=simple(f0)

语句执行结果

f = (-exp(-t)+exp(t))/t) 即原函数 ( )tf 为

( ) ( )[ ] ( )ttts

sLsFLtf

tt

sinh2ee

1

1ln11 =−=

−+==

−−−

② 求象函数 ( ) ( )22 1−=

s

ssF 的原函数 ( )tf ,可以执行以下 MATLAB 语句:

syms s w t

F=s/((s^2-1)^2);

f0=ilaplace(F);

f=simple(f0) 语句执行结果

Page 155: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

143

f = 1/2*t*sinh(t)

即原函数 ( )tf 为

( ) ( )[ ] ( ) ( )tt

s

sLsFLtf sinh

2122

11 =

−== −−

(2) 格式2 f= ilaplace(F,y) 这种格式函数命令是以 y 代替默认的 t ,返回的拉普拉斯反

变换的原函数 ( )yf 是以 y 为自变量(即以 y 代替原来的 t )的,即

f(y) = int(F(s)*exp(s*y),s,c-i*inf,c+i*inf)

这里 y 是一数量符号。这种格式已知的象函数形式是 ( )sF ,返回的原函数形式是 ( )yf 。

这一种函数命令调用格式将原函数的自变量改用 y 来代替,不符合一般习惯,容易出错,

命令调用格式还要多输入一个字符,所以一般很少采用,但是在某些问题的解算中却必须应

用这种函数命令调用格式。

【例 3-136】求象函数 ( )2

1

ssF = 的原函数 ( )tf 。

【解】 采用第一种反变换命令调用格式求原函数 ( )tf 时,可以执行以下 MATLAB 语句:

syms s w t

F=1/s^2;

f0=ilaplace(F);

f=simple(f0)

但是,这组语句不能求出 ( )2

1

ssF = 的原函数 ( ) ttf = 。当改用第二种反变换命令调用格式

的以下 MATLAB 语句时:

syms s y

F=1/s^2;

f0=ilaplace(F,y);

f=simple(f0)

语句执行结果

f = y 可求出原函数 ( )yf 为

( ) ( )[ ] ys

LsFLyf =

== −−

211 1

也就是

( ) ttf =

(3) 格式3 f = ilaplace(F,y,x) 这种格式是对于以 y 代替原来 s 的象函数 ( )yF ,求以 x

代替 t 为的原函数 ( )xf 。即f=ilaplace(F,y,x)等价于f(x) = int(F(y)*exp(x*y),y,c-i*inf,c+i*inf)。

这里 ( )xf 表达式是对 y 取积分。这种命令格式已知的象函数形式是 ( )yF ,返回的原函数形式

是 ( )xf 。

这一种函数命令调用格式将原函数与象函数的自变量改用 x 与 y 来代替,也不符合一般

习惯,容易出错,命令调用格式还要多输入二个字符,所以一般也很少采用。

Page 156: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

144

4. 卷积与变换的卷积定理

(1) Fourier 变换的卷积与卷积定理

根据积分变换的理论,已知两个函数 ( )tf1 与 ( )tf2 ,则积分

( ) ( ) τττ d21∫∞+

∞−−tff (3-29)

叫做函数 ( )tf1 与 ( )tf2 的卷积,记为 ( ) ( )tftf 21 ⊗ ,即

( ) ( ) ( ) ( )tftftff 2121 d ⊗=−∫∞+

∞−τττ (3-30)

可以证明卷积的交换律:

( ) ( ) ( ) ( )tftftftf 1221 ⊗=⊗ (3-31)

若 ( )tf1 与 ( )tf2 满足 Fourier 积分公式的条件,并且有

( )[ ] ( )ω11 FtfF = 与 ( )[ ] ( )ω22 FtfF =

则有 ( ) ( )[ ] ( ) ( )ωω 2121 FFtftfF ⋅=⊗ (3-32)

( ) ( )[ ] ( ) ( )tftfFFF 21211 ⊗=⋅− ωω (3-33)

公式 (3-32) 与(3-33)叫做 Fourier 变换的卷积定理。还可证明:

( ) ( )[ ] ( ) ( )ωω 2121 2

1FFtftfF ⊗

π=⋅ (3-34)

(2) Laplace 变换的卷积与卷积定理 若两个时间函数 ( )tf1 与 ( )tf2 都满足条件:当 0<t 时, ( ) ( ) 021 == tftf ,则 ( )tf1 与 ( )tf2 的

卷积式(3-30) 就变成:

( ) ( ) =⊗ tftf 21 ( ) ( ) τττ d20

1 −∫ tfft

(3-35)

请注意卷积式 (3-30) 与 (3-35)积分上下区间的变化。同样有卷积的交换律

( ) ( ) ( ) ( )tftftftf 1221 ⊗=⊗

( ) ( )tftf 21 ⊗ 叫做 ( )tf1 卷乘 ( )tf2 ,而 ( ) ( )tftf 12 ⊗ 叫做 ( )tf2 卷乘 ( )tf1 。

与式(3-35)相应的有

( ) ( ) =⊗ tftf 12 ( ) ( ) τττ d10

2 −∫ tfft

(3-36)

若 ( )tf1 与 ( )tf2 满足 Laplace 变换存在的条件,并且有

( )[ ] ( )sFtfL 11 = 与 ( )[ ] ( )sFtfL 22 =

根据积分变换的原理, 可以证明

( ) ( )[ ] ( ) ( )sFsFtftfL 2121 ⋅=⊗ (3-37)

( ) ( )[ ] ( ) ( )tftfsFsFL 21211 ⊗=⋅− (3-38)

公式 (3-37) 与式 (3-38) 叫做 Laplace 变换的卷积定理。这个卷积定理就是:两个函数卷积的

拉氏变换等于该二函数拉氏变换的乘积。卷积定理也是拉氏变换的一个重要性质。

Page 157: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

145

【例 3-137】计算 ( ) ttf =1 与 ( ) ttf sin2 = 的卷积。

【解】 计算 ( ) ttf =1 与 ( ) ttf sin2 = 的卷积可以运行以下 MATLAB 语句:

syms T s t tao

f1=t;

f2=sin(t); bg=subs(f1,’t’,tao)*subs(f2,’t’,(t-tao))

f1f2=int(bg,tao,0,t) 语句运行结果 bg = tao*sin(t-tao)

f1f2 = t-sin(t) 即 ( ) ttf =1 与 ( ) ttf sin2 = 的卷积为

( ) ( ) =⊗ tftf 21 ( ) ( ) tttfft

sind20

1 −=−∫ τττ

【例 3-138】计算 ( ) ttf =1 与 ( ) ( )ttf sinh2 = 的卷积。

【解】 计算 ( ) ttf =1 与 ( ) ( )ttf sinh2 = 的卷积可以运行以下 MATLAB 语句:

syms T s t tao

f1=t;

f2=sinh(t); bg=subs(f1,’t’,tao)*subs(f2,’t’,(t-tao))

f1f2=int(bg,tao,0,t)

语句运行结果 bg = tao*sinh(t-tao)

f1f2 = -t+sinh(t) 即 ( ) ttf =1 与 ( ) ( )ttf sinh2 = 的卷积为

( ) ( ) =⊗ tftf 21 ( ) ( ) ( ) tttfft

−=−∫ sinhd20

1 τττ

【例 3-139】应用卷积定义证明计算( ) ∫ −−

π=

tt

ssL

0

1 dee1

1

1 2

ττ 。

【解】

① 计算等式( ) ∫ −−

π=

tt

ssL

0

1 dee1

1

1 2

ττ 左边部分可运行以下 MATLAB 语句:

syms t s tao

F1=1/sqrt(s);

F2=1/(s-1); f=ilaplace(F1*F2)

语句运行结果 f = exp(t)*erf(t^(1/2))

即原函数为

Page 158: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

146

( ) ( )ttf t erfe ⋅=

② 根据 Laplace 变换的卷积定义:

( ) ( ) =⊗ tftf 21 ( ) ( ) τττ d20

1 −∫ tfft

求 ( ) ( )tftf 21 ⊗ 的 MATLAB 语句如下:

syms t s tao

F1=1/sqrt(s);

F2=1/(s-1);

f1=ilaplace(F1);

f2=ilaplace(F2); bg=subs(f1,’t’,tao)*subs(f2,’t’,(t-tao));

f1f2=int(bg,tao,0,t)

语句运行结果 f1f2 = erf((pi*t)^(1/2)/pi^(1/2))*exp(t)

即卷积 ( ) ( )tftf 21 ⊗ 为

( ) ( ) =⊗ tftf 21 ( )tt erfe ⋅

③ 本例中出现的的函数 ( )terf⋅ 是 MATLAB 中的又一个特殊函数——误差函数。误差函

数的定义是,对于变量 x , ( ) ∫ −

π=

xt tx

0de

2erf

2

。对于 ( )terf , tx = 并将积分变量 t 换写

为τ ,则有:

( ) ∫ −

π=

tt

0de

2erf

2

ττ

在此就从卷积定义与误差函数定义两个方面证明了本例结论。

【例 3-140】已知 ( )( )21

1

assF

+= 与 ( )

221

ssF = , ( ) ( ) ( )sFsFsF 21= ,应用卷积公式求 ( ) =tf

( )[ ]sFL 1− 。

【解】

① 根据卷积定理: ( ) ( )[ ] ( ) ( )[ ]sFsFLsFLtf 2111 ⋅== −− ( ) ( )tftf 21 ⊗= ,先用拉氏反变换求

出 ( )tf1 与 ( )tf2 。因为 ( )22

1

ssF = ,这里必须执行拉氏反变换函数命令第二种调用格式的

MATLAB 语句段:

syms s w t x y

F1=1/s^2;

F2=1/((s+a)^2);

f1=simple(ilaplace(F1,y))

f2=simple(ilaplace(F2,y)) 语句运行结果

f1 = y

Page 159: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

147

f2 = y/exp(a*y)

② 根据卷积定义 ( ) ( ) =⊗ tftf 21 ( ) ( ) τττ d20

1 −∫ tfft

,求 ( ) ( )[ ]sFLtf 1−= 。

必须注意,要将函数 1f 与 2f 中的变量 y 改换回 t ,再运行以下 MATLAB 语句:

syms a s t tao

f1=t; f2=t/exp(a*t);

bg=subs(f1,’t’,tao)*subs(f2,’t’,(t-tao));

f=simple(int(bg,tao,0,t)) 语句段运行结果 f = (-2+a*t+exp(-a*t)*a*t+2*exp(-a*t))/a^3

即 ( ) ( )[ ]sFLtf 1−= 为

( ) ( )[ ]( )

+== −−

2211 11

sasLsFLtf ( ) ( ) =⊗= tftf 21

( ) ( ) τττ d20

1 −= ∫ tfft ( ) ( )1e

21e

32−++= −− atat

aa

t

(3) 卷积与卷积定理的应用

卷积及其卷积定理的应用与拉氏变换的使用密切相关:第一,卷积定理用来解算系统的

时域响应;第二,用来计算某些象函数的拉氏反变换。(参见 8.2 节)

3.9.3 z 变换与 z 反变换

Laplace 变换是连续信号控制系统的一个重要数学研究工具。Laplace 变换能把求解微分

方程转换为求解代数方程,建立了以传递函数为基础的连续控制系统复域分析法,使得控制

系统问题的分析研究大大简化。

含有离散信号的采样控制理论,是计算机控制系统的理论基础。随着计算机控制技术的

发展,采样系统分析的重要性也突显出来。z 变换就是采样控制系统的重要数学研究工具。z

变换能把求解差分方程转换为求解代数方程,而建立起以脉冲传递函数为基础的采样系统复

域分析法。

1.z 变换与 z 反变换的概念 根据自动控制理论,时间连续信号 ( )tf 经采样周期为 T 的采样开关进行采样,即信号

( )tf 在 nTt = 处取值(因为仅在采样瞬时才有意义)即为采样值 ( )nTf 。 ( )tf 的采样过程的

数学描述或采样函数为:

( ) ( ) ( )∑∞

=

∗ −⋅=0n

nTtnTftf δ (3-39)

请特别注意,采样值 ( )nTf 与采样过程的数学描述 ( )tf ∗ 是两个不同的概念。采样值

( ) ( )nTt

tfnTf == ,即 ( )tf 在 nTt = 处才取值。而将 ( )nTf 代入式(3-39)计算才是采样函数

( )tf ∗ 。

将式(3-39)中的采样值 ( )nTf 看作 ( )nTt −δ 前的系数,根据 Laplace 变换的实域位移定理,

对采样函数进行 Laplace 变换并令其为 ( )sF ∗ ,即

Page 160: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

148

( ) ( )[ ] ( ) nTs

n

nTftfLsF −∞

=

∗∗ ⋅== ∑ e0

(3-40)

引入新变量 z ,并作代换 Tsz e= (3-41)

则有 zT

s ln1= (3-42)

将 Tsz e= 代换代入 ( )sF ∗ 有

( ) ( )[ ] ( ) ( )∑∑∞

=

−−∞

=

∗∗ ⋅=⋅==00

en

nnTs

n

znTfnTftfLsF (3-43)

此即为 z 变换的定义式:

( ) ( )zFznTfn

n =⋅∑∞

=

0

(3-44)

式(3-44)叫 ( )zF 为 ( )tf ∗ 的 z 变换,即

( ) ( )[ ]tfLzF ∗= (3-45)

有时也写为 ( )[ ] ( )zFtfZ = (3-46)

可以看到 ( ) ( )[ ] ( )[ ] ( )zFtfZtfLsF === ∗∗ (3-47)

由上可见,z 变换实际上是采样函数的拉氏变换。 请注意几个特殊的字符及其含义:第一,Laplace 变换式 ( )sF 的自变量 s 是复变量

( ωσ j+=s ),z 变换式 ( )zF 的自变量 z 也是复变量,因为 z 是 s 的函数;第二,T 为采样信

号的采样周期,通常取 1=T s (秒),此时可省略不写;第三,经采样后,连续时间 t 表现为各

个采样的瞬间 nT ( ,3,2,1,0=n ),而时间连续信号 ( )tf 的采样值为 ( )nTf ,采样过程的数学

描述或采样函数为 ( )tf ∗ (式 3-30)。弄清楚这几个概念及其表示符号,对于正确使用 MATLAB

的 z 变换函数命令是至关重要的。

将 z 变换定义式的指数函数(式 3-43)展开:

( ) ( ) ( ) ( ) ( ) +++++= −−− nznTfzTfzTfzfzF 210 20 (3-48)

即采样函数的 z 变换是变量 z 的幂级数(即罗朗级数)。

有的文献定义:从 z 域函数 ( )zF 求采样函数 ( )tf ∗ 的过程叫 z 反变换。记作

( )[ ] ( )tfzFZ ∗− =1 (3-49)

而有的文献定义:从 z 域函数 ( )zF 求采样值 ( )nTf 的过程叫 z 反变换。记作

( )[ ] =− zFZ 1 ( )nTf (3-50)

MATLAB 的 z 反变换采用式 (3-50)的定义。

z 变换的性质在 z 变换的计算中同样是很有用的。这些性质有:线性性质、实数位移定理、

复数位移定理、z 域微分定理、z 域尺度定理、初值定理与终值定理等。

2.MATLAB 的 z 变换的函数命令

z 变换函数命令ztrans ( )的调用格式有三种: (1) 格式1 F= ztrans(f) 这种格式是对时间 t 的连续函数表达式 ( )tf 对应的采样值 ( )nTf

求其 z 变换 ( )zF ,变换式 ( )zF 被默认为复变量 z 的函数,即

Page 161: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

149

( ) ( ) ( ) n

nTn

n znfznTfzF −∞

==

=

− ∑∑ ==010

这一种函数调用格式符合自动控制中建立的对采样函数 ( )tf ∗ 求其 z 变换的习惯,相对后

两种调用格式来说,这种格式简捷,所以被广泛地采用。

如果 ( )zff = ,则ztrans(e)返回关于复变量 w 的 z 变换式。

(2) 格式 2 F= ztrans(f,w) 这种调用格式返回关于复变量 w (即用 w 代替复变量 z )的

z 变换函数。 (3) 格式3 F= ztrans(f,k,w) 这种调用格式是对时间 t 的连续函数表达式 ( )tf 对应的采

样值 ( )kTf 求其 z 变换 ( )zF ,返回关于复变量 w 的 z 变换函数。

这后两种调用格式不大符合使用习惯,一般很少被采用。

【 例 3-141 】 对 于 单 位 阶 跃 函 数 ( ) ( )ttf 11⋅= 对 应 的 采 样 周 期 1=T s ( 秒 ) 的 采 样 值 :

( ) ( ) ( )nnTnTfT

11111

⋅=⋅= = ,试用三种 z 变换函数命令调用格式计算其 ( )zF 。

【解】

① 采用第一种求 z 变换函数命令调用格式的 MATLAB 语句如下:

syms n z f=sym(’1*1(n*T)’)

F=ztrans(f) 语句运行结果 f = 1*1(n)

F = z/(z-1) 即 z 变换 ( )zF 为

( ) ( ) ( )∑∑∞

=

−∞

=

−=⋅=⋅=

001

1n

n

n

n

z

zznTznTfzF

② 采用第二种求 z 变换函数命令调用格式的 MATLAB 语句如下:

syms n w f=sym(’1*1(n)’)

F=ztrans(f,w)

语句运行结果 f = 1*1(n)

F = w/(w-1) 即 z 变换 ( )wF 为

( )1−

=w

wwF

③ 采用第三种求 z 变换函数命令调用格式的 MATLAB 语句如下:

syms n w f=sym(’1*1(n)’)

F=ztrans(f,k,w)

语句运行结果与第二种格式的结果相同。

Page 162: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

150

[说明] 由时间 t 的连续函数表达式 ( )tf 求对应的采样值 ( )nTf 的方法是将 ( )tf 表达式中的 t

均换写成 nT 。 ( )wF 的自变量为 w ,这是变换命令第二种与第三种调用格式指定的 z 变换书写形式。

虽然写成 ( )wF ,但是它仍然是 z 变换表达式。

【例3-142】对于单位斜坡函数 ( ) ttf = 对应的采样值 ( ) nTnTf = 与函数 ( ) tatf = 对应的采样

值 ( ) nTanTf = ,试计算其z 变换 ( )zF 。

【解】 ① 对单位斜坡函数 ( ) ttf = 对应的采样值 ( ) nTnTf = ,采用第一种求 z 变换函数命令

调用格式的 MATLAB 语句如下:

syms n z f=n*T

F=ztrans(f)

语句运行结果 f = n*T

F = T*z/(z-1)^2

即 z 变换 ( )zF 为

( ) ( )( )∑∑

=

−∞

=

−=⋅=⋅=

02

0 1n

n

n

n

z

TzznTznTfzF

② 对函数 ( ) tatf = 对应的采样值 ( ) nTanTf = ,求 z 变换的 MATLAB 语句如下:

syms a z n T f=a^(n*T)

F=factor(ztrans(f)) 语句运行结果 f = a^(n*T)

F = z/(z-exp(log(a)*T))

即 z 变换 ( )zF 为

( ) ( ) =⋅= ∑∞

=

0n

nznTfzFaTz

zlne ⋅−

当 1=T 时,则

( )az

zzF

−=

当 1=T 与 1=a 时,则有

syms k n w z

F=ztrans(1^n) 语句运行结果

F = z/(z-1)

即 z 变换 ( )zF 为

Page 163: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

151

( )1−

=z

zzF

当 1=T 与 2=a 时,显然有

( )2−

=z

zzF

【例 3-143】对函数 ( ) ( )ttf at ωcose−= 的采样值 ( ) =nTf ( )nTanT ωcose− ,试求其 z 变换 ( )zF 。

【解】

求 z 变换的 MATLAB 语句如下:

syms n z T a omega f=cos(omega*n*T)*exp(-a*n*T)

F=factor(ztrans(f)) 语句运行结果 f = cos(omega*n*T)*exp(-a*n*T)

F = (z-cos(omega*T)*exp(-a*T))*z/(z^2-2*z*cos(omega*T)*exp(-a*T)+exp(-a*T)^2)

即 z 变换 ( )zF 为

( ) ( ) =⋅= ∑∞

=

0n

nznTfzF ( ) ( )( )∑

=−−

−−−

+−−

=⋅0

22

2

ecose2

coseecos

naTaT

aTnanT

Tzz

TzzznT

ωωω

【例 3-144】试验算 z 变换的线性定理。

【解】

若 ( )[ ] ( )zFtfZ 11 = 与 ( )[ ] ( )zFtfZ 22 = ,a 与 b 为常数。 ( )tf1 对应的采样值为 ( )nTf1 ; ( )tf2

对应的采样值为 ( )nTf2 。求 ( ) ( )nTfbnTfa 21 + 的 z 变换的 MATLAB 语句如下:

syms a b z n T f=a*sym(’f1(n*T)’)+b*sym(’f2(n*T)’)

F=factor(ztrans(f))

语句运行结果 f = a*f1(n*T)+b*f2(n*T)

F = a*ztrans(f1(n*T),n,z)+b*ztrans(f2(n*T),n,z)

即 ( ) ( )nTfbnTfa 21 + 的 z 变换 ( )zF 为

( ) ( ) =⋅= ∑∞

=

0n

nznTfzF ( ) ( )[ ] ( ) ( )∑∞

=

− +=⋅+0

2121n

n zbFzaFznTbfnTaf

此乃 z 变换的线性定理或线性性质。

【例 3-145】对函数 ( )Ttf 2+ 与 ( )Ttf + ,当 1=T 时,试求其 z 变换 ( )zF 。

【解】 ① 函数采样值为: ( ) ( ) ( )222

11+=+=+ == nfTnTfTtf

TT,求 z 变换的 MATLAB 语句如

下:

syms n z

F=ztrans(sym(’f(n+2)’))

Page 164: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

152

语句运行结果 F = z^2*ztrans(f(n),n,z)-f(0)*z^2-f(1)*z

即 z 变换 ( )zF 为

( ) =zF ( ) ( ) ( ) ( )102 22

0

fzfzzFzznfn

n −−=⋅+∑∞

=

② 若函数采样值为: ( ) ( ) ( )111

+=+=+ == nfTnTfTtfTT

,求 z 变换的 MATLAB 语句

如下:

syms n z

F=ztrans(sym(’f(n+1)’))

语句运行结果 F = z*ztrans(f(n),n,z)-f(0)*z

即 z 变换 ( )zF 为

( ) =zF ( ) ( ) ( )010

fzzFzznfn

n −=⋅+∑∞

=

【例 3-146】求以下各函数的 z 变换并归纳出 z 变换的实数位移定理。

【解】 由 z 变换的概念,时间连续信号 ( )tf 经采样周期为 T 的采样开关进行采样,即信号 ( )tf 在

nTt = 处取值即为采样值 ( )nTf 。当 1=T 时, ( ) ( )nfnTft

==1。所谓 z 变换的实数位移定

理就是求函数 ( ) ( )kTnfkTtfnTt

±=± = 的 z 变换。

① 当 1=k 时,即求 ( )[ ]1

*1 =−T

TtfZ ,可以执行以下 MATLAB 语句求其 z 变换:

syms n t T z;

f=sym(’f(n-1)’)

F=ztrans(f) 语句段运行结果

f = f(n-1) F = 1/z*ztrans(f(n),n,z)

即所求 z 变换为

( )[ ] ( ) ( )zFzzFz

TtfZT

11

1*1 −

= ==−

② 当 2=k 时,即求 ( )[ ]1

*2 =−T

TtfZ ,可以执行以下 MATLAB 语句求其 z 变换:

syms n t T z;

f=sym(’f(n-2)’)

F=ztrans(f) 语句段运行结果

f = f(n-2) F = 1/z^2*ztrans(f(n),n,z)

即所求 z 变换为

( )[ ] ( ) ( )zFzzFz

TtfZT

221

1*2 −

= ==−

Page 165: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

153

由以上举例,可以归纳得出 z 变换的迟后位移定理

( )[ ] ( ) ( )zFzzFz

TntfZ nnT

−= ==− 1

*1

③ 当 1=k 时,即求 ( )[ ]1

*1 =+T

TtfZ ,可以执行以下 MATLAB 语句求其 z 变换:

syms n t T z;

f=sym(’f(n+1)’)

F=ztrans(f) 语句段运行结果

f = f(n+1) F = z*ztrans(f(n),n,z)-f(0)*z

即所求 z 变换为

( )[ ] ( ) ( )0*11

fzzFzTtfZT

⋅−⋅=+ =

④ 当 2=k 时,即求 ( )[ ]1

*2 =+T

TtfZ ,可以执行以下 MATLAB 语句求其 z 变换:

syms n t T z;

f=sym(’f(n+2)’)

F=ztrans(f) 语句段运行结果

f = f(n+2) F = z^2*ztrans(f(n),n,z)-f(0)*z^2-f(1)*z

即所求 z 变换为

( )[ ] ( ) ( ) ( )10*2 221

fzfzzFzTtfZT

⋅−⋅−⋅=+ =

由以上举例,可以归纳得出 z 变换的超前位移定理

( )[ ] ( ) ( )∑−

=

−= ⋅−⋅=+

1

01

*n

k

knnT

zkfzzFzTntfZ

[说明]

实数位移定理是 z 变换的一个非常重要的性质。其作用相当于 Laplace 变换的微分与积分

定理,应用它可以将求解离散系统的差分方程转换为计算 z 域的代数方程,使差分方程的解

算大为简化(参见 8.3 节)。

3.MATLAB 的 z 反变换的函数命令

z 反变换函数命令iztrans ( )的调用格式有以下三种:

(1) 格式 1 f=itrans(F) 这种格式函数是关于标量符号对象 F 的 z 逆变换。z 变换 F 默

认独立变量为 z 函数表达式 ( )zF 。返回的是关于 nT 的原函数 ( )nTf ,它是时间连续函数 ( )tf

的采样值。当 ( )zF 表达式中不含字符 T 时,意味着 1=T ,返回原函数 ( )nf 。如果 ( )nFF = ,

则返回的原函数形式是 ( )kTf 。

这一种函数命令调用格式符合自动控制中采样系统分析里建立的对复变量 ( )zF 求 z 反变

换即原函数 ( )nTf 的习惯,所以经常被广泛地采用。

(2) 格式 2 f= iztrans(F,k) 这种调用格式中,z 变换 F 为默认独立变量为 z 函数表达式

( )zF 。返回的是关于 kT 的原函数 ( )kTf ,它仍然是时间连续函数 ( )tf 的采样值。当 ( )zF 表

Page 166: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

154

达式中不含字符 T 时,意味着 1=T ,返回原函数 ( )kf 。

(3) 格式 3 f = ilaplace(F,w,k) 这种调用格式中,z 变换 F 为默认独立变量为 w 函数表

达式 ( )wF 。返回的是关于 kT 的原函数 ( )kTf ,它仍然是时间连续函数 ( )tf 的采样值。当 ( )wF

表达式中不含字符 T 时,意味着 1=T ,返回原函数 ( )kf 。

【例 3-147】试计算 z 变换式 ( ) ( )( )( )aT

aT

zbz

czzF

−−−=

e

e的 z 反变换 ( )nTf 。

【解】

求 z 反变换的 MATLAB 语句如下:

syms n z a b c T F=(c-exp(-a*T))*z/((z-b)*(z-exp(-a*T)))

f0=iztrans(F)

f=simple(f0)

语句执行结果 f = (c*exp(a*T)-1)*(b^n-(1/exp(a*T))^n)/(-1+b*exp(a*T))

即 z 反变换 ( )nTf 为

( ) ( )[ ] == − zFZnTf 1 ( ) ( )1e

e1e

−⋅−⋅−⋅ −

aT

anTnaT

b

bc

当 1=b 与 1=c 时,求 z 变换表达式 ( ) ( )( )( )aT

aT

zz

zzF

−−−=

e1

e1的 z 反变换有以下 MATLAB

语句:

syms n z a T F=(1-exp(-a*T))*z/((z-1)*(z-exp(-a*T)))

f=iztrans(F)

语句执行结果 F = (1-exp(-a*T))*z/(z-1)/(z-exp(-a*T))

f = 1-(1/exp(a*T))^n

即 z 反变换 ( )nf 为

( ) ( )[ ] == − zFZnTf 1 anT−− e1

【例 3-148】对 z 变换式 ( ) ( )( )bzaz

zkzF

−−⋅=

2

,试求其 z 反变换 ( )nf 。

【解】

求 z 反变换的 MATLAB 语句如下: syms n z a b F=k*z^2/((z-a)*(z-b))

f=iztrans(F)

语句执行结果 F = k*z^2/(z-a)/(z-b)

f = (k*a*a^n-k*b*b^n)/(a-b)

即 z 反变换 ( )nf 为

Page 167: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

155

( ) ( )[ ] == − zFZnf 1

ba

bak

nn

−−⋅

++ 11

当 1=k 、 1=a 与 5.0=b 时,则求 ( ) ( )( )5.01

2

−−=

zz

zzF 的 z 反变换有如下 MATLAB 语句:

syms n z F=z^2/((z-1)*(z-0.5))

f=iztrans(F) 语句执行结果

F = z^2/(z-1)/(z-1/2)

f = 2-(1/2)^n 即 z 反变换 ( )nf 为

( ) nnf 5.02 −=

3.10 M A T LA B 符号函数图形计算器 FU N T O O L

对于习惯使用计算器或者只想作一些简单的符号运算与图形处理的读者,MATLAB 提供

的图示化符号函数计算器是一个较好的选择。该计算器功能虽简单,但操作方便,可视性强,

深受广大用户的喜爱。

3.10.1 符号函数图形计算器的界面

先来看一下计算器的界面。在 MATLAB 命令窗口中输入命令 funtool(不带输入参数),即

可进入如图 3-1 所示的图示化符号函数计算器的用户界面。

图 3-1 图示化符号函数计算器用户界面

Page 168: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

156

由图 3-1 可见,图示化函数计算器由 3 个独立窗口组成:2 个图形窗口(Figure No.1 和 Figure

No.2)与 1 个函数运算控制窗口(Figure No.3)。在任何时候,两个图形窗口只有一个处于被激

活状态。函数运算控制窗口上的任何操作都只对被激活的函数图形窗口起作用,即被激活窗

口的函数图像可随运算控制窗口的操作而作相应的变化。

3.10.2 符号函数图形计算器的输入框操作

在函数运算控制窗口中,有 4 个输入框供用户对要操作的函数进行输入。这 4 个输入框

分别是 f 、 g 、 x 、 a 。其中: f 为图形窗口 1 输入的控制函数,其默认值为 x ; g 为图形

窗口 2 输入的控制函数,其默认值为 1;x 为函数自变量的取值范围,其默认值为[-2*pi,2*pi];

a 为输入常数,用来进行各种运算,其默认值为 1/2(参见图 3-1) 。

在打开函数图形计算器时,对 4 个输入框 MATLAB 将自动赋予其默认值,用户可随时对

其进行输入修改,而对应的图形窗口中的图形也会随之作相应的变化。

3.10.3 符号函数图形计算器的按钮操作

函数图形计算器共有 4(行)×7(列)=28 个按钮,每一行代表一类运算:函数自身的运算;

函数与常数之间的运算;两函数间的运算与对于系统的操作。

1. 函数自身的运算

在函数运算控制窗口的第一行命令按钮用于函数自身的运算操作。每一按钮的命令功能

如下: df/dx 计算函数 f 对 x 的导函数。

int f 计算函数 f 的积分函数。

simple f 对函数 f 进行最简式化简。

num f 取函数表达式 ( )xf 的分子,并赋予给 f 。

den f 取函数表达式 ( )xf 的分母,并赋予给 f 。

1/f 求函数表达式 ( )xf 的倒数函数。

finv f 求函数表达式 ( )xf 的反函数。

在计算 int f 或 finv f 时,若因为函数的不可积或非单调而引起无特定解,则函数栏中将

返回 NaN,表明计算失败。

【例 3-149】试用函数图形计算器绘制出 ( ) 2xxf = 、 ( ) xxf ln= 、 ( ) 2

e xxf −= 、 ( ) xxf sin= 的

函数图形。

【解】

在 MATLAB 命令窗口中输入 funtool,回车后即可进入函数计算器的用户界面。

在函数运算控制窗口中,对输入框 f 输入 x^2 并回车,即刻在图形窗口 1 中绘制出的曲

线;若依次输入题目给定的另外 3 个函数,在图形窗口 1 中绘制出相应的曲线如图 3-2 所示。

【例 3-150】试用函数图形计算器绘制出 ( ) xxf cos= 、 xf d/d 、 fint 、 ffinv 的函数图形。

【解】 进入函数计算器的用户界面后,对输入框 f 输入 cos(x)并回车,在图形窗口 1 中绘制出

( ) xxf cos= 的曲线。当按下按钮【df/dx】时,在图形窗口 1 中绘制出 xxf sind/d −= 的曲线,

同时,输入框 f 内也变成-sin(x)。再依次按下按钮【int f】、【finv】时,在图形窗口 1 中则依

Page 169: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

157

图 3-2 用函数图形计算器绘制出的 4 个函数的图形

次绘制出 xxx sindcos =∫ 与 xarccos 的曲线如图 310-3 所示。在操作控制按钮之前,须注意输

入框 f 中输入的一定是 cos(x)。

图 3-3 函数 ( ) xxf cos= 及其微分、积分、反函数的图形

2. 函数与常数之间的运算

在控制窗口的第二行命令按钮用于函数与常数之间的运算操作。每一按钮的命令功能如

下: f+a 计算 ( ) axf + 。

f-a 计算 ( ) axf − 。

f*a 计算 ( ) axf × 。

f/a 计算 ( ) axf / 。

f^a 计算 ( )2xf 。

Page 170: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

158

f(x+a) 计算 ( )axf + 。

f(x*a) 计算 ( )axf 。

3. 两函数间的运算 在控制窗口的第三行命令按钮用于对函数 f 与 g 常数之间的各种运算操作。每一按钮的

命令功能如下: f+g 计算两函数 f 与 g 之和,并将其和赋值给 f 。

f-g 计算两函数 f 与 g 之差,并将其差赋值给 f 。

f*g 计算两函数 f 与 g 之积,并将其积赋值给 f 。

f/g 计算两函数 f 与 g 之比,并将其商赋值给 f 。

f(g) 计算复合函数 ( )( )xgf 。

g=f 将 f 函数值赋值给 g 。

swap 将 f 函数表达式与 g 函数表达式交换。

4. 几个系统的操作按钮

在窗口的第四行命令按钮用来对符号函数图形计算器进行各种操作。每一按钮的命令功

能如下:

insert 把当前图窗 1 中的函数插入到计算内含的典型函数表中。

cycle 在图窗 1 中依次演示计算器内含的典型函数表中的函数图形。

delete 从内含的典型函数演示表中删除当前的图窗 1 中的函数。

reset 重置符号函数计算器的功能。

help 符号函数图形计算器的在线帮助。

demo 演示符号函数图形计算器的功能。

close 关闭符号函数图形计算器。

Page 171: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

第 4 章 MATLAB 常用图形命令与 符号函数的图形命令

内 容 提 要 MATLAB 具有极强的可视化功能,各种各样的图形功能函数,不胜枚举。在符

号函数以及数值函数的计算中,不可避免地要绘制函数的图形,因为从宏观上看,图

形能给出函数的最直观的感性特征,微观而言,图形能给出函数与其自变量间的定量

关系。现在就来介绍 MATLAB 最常用的图形命令与符号函数的图形命令。本章分 4

节:3.1 节介绍 MATLAB 的常用图形命令;3.2 节介绍 MATLAB 的特殊坐标绘图函

数;3.3 节介绍 MATLAB 离散数据与步进图形的绘图函数;3.4 节介绍 MATLAB 符号

函数的图形命令。通过本章的介绍,使读者初步掌握 MATLAB 最常用的图形命令,

以期达到能在程序设计中,将其计算的结果用图形函数命令绘制出来的目的。

4.1 M A T LA B 的常用图形命令

MATLAB 最常用的最基本的绘图函数命令是 plot( )。

4.1.1 绘图函数 plot( )

1. 绘图函数 plot( )调用格式 1

plot (x,’s’)

这个函数格式的功能是:

(1) 当 x 是实向量时,则绘制出以该向量元素的下标(即向量的长度,可用 MATLAB 函数

length()求得)为横坐标、以该向量元素的值为纵坐标的一条连续曲线。

(2) 当 x 是实矩阵时,则按列绘制出每列元素值相对其下标的曲线。其曲线数等于 x 阵的列数。

(3) 当 x 是复数矩阵时,则按列分别绘制出以元素实部为横坐标、以元素虚部为纵坐标的

多条曲线。

输入参数 s 是用来设置曲线线型、色彩、数据点标记符号的选项字符串。s 的合法设置请参

看表 4-1、表 4-2 与表 4-3。s 可以缺省,此时将由 MATLAB 系统默认设置即曲线一律采用“实

线”线型,不同曲线将按表 4-2 所给出的前 7 种颜色次序(蓝、绿、红、青、品红、黄、黑)着色。

表 4-1 曲线线型符号设置

线型符号 符号含义 线型符号 符号含义

- 实线 -. 点划线

: 虚线 - - 双划线

Page 172: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

160

表 4-2 曲线色彩符号设置

色彩符号 符号含义 色彩符号 符号含义

b 蓝色 m 品红色

g 绿色 y 黄色

r 红色 k 黑色

c 青色 w 白色

表 4-3 曲线数据点标记符号设置

数据点标记符号 符号含义 数据点标记符号 符号含义

. 实心黑点 v 朝下三角符

空心圆圈 ^ 朝上三角符

x 叉字符 < 朝左三角符

+ 十字符 > 朝右三角符

* 星号符 p 五角星符

s 方块符 h 六角星符

d 菱形符

2. 绘图函数 plot( )调用格式 2

plot (x,y,’s’) 这个函数格式的功能是:

(1) 当 x、y 是同维向量时,则绘制以 x 为横坐标、以 y 为纵坐标的曲线。

(2) 当 x 是向量,y 是有一维与 x 等维的矩阵时,则绘制出多根不同颜色的曲线。曲线数

等于 y 阵的另一维数,x 作为这些曲线的横坐标。

(3) 当 x 是矩阵,y 是向量时,绘制曲线的情况与(2)相同,只是这些曲线以 y 作为横坐标。

(4) 当 x、y 是同维矩阵时,则以 x 对应列元素为横坐标、以 y 对应列元素为纵坐标分别

绘制曲线,曲线数等于矩阵的列数。

输入参数 s 情况同上。同样,s 也可以缺省。

3. 绘图函数 plot( )调用格式 3

plot (x1,y1,’s1’,x2,y2,’s2’,…) 这个函数格式中,每个绘制曲线“三元组”(x,y,’s’)的结构与功能同调用格式 2,不同“三

元组”之间,互相没有约束关系。

4.1.2 绘图坐标系的调整

MATLAB 的绘图函数可根据要绘制曲线数据的范围自动选择合适的坐标系,使得曲线尽

可能清晰地显示出来。所以,一般情况下用户不必自己选择绘图坐标。但对有些图形,如果

用户觉得自动选择的坐标不合适,则可用函数 axis( )选择新的坐标系。函数 axis( )的调用格式

为:

axis(xmin,xmax,ymin,ymax,zmin,zmax)

Page 173: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

161

坐标有最小值(xmin,ymin,zmin)与最大值(xmax,ymax,zmax),前者必须小于相应的后者。这

个格式的功能是,设置 x,y,z 坐标的最小值与最大值。函数输入参数可以是 4 个或者 6 个,

分别对应于二维或三维坐标系的最小值与最大值。

4.1.3 图形标注

MATLAB 常用的图形标注函数及其功能如表 4-4 所示,利用这些函数可以为图形加标题,

为图形的坐标轴加标注,为图形加图例,也可把说明、注释文本放到图形的任何位置。

1. 表 4-4 中前 4 个函数

表 4-4 中前 4 个函数的调用格式基本类似,以 title( )为例:

title(’text’,’property1’,propertyvalue1,’property2’,propertyvalue2,…)

函数的输入参数“ text”为要添加的标注文本,“property1”为该文本的属性,而

“propertyvalue1”则为该文本属性的属性值。这个函数格式的功能是按照设置的格式把文本

“text”加到图形的上方作为图形的标题。而关于坐标轴的则是把文本“text”加到坐标轴的

附近。用户可以对文本标注字体的显示进行控制,其具体规定如表 4-5 所示。

表 4-4 常用图形标注函数

函 数 函 数 功 能

title 为图形添加标题

xlable 为 x 轴加标注

ylable 为 y 轴加标注

zlable 为 z 轴加标注

legend 为图形添加图例

text 在指定位置添加文本字符串

gtext 用鼠标在图形上放置文本

2. 函数 legend( )

在图形窗口添加图例的函数 legend( ),其调用格式为:

legend(string1,string2,string3,…Pos)

函数的输入参数 string1,…为指定标注的字符串,Pos 为把图例置放在图形中的位置,其

取值及含义如下:“0”自动把图例置于最佳位置,使其与图中曲线重复最少;“1” 把图例置

于图形中的右上角(缺省值);“2” 把图例置于图形中的左上角;“3” 把图例置于图形中的左

下角;“4” 把图例置于图形中的右下角;“-1” 把图例置于图形右侧(外部)。

3. text( )函数

在图形窗口添加文本字符串的函数 text( ),其调用格式为:

text(x,y,’string’) 函数的输入参数 x 与 y 为添加文本字符串的横向与纵向的坐标位置,“string”为添加的

文本字符串,也可以添加由“\”引导的特征字符串来表示的特征符号。MATLAB 里的特征字

符串及其相对应符号如表 4-6 所示。

表 4-5 文本字体显示控制字符 及其显示字体

文本字体显示控制字符 显示的字体

\bf 黑体

\it 斜体

\sl 透视

\rm 标准形式

\fontnamefontname 给定标注文本字体名

\fontsize(fontsize) 给定标注文本字体大小

Page 174: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

162

表 4-6 特征字符串及其对应符号

特征字符串 对应符号 特征字符串 对应符号 特征字符串 对应符号

\alpha α \Phi Φ \0 φ

\beta β \Psi Ψ \infty ∞

\gamma γ \Omega Ω \Im ℑ

\deta δ \forall ∀ \Re ℜ

\epsilon ε \exists ∃ \aleph ℵ

\zeta ς \ni ∋ \wp ℘

\eta η \equiv ≡ \wedge ∧

\iota ι \cong ≅ \vee ∨

\theta θ \approx ≈ \langle ⟨

\vartheta ϑ \neq ≠ \rangle ⟩

\kappa κ \propto ∝ \nabla ∇

\lambda λ \leq ≤ \bullet •

\mu µ \geq ≥ \sim ~

\nu ν \pm ± \leftrightarrow ·

\xi ξ \div ÷ \leftarrow ←

\pi π \times × \rightarrow →

\rho ρ \sund · \uparrorw ↑

\tau τ \otimes ⊗ \downarrow ↓

\sigma σ \oplus ⊕ \clubsuit ·

\varsigma ζ \cdot · \diamondsuit ·

\upsilon υ \neg ¬ \heartsuit ·

\phi φ \cap ∩ \spadesuit ·

\chi χ \cup ∪ \lceil ·

\psi ψ \supseteq ⊇ \rceil ·

\omega ω \supset ⊃ \lfloor ·

\Gamma Γ \subseteq ⊆ \rfloor ·

\Delta ∆ \subset ⊂ \perp ·

\Theta Θ \int ∫ \mid |

\Lambda Λ \in ∈ \ldots

\Xi Ξ \partial ∂ \prime ’

\Pi Π \varpi ϖ \copyright ©

\Sigma Σ \o Ο

\Upsilon Τ \circ °

4. 函数 gtext( )

MATLAB 还提供了一个交互方式下用鼠标添加文本的函数 gtext( ),其调用格式为:

Page 175: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

163

gtext(’string’,’property’,propertyvalue,…)

函数的输入参数“string”为要添加的文本,它可以是一字符串,也可以是含有多行字符

串的字符串数组。“property”为该文本的属性,而“propertyvalue”则为该文本属性的属性值。

调用这个函数后,图形窗口中的鼠标指针会成为十字光标,通过移动鼠标来进行定位,即光

标移到预定位置后按下鼠标左键或键盘上的任意键都会在光标位置显示指定文本。由于要用

鼠标操作,故该函数只能在 MATLAB 命令窗口中执行。

4.1.4 多次重叠绘制图形

函数 plot( )调用格式 3 能够一次性的画出多条曲线。实际应用中,还会有在已经存在的图

上再重叠绘制一条或多条曲线的情况。为此,MATLAB 提供了以下指令:

hold on 这个指令的功能是使当前轴与图形保持不变,准备此后在此图上再叠加绘制新曲线。

hold off 这个指令的功能是使当前轴与图形不再具备不被刷新的功能。

hold 当前图形是否具备被刷新功能的双向切换开关。请看以下示例。

【例 4-1】对数组 [ ]01234543210=x ,用 plot( )函数命令绘制其曲线。

【解】

用以下 MATLAB 语句对数组 x 绘制其曲线:

clear

x=[0 1 2 3 4 5 4 3 2 1 0];

c=length(x)

plot(x) title(’\it 数组曲线’,’FontSize’,20,’FontName’,’黑体’)

语句执行结果

c = 11

即测得数组的长度为 11,并绘制数组 x 的曲线如图 4-1 所示。

图 4-1 用 plot( )函数绘制的数组 x 的曲线

Page 176: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

164

从图 4-1 曲线可以看出: (1) 曲 线 横 坐 标 为 数 组 的 长 度 向 量 [ ]1110987654321 , 曲 线 纵 坐 标 为 数 组

[ ]01234543210=x 的每一元素值。

(2) 使用的函数命令 plot( )为 s 缺省情况,所以用蓝色实线绘制出一条连续曲线(只能在计

算机荧光屏上看到)。

(3) 为图形添加了“数组曲线”的斜体标题。

【例 4-2】x 为向量,y 为矩阵,用 plot(x,y)函数命令绘制其曲线。

【解】

用以下 MATLAB 语句绘制其曲线:

x=(0:pi/50:2*pi)’;

k=0.4:0.1:1;

c=length(k)

y=sin(x)*k;

plot(x,y)

xlabel(’x(0~2\pi)’,’FontWeight’,’bold’)

ylabel(’Sin(x)’,’FontWeight’,’bold’)

text(pi,0,’\leftarrowsin(\pi)=0’)

语句执行后绘制出 x 为向量,y 为矩阵的曲线,如图 4-2 所示。从图 4-2 曲线可以看出:

(1) 为图形的 x 与 y 轴都加了标注。

(2) 为图形添加了 0sin =π 的文本标注。

(3) y 曲线有 7 根,其根数为数组 k 的长度。

图 4-2 用 plot(x,y)函数绘制的曲线

【例 4-3】续上题,交换 x,y,即 x 为矩阵,y 为向量,用 plot( )函数命令绘制其曲线。

【解】

用以下 MATLAB 程序绘制其曲线:

y=(0:pi/50:2*pi)’;

k=0.4:0.1:1;

x=sin(y)*k;

Page 177: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

165

plot(x,y) grid on

语句执行后绘制出 x 为矩阵,y 为向量的曲线,如图 4-3 所示。由图可见,图中已添加了

等分刻度的网格(参见 4.2 节)。如下的另一段程序,运行后会得到如图 4-3 同样的曲线。

x=(0:pi/50:2*pi)’;

k=0.4:0.1:1;

y=sin(x)*k;

plot(y,x)

grid on

图 4-3 用 plot( )函数绘制的曲线

【例 4-4】用 plot( )函数绘制正弦周期函数波的一个正半波的图形。

【解】

用以下 MATLAB 程序绘制正弦函数的一个正半波图形:

x1=0:0.1:pi;

x2=pi:0.1:4*pi;

f1=sin(x1);

f2=sin(x2)+sin(x2-pi);

plot(x1,f1,x2,f2,’k’); 程序执行后,绘制正弦函数的一个正半波图形,如图 4-4 所示。

【例 4-5】用 plot( )函数绘制周期性的正弦交流电整流全波函数(两个周期)的图形。

【解】

用以下 MATLAB 程序绘制整流全波函数的图形:

x1=0:0.1:pi;

x3=2*pi:0.1:3*pi;

x2=pi:0.1:2*pi;

x4=3*pi:0.1:4*pi;

f1=sin(x1);f2=sin(x2-pi);

plot(x1,f1,’k’);hold on;

Page 178: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

166

plot(x2,f2,’k*’);hold on;

plot(x3,f1,’k’);hold on;

plot(x4,f2,’k*’);hold off;

程序执行后,绘制出正弦交流整流全波函数的图形,如图 4-5 所示。

图 4-4 绘制的正弦函数的一个正半波图形 图 4-5 绘制的整流全波函数的图形

【例 4-6】用 plot( )函数绘制常温下(300K)理想二极管的伏安特性曲线。

【解】

(1) 根据理论物理分析,PN 结二极管电流与端电压的关系符合半导体二极管方程:

( )1e / −= TVVSII ( )1e / −= kTVq

SI

其中 I 为 PN 结二极管电流, SI 为 PN 结反向饱和电流,在一定温度下, const=SI 。V 为二

极管两端电压,而电压q

kTVT = 为温度的电压当量,其中 2310381.1 −×=k J/K, 19106.1 −×=q

库,T 为热力学温度。 (2) 绘制 A1 µ=SI 时常温下(300K)理想二极管的伏安特性曲线。

syms k q T VT;

V=-180:0.01:22;

k=1.381*10^(-23);

q=1.6*10^(-19);

digits(5);

T=300;

vpa(k*T/q,5);

Is=1;

I=Is*(exp((V*q)/(k*T))-1);

plot(V,I,’-*’); legend(’理想二极管伏安特性曲线’,2)

grid on 程序运行后绘制常温下理想二极管的伏安特性曲线,如图 4-6 所示。

由图 4-6 所示的伏安特性曲线(由星号“*”组成)可以看出,理想二极管在第三象限的反

向电流为零,第一象限的正向电流上升得十分陡峭(几乎是垂直上升)。另外,在图 4-6 中还添

加了图例。

Page 179: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

167

图 4-6 常温下理想二极管的伏安特性曲线

4.1.5 图形窗口的分割

MATLAB 提供了在一个图形窗口显示几幅图的函数命令 subplot( ),它是把整个图形窗口

分割成多个子窗口来实现的。函数 subplot( )的调用格式为:

subplot(m,n,i) 这个函数格式的功能是:把图形窗口分割成 m 行与 n 列的子窗口,并选定第 i 个窗口为当

前窗口。请看 4.4 节中的示例。

4.2 M A T LA B 的特殊坐标绘图函数

一般情况下,二维函数图形的坐标都是线性刻度的。在自动控制中广泛使用的 Bode 图,

其横坐标是对数刻度的。相对于笛卡儿直角坐标的是极坐标,在某些场合,采用极坐标能使

问题更便于研究。双 y 轴坐标曲线在科学研究与工程计算中也是普遍使用的。

4.2.1 对数坐标曲线

绘制对数坐标曲线的函数有三个: semilogx( )、semilogy( )、 loglog( ) 。这三个函

数的输入参数与 plot( )函数完全类似。前两个函数的功能分别是以 x 轴与 y 轴为对数坐标,而

第三个函数则是双对数坐标,即 x 轴与 y 轴都是对数坐标。

常常与这三个函数配合使用而添加对数刻度网格的指令 grid,它也可添加等分刻度的网

格,只要将其置于相应的绘图函数之后即可。格式 grid on 是在图形窗口添加网格,grid off

则是去掉网格。请看以下示例。 【例 4-7】对数组 1000:1:0== yx ,试用三个函数 semilogx( )、semilogy( )、 loglog( ) 绘

制其曲线。

【解】

(1) 用函数 semilogx( )绘制曲线的 MATLAB 程序如下:

Page 180: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

168

clear

x=0:1:1000;y=0:1:1000;

semilogx(x,y)

xlabel(’x’)

ylabel(’y’)

grid on 程序运行后绘制的曲线如图 4-7 所示。由图可见,其横坐标 1000~1:x 是对数刻度的,而

纵坐标 1000~0:y 是等分刻度的。

100

101

102

103

0

100

200

300

400

500

600

700

800

900

1000

x

y

0 100 200 300 400 500 600 700 800 900 1000

100

101

102

103

x

y

图 4-7 用 semilogx(x,y)绘制数组的曲线 图 4-8 用 semilogy(x,y)绘制数组的曲线

(2) 用函数 semilogy( )绘制曲线的 MATLAB 程序如下:

clear

x=0:1:1000;y=0:1:1000;

semilogy(x,y)

xlabel(’x’)

ylabel(’y’)

grid on 程序运行后绘制的曲线如图 4-8 所示。由图可见,其横坐标 1000~0:x 是等分刻度的,而

纵坐标 1000~1:y 是对数刻度的。

(3) 用函数 loglog ( )绘制曲线的 MATLAB 程序如下:

clear

x=0:1:1000;y=0:1:1000;

loglog(x,y)

xlabel(’x’)

ylabel(’y’)

grid on 程序运行后绘制的曲线如图 4-9 所示。由图可见,其横坐标 1000~1:x 是对数刻度的,而

纵坐标 1000~1:y 也是对数刻度的。

Page 181: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

169

图 4-9 用 loglog(x,y)绘制数组的曲线

4.2.2 极坐标曲线

用函数 polar( )绘制极坐标曲线。函数的调用格式为:

polar(theta,rho,’s’) 函数输入参数“theta”与“rho”分别为角度向量与幅值向量,要求两向量的长度相同。

输入参数“s”的含义与用法与函数 plot( )的输入参数“s”基本一致。此格式函数的功能是按

输入参数的要求绘制极坐标曲线。

【例 4-8】用 plot( )函数绘制三叶与四叶玫瑰线。

【解】

(1) 用 plot ( )函数绘制三叶玫瑰线的 MATLAB 程序如下:

clear

a=1;thita=0:0.1:2*pi;

rho=a*sin(3*thita); polar(thita,rho)

程序运行后绘制出三叶玫瑰线如图 4-10 所示。

(2) 用 plot( )函数绘制四叶玫瑰线的 MATLAB 程序如下:

clear

a=1;thita=0:0.1:2*pi;

rho=cos(2*thita);

polar(thita,rho)

程序运行后绘制出四叶玫瑰线如图 4-11 所示。

图 4-10 三叶玫瑰线 图 4-11 四叶玫瑰线

Page 182: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

170

4.2.3 双 y 轴坐标曲线

用函数 plotyy( )可以绘制双 y 轴((左右各一个)的图形。函数有以下 3 种调用格式。

格式 1 plotyy(x1,y1,x2,y2 )

这种格式函数的功能是:在一个图形窗口里同时绘制(x1,y1)与(x2,y2)两条曲线,前者用

左侧的 y 轴,后者用右侧的 y 轴。

格式 2 plotyy(x1,y1,x2,y2,fun)

这种格式函数的功能与格式 1 相同,只是多了用字符串“fun”来指定绘图的函数名。

格式 3 plotyy(x1,y1,x2,y2,fun1,fun2)

这种格式函数的功能与格式 2 相同,只是用字符串“fun1”与“fun2”指定不同的绘图函

数来分别绘制这两条曲线。

【例 4-9】用函数 plotyy( )绘制以 btAy −= e1 与 ( )cty sin2 = 为纵坐标以 t 为横坐标的曲线。

【解】

图 4-12 btAy −= e1 与 ( )cty sin2 = 以公共横坐标 t 的曲线

用 plotyy( )绘制曲线的 MATLAB 程序如下:

clear

t=0:1000;A=1000;b=0.005;c=0.00628;

y1=A*exp(-b*t);

y2=sin(c*t);

[haxes,hline1,hline2]=plotyy(t,y1,t,y2,’semilogy’,’plot’);

axes(haxes(1))

ylabel(’Semilog Plot’)

axes(haxes(2))

ylabel(’Linear Plot’)

xlabel(’t(0~1000)’,’FontWeight’,’bold’) 程序运行后绘制出以 btAy −= e1 与 ( )cty sin2 = 为纵坐标以 t 为横坐标的曲线,如图 4-12

所示。由图可见,图形的左侧为对数坐标 1y 轴,其右侧为线性坐标 2y 轴。

4.2.4 复数的图形曲线

当绘图数据为复数时,使用函数 plot ( )来绘制其图形有两种输入参数的格式。

Page 183: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

171

格式 1 plot(x,y) 这种格式下,不论参数 x 与 y 哪个是复数,都将忽略掉虚部数据,只绘制复数的实部数

据,其余用法与绘制一般实数数据相同。

格式 2 plot(z)

用这种格式绘制复数 z 的图形时,则以复数 z 的实部为横坐标,以其虚部为纵坐标,绘

制其关系曲线。 【例 4-10】对复数 ( ) ( )ttz cosjsin += ,用 plot(x,y)与 plot(z)两种格式绘制其图形曲线。

【解】

(1) 用 plot(x,y)绘制曲线的 MATLAB 程序如下:

clear

t=0:0.1:2*pi;

x=sin(t);y=cos(t);

z=x+j*y;

plot(t,z) 程序运行后绘制出复数 ( ) ( )ttz cosjsin += 的曲线如图 4-13 所示,即只绘制复数的实部数

据 ( )tsin 。

(2) 用 plot(z)绘制曲线的 MATLAB 程序如下:

clear

t=0:0.1:2*pi;

x=sin(t);y=cos(t);

z=x+j*y;

plot(z) 程序运行后绘制出复数 ( ) ( )ttz cosjsin += 的曲线如图 4-14 所示。

图 4-13 用 plot(x,y)绘制复数的曲线 图 4-14 用 plot(z)绘制复数的曲线

4.3 M A T LA B 离散数据与步进图形的绘图函数

以时间为自变量的函数,若该函数在全部时间上都取值,则此时间变量函数叫做时间的

连续函数。若函数不是在全部时间而是在离散的时间上取值,则叫做时间的离散函数。到目

前为止,所绘制的都是时间连续函数的图形,本节就来介绍离散函数的图形。

4.3.1 MATLAB 绘制离散数据图形的函数命令 stem( )

离散数据图把每个数据点画成一根直线,在数据值的地方用一小圆圈表示,小圆圈可以

Page 184: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

172

被填满成为小圆点(使用’filled’)。看起来很像火柴杆,故又叫做火柴杆图。在无线电技术、信

息技术的频谱分析中,离散数据图是一个重要的工具。MATLAB 提供了绘制离散数据图的函

数命令 stem( ),其调用格式为:

格式 1 stem(x,y,’filled’) 函数输入参数 x 、y 为绘制图形的横坐标轴与纵坐标轴,此格式函数的功能是绘制以从 x

轴上的点为起点显示一系列 y 轴坐标的离散杆图。输入参数 filled 是指定小圆圈被填满成为小

圆点,当 filled 缺省时即指定为小圆圈。

格式 2 stem(x,y,’s’)

这种格式函数的功能同格式 1,只是多了输入参数 s,也是用来设置线型、色彩、数据点

标记符号的选项字符串。其合法设置同函数 plot( ),还可有输入参数 filled 。

【例 4-11】试绘制正弦函数 ( )xsin 与余弦函数 ( )xcos 曲线并绘制 ( ) ( )xx cossin + 的离散杆图。

【解】 绘制函数图形曲线及其 ( ) ( )xx cossin + 的离散杆图的 MATLAB 程序如下:

clear

x=linspace(0,2*pi,60);

a=sin(x);

plot(x,a)

hold on

lab1=’\leftarrowsinx’;

text(2.4,0.8,lab1,’FontSize’,18)

b=cos(x);

lab2=’cosx\rightarrow’;

text(1.2,-0.8,lab2,’FontSize’,18)

plot(x,b,’*’)

stem(x,a+b,’r’,’filled’)

lab3=’\leftarrowsinx+cosx’;

text(1.5,1.2,lab3,’FontSize’,18) 程序运行后画出正弦函数 ( )xsin 与余弦函数 ( )xcos 曲线以及绘制 ( ) ( )xx cossin + 的离散杆

图如图 4-15 所示。

图 4-15 ( ) ( )xx cossin + 的离散杆图

Page 185: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

173

4.3.2 MATLAB 绘制步进图形的函数命令 stairs( )

步进图也叫阶梯图,它以恒定的间隔显示数据,其图形在 x 坐标轴的 ( )ix 与 ( )1+ix 之间所

有的 y 值均相等,形似楼梯的台阶。在自动控制的采样系统分析中,将采样信号转换为连续

信号的零阶保持器,就是对采样信号绘制其步进图。MATLAB 提供了绘制步进图形的函数命

令 stairs( ),其调用格式为:

格式 1 stairs(x,y) 函数输入参数 x 、 y 为绘制图形的横坐标轴与纵坐标轴,此格式函数的功能是绘制

( )xfy = 的步进图。

格式 2 tairs(x,y,’s’ )

这种格式函数的功能同格式 1,只是多了输入参数 s ,也是用来设置曲线线型、色彩、数

据点标记符号的选项字符串。其合法设置同函数 plot( )。

【例 4-12】对衰减的正弦函数 ( )tf t βα sine−= ,试绘制当 01.0=α 与 5.0=β 时的函数图形曲

线及其步进图。

【解】

绘制函数图形曲线及其步进图的 MATLAB 程序如下:

clear

t=0:10;alpha=0.01;beta=0.5;

f=exp(-alpha*t).*sin(beta*t);

stairs(t,f,’-k’)

hold on

plot(t,f,’:*’)

hold off lab1=’函数 e^-(\alpha*t)sin\beta*t 的步进图’;

title(lab1,’FontSize’,14)

xlabel(’t=0:10’,’FontSize’,14)

axis([0 10 -1.2 1.2])

lab2=’e^-(\alpha*t)sin\beta*t\rightarrow’;

text(4.1,-0.1,lab2,’FontSize’,14) 程序运行后绘制出函数图形曲线及其步进图如图 4-16 所示。

图 4-16 函数 ( )tf t βα sine−= 的图形曲线及其步进图

Page 186: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

174

4.4 M A T LA B 符号函数的图形命令

前面介绍的是 MATLAB 数值函数的图形绘制,MATLAB 还提供了绘制符号函数图

形的函数命令。这里主要介绍符号函数的简捷绘图函数 ezplot( )与绘图函数 fplot( )两个命

令。

4.4.1 符号函数的简单绘图函数 ezplot( )

为完善符号函数的应用配套,MATLAB 提供了一些简单绘图函数命令,ezplot( )就是其中

最常用的一元函数绘制二维曲线的命令。简捷绘图指令的最大特点是:不需要数据准备,能

够直接绘制出符号函数或字符串函数的图形;这些指令名称前都冠以“ez”两字符。简捷绘

图命令 ezplot( )有 3 种调用格式。

1. 调用格式 1 ezplot (f,[a,b],fig) 这个函数格式的功能是:在区间 bxa << 内,在指定的图窗号“ fig ”下绘制表达式

( )xff = 的函数曲线。当区间 [ ]ba, 缺省时,则在区间 π<<π− 22 x 内,在指定的图窗号“ fig ”

下绘制表达式 ( )xff = 的函数曲线。当指定的图窗号“ fig ”缺省时,则在图窗号“ 1.NoFigure ”

下绘制曲线。若表达式 f 为 y 的隐函数形式 ( )yxff ,= , 则在区间 bxa << 与 bya << (或

π<<π− 22 x 与 π<<π− 22 y ) 内,绘制表达式 ( ) 0, =yxf 的函数曲线。

2. 调用格式 2 ezplot(f, [xmin,xmax,ymin,ymax],fig) 这 个 格 式 的 函 数 功 能 是 : 若 表 达 式 f 为 y 的 隐 函 数 形 式 ( )yxff ,= 时 , 在 区 间

maxmin xxx << 与 maxmin yyy << 内,在指定的图窗号“ fig ”下绘制表达式 ( ) 0, =yxf 的函数

曲线。当指定的图窗号“ fig ”缺省时,则在图窗号“ 1.NoFigure ”下绘制曲线。

3. 调用格式 3 ezplot(x,y,[tmin,tmax],fig) 这个函数格式的功能是:在区间 maxmin ttt << 内,在指定的图窗号“ fig ”下绘制纵坐标

为 y 横坐标为 x 的函数曲线,而 ( )tyy = , ( )txx = 。当区间 [ ]maxmin ,tt 缺省时,则在参变量 t 区

间 π<< 20 t 内,在指定的图窗号“ fig ”下绘制纵坐标为 y 横坐标为 x 的函数曲线。当指定

的图窗号“ fig ”缺省时,则在图窗号“ 1.NoFigure ”下绘制曲线。

需要特别注意的是:ezplot (f)中的函数 ( )xf 里允许出现同一个自变量的两函数的卷

积,而 plot (f)中的函数 ( )xf 表达式里则不允许出现卷积,请参见第 8 章有关卷积的举

例。 【例 4-13】在区间 π<<π− 22 x 内,在图窗号“5”中绘制 xf sin= 的函数曲线。

【解】 用以下 MATLAB 语句来在“5”号图窗中绘制 xf sin= 的函数曲线:

clear

ezplot(’sin(x)’,[-2*pi,2*pi],5) 语句执行后,在“5”号图窗中,在 π<<π− 22 x 区间内,绘制 xf sin= 的函数曲线如图

4-17 所示。 【例 4-14】在区间 π<<π− 22 x 内,绘制表达式 2sintan −+= xxf 的函数曲线。

【解】

Page 187: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

175

图 4-17 “5”号图窗中的 sinx 函数曲线

用以下 MATLAB 程序绘制 2sintan −+= xxf 的函数曲线:

clear

syms x;

y=tan(x)+sin(x)-2;

ezplot(y,[-2*pi 2*pi]);

hold on

w=-2*pi:pi/2:2*pi;

plot(w,0*w,’r-.’);

hold on

Rx=[0.8863,-1.8979];

plot(Rx,0*Rx,’ko’)

text(1.0,-0.4,’x(1)’)

text(-1.8,-0.4,’x(2)’)

hold on

Px=[0.8863-2*pi,-1.8979+2*pi];

plot(Px,0*Px,’ko’)

text(1.0-2*pi,-0.4,’x(1)-2*pi’)

text(-1.8+2*pi,-0.4,’x(2)+2*pi’)

hold off 程序执行后,在 π<<π− 22 x 区间内,绘制 2sintan −+= xxf 的函数曲线如图 4-18 所示。

【例 4-15】一台三相六极异步电动机额定电压 V3801 =U ,同步转速 min/r10001 =n ,电源

频率 Hz501 =f ,定子电阻 Ω= 08.21r ,定子漏电抗 Ω= 12.31x ,转子电阻折合值 Ω= 53.12r ,

转子漏电抗折合值 Ω= 25.42x ,试绘制感应电动机的机械特性曲线。

【解】

(1) 根据电机拖动理论,感应电动机的机械特性为:

( ) ( )

′++

+

′=

′++

+

′=

221

22

11

221

221

21

22

11

221 /3/3

xxs

RR

sRUn

LLs

RR

sRUnT

p

ll

pe

ωωω

Page 188: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

176

图 4-18 2sintan −+= xxf 的函数曲线

式中 eT 为感应电动机的电磁转矩; 1ω 为电源角频率; s 为异步电动机的转差。

(2) 绘制电动机机械特性曲线的 MATLAB 程序如下:

clear

syms s np U1 R2p w1 R1 Ll1 Ll2p;

Te=3*np*U1^2*R2p/(s*w1*((R1+R2p/s)^2+w1^2*(Ll1+Ll2p)^2));

np=3;U1=380;R2p=1.53;w1=2*pi*50;R1=2.08;Ll1=3.12/w1;Ll2p=1.53/w1;

Te1=subs(Te,’[np U1 R2p w1 R1 Ll1 Ll2p]’,[np U1 R2p w1 R1 Ll1 Ll2p]);

ezplot(Te1,[0,1]) 程序运行后绘制的感应异步电动机的机械特性曲线如图 4-19 所示。

图 4-19 感应异步电动机的机械特性曲线

(3) 当横坐标为感应电动机的电磁转矩 eT 、纵坐标为感应电动机的转差 s(这是电机拖动

理论分析的最常见形式)时,绘制电动机机械特性曲线的 MATLAB 程序如下:

clear

ezplot(’Te-3*3*380^2*1.53/(((1000-n)/1000)*314.16*((2.08+1.53/((1000-n)/1000))^2+

314.16^2*(0.01+0.005)^2))’,[0,300,0,1200]) 程序运行后绘制出常见形式的感应异步电动机的机械特性曲线,如图 4-20 所示。

Page 189: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

177

0 5 0 1 0 0 1 5 0 2 0 0 2 5 0 3 0 00

2 0 0

4 0 0

6 0 0

8 0 0

1 0 0 0

1 2 0 0

T e

n

T e -3 3 3 8 0 2 1 . 5 3 / ( ( (1 0 0 0 -n ) / 1 0 0 0 ) 3 1 4 . 1 6 ( (2 . 0 8 + 1 . 5 3 / ( (1 0 0 0 -n ) / 1 0 0 0 )) 2 + 3 1 4 . 1 6 2 (0 . 0 1 + 0 . 0 0 5 )2 ) ) = 0

图 4-20 感应异步电动机常见形式的机械特性曲线

【例 4-16】试绘制 0122 =−− yx 的函数曲线。

【解】

绘制函数曲线的 MATLAB 语句如下:

clear

ezplot(’x^2 - y^2 - 1’) 语句运行后绘制出函数 0122 =−− yx 的曲线,如图 4-21 所示。

图 4-21 函数 0122 =−− yx 的曲线

【例 4-17】绘制标准正态分布概率密度函数 ( ) 20

2

e2

1x

x−

π=ϕ 的函数曲线。

【例】

绘制函数曲线的 MATLAB 语句如下:

clear

ezplot(’exp(-x^2/2)/(sqrt(2*pi))’, [-5,5])

语句运行后绘制出函数曲线如图 4-22 所示。

Page 190: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

178

-5 -4 -3 -2 -1 0 1 2 3 4 5

0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

x

exp(-x 2/2)/(sqrt(2 π))

图 4-22 标准正态分布概率密度函数曲线

4.4.2 符号函数的绘图函数 fplot( )

指令的绘图数据点是自适应产生的。在函数曲线变化剧烈处,系统所取的数据点较密;

反之,则较疏。因此,对导数变化较大的函数,fplot( )所绘制的曲线比等分取点的更清晰。

但是,fplot( )较其它绘图指令运行的时间要长些。这个函数经常与 subplot()配合使用,以便比

较几个不同的图形函数的绘图效果。绘图指令 fplot( )有以下五种调用格式。

1. 调用格式 1 fplot(fun,lims) 这个格式的功能是:在 x 轴上区间为 [ ]maxmin xxslim = 内绘制由字符串 fun 指定函数名的

函数曲线。若区间为 [ ]maxminmaxmin yyxxslim = ,则 y 轴的区间也被控制。fun 必须为一个 M

文件的函数名或对变量 x 的可执行字符串,函数 fun(x)必须返回一个对于向量 x 每一元素的结

果行向量。

2. 调用格式 2 fplot(fun,lims,tol)

这个格式的功能是:绘制由字符串 fun 指定函数名的函数曲线。函数命令中字符串 tol<1,

用来指定相对误差精度,默认值为 tol =2e-3。

3. 调用格式 3 fplot(fun,lims,n)

这个格式的功能是:绘制由字符串 fun 指定函数名的函数曲线。函数命令中字符串 n≥1,

用来指定以最少 n+1 个点来绘制函数曲线,默认值为 n=1。最大步长被限制为不小于:

( ) ( )minmax/1 xxn −× 。

4. 调用格式 4 fplot(fun,lims,’LineSpec’)

这个格式的功能是:用指定线型绘制由字符串 fun 指定函数名的函数曲线。指定线型(即

所用线型、色彩、数据点标记符号等)的设置同函数 plot( )。

5. 调用格式 5 [x,y]=fplot(fun,lims,...)

这个格式的功能是:只返回用来绘图的数据点的向量值(即输出参量 x、y),而不绘制出

图形,但用户可再使用函数命令 plot(x,y)来输出绘制的图形。请看以下示例。 【例 4-18】用 fplot( )与 plot( )绘图命令,绘制函数 ( )( )xf π= tancos 的图形,并比较其绘图

效果。

【解】

Page 191: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

179

绘制函数图形的 MATLAB 程序如下:

[x,y]=fplot(’cos(tan(pi*x))’,[-0.4,1.4],0.2e-3);

n=length(x);

subplot(1,2,1),plot(x,y) title(’泛函绘图函数效果 ’,’fontSize’, 20,’fontName’,’隶书’ )

t=(-0.4:1.8/n:1.4)’;

subplot(1,2,2),plot(t,cos(tan(pi*t)))

title(’等分采样绘图函数效果 ’,’fontSize’, 20,’fontName’,’隶书’ )

程序运行后绘制出函数图形如图 4-23 所示。

图 4-23 fplot( )与 plot( )绘制的函数 ( )( )xf π= tancos 图形

由图 4-23 可以看出,用 fplot( )绘制的左图,在函数曲线中部,所取的数据点较密,曲

线比等分取点的右图要清晰。

Page 192: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

第 5 章 MATLAB符号微积分运算的应用

内 容 提 要

微积分运算是高等数学重要的基本内容,而高等数学是自然科学与工程技术的

理论研究的重要工具,在高等教育中起着奠基作用。微积分运算的应用十分普遍与

广泛,理工科高校几乎所有的专业,文科的经济管理与财会方面的专业都涉及到微

积分运算的应用。

前面在 3.6 节介绍了符号极限运算、符号函数微分与积分运算的 MATLAB 实现。

本章就来简要介绍 MATLAB 的符号微积分运算应用。全章共 4 节:5.1 节介绍

MATLAB 符号极限运算的应用;5.2 节介绍 MATLAB 符号函数微分运算的应用;

5.3 节介绍 MATLAB 符号函数积分计算的应用;5.4 节介绍函数的 Taylor 级数展开

式在近似计算中的应用。通过本章的介绍,使读者熟悉并掌握应用符号微积分运算

解算实际问题的能力。

5.1 M A T LA B 符号极限运算的应用

凡是应用高等数学知识的地方,都会涉及函数极限运算。函数极限运算的应用实在太多

太广泛了。本节仅就用函数极限定义几个高等数学的概念与几个物理学上的概念、用函数极

限定义狄拉克(Dirac)函数与函数极限运算在自动控制的几例应用等内容加以介绍。

5.1.1 用函数极限定义几个高等数学的概念

极限运算是微积分运算的基础。微积分的很多基本概念都是用极限运算定义的。在此,

仅举以下几例予以说明。

1. 无穷大与无穷小的概念

若对于每一个预先给定的任意大的正数 M,总存在着一个正数δ (或 N ),使得当一切 x

适合不等式 δ<−< 00 xx (或 Nx > )时,不等式

( ) Mxf >

能成立,则函数 ( )xf 叫做当 0xx → 或当 ∞→x 时的无穷大,记作

( )

( ) ∞=∞→

→xf

xxx

lim0

若对于每一个预先给定的任意小的正数 ε ,总存在着一个正数δ (或 N ),使得当一切 x 适

合不等式 δ<−< 00 xx (或 Nx > )时,不等式

( ) ε<xf

Page 193: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

181

能成立,则函数 ( )xf 叫做当 0xx → 或当 ∞→x 时的无穷小,记作

( )

( ) 0lim0

=∞→

→xf

xxx

2. 函数连续性的定义 设函数 ( )xf 在点 0x 的某一邻域内是有定义的,当 0xx → 时,函数 ( )xf 的极限存在,且

等于 0xx = 处的函数值 ( )0xf ,则称函数 ( )xf 在点 0x 或当 0xx = 时为连续的。即函数的连续

性的数学表达式为: ( ) ( )0lim

0

xfxfxx

=→

3. 函数间断点的定义 若函数 ( )xf :

(1) 在 0xx = 处没有定义;

(2) 虽在 0xx = 处有定义,但 ( )xfxx

lim0→

不存在;

(3) 虽 ( )xfxx

lim0→

存在,但 ( ) ( )0lim0

xfxfxx

≠→

这三种情况有一出现,则函数在点 0x 处为不连续,那么点 0x 叫做函数 ( )xf 的间断点或不连续

点。

4. 函数的导数的定义 如果函数 ( )xfy = 的增量 y∆ 与自变量的增量 x∆ 的比当 x∆ 趋近于 0 时的极限存在,即

( ) ( )x

xfxxf

x

y

xx ∆−∆+

=∆∆

→∆→∆

00

00limlim

存在,则这个极限值叫做函数在点 0x 的导数。

还有计算不定式的罗彼塔法则、定积分等等都是用函数的极限定义的。

5.1.2 用函数极限定义几个物理学的概念

1. 变速直线运动的瞬时速度 设质点在直线上运动时,在某一时刻 t 的位置是 x ,经过一段很短时间 t∆ 后,质点位置

为 +x x∆ ,则

t

x

t

xv

t d

dlim

0=

∆∆

=→∆

称这个极限值为质点在时刻 t 或位置 x 的瞬时速度。

2. 物体的比热 设使某一具有单位质量的物体从某一确定温度升高到温度τ 时所需的热量为 q 。一般来

说,q 为τ 的函数 ( )τfq = 。若该物体从τ 升高到 τ∆ 所需的热量为 q∆ ,当 0→∆τ 时 /q∆ τ∆

的极限叫做该物体在已给温度τ 时的比热 c :

ττ ∆∆=

→∆

qc lim

0

3. 物体的线密度

设想一直线按某确定规律被质量分布着,且直线段长度为 l ,该段质量为 m 。m 为 l 的函

数 ( )lfm = 。设长度 l 的一增量 l∆ ,对应着质量的增量 m∆ 。当 0→∆l 时 /m∆ l∆ 的极限叫

Page 194: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

182

做该直线在已给点的线密度:

l

m

l ∆∆

=→∆

lim0

δ

4. 导体的瞬时电流强度 设在某导体上任取一截面,如果在时间 t∆ 内,流过这个截面的电荷为 q∆ 。当 0→∆ t 时

/q∆ t∆ 的极限叫做该导体在此截面的瞬时电流强度:

t

qi

t ∆∆=

→∆lim

0

5.1.3 用函数极限定义狄拉克(Dirac)函数

设一分段函数

( )

>

≤≤

<

=

ε

εε

δ ε

t

t

t

t

,0

0,1

0,0

当 0→ε 时的极限,即

( ) ( )tt εε

δδ lim0→

=

叫做δ 函数或称为单位脉冲函数,即 Dirac 函数。

5.1.4 MATLAB 符号函数极限运算在自动控制领域的几例应用

符号函数极限运算在自动控制领域的应用也非常广泛。

1. Laplace 变换初值定理 根据积分变换理论 ( 请参见第 8 章 ),若函数 ( )tf 的 Laplace 变换式为 ( )sF ,即

( ) ( )[ ]tfLsF = ,则函数 ( )tf 在自变量 t 趋于零(从正向趋于零)时的初值为

( ) ( ) ( )ssFtffstlimlim0

0 ∞→→+ ==

+

式中 s 为 Laplace 算子(请参见第 8.2 节)。Laplace 变换初值定理对求解控制系统的原始状态很

有用。

2. Laplace 变换终值定理 根据积分变换理论,若函数 ( )tf 的 Laplace 变换为 ( )sF ,即 ( ) ( )[ ]tfLsF = ,则函数 ( )tf 在

自变量 t 趋于无穷大时的终值为 ( ) ( )ssFtf

stlimlim

0→∞→=

Laplace 变换终值定理对求解控制系统过渡过程结束后的稳态很有用。

3. 控制系统的稳态误差与稳态误差系数

计算控制系统的稳态误差是 Laplace 变换终值定理的一个应用实例。根据自动控制理论

与终值定理,若控制系统的误差函数 ( )te 的 Laplace 变换为 ( )sE ,即 ( ) ( )[ ]teLsE = ,则函数 ( )te

在自变量 t 趋于无穷大时的终值即稳态误差为 ( ) ( )ssEtee

stss limlim

0→∞→==

根据自动控制理论,有 3 个稳态误差系数,它们在自动控制领域里都是很重要的概念。

≤ ≤

Page 195: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

183

若 ( ) ( )sHsG 为控制系统的开环传递函数,那么:

(1) 静(稳)态位置误差系数定义为 ( ) ( )sHsGK

sp lim

0→=

(2) 静(稳)态速度误差系数定义为 ( ) ( )sHssGK

sv lim

0→=

(3) 静(稳)态加速度误差系数定义为

( ) ( )sHsGsKs

a2

0lim→

=

请注意 3 个定义式的微小差别。这些概念对求解控制系统的稳态精度必不可少。

4. 函数在其极点处的留数计算

根据复变函数的理论,函数在其极点处的留数可按以下公式计算: (1) 设 0z 是 ( )zf 的一阶极点,则

( )[ ] ( ) ( )zfzzzzfsRezz

00 lim,0

−=→

(2) 若 ( ) ( )( )zQ

zPzf = ,设 0z 是 ( )zf 的一阶极点,即 0z 是 ( )zQ 的一阶零点,而 ( ) 00 ≠zP ,

( )[ ] ( )( )0

00,

zQ

zPzzfsRe

′=

(3) 设 0z 是 ( )zf 的 m 阶极点,则

( )[ ] ( ) ( ) ( )[ ]zfzzzm

zzfsRe mm

m

zz01

1

0d

dlim

!1

1,

0

−−

=−

函数的留数计算用于将有理分式分解成部分分式的计算中,它是控制系统时域分析必不

可少的基本概念。请注意,控制系统传递函数的自变量为 s,可以用 s 代替以上各式中的 z 来

计算留数。

5. MATLAB 符号函数极限运算在自动控制领域的应用举例

【例 5-1】试计算以下稳定控制系统( 图 5-1)在单位斜坡输入信号作用下的稳态误差。

图 5-1 系统结构图

【解】

根据自动控制的基本原理,列写以下 MATLAB 程序来求解:

syms s t K;

r=t;R=laplace(r,t,s);

G=K*(0.5*s+1)/(s*(s+1)*(2*s+1));

PHIer=1/(1+G);E=PHIer*R;

ess=limit(s*E,s,0)

程序运行结果

Page 196: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

184

ess = 1/K

即系统在单位斜坡输入信号作用下的稳态误差为:K

ess1=

【例 5-2】已知系统结构如图 5-2 所示,设输入信号 ( ) 0Rtr = ,干扰信号 ( ) 0Ntn = 。

图 5-2 系统结构图

试计算该稳定控制系统当 ( ) 11 KsG = 与 ( )

+=

sTKsG

111

11 时的总稳态误差。

【解】

(1) 根据自动控制的基本原理,列写以下 MATLAB 程序来求解:

syms s t K1 K2 T2 R0 N0;

r=R0;n=N0;R=laplace(r,t,s);N=laplace(n,t,s);

G1=K1;G2=K2/(s*(T2*s+1));

PHIer=1/(1+G1*G2);PHIen=-G2/(1+G1*G2);

Eer=PHIer*R;Een=PHIen*N;E=Eer+Een;ess=limit(s*E,s,0)

程序运行结果

ess = -N0/K1

即控制系统的总稳态误差为:

1

0

K

Ness −=

(2) 当 ( )

+=

sTKsG

111

11 时系统结构如图 5-3 所示。

图 5-3 系统结构图

根据自动控制的基本原理,列写以下 MATLAB 程序来求解:

syms s t K1 K2 T1 T2 R0 N1;

r=R0;n=N1*t;R=laplace(r,t,s);N=laplace(n,t,s);

G1=K1*(1+1/(T1*s));G2=K2/(s*(T2*s+1));

PHIer=1/(1+G1*G2);PHIen=-G2/(1+G1*G2);

Eer=PHIer*R;Een=PHIen*N;E=Eer+Een;

ess=limit(s*E,s,0)

Page 197: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

185

程序运行结果

ess = -N1*T1/K1 即控制系统的总稳态误差为:

1

11

K

TNess −=

【例 5-3】将传递函数 ( )34

22 ++

+=ss

ssF 分解成部分分式,并求 ( )sF 的反变换。

【解】

(1) 用以下 MATLAB 语句求部分分式: ( )1334

2 212 +

++

=++

+=s

C

s

C

ss

ssF

syms s;

A=factor(s^2+4*s+3) 即

A = (s+3)*(s+1) 还有以下语句

syms t s C1 C2;

f=(s+2)/((s+1)*(s+3));

C2=limit((s+1)*f,s,-1)

C1=limit((s+3)*f,s,-3)

语句运行结果

C1 = 1/2

C2 = 1/2

即 ( )1

2/1

3

2/1

34

22 +

++

=++

+=ssss

ssF

(2) 用以下 MATLAB 语句求 ( )sF 的反变换:

syms s;

F=0.5/(s+3)+0.5/(s+1);

f=ilaplace(F)

语句运行结果

f = 1/2*exp(-3*t)+1/2*exp(-t)

即 ( ) tttf 3e2

1e

2

1 −− +=

5.2 M A T LA B 符号函数微分运算的应用

微分学是微积分的首要组成部分。它的基本概念是导数与微分,其中导数是曲线切线的

斜率,反应函数相对于自变量变化的速度;而微分则表明当自变量有微小变化时函数大体上

变化多少。

在 3.6 节介绍了符号函数微分的 MATLAB 实现。导数与微分运算的应用极为广泛:诸如

未定式( 00 ,1,0,,0,,0

0 ∞∞−∞∞⋅∞∞ ∞ )的求算(即罗彼塔法则)、函数单调增减性的判定、求函数的

Page 198: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

186

极值、求函数的最大值与最小值、函数曲线凹凸性的判定、确定函数曲线的拐点、求算曲线

的渐近线及求算方程的近似解等等。

5.2.1 MATLAB 符号函数极大值与极小值计算

在科学研究与工程技术的计算中,经常会有计算函数极值的问题:即在一定条件下,怎

样使“产品最多”、“效率最高”、“成本最低”、“能耗最省”、“用料最少”等等诸如此类的问

题,这就是求某一函数的极大或极小值问题。函数极值问题的解算,在科学研究与工程技术

中具有特别重要的意义与广泛的实用价值。

根据高等数学原理,解算这类问题时,首先要计算函数的一阶导函数;其次求解令一阶

导函数等于 0 的方程式,其根(自变量的值)就是函数取极值的条件;第三步判断函数取极大值

还是取极小值,即要计算函数的二阶导函数并判断其符号,二阶导函数小于 0 者取极大值,

大于 0 者取极小值;第四步将函数取极值的条件代入原函数,最后计算函数的极大值或极小

值。

函数极值的计算中,常常用到驻点的概念。高等数学中,凡使导数为零的点也就是

( ) 0=′ xf 的实根,叫做函数 ( )xf 的驻点。

函数极值计算的 MATLAB 实现,主要应用 MATLAB 符号微积分的函数命令,有时也要

配合使用 MATLAB 符号运算的其它函数命令,这些命令大多已在第 3 章里介绍过。

函数极大值与极小值的计算在实际的科学研究与工程技术中极为普遍与广泛,以下将举

些计算实例,来着重说明问题的数学分析与问题计算部分的 MATLAB 实现。

【例 5-4】根据感应电动机电磁转矩的公式

( )

′++

+

′=

221

22

11

221 /3

xxs

rr

srUnT

pe

ω

试计算感应电动机产生最大电磁转矩的临界转差率及其最大电磁转矩。

【解】

(1) 用以下 MATLAB 程序计算感应电动机临界转差率:

syms Te np U1 r2p s w1 r1 x1 x2p;

Te=3*np*U1^2*r2p/(s*w1*((r1+r2p/s)^2+(x1+x2p)^2));

dTeds=diff(Te,’s’);

sm=factor(solve(dTeds,’s’)) 程序运行结果

sm = [ 1/(r1^2+x1^2+2*x1*x2p+x2p^2)^(1/2)*r2p]

[ -1/(r1^2+x1^2+2*x1*x2p+x2p^2)^(1/2)*r2p]

即感应电动机临界转差率 ( )2

212

1

2

xxr

rsm

′++

′±=

(2) 用以下 MATLAB 程序判断电磁转矩极值取极大还是极小:

syms Te np U1 r2p s w1 r1 x1 x2p;

Te=3*np*U1^2*r2p/(s*w1*((r1+r2p/s)^2+(x1+x2p)^2)); dTeds=diff(Te,’s’);

Page 199: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

187

sm=1/(r1^2+x1^2+2*x1*x2p+x2p^2)^(1/2)*r2p;

ddTeds=diff(dTeds,’s’);

ddTeds=factor(simple(subs(ddTeds,’s’,sm))) 程序运行结果

ddTeds=-3/2*(r1^2+x1^2+2*x1*x2p+x2p^2)^(5/2)*np*U1^2/(r1^2+r1*(r1^2+x1^2+2*x1*x2p

+x2p^2)^(1/2)+x1^2+2*x1*x2p+x2p^2)^2/w1/r2p^2

即在 ms 处, eT 相对于 s 的二阶导函数为负,有( )

0d

d2

2

<s

sT me ,故电磁转矩 eT 取极大值。

(3) 用以下 MATLAB 程序计算感应电动机最大电磁转矩:

syms Te np U1 r2p s w1 r1 x1 x2p;

Te=3*np*U1^2*r2p/(s*w1*((r1+r2p/s)^2+(x1+x2p)^2));

sm=1/(r1^2+x1^2+2*x1*x2p+x2p^2)^(1/2)*r2p;

Temax=collect(simple(subs(Te,’s’,sm)),w1);

[n0,d0]=numden(Temax);

n=n0/((r1^2+x1^2+2*x1*x2p+x2p^2)^(1/2))

d=simple(d0/((r1^2+x1^2+2*x1*x2p+x2p^2)^(1/2)))

程序运行结果

n = 3*np*U1^2

d =

2*w1*(r1^2+r1*(r1^2+x1^2+2*x1*x2p+x2p^2)^(1/2)+x1^2+2*x1*x2p+x2p^2)/(r1^2+x1^2+2*

x1*x2p+x2p^2)^(1/2) 即有 2

13 Unn p=

( ) ( )

( )

( ) ( )

( )

( )

′+++=

′++

+′++′++

=

′++

′++′+++

=

221

2111

221

21

12

212

12

212

11

221

21

221

221

211

211

2

2

2

xxrr

xxr

rxxrxxr

xxr

xxxxrrrd

ω

ω

ω

也就是 ( )

′+++

=2

212

111

21

max

2

3

xxrr

UnT

pe

ω

【例 5-5】续【例 5-4】,一台三相六极异步电动机额定线电压 V380=NU ,同步转速

=1n min/r1000 ,额定转速 min/r975=Nn ,供电电源频率 Hz501 =f ,定子电阻 Ω= 08.21r ,

定子漏电抗 Ω= 12.31x ,转子电阻折合值 Ω=′ 53.12r ,转子漏电抗折合值 Ω=′ 25.42x ,试计

算该电动机的额定转差率 Ns 、额定转矩 eNT 、起动转矩 mN4991.31 ⋅=esT ;临界转差率 maxs

及其最大电磁转矩 maxeT 。

Page 200: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

188

【解】 (1) 根据电机拖动理论,用以下 MATLAB 程序计算电机极对数 pn 、供电电源角频率 1ω 与

电动机的额定转差率 Ns :

syms sN n1 nN omega1 f1 np;

sN=(n1-nN)/n1;omega1=2*pi*f1;np=60*f1/n1;

n1=1000;nN=975;f1=50;

np=subs(np,’[f1 n1]’,[f1 n1])

omega1=subs(omega1,’f1’,f1)

sN=subs(sN,’[n1 nN]’,[n1 nN]) 程序运行结果

np = 3

omega1 = 314.1593

sN = 0.0250

即 360

1

1 ==n

fn p ; rad/s1593.3142 11 =π= fω ; 025.0

1

1 =−

=n

nns N

N

(2) 根据电机拖动理论,用以下 MATLAB 程序计算额定转矩 eNT 、起动转矩 esT 、临界转

差率 maxs 及电动机的最大电磁转矩 maxeT :

syms Te np U1 r2p s w1 r1 x1 x2p;

Te=3*np*U1^2*r2p/(s*w1*((r1+r2p/s)^2+(x1+x2p)^2));

U1=220;np=3;r2p=1.53;r1=2.08;x1=3.12;x2p=4.25;w1=2*pi*50;

Te=subs(Te,’[U1 np r2p r1 x1 x2p w1]’,[U1 np r2p r1 x1 x2p w1]);

dTeds=diff(Te,’s’);

sm=solve(dTeds,’s’);sm=simple(sm);

digits(4);smax=vpa(sm)

sn=0.025;ss=1;

Ten=subs(Te,’s’,sn)

Tes=subs(Te,’s’,ss)

Temax=subs(Te,’s’,smax);Temax=vpa(Temax)

程序运行结果

smax = [ .1998]

[ -.1998]

Ten = 20.9076

Tes = 31.4991

Temax = [ 71.17]

[ -124.3] 即电动机的额定转差率 025.0=Ns ;额定转矩 mN9076.20 ⋅=eNT ;起动转矩 mN4991.31 ⋅=esT ;

电动机的临界转差率 1998.0max =s 及电动机的最大电磁转矩 mN17.71max ⋅=eT 。

【例 5-6】如图 5-4 所示。将边长为 a 的正方铁板于各角截去边长相等的小正方块,然后

做成体积 V 最大的无盖箱。试计算所截去的小正方块边长 x 等于多少?无盖箱最大体积是

多少?

Page 201: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

189

图 5-4 正方铁板各角截去小正方块

【解】

(1) 写出无盖箱的数学表达式

见图 5-4,正方铁板边长为 a,四角截去边长为 x 的小正方块, 然后做成无盖箱。其体积

V 为:

( ) xxaV 22−=

式中 x 的取值区间则为:

2,0a

。于是问题成为求这个函数 V 在该区间上的最大值。

(2) 求函数 V 对自变量 x 的一阶导函数

( ) ( ) ( )( )xaxaxaxaxaxxax

VV 62128242

d

d 222 −−=+−=−−−==′

函数 V 在该区间

2,0a

内只有一个驻点6

ax = 。根据函数极值理论,函数 V 取最大值还

是取极小值,须判断二阶导函数的符号。

(3) 求函数 V 对自变量 x 的二阶导函数

( ) xaxaxaV 248128 22 +−=′+−=′′

当6

ax = 时, a

aaxaV 4

6248248 −=×+−=+−=′′ <0,所以函数 V 取最大值:

( )27

2

66

22

32

6

2max

aaaaxxaV a

x=×

−=−= =

(4) 以上求解过程可以改为运行以下 MATLAB 程序段来实现:

syms V a x

V=(a-2*x)^2*x;dV0=diff(V,’x’);

dV=factor(collect(dV0,’x’));

ddV=diff(dV,’x’)

x=solve(dV,’x’)

程序运行结果

ddV = 24*x-8*a

x = [ 1/6*a]

[ 1/2*a]

还得运行以下 MATLAB 语句判断极大还是极小:

syms V a x;

Page 202: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

190

ddV=24*x-8*a;x=a/6;

ddV=subs(ddV,’x’,x) 语句执行结果

ddV = -4*a 由结果可知,铁板边长 0>a ,那么 04 <− a ,故函数取极大值。

最后运行以下 MATLAB 程序求无盖箱最大体积:

syms V a x;

V=(a-2*x)^2*x;x=1/6*a;

Vmax=subs(V,’x’,x)

程序运行结果

Vmax = 2/27*a^3

即当截去小正方块边长 ax6

1= (舍弃 ax2

1= )时,无盖箱最大体积为:

3max 27

2aV =

(5) 实算举例。当 cm18=a 时,试计算截去的正方块边长 x 与无盖箱最大体积 maxV 。为

解算实例,可运行以下 MATLAB 程序段:

syms V a x;

V=(a-2*x)^2*x; a=18;

V1=subs(V,’a’,a);x=1/6*a;

Vmax=subs(V1,’x’,x)

语句运行结果

Vmax = 432 即当 cm18=a 时,截去的正方块边长 cm3=x ,无盖箱的最大体积 3

max cm432=V 。

【例 5-7】把一直径为 d 的圆木锯成截面为矩形的梁。试计算使梁的抗弯截面模量W 为最大

的矩形截面的高 h 与宽 b 以及抗弯截面模量W 的最大值。

图 5-5 直径为 d 的圆木锯成矩形截面梁

【解】

(1) 由图 5-5 与材料力学原理,有以下数学关系式成立: 222 bdh −=

梁的抗弯截面模量: ( )322

6

1

6

1bbdbhW −== , ( )22 3

6

1

d

dbd

b

W −= 。当 0d

d =b

W时,则得驻

点 db3

1= 。有 222222

3

2

3

1dddbdh =−=−= ,得 dh

3

2= 。

Page 203: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

191

而( )

0d

d2

02

<−= bb

bW,所以函数梁的抗弯截面模量W 取最大值。

(2) 以上求解过程可以改为运行以下 MATLAB 程序来实现:

syms W d b;

W=(d^2*b-b^3)/6;

dW0=diff(W,’b’);

dW=collect(dW0)

b=solve(dW,’b’)

h0=collect(sqrt(d^2-d^2/3));

h=simple(h0)

程序运行结果

dW = 1/6*d^2-1/2*b^2

b = [ 1/3*3^(1/2)*d]

[ -1/3*3^(1/2)*d]

h = 1/3*2^(1/2)*3^(1/2)*d 即使梁的抗弯截面模量取极值的矩形截面的宽 b (舍去负根)与高 h 应取:

db3

1= ; dh3

2=

(3) 用以下 MATLAB 程序来判断函数W 取极大还是极小:

syms W d b;

W=(d^2*b-b^3)/6;

dWdb=diff(W,’b’);

ddWdb=diff(dWdb,’b’)

b=1/3*3^(1/2)*d;

Wmax=subs(W,’b’,b) 程序运行结果

ddWdb = -b

Wmax = 1/27*d^3*3^(1/2)

即( )

0d

d2

02

<−= bb

bW,所以函数W 取最大值: 3

max 27

3dW = 。

【例 5-8】露天水沟的横断面为等腰梯形,若水沟中水流横断面面积等于 S ,水面高度为 h ,

问水沟侧面的倾角ϕ 为多大时,才能使横断面被水浸没部分为最小?

【解】

(1) 数学分析

图 5-6 露天水沟的横断面

Page 204: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

192

设 lAB = ,则 ϕcot2hlCD += 。还有 ( ) hhlS ϕcot+= 。

设被水浸没部分即水接触沟的底部与侧面的总长度为 W ,即ϕsin

2hlW += 。于是

ϕϕ

sin

2cot

hh

h

SW +−= ,计算得

ϕd

dW

−=

ϕϕ

ϕ 22 sin

cos2

sin

1h 。由 0

d

d =ϕW

,可得3

π=ϕ 。

而( )

03

4

d

d 32

02

>= hW

ϕϕ

,3

π=ϕ 为W 的极小点。

故 hh

SW 3

3+=

π

为最小湿周。

(2) 用以下 MATLAB 语句计算使横断面被水浸没部分为极值长度的条件:

syms S h phi;

W=S/h-h*cot(phi)+2*h/sin(phi);

dWdp=diff(W,’phi’);

phi=solve(dWdp,’phi’)

语句执行结果

phi = [ 1/3*pi]

[ -1/3*pi]

即取极值长度的条件为3

π=ϕ 。

(3) 用以下 MATLAB 语句计算横断面被水浸没部分的极值长度:

syms S h phi;

W=S/h-h*cot(phi)+2*h/sin(phi);

phi=1/3*pi;

W=subs(W,’phi’,phi)

语句执行结果

W = S/h+h*3^(1/2)

即被水浸没部分的极值长度为 hh

SW 3

3+=

π

(4) 用以下 MATLAB 程序计算极值长度取极大值还是极小值:

syms S h phi;

W=S/h-h*cot(phi)+2*h/sin(phi);dWdp=diff(W,’phi’);

phi=pi/3;ddWdp=simple(diff(dWdp,’phi’));

ddWdp=subs(ddWdp,’phi’,phi) 程序运行结果

ddWdp = 4/3*h*3^(1/2)

即( )

03

4

d

d 32

02

>= hW

ϕϕ

,极值长度应取极小值,即最小湿周 hh

SW 3

3+=

π

【例 5-9】灯光的亮度与光线投射角的余弦成正比,与光源距离的平方成反比,而投射角是经

过灯所作垂直于地面的直线与光线所夹的角。在一半径为 R 的圆形广场中心挂一灯,问要挂

多高,才能使广场周围的路上照得最亮?

Page 205: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

193

图 5-7 灯光照射示意图

【解】

(1) 数学分析

设灯位于 P 点,离地面的高度为 H 。根据光学原理,广场周围的路上灯光的亮度应为

2

cos

d

k θΓ = , ( 0>k ) 。 因 22 HRd += ,22

cosHR

H

+=θ , 所 以

( )2

322 HR

kH

+=Γ

( +∞<< H0 ) 。 而

( )2

522

22 2)(

HR

HRkH

+

−=′Γ , 故 Γ 在 ( ∞+,0 ) 内 的 驻 点 为 RH2

2= 。 而

( ) 027

31640 <−=′′

R

kHΓ ,可知 Γ 在此驻点处取最大值。因此当灯的高度为 R

2

2时,广场周围

路上才能照得最亮。

(2) 用以下 MATLAB 程序计算灯光的亮度取极值的条件:

syms k d x GAMA R H theta;

GAMA=k*theta/(d^2);

d=sqrt(R^2+H^2);theta=H/sqrt(R^2+H^2);

GAMA=subs(GAMA,’[d theta]’,[d theta]);

dGdH=diff(GAMA,’H’);H=solve(dGdH,’H’)

GAMA=simple(subs(GAMA,’H’,H)) 程序运行结果

H = [ 1/2*2^(1/2)*R]

[ -1/2*2^(1/2)*R]

GAMA = [ 2/9*k*3^(1/2)/R^2]

[ -2/9*k*3^(1/2)/R^2]

即灯光的亮度取极值的条件为: RH2

2= ,而灯光的亮度取极值:29

32

R

k=Γ 。

(3) 用以下 MATLAB 程序计算灯光亮度极值取极大值还是极小值:

syms k d x GAMA R H theta;

GAMA=k*theta/(d^2);d=sqrt(R^2+H^2);

theta=H/sqrt(R^2+H^2);

GAMA=subs(GAMA,’[d theta]’,[d theta]);

dGdH=diff(GAMA,’H’);H=1/2*2^(1/2)*R;

ddGdH=diff(dGdH,’H’);

ddGdH=simple(subs(ddGdH,’H’,H))

Page 206: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

194

程序运行结果

ddGdH = -16/27*k*3^(1/2)/R^4

即 ( )40

27

316

R

kH −=′′Γ 。 因为 0>k , 0>R , 故 ( ) 0

27

31640 <−=′′

R

kHΓ 。 即 函数 取 极大 值

2max9

32

R

k=Γ 。

【例 5-10】设输电线的参数为 111 j xrZ += ,其起端维持电压有效值 1U 为恒定。负载阻抗为

222 j xrZ += 。试分别计算:①当负载阻抗 2z 调变时获得输电线最大输出功率的条件及最大功率

的数值;②当负载电抗 2x 调变时获得输电线最大输出功率的条件及最大功率的数值;③在第②计

算结果的条件下,再调变负载电阻 2r 时获得输电线最大输出功率的条件及最大功率的数值。

【解】

(1) 数学分析

根据电工学原理,线路中的电流有效值为

( ) ( )221

221

1

xxrr

UI

+++=

负载所得的功率为

( ) ( )2212

21

221

22

2xxrr

rUrIP

+++==

当 负 载 的 功 率 因 数 2cosϕ 不 变 , 则 111 cosϕzr = , 111 sinϕzx = , 222 cosϕzr = ,

222 sinϕzx = ,那么

( )12121222

21

2221

2sinsincoscos2

cos

ϕϕϕϕϕ

+++=

zzzz

zUP

( )21122

21

221

cos2

cos

ϕϕ

ϕ

−++=

zzz

z

U

当 2P 为极大时,上式分母为极小,故分母对 2z 的导函数应等于零,即

0122

21 =+−

z

z或 12 zz =

即当负载阻抗 2z 与线路阻抗 1z 数值相等时可在输电线终端得到最大功率 :

( )[ ]211

221

max2 cos12

cos

ϕϕϕ

−+=

z

UP

(2) 当负载阻抗 2z 调变时:① 用以下 MATLAB 程序计算获得输电线输出极值功率的条件:

syms z1 z2 r1 r2 x1 x2 U1 phi1 phi2;

Ai=U1/sqrt((r1+r2)^2+(x1+x2)^2);

r1=z1*cos(phi1);x1=z1*sin(phi1);

r2=z2*cos(phi2);x2=z2*sin(phi2);

P20=Ai^2*r2;P2=subs(P20,’[r1 x1 r2 x2]’,[r1 x1 r2 x2]);

Page 207: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

195

[n,d]=numden(P2);nz2=n/z2;

dz2=factor(simple(d/z2));ddz2=diff(dz2,’z2’);

z2=factor(collect(simple(solve(ddz2,’z2’)),’z1’))

P2max=simple(subs(P2,’z2’,z2)) 程序运行结果

z2 = [ z1]

[ -z1]

即输电线最大输出功率的条件为驻点

12 zz =

② 用以下 MATLAB 程序计算极值功率取极大值还是极小值:

syms z1 z2 r1 r2 x1 x2 U1 phi1 phi2;

Ai=U1/sqrt((r1+r2)^2+(x1+x2)^2);

r1=z1*cos(phi1);x1=z1*sin(phi1);

r2=z2*cos(phi2);x2=z2*sin(phi2);

P20=Ai^2*r2;

P2=simple(subs(P20,’[r1 x1 r2 x2]’,[r1 x1 r2 x2]));

dP2dz2=simple(diff(P2,’z2’));z2=z1;

ddP2dz2=simple(diff(dP2dz2,’z2’));

ddP2dz2=subs(ddP2dz2,’z2’,z2)

程序运行结果

ddP2dz2=-2*U1^2*cos(phi2)*(2*z1^3+2*z1^3*cos(phi1-phi2))/(2*z1^2+2*z1^2*cos(phi1-

phi2))^3

即在一般线路情况下, ( ) 0cos 2 >ϕ , ( ) 0cos 21 >− ϕϕ ,( )

0d

d22

2022

<z

zP,所以极值功率取极大

值。

③ 用以下 MATLAB 程序计算最大功率值:

syms z1 z2 r1 r2 x1 x2 U1 phi1 phi2;

Ai=U1/sqrt((r1+r2)^2+(x1+x2)^2);

r1=z1*cos(phi1);x1=z1*sin(phi1);

r2=z2*cos(phi2);x2=z2*sin(phi2);

P20=Ai^2*r2;P2=subs(P20,’[r1 x1 r2 x2]’,[r1 x1 r2 x2]);

z2=z1;P2max=simple(subs(P2,’z2’,z2)) 程序运行结果

P2max = U1^2*cos(phi2)/(2*z1+2*z1*cos(phi1-phi2)) 即最大功率值为

( )[ ]211

221

max2 cos12

cos

ϕϕϕ

−+=

z

UP

(3) 当负载电抗 2x 调变时:①用以下 MATLAB 程序计算获得输电线最大输出功率的条件

及最大功率的数值:

Page 208: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

196

syms z1 z2 r1 r2 x1 x2 U1 phi1 phi2;

Ai=U1/sqrt((r1+r2)^2+(x1+x2)^2);P2=Ai^2*r2;

[n,d]=numden(P2);dx2=diff(d,’x2’);

x2=factor(collect(simple(solve(dx2,’x2’)),’x1’))

P2max=simple(subs(P2,’x2’,x2))

程序运行结果

x2 = -x1

P2max = U1^2*r2/(r1+r2)^2 即输电线最大输出功率的条件为

12 xx −=

与最大功率值为

( )221

221

max2rr

rUP

+=

② 在 12 xx −= 的条件下,再调变负载电阻 2r 时用以下 MATLAB 程序计算获得输电线最

大输出功率的条件:

syms r1 r2 x1 x2 U1;

P2=U1^2*r2/(r1+r2)^2;

[n,d]=numden(P2);nr2=n/r2;dr2=d/r2;

ddr2=diff(dr2,’r2’);

r2=factor(collect(simple(solve(ddr2,’r2’)),’r1’))

程序运行结果

r2 = [ -r1]

[ r1] 即输电线最大输出功率的条件为驻点: 12 rr =

③ 用以下 MATLAB 程序计算获得输电线最大输出功率值:

syms r1 r2 positive;

P2=U1^2*r2/(r1+r2)^2;

r2=r1;P2max=simple(subs(P2,’r2’,r2))

程序运行结果

P2max = 1/4*U1^2/r1

即最大功率值为:

1

21

max2 4r

UP =

5.2.2 函数曲线上某点斜率计算的应用

函数曲线上的不同点有不同的曲线斜率。在科学研究的理论分析与工程技术的准确计算

上,有时还必须计算函数曲线上不同点的曲线斜率,例如函数曲线的起始点、某特定点的斜

率等等。这在科学与技术领域中也具有非常重要的意义。例如自动控制中,一阶系统给定单

位阶跃响应曲线的次割距概念就是从这里引出的。

Page 209: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

197

【例 5-11】已知自动控制一阶系统给定单位阶跃响应为

( ) tTth1

e1−

−=

试计算响应曲线起始 0=t 时的斜率与 Tt = 时的斜率。

【解】

用以下 MATLAB 程序来计算:

syms t T;

h=1-exp(-t/T);

dhdt=diff(h,’t’)

t=0;dhdt0=subs(dhdt,’t’,t)

t=T;dhdtT=subs(dhdt,’t’,t) 程序运行结果

dhdt = 1/T*exp(-t/T)

dhdt0 = 1/T

dhdtT = 1/T*exp(-1)

即( ) t

T

Tt

th1

e1

d

d −= ,

( )TTt

tht

tT 1

e1

d

0d0

1

====

−,

( ) 11

e1

e1

d

d −=

−===

TTt

TthTt

tT 。

曲线起始斜率说明,一阶系统的给定单位阶跃响应如果以初始速度等速上升至稳态值 1所需要的时间应为 T ;如果从曲线的 ( )Th 点(高度为 0.632)以 Tt = 时的曲线斜率等速上升至

1(即上升相对高度 368.0e 1 =− )时所需要的时间也为T 。

【例 5-12】过一阶系统给定单位阶跃响应曲线(图 5-8)上的任意一点 A 作曲线的切线,延长之

交稳态值线于 B ,两点 A 、 B 对应的时间差 ( )ctt BA =− 叫做响应的次割距。试证明自动控制

一阶系统给定单位阶跃响应曲线上任意点的次割距 c 都相等,且等于T ( )Tc = 。

图 5-8 一阶系统响应的次割距

【解】

(1) 根据自动控制理论与图 5-8 ,有一阶系统给定单位阶跃响应: ( ) tTth1

e1−

−= ,次割距

BA ttc −= 。取时刻 Att = ,有 ( ) AtT

Ath1

e1−

−= 与

( ) A

AA

tT

tt

tT

tt TTt

thh

11

e1

e1

d

d −=

−= ===′

Page 210: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

198

根据导数的几何意义有( ) ( )

Att

A

t

th

c

th

==

−d

d1,则

( )( ) T

Tt

th

thc

A

A

A

tT

tT

tt

A =

−−

=−

=−

=

1

1

e1

e11

d

d

1。

(2) 运行以下 MATLAB 程序来实现以上的解算过程:

syms t T tA

h=1-exp(-t/T);

dh=diff(h,’t’)

t=tA;htA=subs(h,’t’,t)

dhdtA=subs(dh,’t’,t)

c=(1-htA)/dhdtA 程序运行结果

dh = 1/T*exp(-t/T)

htA = 1-exp(-tA/T)

dhdtA = 1/T*exp(-tA/T)

c = T

即次割距相等且等于T 。

顺便指出,当一个控制系统的模型未知时,可以对系统输入单位阶跃信号,通过实验测

得响应曲线来确定控制系统的数学模型,这便是自动控制系统的模型辨识。若该系统为一阶

系统,则通过实验,测量单位阶跃响应曲线上任意点的次割距,它们都应相等且为 T 。这种

方法较其它方法测量的精确度都高。

5.2.3 函数曲线单调增减性判断

应用函数 ( )xf 的导数 ( )xf ′ 在某区间的正负号便可判定函数曲线是单调增加或是单调减

少。从几何意义上来说,导数是函数图形上某点切线的斜率。当斜率为正时,切线上升,曲

线随之上升;当斜率为负时,切线下降,曲线随之下降。在个别点处,曲线切线可能是水平

的,即导数为零。 根据高等数学原理,一个函数 ( )xf 的导数若在某区间上是正的即 ( ) 0>′ xf ,则函数在该

区间上单调增加;若导数在某区间上是负的即 ( ) 0<′ xf ,则函数在该区间上单调减少。

需要指出的是,在函数曲线单调增减性判断的实际过程中,通常先绘制出函数曲线图像;

其次,解方程 ( ) 0=′ xf 求出函数的极值点,从而将函数划分成多个区间;最后,对每个区间

设定某个值 0x ,用 ( ) 00 >′ xf 或 ( ) 00 <′ xf 来判断函数在该区间上单调增加还是单调减少。请

看以下示例。

【例 5-13】求函数 ( ) 31292 23 −+−= xxxxf 的单调增减区间以及判断各区间的单调增减

性。

【解】

(1) 用以下 MATLAB 语句来绘制函数图像:

syms x f;

f=2*x^3-9*x^2+12*x-3;

Page 211: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

199

ezplot(f,[0 3]) 语句执行后绘制出函数 ( )xf 图像如图 5-9 所示。

0 0 . 5 1 1 . 5 2 2 . 5 3

-1

0

1

2

3

4

x

2 x 3 -9 x 2 + 1 2 x -3

图 5-9 函数 ( ) 31292 23 −+−= xxxxf 的图像

(2) 用以下 MATLAB 语句来计算函数极值点:

syms x f;

f=2*x^3-9*x^2+12*x-3;

dfdx=factor(diff(f,’x’));

x=solve(dfdx,’x’) 语句执行结果

x = [ 1]

[ 2] 即函数在 1=x 与 2=x 处为极值点(参看图 5-9 函数 ( )xf 图像),于是需要在 3 个区间即

( )1<<∞− x 、 ( )21 << x 、 ( )∞<< x2 内判断各区间的单调增减性。

(3) 用以下 MATLAB 语句来判断各区间的单调增减性:

syms x f;

f=2*x^3-9*x^2+12*x-3;dfdx=diff(f,’x’);

x1=0;dfdxx1=subs(dfdx,’x’,x1)

x2=1.5;dfdxx2=subs(dfdx,’x’,x2)

x3=3;dfdxx3=subs(dfdx,’x’,x3) 语句执行结果

dfdxx1 = 12

dfdxx2 = -1.5000

dfdxx3 = 12 即在 ( )1<<∞− x 内, ( ) 0120 >==′ xf ,则函数在该区间内单调增加;在 ( )21 << x 内,

( ) 05.15.1 <−==′ xf ,则函数在该区间内单调减少;在 ( )∞<< x2 内, ( ) 0123 >==′ xf ,则

函数在该区间内单调增加。

Page 212: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

200

5.2.4 函数曲线凹凸性判定与拐点计算

若在某区间上一个可微分的函数所表示的曲线弧位于每一点的切线之上方,则此曲线弧

叫做在该区间向上凹;若曲线弧位于每一点的切线之下方,则此曲线弧叫做在该区间向下凹

(或叫做向上凸)。函数曲线向上凹与向下凹两曲线弧的分界点叫做拐点。 根据以上函数曲线凹凸性的定义,其实际的判定方法是:一个函数 ( )xf 的二阶导数在某

区间内是正的即 ( ) 0>′′ xf ,则函数所表示的曲线弧在该区间向上凹;若二阶导数在某区间内

是负的即 ( ) 0<′′ xf ,则函数所表示的曲线弧在该区间向下凹。

根据以上拐点的定义,有以下的拐点判定定理:若函数 ( )xf 在 0x 具有二阶导数,点

( )( )00 , xfx 为拐点的必要条件是 ( ) 00 =′′ xf ;其充分条件是当 x 渐增地经过 0x 时, ( )xf ′′ 改变

符号。请看以下示例。

【例 5-14】求函数 ( ) 143 34 +−= xxxf 的拐点,并判断各区间的凹凸性。

【解】

(1) 用以下 MATLAB 语句来绘制函数图像:

syms x f;

f=3*x^4-4*x^3+1;

ezplot(f,[-1 1.5]) 语句执行后绘制出函数 ( )xf 图像如图 5-10 所示。

图 5-10 函数 ( ) 143 34 +−= xxxf 的图像

(2) 用以下 MATLAB 语句来计算拐点的必要条件:

syms x f;

f=3*x^4-4*x^3+1;

ddfdx=diff(diff(f,’x’),’x’);

x=solve(ddfdx,’x’)

Page 213: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

201

语句执行结果

x = [ 0]

[ 2/3] 即函数在 0=x 与 3/2=x 处可能为拐点(参看图 5-10 函数 ( )xf 图像),于是需要在 3 个区间即

( )0<<∞− x 、 ( )3/20 << x 、 ( )∞<< x3/2 内判断各区间函数曲线的凹凸性。

(3) 用以下 MATLAB 语句来计算拐点的充分条件:

syms x f;

f=3*x^4-4*x^3+1;ddfdx=diff(diff(f,’x’),’x’);

x1=-1;ddfdxx1=subs(ddfdx,’x’,x1)

x2=1/4;ddfdxx2=subs(ddfdx,’x’,x2)

x3=1;ddfdxx3=subs(ddfdx,’x’,x3) 语句执行结果

ddfdxx1 = 60

ddfdxx2 = -3.7500

ddfdxx3 = 12 即在 ( )0<<∞− x 内, ( ) 0601 >=−=′′ xf ,则函数曲线弧在该区间内向上凹;在 )3/20( << x

内 , ( ) 075.325.0 <−==′′ xf , 则 函 数 曲 线 弧 在 该 区 间 内 向 下 凹 ; 在 ( )∞<< x3/2 内 ,

( ) 0121 >==′′ xf ,则函数曲线弧在该区间内向上凹。这样,函数在 0=x 与 3/2=x 处确实为

拐点。

【例 5-15】已知二阶系统过阻尼时的单位阶跃响应为:

( )t

T

TTth 1

1

12

e1/

11

−+=

tT

TT2

1

21

e1/

1 −

−+

试计算响应曲线当 sT 1.01 = 与 sT 2.02 = 时的拐点。

【解】

(1) 用以下 MATLAB 语句来绘制函数图像:

syms t T1 T2 h;

h=1+exp(-t/T1)/(T2/T1-1)+exp(-t/T2)/(T1/T2-1);

T1=0.1;T2=0.2;h=subs(h,’[T1 T2]’,[T1 T2]);

ezplot(h,[0 1.2]) 语句执行后绘制出函数 ( )xf 图像如图 5-11 所示。

(2) 用以下 MATLAB 语句来计算拐点的必要条件:

syms t T1 T2 h;

h=1+exp(-t/T1)/(T2/T1-1)+exp(-t/T2)/(T1/T2-1);

T1=0.1;T2=0.2;h=subs(h,’[T1 T2]’,[T1 T2]);

ddhdt=diff(diff(h,’t’),’t’);t=solve(ddhdt,’t’) 语句执行结果

t = 1/5*log(2) 即函数在 5/2ln=t 处可能为拐点(参看图 5-11 函数 ( )xf 图像 ),于是需要在两个区间即

( )5/2ln0 << t 、 ( )∞<< t5/2ln 内判断各区间函数曲线的凹凸性。

Page 214: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

202

0 0 . 2 0 . 4 0 . 6 0 . 8 1 1 . 2

0

0 . 1

0 . 2

0 . 3

0 . 4

0 . 5

0 . 6

0 . 7

0 . 8

0 . 9

1

t

1 + e x p ( - 1 0 t ) - 2 e x p ( - 5 t )

图 5-11 二阶系统过阻尼时的单位阶跃响应曲线

(3) 用以下 MATLAB 语句来计算拐点的充分条件:

syms t T1 T2 h;

h=1+exp(-t/T1)/(T2/T1-1)+exp(-t/T2)/(T1/T2-1);

T1=0.1;T2=0.2;

h=subs(h,’[T1 T2]’,[T1 T2]);

ddhdt=diff(diff(h,’t’),’t’);

t1=log(2)/6;

ddhdtt1=subs(ddhdt,’t’,t1)

t2=log(2)/4;

ddhdtt2=subs(ddhdt,’t’,t2) 语句执行结果

ddhdtt1 = 3.4365

ddhdtt2 = -3.3447 即在 ( )5/2ln0 << t 内, ( ) 04365.36/2ln >==′′ th ,则函数曲线弧在该区间内向上凹;在

( )∞<< t5/2ln 内, ( ) 03447.34/2ln <−==′′ th ,则函数曲线弧在该区间内向下凹;这样,函

数在 5/2ln=t 处的点确实为拐点。

5.3 M A T LA B 符号函数积分计算的应用

以微积分为主要内容的高等数学,在高等教育中起着奠基的作用。微积分运算的应用十

分广泛。在 3.6 节介绍了符号积分运算的 MATLAB 实现,本节介绍符号函数积分运算应用的

MATLAB 实现。

Newton-Leibnitz(牛顿-莱布尼兹)公式说明定积分就是不定积分的一个应用。函数积分计

算的应用主要是定积分计算在科学研究与工程技术各个方面的应用。这里就平面图形的面积

计算、立体的体积计算、平面曲线的弧长计算、 积分在物理学与力学上的几例应用、 函数

的平均值与均方根值的计算、晶闸管整流输出电压的计算等几个内容作介绍。

5.3.1 平面图形面积的计算

一般说来,定积分 ( )∫b

axxf d 的几何意义是介于 x 轴,函数 ( )xf (假定 ( ) 0>xf )的图形及

Page 215: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

203

纵线 ax = , bx = 之间各部分的代数和(图 5-12)。在 x 轴之上的面积取正号,在 x 轴之下的面

积取负号。Newton-Leibnitz(牛顿-莱布尼兹)公式解决了通过计算不定积分即求原函数来计算

定积分的方法,即

( ) ( ) ( )∫ −==b

aaFbFxxfS d (5-1)

图 5-12 定积分 ( )∫b

axxf d 的几何意义

设在区间 [ ]ba, 上曲线 ( )xfy = 位于 ( )xgy = 之上方(图 5-13 ),则这两条曲线与直线 ax = ,

bx = 所包围的面积为

( ) ( )[ ]∫ −=b

axxgxfS d (5-2)

根据函数定积分的几何意义,很容易计算平面图形的面积,即有

( ) ( )∫∫ −=b

a

b

axxgxxfS dd ( ) ( )[ ]∫ −=

b

axxgxf d (5-3)

有时平面图形的边界曲线方程是 x 为 y 的单值函数,这样,介于曲线 ( )yx ϕ= (假定

( ) 0>yϕ )与直线 cy = , dy = ( dc < )及轴 y 之间的曲边梯形的面积是定积分

( )∫=d

cyyS dϕ (5-4)

类似于公式(2)有

( ) ( )[ ]∫ −=d

cyyyS dψϕ (5-5)

来计算介于两条曲线 ( )yx ϕ= 、 ( )yx ψ= 与两条直线 cy = 、 dy = 之间的平面图形的面积(图

5-14 )。

图 5-13 定积分 ( ) ( )[ ]∫ −b

axxgxf d 的几何意义 图 5-14 定积分 ( ) ( )[ ]∫ −

d

cyyy dψϕ 的几何意义

对于采用极坐标的函数,计算介于极坐标方程 ( )θrr = 所表示的曲线与矢径 αθ = ,

βθ = ( βα < )之间的面积为

( )∫ ∫==β

α

β

αθθθ d

2

1d

2

1 22 rrS (5-6)

Page 216: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

204

【例 5-16】求位于抛物线 yax 42 = 与箕舌线22

3

4

8

ax

ay

+= ( 0>a )之间包围的面积。

【解】

(1) 用以下 MATLAB 语句来绘制函数图像:

syms x a y;

y=x^2/(4*a);a=1;y=subs(y,’a’,a);ezplot(y,[-8 8]);hold on

y=8*a^3/(x^2+4*a^2);y=subs(y,’a’,a);ezplot(y,[-8 8])

语句执行后绘制出两曲线的图像如图 5-15 所示。

(2) 用以下 MATLAB 语句来计算直线 xy 2= 与曲线 2xy = 的交点:

syms a x y;

[x,y]=solve(’y=x^2/(4*a)’,’y=8*a^3/(x^2+4*a^2)’)

语句执行结果

x = [ -2*a]

[ 2*a]

[ 2*i*2^(1/2)*a]

[ -2*i*2^(1/2)*a]

y = [ a]

[ a]

[ -2*a]

[ -2*a] 即直线与曲线的交点(舍去复数根取实根)分别为 ( )aa,2− 与 ( )aa,2 。

图 5-15 抛物线 yax 42 = 与箕舌线22

3

4

8

ax

ay

+= 的图像

(3) 根据公式(5-3)用以下 MATLAB 语句来计算抛物线与箕舌线间的面积:

syms y1 y2 x a y;

y1=8*a^3/(x^2+4*a^2);y2=x^2/(4*a);y=y1-y2;

S=factor(simple(int(y,x,-2*a,2*a)))

语句执行结果

S = 2/3*a^2*(3*pi-2)

即抛物线 yax 42 = 与箕舌线22

3

4

8

ax

ay

+= 之间包围的面积为 ( )23

3

2 2 −π= aS 。

Page 217: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

205

【例 5-17】求双纽线 θ2cos22 ar = 围成的全面积。

【解】

(1) 用以下 MATLAB 语句来绘制函数图像:

a=1;theta=0:0.1:2*pi;r=a^2*sqrt(cos(2*theta));

polar(theta,r) 语句执行后绘制出双纽线的图像如图 5-16 所示。

0.2

0.4

0.6

0.8

1

30

210

60

240

90

270

120

300

150

330

180 0

图 5-16 双纽线的图像

(2) 根据公式(5-6)用以下 MATLAB 语句来计算双纽线围成的全面积:

syms a theta;

r=a*sqrt(cos(2*theta));f=r^2;S=4*int(f,theta,0,pi/4)/2

语句执行结果

S = a^2

即双纽线 θ2cos22 ar = 围成的全面积为 2aS = 。

5.3.2 立体体积的计算

立体体积的定积分计算一般分两类:一类是平行截面面积为已知的立体的体积计算,另

一类是旋转体的体积计算。

1. 第一类 当垂直于 x 轴而以 x 为横坐标的截面面积 ( )xS 为已知时,若 a 与 b 各为垂直于 x 轴的首末

两截面的横坐标,则在区间 [ ]ba, 上的立体体积为

( )∫=b

axxSV d (5-7)

2. 第二类 若一连续曲线 ( )xfy = 的弧 AB (假定它不与 x 轴相交,见图 5-17)与直线 ax = , bx = 及 x

轴围成的平面图形绕着 x 轴旋转一周产生的旋转体,则它垂直于 x 轴的截面面积为

( ) 2yxS π= (5-8)

此旋转体的体积则为

Page 218: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

206

∫π=b

axyV d2 ( )∫π=

b

axxf d2 (5-9)

若所考虑的连续曲线方程为 ( )yx ϕ= (假定它不与 y 轴相交,见图 5-18),则弧 CD 与直线

cy = , dy = 及 y 轴围成的平面图形绕着 y 轴旋转一周所产生的旋转体的体积为

∫π=d

cyxV d2 ( )∫π=

d

cyy d2ϕ (5-10)

图 5-17 平面图形绕 x 轴旋转的旋转体 图 5-18 平面图形绕 y 轴旋转的旋转体

【例 5-18】有一立体,以长半轴 a 与短半轴 b 的椭圆为底,而垂直于长轴的截面都是等边三

角形,求计算此立体的体积公式,并计算当 10=a 、 5=b 时的立体体积。

【解】

根据公式(5-7)用以下 MATLAB 程序来计算:

syms a b h r x y S V;

y=sqrt((1-(x/a)^2)*b^2);h=sqrt(3)*y;S=h*y;V=int(S,x,-a,a);

V=factor(simple(V))

a=10;b=5;V=subs(V,’[a b]’,[a b]) 程序运行结果

V = 4/3*3^(1/2)*a*b^2

V = 577.3503

即椭圆为底的立体体积为

2

3

4abV =

还有当 10=a 、 5=b 时的立体体积为 3505.577=V 。

图 5-19 椭圆为底的立体

Page 219: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

207

【例 5-19】求星形线 3

2

3

2

3

2

ayx =+ 围成的图形绕 x 轴所产生的旋转体体积。

图 5-20 星形线所产生的旋转体

【解】

根据公式(5-9)用以下 MATLAB 语句来计算:

syms a x y;

y=(a^(2/3)-x^(2/3))^(3/2);V=int(2*pi*y^2,x,0,a);

V=factor(simple(V)) 语句执行结果

V = 32/105*pi*a^3

即旋转体体积为 3

105

32aV π= 。

5.3.3 平面曲线弧长的计算

在平面曲线上任取多个分点,依次连接每两个分点成弦而得一条内接折线。当分点的数

目无穷增加且每个弦长趋向零时,如果此折线长的极限存在,则称此极限为曲线的弧长,而

该段曲线叫做可求长的。

设直线 C 的参数方程为

( )tx ϕ= 、 ( )ty ψ= (5-11)

当 t 由α 变到 ( )βαβ < 时,点 ( )yxM , 画出由 ( )00 , yxA 到 ( )nn yxB , 的曲线弧 C 。如果在区间

[ ]βα , 上函数 ( ) ( )tt ψϕ , 具有连续导数,则 C 是可求长的,并且弧 AB 的长度 s 等于定积分:

( ) ( )∫ ′+′=β

αψϕ ttts d22 (5-12)

弧微分 sd 为

( ) ( ) tt

y

t

xttts d

d

d

d

ddd

2222

+

=′+′= ψϕ (5-13)

取式两边的平方得 222 ddd yxs += (5-14)

特别地,如果曲线给出直角坐标方程 ( )xfy = (5-15)

并且曲线弧的端点 A 与 B 各对应自变量 x 的值 a 与 ( )bab < ,当导数 ( )xfy ′=′ 在区间 [ ]ba, 上

连续时,则曲线弧长为

Page 220: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

208

( )∫ ∫ ′+=′+=b

a

b

axxfxys d1d1 22 (5-16)

还有,如果曲线由极坐标方程 ( )θrr = (5-17)

所给出,则关系式 θcosrx = , θsinry = (5-18)

可视作这条曲线的参数方程,其中极角θ 为参数。则曲线弧长为

∫ ′+=β

αθd22 rrs (5-19)

【例 5-20】求摆线 ( )ttax sin−= 、 ( )ttay cos−= 的一拱之弧长。

图 5-21 摆线一拱之展开

【解】

根据公式(5-12)与式(5-13)用以下 MATLAB 程序来计算:

syms x y t s a;

x=a*(t-sin(t));y=a*(1-cos(t));dxdt=diff(x,’t’);dydt=diff(y,’t’);

ds=sqrt((dxdt)^2+(dydt)^2);s=simple(int(ds,t,0,2*pi))

程序运行结果

s = 8*a 即摆线的一拱之弧长为 as 8= 。 【例 5-21】求心形线 ( )θcos1 += ar 全长。

图 5-22 心形线 ( )θcos1 += ar

【解】

(1) 用以下 MATLAB 语句来绘制心形线图像:

a=1;theta=0:0.1:2*pi;

Page 221: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

209

r=a*(1+cos(theta));polar(theta,r) 语句执行后绘制出 1=a 时心形线的图像如图 5-22 所示。

(2) 用以下 MATLAB 程序来计算:

syms a r thet;

r=a*(1+cos(thet));drdt=diff(r,’thet’);

f=simple(sqrt(r^2+drdt^2));s=simple(2*int(f,thet,0,pi)) 程序运行结果

s = 8*a 即心形线全长为 as 8= 。

5.3.4 积分在物理学与力学上的几例应用

微积分在物理学与力学上的应用是极其广泛的,这里只能举几例说明其 MATLAB 的实

现。需要特别指出,微积分计算的 MATLAB 程序实现中,一般不出现与自变量微分相对应的

成份,这一点在写程序时应特别引起注意。请看以下示例。

【例 5-22】物体按规律 3ctx = 作直线运动,式中 x 为时间 t 内所通过的距离,媒质的阻力正

比于速度的平方。试求物体由 0=x 到 ax = 点时克服阻力所作的功。

【解】

(1) 数学分析

根据力学基本原理,有 23d

dct

t

xv == ,阻力 2kvf −= ,式中 x 为比例系数。当 0=x 时,

0=t ;当 ax = 时, 3 / cata = ;阻力所作的功应为 ∫∫ ==ata

tfxfW00

dd 。

(2) 用以下 MATLAB 语句来计算 at :

syms c t x;

x=c*t^3;x=a;ta=simple(solve(’a=c*t^3’,’t’))

语句执行结果

ta = [ 1/c*(a*c^2)^(1/3)]

[ 1/2*(a*c^2)^(1/3)*(-1+i*3^(1/2))/c]

[ -1/2*(a*c^2)^(1/3)*(1+i*3^(1/2))/c]

舍去复数根取实根即 3 / cata = 。

(3) 用以下 MATLAB 程序来计算克服阻力所作的功:

syms c t x k v;

x=c*t^3;v=diff(x,’t’);f=k*v^2;x=a;

ta=maple(’simplify(1/c*(a*c^2)^(1/3),radical,symbolic)’);

W=simple(int(f,t,0,ta)) 程序执行结果

W = 9/5*k*c^(1/3)*a^(5/3)

即克服阻力所作的功为 3 2

5

9caakW = 。

【例 5-23】有一半径为 a 米的半圆形盛水容器,直径与水面相齐。试求水对铅直壁的压力。

Page 222: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

210

图 5-23 半球形盛水容器

【解】

(1) 数学分析

如图 5-23 取坐标系。壁的边界为 222 ayx =+ (即壁上任一点的 x 坐标与 y 坐标满足的关

系)。位于 [ ]yyy d, + 的小条的面积为 yxS d2d = ,其上的压强等于水深 y ,故小条上的压力为

yxyySP d2dd =⋅= ,因此整块壁上的水压力为 ∫=a

yPP0

dd 。

(2) 用以下 MATLAB 程序来计算:

syms a x y P;

x=sqrt(a^2-y^2);dP=2*x*y;P=simple(int(dP,y,0,a))

程序执行结果

P = 2/3*a^3

即水对铅直壁的压力为 3

3

2aP = 。

[说明]

已经指出,微积分计算的 MATLAB 程序实现中,一般不出现与自变量微分相对应的成份,

例如本例中的 yxyySP d2dd =⋅= 表达中的 yd ,在程序中是看不到的。这一点在写程序时应特

别引起注意。

5.3.5 正弦交流电的平均值与有效值的计算

正弦交流电平均值与有效值的计算也是符号函数积分计算的典型应用,在电气技术领域

里是必不可少的基础知识。首先,复习几个与正弦交流电平均值与有效值计算有关的基本概

念,然后举例。

若电量值是时间 t 的周期函数,则叫做周期电量。这个电量可以是电流、电压、电动势

等等。如果这个周期函数是正弦(周期)函数,那么这个周期电量就叫做正弦交流电量,例如

正弦交流电流(瞬时值): ( )im tIi ψω += sin (5-20)

正弦交流电压(瞬时值): ( )um tUu ψω += sin (5-21)

以及正弦交流电动势(瞬时值): ( )em tEe ψω += sin

等等。式中,振幅 mI 、 mU 、 mE 、角频率ω 与初相角 iψ 、 uψ 、 eψ 是正弦交流电量的三要

素。

周期电流的平均值是指该电流在一个周期T (ωπ== 21

fT )内的平均值:

Page 223: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

211

∫=T

av tiT

I0

d1

(5-22)

同样还有周期电压的平均值

∫=T

av tvT

V0

d1

(5-23)

正弦交流电路中,电阻电路吸收的瞬时功率等于瞬时电压与瞬时电流的乘积,即

iup R=

设电流的初相角为 0,根据电路理论,电阻吸收的瞬时功率为

( )tIUiup mmRR ω2sin== (5-24)

瞬时功率在一个周期内的平均值叫做平均功率,即

∫ ∫==T T

mRUT

tpT

P0 0

1d

1 ( ) ( ) ttIUT

ttIT

mmRm ∫ −=0

2 d2cos12

11dsin ωω (5-25)

为了在一段较长时间内能从电功率、电能与热效应等方面来衡量正弦电流的平均效果,

特规定交流电流的有效值。有效值又称为方均根值,这是电路理论关于正弦交流电的重要基

本概念之一。周期电流的有效值定义为:

∫=T

tiT

I0

2d1

那么,正弦交流电流的有效值则为:

( )∫∫ +==T

im

TttI

Tti

TI

0

22

0

2 dsin1

d1 ψω (5-26)

类似地,有正弦交流电压的有效值:

∫=T

tuT

U0

2d1 ( )∫ +=

T

um ttUT 0

22 dsin1 ψω (5-27)

【例 5-24】已知交流电流 ( )tIi m ωsin= ,试求交流电流有效值 I 与振幅 mI 之间的关系。

【解】

根据式(5-26)用以下 MATLAB 语句计算:

syms ai AI t T Im omega;

omega=2*pi/T;ai=Im*sin(omega*t);

AI=simple(sqrt(1/T*int(i^2,t,0,T)))

语句执行结果

AI = 1/2*2^(1/2)*Im

即有交流电流有效值与振幅之间的关系

mII2

1= (5-28)

类似地有 mUU2

1= 与 mEE2

1= 。

【例 5-25】已知交流电流 ( )tIi m ωsin= ,试计算一个周期内电阻吸收的(平均)功率。

【解】 (1) 根据电路理论,电阻两端的电压与通过的电流同相,即 ( )tUu m ωsin= 。

Page 224: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

212

(2) 根据式(5-25)与式(5-28)用以下 MATLAB 程序计算:

syms ai t AI u U P R T Im Um omega;

omega=2*pi/T;u=Um*sin(omega*t);

ai=Im*sin(omega*t);p=u*ai;

P=1/T*int(p,t,0,T)

Um=sqrt(2)*U;Im=sqrt(2)*AI;

P=subs(P,’[Um Im]’,[Um Im])

程序运行结果

P = 1/2*Um*Im

P = U*AI

即正弦电流在纯电阻中一个周期内的平均功率为:

UIIUP mm ==2

1 (5-29)

【例 5-26】已知交流电流 ( )tIi m ωsin= ,试计算一个周期内电感吸收的(平均)功率。

【解】

(1) 根据电路理论,电感两端的电压超前通过的电流 2/π ,即

π+=

2sin tUu mL ω 。

(2) 根据式(5-25)与式(5-28)用以下 MATLAB 程序计算:

syms ai t u U P R T Im Um omega;

omega=2*pi/T;u=Um*sin(omega*t+pi/2);

ai=Im*sin(omega*t);p=u*ai;

P=1/T*int(p,t,0,T) 程序运行结果

P = 0 即一个周期内电感吸收的(平均)功率为 0=P 。

【例 5-27】已知电容两端电压与其电流之间的关系为

t

uCi C

d

d=

试求电容元件吸收的能量,并计算当 ( ) 00 =tu 时电容的电场能量。

【解】 (1) 根据电路理论,电容 C 在某瞬间 t 吸收的功率为 uip = ,从 0t 到 t 电容吸收的能量为

( ) == ∫t

tc tiutW

0

d =∫t

t

cc t

t

uCu

0

dd

d

( )

( )∫

tu

tucc uuC

0

d 。

(2) 根据上式用以下 MATLAB 程序计算:

syms f u C u0 ut;

f=C*u;W=int(f,u,u0,ut)

u0=0;W=subs(W,’u0’,u0)

程序运行结果

W = 1/2*C*(ut^2-u0^2)

W = 1/2*C*ut^2

Page 225: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

213

即电容元件吸收的能量为 ( ) ( ) ( )[ ]022

2

1tutuCtW −= 。当 ( ) 00 =tu 时,电容的电场能量为

( ) ( )tCutW 2

2

1= 。

5.3.6 晶闸管整流输出电压的计算

晶闸管又称可控硅,它是一种用来进行可控整流的新型电力电子器件。晶闸管整流装置

是当前最经济可靠、技术性能最优越的可控直流电源,有着广泛的工业应用。

根据晶闸管变流技术原理,正弦交流电(既可是单相的也可是三相的)送入晶闸管整流装

置,即可得到可调节的脉动直流电。通常,晶闸管整流装置采用触发脉冲相位控制,也就是

改变触发脉冲相对于正弦交流自然换相点的控制角α ,来控制整流输出电压。为适合不同的

电压范围,常用一整流变压器将电网上的工业交流电变成合适的电压输入晶闸管整流装置。

整流输出电压的平均值 dU 与其相关参数是必须经常计算的课题,这是符号函数积分计算的又

一典型应用。请看以下示例。 【例 5-28】计算正弦单相半波不控整流波形的电流平均值 dI 与有效值 I 及其波形系数

df I

IK = 。

图 5-24 正弦单相半波不控整流波形

【解】 (1) 根据晶闸管变流技术原理,有如下与正弦半波整流波形电流平均值 dI 计算相关的关

系式: fπ= 2ω 、π

=2

ωf 、

ωπ== 21

fT 、 ( ) tIti m ωsin= 以及

( ) ( )π

== ∫∫π

mm

T

mdI

ttIttIT

I dsin21

dsin1

0

2

0

ω ω

ω

ω

(2) 根据以上关系式用以下 MATLAB 程序计算 dI :

syms omega f Im t T;

omega=2*pi/T;T=solve(’omega=2*pi/T’,’T’);ai=Im*sin(omega*t);

ai=subs(ai,’omega’,omega);Id=1/T*int(ai,t,0,T/2);Id=simple(subs(Id,’T’,T))

程序运行结果

Id = Im/pi

即正弦半波整流波形电流的平均值为π

= md

II 。

(3) 根据晶闸管变流技术原理,有如下与正弦半波整流波形电流有效值 I 计算相关的关系

式: ( ) tIti m ωsin= 与 ( ) ( )( )2

dsin1

d1 22

0

2

0

2 mm

TTI

ttIT

ttiT

I === ∫∫ ω 。

Page 226: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

214

(4) 根据以上关系式用以下 MATLAB 程序计算 I :

syms omega f Im t T Kf;

T=1/f;omega=2*pi*f;f=solve(’omega=2*pi*f’,’f’);T=subs(T,’f’,f);

I=sqrt(int((omega/(2*pi))*Im^2*(sin(omega*t))^2,t,0,pi/omega));I=simple(I)

Id=Im/pi;Kf=I/Id

程序运行结果

I = 1/2*Im

Kf = 1/2*pi

即正弦半波整流波形电流有效值2mI

I = 与其波形系数2

π=fK 。

(5) 还可以将以上两段程序合成以下一程序,其运行效果同上。

syms omega f Im t T Kf;

omega=2*pi/T;T=solve(’omega=2*pi/T’,’T’);

ai=Im*sin(omega*t);ai=subs(ai,’omega’,omega);

Id=1/T*int(ai,t,0,T/2);Id=simple(subs(Id,’T’,T))

I=sqrt(1/T*int(ai^2,t,0,T/2));I=simple(subs(I,’T’,T))

Kf=I/Id 【例 5-29】试计算单相正弦半波可控整流输出电压的平均值 dU 、有效值U 、电阻负载时的

电流波形系数d

f I

IK = 与电路功率因数

IU

UI

2

cos =ϕ 。

图 5-25 单相半波可控整流电路及波形

【解】

(1) 根据晶闸管变流技术原理,用以下 MATLAB 程序计算正弦半波可控整流输出电压的

平均值 dU :

syms U2 Ud alpha omega f Im t T;

T=1/f;omega=2*pi*f;f=solve(’omega=2*pi*f’,’f’);T=subs(T,’f’,f);

u=sqrt(2)*U2*sin(omega*t);Ud=1/T*int(u,t,alpha/omega,pi/omega);

Ud=subs(Ud,’omega’,omega)

U=sqrt(1/T*int(u^2,t,alpha/omega,pi/omega));

U=subs(U,’omega’,omega)

Page 227: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

215

程序运行结果

Ud = 1/2/pi*2^(1/2)*U2*(1+cos(alpha))

U = 1/2/pi*(-2*pi*U2^2*(-pi-cos(alpha)*sin(alpha)+alpha))^(1/2)

即2

cos122

α+π

= UU d 2

cos145.0 2

α+= U

[说明] 请注意,上式中 2U 为整流变压器次级相电压有效值,α 为触发脉冲的控制角。

(2) 用以下 MATLAB 程序计算正弦半波可控整流输出电压的有效值U 与电阻负载时的

电流波形系数:

syms alpha U Ud R;

Ud=1/2/pi*2^(1/2)*U2*(1+cos(alpha));

U=maple(’simplify(1/2/pi*(-2*pi*U2^2*(-pi-cos(alpha)*sin(alpha)+alpha))^(1/2),radical,symb

olic)’)

Kf=simple((U/R)/(Ud/R));

digits 4;Kf=vpa(Kf,4)

程序运行结果

U = 1/2/pi*U2*2^(1/2)*(-pi*(-pi-cos(alpha)*sin(alpha)+alpha))^(1/2)

Kf = 1.771*(3.142+cos(alpha)*sin(alpha)-1.*alpha)^(1/2)/(1.+cos(alpha))

即输出电压的有效值

( )

+−ππ

π=

2

2sin

22 αα

UU ( )

+−π

π=

2

2sin

22 αα

U

及其波形系数

( )α

αα

cos12

2sin

2

2

+

+−π

π

π=fK

( )α

αα

cos12

2sin

+

+−ππ=

(3) 用以下 MATLAB 程序计算正弦半波可控整流电阻负载电路功率因数 ϕcos :

syms alpha I U U2 R S P cos;

U=maple(’simplify(1/2/pi*(-2*pi*U2^2*(-pi-cos(alpha)*sin(alpha)+alpha))^(1/2),radical,symb

olic)’);

I=U/R;P=U*I;S=U2*I;

cos=P/S;cos=simple(cos);cos=simple(factor(cos))

程序运行结果

cos = 1/2/pi^(1/2)*(2*pi+sin(2*alpha)-2*alpha)^(1/2)

即电路功率因数IU

UI

2

cos =ϕ ( )αα −π+π

= 22sin2

1。

【例 5-30】试计算三相桥式全控整流电阻负载时输出电压的平均值 dU 。

【解】

(1) 根据晶闸管变流技术原理,用以下 MATLAB 程序计算电阻负载时三相桥式全控整流

输出电压的平均值 dU (0<α ≤ °60 ):

Page 228: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

216

syms U2l Ud alpha omega f Im t T;

T=1/f;omega=2*pi*f;f=solve(’omega=2*pi*f’,’f’);T=subs(T,’f’,f);

u=sqrt(2)*U2l*sin(omega*t);

Ud=1/(T/6)*int(u,t,(pi/3+alpha)/omega,(2*pi/3+alpha)/omega);

Ud=simple(subs(Ud,’omega’,omega))

程序运行结果

Ud = 3/pi*cos(alpha)*2^(1/2)*U2l

即三相桥式全控整流输出电压的平均值(0<α ≤ °60 )为:

αcos23 2

π= l

dU

U

[说明] 请注意,上式中 lU 2 为整流变压器次级线电压有效值,α 为触发脉冲的控制角。

图 5-26 三相桥式全控整流电路及波形

(2) 根据晶闸管变流技术原理,用以下 MATLAB 程序计算电阻负载时三相桥式全控整流

输出电压的平均值 dU ( °60 <α ≤ °120 ):

syms U2l Ud alpha omega f Im t T;

T=1/f;omega=2*pi*f;f=solve(’omega=2*pi*f’,’f’);T=subs(T,’f’,f);

u=sqrt(2)*U2l*sin(omega*t);Ud=1/(T/6)*int(u,t,(pi/3+alpha)/omega,pi/omega);

Ud=simple(subs(Ud,’omega’,omega))

程序运行结果

Ud = 3/2/pi*2^(1/2)*U2l*(2+cos(alpha)-3^(1/2)*sin(alpha)) 即三相桥式全控整流输出电压的平均值( °60 <α ≤ °120 )为:

[ ]=−+π

= αα sin3cos22

232ld UU =

−+

παα sin

2

32cos

2

22

2

232lU

Page 229: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

217

=

−+

π= αα sin

2

3cos

2

112

2

232lU

+π+

πα

3cos1

23 2lU

5.4 函数的 T aylor 级数展开式在近似计算中的应用

在第 3 章第 6 节介绍了函数展开成 Taylor 级数。有了函数的 Taylor 级数展开式,可用

它来进行各种近似计算,即在级数展开式有效的区间上,函数值可以近似地利用这个级数按

精确度要求计算出来。这里仅举两例予以说明。

【例 5-31】试用函数 ( ) ( )mxxf += 1 的 Taylor 级数展开式计算 5 240 的近似值,要求误差不超

过 0001.0 。

【解】

(1) 用以下 MATLAB 语句来求 ( ) ( )mxxf += 1 的 Taylor 级数展开式:

syms x m;

f=(1+x)^m;T=taylor(f,4)

语句执行结果

T = 1+m*x+1/2*m*(m-1)*x^2+1/6*m*(m-1)*(m-2)*x^3

prod2 = 2

prod3 = 6

即 ( ) ( )mxxf += 1 的 Taylor 级数展开式为:

( ) ( ) ( ) ( )( ) 32

!3

21

!2

111 x

mmmx

mmmxxxf m −−+−++=+=

(2) 数学分析

因为5/1

4

5/1

4

5555

3

113

3

333243240

−=

−=−= ,对照函数 ( ) ( )mxxf += 1 的 Taylor 级

数展开式,取43

1−=x ,5

1=m ,即可进行近似计算。

(3) 对应 ( ) ( )mxxf += 1 的级数展开式,用以下 MATLAB 语句来计算 5 240 的近似值:

syms x m;

f=(1+x)^m;T=3*taylor(f,10);

x=-1/(3^4);m=1/5;

T=subs(T,’[x m]’,[x m]);

digits 5;T=vpa(T,5) 语句执行结果

T = 2.9926

即 9926.22405 ≈ 。

【例 5-32】试用函数 ( ) xxf e= 的 Taylor 级数展开式计算定积分 ∫ −

π2

1

0de

2 2

xx 的近似值,要求

误差不超过 0001.0 。

Page 230: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

218

【解】

(1) 用以下 MATLAB 语句求 ( ) xxf e= 的 Taylor 级数展开式:

syms x;

f=exp(x);T=taylor(f)

语句执行结果

T = 1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5 即 ( ) xxf e= 的 Taylor 级数展开式为:

!5!4!3!21

5432 xxxxxe x +++++=

(2) 对应 ( ) xxf e= 的级数展开式,用以下 MATLAB 语句计算定积分 ∫ −

π2

1

0de

2 2

xx :

syms x;

f=exp(-x^2);T=taylor(f);

I=2/(sqrt(pi))*int(T,x,0,1/2);

digits 4;I=vpa(I,4) 语句执行结果

I = .5207

即 5207.0de2 2

1

0

2

≈π ∫ − xx 。

Page 231: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

第 6 章 MATLAB 符号矩阵函数运算及应用

内 容 提 要 在 3.7 节介绍了 MATLAB 符号矩阵的基本运算及其化简的函数命令、功能、

调用格式及其使用方法,本章就来介绍 MATLAB 矩阵函数运算与应用。全章共 3

节:6.1 矩阵函数运算在线性代数中的应用;6.2 节介绍矩阵运算在线性控制系统状

态空间分析中的应用;6.3 节介绍线性二次型最优控制的 MATLAB 实现。通过本

章的介绍,使读者更进一步熟悉并掌握矩阵运算的函数命令及其用来计算实际问题

的综合使用方法。

6.1 矩阵函数运算在线性代数中的应用

矩阵本来就是由解线性方程组以及将二次曲面(曲线)方程化为标准形的需要而逐步形成

的,矩阵函数运算的首要运用理所当然地是在线性代数中的应用。

6.1.1 矩阵函数

在 MATLAB 中,有很多种关于矩阵的函数,例如生成矩阵的函数、矩阵变换的函数、

矩阵运算的函数等等。矩阵函数中,有一些是关于数值矩阵的,也有一些是关于符号矩阵的。

在科学研究与工程技术的实际问题中,绝大多数情况都是要进行具体数值计算的。所以,

MATLAB 符号运算实际上与数值计算是密不可分的。

1. 矩阵生成函数

MATLAB 提供了一些常用矩阵生成函数。

(1) zeros ( ) 函数能够生成元素全为 0 的矩阵。例如 zeros(3,2) 能够生成 3 行 2 列元素全

为 0 的矩阵。

[说明]

zeros ( M,N) 函数的输入参数 M 为生成 0 矩阵的行数,N 为矩阵的列数。以下几个函数同此。

(2) ones ( ) 函数能够生成元素全为 1 的矩阵。例如 ones(2,3) 能够生成 2 行 3 列元素全

为 1 的矩阵。

(3) rand ( ) 函数能够生成均匀分布随机矩阵。

【例 6-1】rand ( ) 函数应用示例。

E=rand(2,5)

当指令回车后可生成矩阵 E,其元素数值范围为(0.0~1.0):

E = 0.9501 0.6068 0.8913 0.4565 0.8214

0.2311 0.4860 0.7621 0.0185 0.4447

(4) randn( )函数能够生成正态分布随机矩阵。

Page 232: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

220

【例 6-2】randn ( ) 函数应用示例。

F=randn(3,5) 当指令回车后可生成如下矩阵:

F = -0.4326 0.2877 1.1892 0.1746 -0.5883

-1.6656 -1.1465 -0.0376 -0.1867 2.1832

0.1253 1.1909 0.3273 0.7258 -0.1364 (5) magic ( ) 函数。在 MATLAB 中,magic( )函数是一个特殊的函数,该函数能够自动生

成一种特别的 N 阶方阵(其中,N=1,3,4,5,…),叫做魔方阵。这些 N 阶方阵具有一个共同的奇

妙特性,即每一行、每一列或对角线上的元素之和都相等。

【例 6-3】magic ( ) 函数应用示例。

X=magic(6)

当指令回车后可生成如下 6 阶方阵:

X = 35 1 6 26 19 24

3 32 7 21 23 25

31 9 2 22 27 20

8 28 33 17 10 15

30 5 34 12 14 16

4 36 29 13 18 11

由 6 阶方阵不难发现,矩阵 X 的任意行、列和对角线上的元素之和都是 111。使用 magic( )

函数产生任意阶魔方阵都是任意行、列和对角线上的元素之和均相等。

[说明]

magic( N) 函数的输入参数 N 为生成方阵的阶数。

(6) diag ( ) 函数可以生成对角矩阵。

【例 6-4】diag ( ) 函数应用示例。

syms a b c d e f g h k;

A=[a b c;d e f;g h k]

B=diag(A)

当指令回车后可生成矩阵 A 的对角矩阵:

A = [ a, b, c]

[ d, e, f]

[ g, h, k]

B = [ a]

[ e]

[ k]

[说明]

diag(A) 函数的输入参数 A 为生成对角矩阵的原方阵。以下几个函数同此。

(7) triu ( ) 函数可以生成上三角矩阵。

【例 6-5】triu ( ) 函数应用示例。

syms a b c d e f g h k;

A=[a b c;d e f;g h k];

Page 233: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

221

B=triu(A)

当指令回车后可生成矩阵 A 的上三角矩阵:

B = [ a, b, c]

[ 0, e, f]

[ 0, 0, k]

(8) tril ( ) 函数可以生成下三角矩阵。

【例 6-6】tril ( ) 函数应用示例。

syms a b c d e f g h k;

A=[a b c;d e f;g h k];

B=tril(A) 当指令回车后可生成矩阵 A 的下三角矩阵:

B = [ a, 0, 0]

[ d, e, 0]

[ g, h, k] (9) size ( ) 函数用来返回指定矩阵的行数和列数。

【例 6-7】size ( ) 函数应用示例。

syms a b c d e f g h k;

A=[a b c;d e f;g h k];

c=size(A)

当指令回车后可得矩阵的行数和列数:

c = 3 3

(10) eye ( ) 函数可以生成指定行数和列数的单位矩阵。eye ( ) 函数和 size ( ) 函数常常一

起使用,用以生成与指定矩阵同维的单位矩阵。

【例 6-8】eye ( ) 函数应用示例。

syms a b c d e f g h k;

A=[a b c;d e f;g h k];

b=size(A);

C=eye(b) 当指令运行后可生成一个 3*3 的单位矩阵:

C = 1 0 0

0 1 0

0 0 1 除了以上几个函数外,MATLAB 还提供一些生成特殊矩阵的函数,如表 6-1 所示。

表 6-1 特殊矩阵生成函数表

函 数 功 能 函 数 功 能

compan 伴随阵 magic 魔方阵

gallery Higham 检验矩阵 pascal Pascal 阵

hadamard Hadamard 阵 rosser 经典对称特征值检验矩阵

Page 234: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

222

(续)

函 数 功 能 函 数 功 能

hankel Hankel 阵 toeplitz Toeplitz 阵

hilb Hilbert 阵 vander Vander 阵

invhilb 逆 Hilbert 阵 wilknsion wilknsion 特征值检验矩阵

关于特殊矩阵生成函数的使用格式,请参见联机帮助。

2. 矩阵变换函数

MATLAB 提供了一些用于矩阵变换的函数,如表 6-2 所示。

表 6-2 矩阵变换函数

函 数 功 能

fliplr(X) 将矩阵 X 左右翻转

flipud(X) 将矩阵 X 上下翻转

flipdim(X,dim) 将矩阵 X 沿特定 dim 维翻转

rot90(A) 将矩阵 A 逆时针旋转 90°

rot90(A,K) 将矩阵 A 逆时针旋转(90×K)°,K 值可正可负

reshape(X,M,N) 将矩阵 X 变维成 M×N 阶的,X 的元素必为 M×N 个

关于矩阵变换函数的使用格式,请参见联机帮助。

【例 6-9】eye ( ) 函数应用示例。

A=sym(’[a b c;d e f]’)

B=fliplr(A)

C=flipud(A)

D=flipdim(A,1)

E=rot90(A)

当指令运行后对原矩阵 A 可生成对应表 6-2 的几种变换矩阵:

A = [ a, b, c]

[ d, e, f ]

B = [ c, b, a]

[ f, e, d ]

C = [ d, e, f ]

[ a, b, c]

D = [ d, e, f ]

[ a, b, c]

E = [ c, f ]

[ b, e]

[ a, d] 3. 矩阵运算函数

MATLAB 还提供了一些用于矩阵运算的函数,如表 6-3 所示。

Page 235: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

223

表 6-3 矩阵运算函数

函 数 功 能 函 数 功 能

chol 矩阵的 Cholesky 分解 logm 矩阵的对数函数

cond 矩阵的条件数 lu 矩阵的 LU 分解

condeig 对应于特征值的条件数 norm 向量矩阵的范数

det 方阵的行列式值 orth 矩阵的列空间

eig 矩阵的特征值分解 qr 矩阵的 QR 分解

expm 矩阵的指数函数 rank 矩阵的秩

funm 计算矩阵的函数值 squtm 矩阵的平方根

inv 计算矩阵的逆矩阵 subspace 子空间的夹角

jacobian 矩阵的 Jacobian 矩阵 svd 矩阵的奇异值分解

jordan 矩阵的 Jodan 标准形

下面要着重介绍在线性代数中经常使用的矩阵运算函数。关于其它矩阵运算函数的使用

格式,请参见联机帮助。

6.1.2 矩阵运算在线性代数中的应用

1. 符号矩阵行列式运算

由 n 阶方阵 A 的元素所构成的行列式(各元素的位置不变)叫方阵 A 的行列式,记作 A 或

detA。应该注意,只有方阵才能计算行列式;还要注意,方阵与行列式是两个不同的概念,

方阵 A 是一个线性代数定义的特殊量——按一定方式排成的并有自身运算规则的数表;n 阶

行列式则是方阵 A 的所有元素按另外的运算法则所确定的一个数,关于运算法则请看以下两

个示例。

在 MATLAB 中,计算方阵行列式的函数命令也是 det( )。函数的输入参数就是计算的对

象方阵 A,函数的输出参数则是计算的行列式的值。

【例 6-10】已知符号矩阵

=

2221

1211

aa

aaA 与

=

333231

232221

131211

1

aaa

aaa

aaa

A ,试计算矩阵 A 与 A1 的行列

式的值。

【解】

(1) 用以下 MATLAB 语句计算符号矩阵 A 的二阶行列式:

A=sym(’[a11 a12;a21 a22]’)

B=det(A) 语句执行结果

A = [ a11, a12]

[ a21, a22]

B = a11*a22-a12*a21

即 211222112221

1211detdet aaaaaa

aa−=

=A (6-1)

Page 236: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

224

运算结果表明 2 阶矩阵行列式的运算法则是:从左上角到右下角的左对角线上两元素的

乘积减去从右上角到左下角的右对角线上两元素的乘积。这个 2 阶矩阵行列式运算法则可以

作为公式来使用。

(2) 用以下 MATLAB 语句计算符号矩阵 A1 的三阶行列式:

A1=sym(’[a11 a12 a13;a21 a22 a23;a31 a32 a33]’)

B1=det(A1) 语句执行结果

A1 = [ a11, a12, a13]

[ a21, a22, a23]

[ a31, a32, a33]

B1 = a11*a22*a33-a11*a23*a32-a21*a12*a33+a21*a13*a32+a31*a12*a23-a31*a13*a22

=

=

333231

232221

131211

1 detdet

aaa

aaa

aaa

A

221331331221322311231231321321332211 aaaaaaaaaaaaaaaaaa −−−++ (6-2)

对应着以上矩阵 A1 与行列式 B1,得到三阶矩阵行列式运算的对角线规则:左对角线上三

元素的乘积、平行于左对角线的不完全左对角线上两元素与隔开左对角线的右上角和左下角

元素的乘积三项取正号;右对角线上三元素的乘积、平行于右对角线的不完全右对角线上两

元素与隔开右对角线的左上角和右下角元素的乘积三项取负号。这个三阶矩阵行列式运算法

则可以作为公式来使用。

【例 6-11】计算以下符号矩阵的矩阵行列式的值。

=

bac

acb

cba

1A

−−

−=

efcfbf

decdbd

aeacab

2A

【解】

(1) 用以下 MATLAB 语句计算符号矩阵 A1 的行列式:

A1=sym(’[a b c;b c a;c a b]’)

B1=det(A1)

语句执行结果

A1 = [ a, b, c]

[ b, c, a]

[ c, a, b]

B1 = 3*a*c*b-a^3-b^3-c^3 即矩阵 A1 的行列式 ( ) 333

1 3det cbaabc −−−=A 。

(2) 用以下 MATLAB 语句计算符号矩阵 A2 的行列式:

syms a b c d e f a11 a12 a13 a21 a22 a23 a31 a32 a33;

A2=[a11 a12 a13;a21 a22 a23;a31 a32 a33];‘B2=det(A2);

a11=-a*b; a12=a*c;a13=a*e;a21=b*d;a22=-c*d;a23=d*e;a31=b*f;a32=c*f;a33=-e*f;

C=subs(B2,’[a11 a12 a13 a21 a22 a23 a31 a32 a33]’,[a11 a12 a13 a21 a22 a23 a31 a32

Page 237: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

225

a33]) 语句执行结果

C = 4*b*a*c*d*e*f 即矩阵 A2 的行列式 ( ) abcdef4det 2 =A 。

2. 克拉默法则解线性方程组 含有 n 个未知数 nxxx ,,, 21 的 n 个线性方程的方程组

=+++

=+++=+++

nnnnnn

nn

nn

bxaxaxa

bxaxaxa

bxaxaxa

2211

22222121

11212111

(6-3)

它的解可以用 n 阶行列式表示,即有克拉默(Cramer)法则:如果线性方程组的系数行列式不等

于零,即

0

1

111

≠=

nnn

n

aa

aa

D

(6-4)

则方程组有唯一解

,,,,, 22

11

D

Dx

D

Dx

D

Dx

jj ===

D

Dx n

n = (6-5)

其中 ( )njD j ,,2,1 = 是把行列式 D 中第 j 列的元素用方程组右端的常数项代替后所得到的 n

阶行列式,即

nnjnnjnn

njj

j

aabaa

aabaa

D

1,1,1

11,111,111

+−

+−

= (6-6)

【例 6-12】利用克拉默法则求解以下线性方程组:

=++=++=++

3333232131

2323222121

1313212111

bxaxaxa

bxaxaxa

bxaxaxa

【解】

利用克拉默法则求解线性方程组的 MATLAB 程序如下:

syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b1 b2 b3;

A=[a11 a12 a13;a21 a22 a23;a31 a32 a33];

C=A;C1=A;C2=A;C3=A;D=det(C);b=[b1;b2;b3];

C1(:,1)=b;D1=det(C1);x1=D1/D

C2(:,2)=b;D2=det(C2);x2=D2/D

C3(:,3)=b;D3=det(C3);x3=D3/D 程序执行结果

x1=(b1*a22*a33-b1*a23*a32-b2*a12*a33+b2*a13*a32+b3*a12*a23-b3*a13*a22)/(a11*a22

*a33-a11*a23*a32-a21*a12*a33+a21*a13*a32+a31*a12*a23-a31*a13*a22)

x2=(a11*b2*a33-a11*a23*b3-a21*b1*a33+a21*a13*b3+a31*b1*a23-a31*a13*b2)/(a11*a22

Page 238: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

226

*a33-a11*a23*a32-a21*a12*a33+a21*a13*a32+a31*a12*a23-a31*a13*a22)

x3=(a11*a22*b3-a11*b2*a32-a21*a12*b3+a21*b1*a32+a31*a12*b2-a31*b1*a22)/(a11*a22

*a33-a11*a23*a32-a21*a12*a33+a21*a13*a32+a31*a12*a23-a31*a13*a22) 即有用矩阵行列式表示的方程组的解:

333231

232221

131211

33323

23222

13121

1

aaa

aaa

aaa

aab

aab

aab

x = ;

333231

232221

131211

33331

23221

13111

2

aaa

aaa

aaa

aba

aba

aba

x = ;

333231

232221

131211

33231

22221

11211

3

aaa

aaa

aaa

baa

baa

baa

x = (6-7)

3. 符号矩阵转置运算

把矩阵 A 的行换成同序数的列而生成的矩阵,叫做 A 的转置矩阵。从矩阵 A 生成转置矩

阵的过程就是矩阵的转置运算。在线性代数中,矩阵 A 的转置矩阵记作 AT。在 MATLAB 中,

用运算符“’”定义的矩阵转置,是其元素的共扼转置;运算符“.’”定义的数组的转置则是其

矩阵元素的非共扼转置。可见,线性代数定义的矩阵的转置对应着 MATLAB 中的数组转置。

这是线性代数与 MATLAB 关于矩阵运算少有的区别之一。请看以下示例。

【例 6-13】已知符号矩阵

=

khg

fed

cba

A ,试对矩阵 A 进行转置运算与数组元素的转置运

算。

【解】

(1) 用以下 MATLAB 语句进行符号矩阵的转置运算:

A=sym(’[a b c;d e f;g h k]’);

A’ 语句执行结果

A = [ a, b, c]

[ d, e, f ]

[ g, h, k]

ans = [ conj(a), conj(d), conj(g)]

[ conj(b), conj(e), conj(h)]

[ conj(c), conj(f), conj(k)] [说明]

conj ( )是 MATLAB 中计算共轭复数的函数,请参见 9.1 节。

(2) 用以下 MATLAB 语句进行数组的转置运算:

A=sym(’[a b c;d e f;g h k]’);

A.’ 语句执行结果

ans = [ a, d, g]

[ b, e, h]

Page 239: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

227

[ c, f, k]

运算结果表明,MATLAB 中的数组转置对应着线性代数定义的矩阵的转置。

4. 符号矩阵的逆矩阵运算

对于 n 阶方阵 A,如果有一个 n 阶方阵 B 与单位阵 E,使

EABBA =⋅=⋅ (6-8)

则说矩阵 A 是可逆的,并把矩阵 B 称为 A 的逆矩阵,记作 1−= AB 。求矩阵的逆矩阵,在科

研与工程技术中极为广泛而重要。符号矩阵逆矩阵运算的条件是:对象 A 必为方阵且方阵 A的行列式 0≠A 即 A 为非奇异方阵,其运算规则为

∗− = AA

A11 (6-9)

式中 ∗A 为方阵 A 的伴随矩阵。在 MATLAB 中,可直接计算矩阵的逆矩阵,其函数命令为 inv

( ),其调用格式为

inv (A ) 函数的输入参量 A 是逆矩阵运算的对象矩阵,返回的就是对象矩阵 A 的逆矩阵。

当矩阵 A 为一长方阵时,可以求矩阵 A 的伪逆矩阵。在 MATLAB 中,计算长方矩阵的

伪逆矩阵的函数命令为 pinv ( ),其调用格式为

pinv (A ) 函数的输入参量 A 是伪逆矩阵运算的对象矩阵,返回的就是对象矩阵 A 的伪逆矩阵。请看以

下示例。

【例 6-14】已知矩阵

=

dc

baA 与

=

100

210

321

1A ,试计算 A 与 A1 的逆矩阵。

【解】

(1) 用以下 MATLAB 语句进行符号矩阵的逆矩阵运算:

A=sym(’[a b;c d]’)

B=inv(A) 语句执行结果

A = [ a, b]

[ c, d]

B = [ d/(a*d-b*c), -b/(a*d-b*c)]

[ -c/(a*d-b*c), a/(a*d-b*c)] (2) 用以下 MATLAB 程序进行数值矩阵的逆矩阵运算:

A1=[1 2 3;0 1 2;0 0 1];

B1=det(A);

if B1~=0

C=inv(A1)

else disp(’奇异矩阵不能求逆’)

end 程序执行结果

Page 240: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

228

C = 1 -2 1

0 1 -2

0 0 1 运算结果表明,3 阶方阵 A1 的行列式 011 ≠= AB ,故能计算出逆矩阵 C。

【例 6-15】试计算矩阵 [ ]76;82;49=C 的伪逆矩阵 X,并计算 XC、CXC 与 XCX。

【解】

用以下 MATLAB 语句来计算本题:

C=[9 4;2 8;6 7]

X=pinv(C)

Q=X*C

P=C*X

CXC=P*C

XCX=X*P 语句执行结果

C = 9 4

2 8

6 7

X = 0.1159 -0.0729 0.0171

-0.0534 0.1152 0.0418

Q = 1.0000 0.0000

0.0000 1.0000

P = 0.8293 -0.1958 0.3213

-0.1958 0.7754 0.3685

0.3213 0.3685 0.3952

CXC = 9.0000 4.0000

2.0000 8.0000

6.0000 7.0000

XCX = 0.1159 -0.0729 0.0171

-0.0534 0.1152 0.0418 运 算 结 果 表 明 : ① 矩 阵 XCQ = 是 个 单 位 矩 阵 ; ② 矩 阵 CPCCXC == ; ③ 矩 阵

XXPXCX == 。

【例 6-16】已知线性变换

++=++=++=

3213

3212

3211

323

53

22

yyyx

yyyx

yyyx

求从变量 321 ,, xxx 到变量 321 ,, yyy 的线性变换。

【解】 用以下 MATLAB 程序求从变量 321 ,, xxx 到变量 321 ,, yyy 的线性变换:

A=[2 2 1;;3 1 5;3 2 3];B=det(A);

Page 241: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

229

if B~=0

C=inv(A)

else

disp(’奇异矩阵不能求逆’)

end

程序执行结果

C = -7.0000 -4.0000 9.0000

6.0000 3.0000 -7.0000

3.0000 2.0000 -4.0000 即从变量 321 ,, xxx 到变量 321 ,, yyy 的线性变换为:

−+=−+=+−−=

3213

3212

3211

423

736

947

xxxy

xxxy

xxxy

5. 利用逆矩阵解矩阵方程

若矩阵 A,X 满足矩阵乘法条件并且 BXA =⋅ 。当已知矩阵 A,B,把 X 当作未知矩阵

的 BXA =⋅ 叫做矩阵方程,求解未知矩阵 X 就是解矩阵方程。

若 BXA =⋅ ,则 BAX ⋅= −1 ; (6-10)

若 BAX =⋅ ,则 1−⋅= ABX 。 (6-11)

若矩阵 A,B,X 满足矩阵乘法条件并且 CBXA =⋅⋅ 。当已知矩阵 CBA ,, ,把 X 当作未

知矩阵的矩阵方程 CBXA =⋅⋅ ,其解 11 −− ⋅⋅= BCAX 。 (6-12)

请看以下示例。

【例 6-17】求解以下矩阵方程:

=

34

13

52

343

122

321

X

【解】

用以下 MATLAB 程序求解以下矩阵方程:

A=[1 2 3;2 2 1;3 4 3];B=det(A);b=[2 5;3 1;4 3];

if B~=0

C=inv(A);

else disp(’奇异矩阵不能求逆’)

end

x=C*b

程序执行结果

x =

3.0000 2.0000

-2.0000 -3.0000

1.0000 3.0000 即矩阵方程的解为:

Page 242: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

230

−−=

31

32

23

X

【例 6-18】利用逆矩阵求解以下矩阵方程:

−=

234

311

111

012

112

X

【解】

用以下 MATLAB 程序求解以下矩阵方程:

A=[2 1 -1;2 1 0;1 -1 1];D=det(A);B=[1 -1 3;4 3 2];

if D~=0

A1=inv(A);

else disp(’奇异矩阵不能求逆’)

end

x=B*A1

程序执行结果

x = -2.0000 2.0000 1.0000

-2.6667 5.0000 -0.6667 即矩阵方程的解为:

−−

−=

3/253/8

122X

【例 6-19】利用逆矩阵求解以下矩阵方程:

=

− 10

13

11

02

21

41X

【解】

用以下 MATLAB 程序求解以下矩阵方程:

A=[1 4;-1 2];D=det(A);B=[2 0;-1 1];E=det(B);C=[3 1;0 -1];

if D~=0

A1=inv(A);

else

disp(’奇异矩阵不能求逆’)

end

if E~=0

B1=inv(B);

else disp(’奇异矩阵不能求逆’)

end

x=(A1*C)*B1

程序运行结果

Page 243: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

231

x = 1.0000 1.0000

0.2500 0 即矩阵方程的解为:

=

04/1

11X

6. 矩阵的秩运算

矩阵秩的概念与矩阵的子式密切相关。在矩阵 A 中任取 k 行,又任取 k 列,位于这些行

列交叉处的元素按原来的位置次序而得的 k 阶行列式,叫做矩阵 A 的 k 阶子式。矩阵 A 的不

等于 0 的子式的最高阶数称为矩阵 A 的秩,记为 rank A。在 MATLAB 中求矩阵的秩的函数

命令就为 rank ( ),其调用格式为

rank(A ) 函数的输入参量 A 是求矩阵的秩的对象矩阵,返回的就是对象矩阵 A 的秩。

【例 6-20】已知矩阵

=

khg

fed

cba

A 与

−=

174

532

321

1A ,试计算 A 与 A1 的秩。

【解】

(1) 用以下 MATLAB 语句计算符号矩阵的秩:

A=sym(’[a b c;d e f;g h k]’);

c=rank(A) 语句执行结果

c = 3 运算结果表明,矩阵 A 的秩为 3。

(2) 用以下 MATLAB 语句计算符号矩阵的秩:

A1=[1 2 3;2 3 -5;4 7 1];

c1=rank(A)

语句执行结果

c1 = 2 运算结果表明,矩阵 A 的秩为 2。

7. 正交矩阵计算

若方阵 A 满足 EAA =⋅ T 或 EAA =⋅T (6-13)

式中 E 单位方阵,则称 A 为正交矩阵。

【例 6-21】试证明以下矩阵 A 为正交矩阵。

−−=

6/16/16/2

2/12/10

3/13/13/1

A

【解】

用以下 MATLAB 语句证明矩阵 A 为正交矩阵:

A=[1/sqrt(3) 1/sqrt(3) 1/sqrt(3);0 -1/sqrt(2) 1/sqrt(2);-2/sqrt(6) 1/sqrt(6) 1/sqrt(6)];

B=A.’

Page 244: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

232

C=A*B

D=B*A 语句执行结果

B = 0.5774 0 -0.8165

0.5774 -0.7071 0.4082

0.5774 0.7071 0.4082

C = 1.0000 0 0

0 1.0000 0

0 0 1.0000

D = 1.0000 0 0

0 1.0000 0.0000

0 0.0000 1.0000 运算结果表明, EABDBAC =∗==∗= ,即矩阵 A 是正交矩阵。

8. 符号矩阵的特征值分解

矩阵的特征值与特征向量是矩阵计算的重要内容,在科学研究与工程技术中经常遇到。

现将与矩阵特征值与特征向量有关的概念简介如下。 若 A 是 n 阶方阵,E 是 n 阶单位阵,A、E 与数λ构成的矩阵 AE −λ 叫做矩阵 A 的特征

矩阵;特征矩阵的行列式

nnnn

n

n

aaa

aaa

aaa

−−−

−−−−−−

=−

λ

λλ

λ

21

22221

11211

AE (6-14)

是 λ 的一个 n 次多项式,叫做矩阵 A 的特征多项式;关于行列式的方程: 0=− AEλ 叫

做矩阵 A 的特征方程,它是一个关于 λ 的 n 次方程;特征方程 0=− AEλ 的解 λ 叫做矩阵 A

的特征根或特征值,也称为矩阵 A 的特征多项式的根;又若 λ 是 A 的特征值,θ 为零向量,

则称齐次线性方程组 ( ) =− xAEλ θ (6-15)

的非零解x 为A 对应于特征值λ 的特征向量。求解矩阵的特征值与特征向量又称为矩阵的特征值分解。

在 MATLAB 中,使用函数命令 eig ( )计算矩阵的特征值与特征向量。命令 eig ( )的调用

格式有以下两种:

d=eig (A)

[V,D]=eig (A) 格式 d=eig (A)的输入参量 A 是待计算的对象矩阵,返回计算的矩阵 A 的特征值 d 是以列

向量的形式给出的。如果矩阵 A 为实对称矩阵,其特征值为实数;如果矩阵 A 为非对称矩阵,

其特征值为复数。

格式[V,D]=eig (A)的输入参量同上,返回计算的矩阵 A 的特征值(对角矩阵)D 与特征向量

矩阵 V,且满足 DVVA ⋅=⋅ 。 (6-16)

【例 6-22】计算矩阵

=

dc

baA 的特征值 D 与特征向量阵 V,并验算 DVVA ⋅=⋅ 。

Page 245: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

233

【解】

用以下 MATLAB 语句计算矩阵的特征值 D 与特征向量阵 V 并验算:

A=sym(’[a b;c d]’);

d=eig(A)

[V,D]=eig(A)

AV=simple(A*V)

VD=simple(V*D)

语句执行结果

d = [ 1/2*a+1/2*d+1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2)]

[ 1/2*a+1/2*d-1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2)]

V =

[-(-1/2*a+1/2*d-1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2))/c,-(-1/2*a+1/2*d+1/2*(a^2-2*a*d+d^2+4*

b*c)^(1/2))/c]

[1, 1]

D = [1/2*a+1/2*d+1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2), 0]

[0, 1/2*a+1/2*d-1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2)]

AV =

[1/2*(a^2-a*d+a*(a^2-2*a*d+d^2+4*b*c)^(1/2)+2*b*c)/c,1/2*(a^2-a*d-a*(a^2-2*a*d+d^2+4*b

*c)^(1/2)+2*b*c)/c]

[1/2*a+1/2*d+1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2),1/2*a+1/2*d-1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2)]

VD =

[1/2*(a^2-a*d+a*(a^2-2*a*d+d^2+4*b*c)^(1/2)+2*b*c)/c,1/2*(a^2-a*d-a*(a^2-2*a*d+d^2+4*b

*c)^(1/2)+2*b*c)/c]

[1/2*a+1/2*d+1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2),1/2*a+1/2*d-1/2*(a^2-2*a*d+d^2+4*b*c)^(1/2)] 计算结果表明:矩阵 A 的特征值 d 是列向量的形式,A 的特征值对角矩阵 D 就是 d ;并

且 DVVA ⋅=⋅ 。

【例 6-23】计算

=

633

312

321

A 的特征值 D 与特征向量矩阵 V,并验算 DVVA ⋅=⋅ 。

【解】

用以下 MATLAB 语句计算矩阵 A 的特征值 D 与特征向量矩阵 V 并验算:

A=[1 2 3;2 1 3;3 3 6];

d=eig(A)

[V,D]=eig(A)

AV=A*V

VD=V*D

指令组回车执行结果为:

(1) A 矩阵的特征值列向量为:

d = -1.0000

-0.0000

Page 246: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

234

9.0000

(2) A 矩阵的特征向量矩阵为:

V = 0.7071 0.5774 0.4082

-0.7071 0.5774 0.4082

0 -0.5774 0.8165

(3) A 矩阵的特征值对角阵为:

D = -1.0000 0 0

0 -0.0000 0

0 0 9.0000

AV = -0.7071 0 3.6742

0.7071 0 3.6742

0.0000 0 7.3485

VD = -0.7071 -0.0000 3.6742

0.7071 -0.0000 3.6742

0 0.0000 7.3485

运算结果表明,求出的 A 矩阵特征向量矩阵 V 与特征值对角矩阵 D 满足以下关系:

DVVA ⋅=⋅ 。

9. 相似矩阵计算

设 A、B 均为 n 阶方阵,若有可逆矩阵 P,使

BAPP =−1 (6-17)

则称 B 是 A 的相似矩阵,或称 A 与 B 相似。对 A 进行运算即求 B 的过程叫做对 A 进行相似

变换。可逆矩阵 P 称为把 A 变换成 B 的相似变换矩阵。

科学研究与工程技术上经常遇到的问题是:对 n 阶方阵 A,寻求相似变换矩阵 P,使

P-1AP= Λ 为对角矩阵,这就称为把方阵 A 对角化。相似变换矩阵 P 就是 MATLAB 中矩阵的

特征值分解求得的特征向量矩阵 V。若 n 阶方阵 A 为对称矩阵,则必有正交矩阵 P,使得

P-1AP= Λ ,其中 Λ 是以 A 的 n 个特征值为对角元素的对角矩阵。对 n 阶方阵 A,其相似变换

矩阵 P 还满足:P-1AP=PTAP= Λ 。

请看以下示例。

【例 6-24】设

=

310

130

004

A ,求一正交矩阵 P,使 P-1AP= Λ 为对角矩阵。

【解】

用以下 MATLAB 语句计算矩阵 A 的正交矩阵 P 并验算:

A=[4 0 0;0 3 1;0 1 3];

d=eig(A);

[V,D]=eig(A);

P=V

C=inv(P);

PAP=C*A*P

E=V.’;

Page 247: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

235

PTAP=E*A*P

语句执行结果

P = 0 0 1.0000

-0.7071 0.7071 0

0.7071 0.7071 0

PAP = 2.0000 0 0

0 4.0000 0

0 0 4.0000

PTAP = 2.0000 0 0

0 4.0000 0

0 0 4.0000

即对称矩阵 A 的正交矩阵 P 为:

−=

07071.07071.0

07071.07071.0

100

P

并且相似变换矩阵 P 满足 P-1AP=PTAP= Λ 。

在算术中把一个整数分解成质因数的连乘积,在代数里将一个整式分解成几个整式因子

的所谓分解因式,这些运算是数学的基础运算之一。类似的问题在于矩阵理论中叫矩阵分解,

即把一个给定的矩阵分解成几个较简单或性质比较熟悉的矩阵连乘积,这在科学研究与工程

技术的计算中都是非常重要的课题。

在 MATLAB 中,线性方程组的求解主要基于 3 个基本的矩阵分解:对称正定矩阵的分

解(Cholesky 分解)、一般方阵的消去法(Lu 分解)与矩形矩阵的正交分解(Qr 分解)。这三个分解

都使用三角矩阵,其中所有的元素位于对角线以上,以下的元素都为 0。包含三角矩阵的线性

方程组使用左除或者是右除都能简单、快速地求解。

10. 矩阵的 Cholesky 分解

若 A 是一个 nn× 的对称正定矩阵,则存在对角线为正的上三角矩阵 R,使得

RRA ⋅′= (6-18)

从 A 求 R 这就是 Cholesky 分解。在 MATLAB 中用函数命令 chol ( )来实现 Cholesky 分解。函

数的调用格式有两种:

R=chol (A)

[R,p]=chol (A)

第一种调用格式的输入参量 A 是运算对象矩阵,输出参量 R 为上三角矩阵,它满足

RRA ⋅′= 。如果 A 不是正定矩阵,将给出出错信息。

第二种调用格式的输入参量同上,输出参量 R 同上。此时不给出出错信息,如果 A 是正

定矩阵,则返回 0=p ;如果 A 不是正定矩阵,则返回的 p 为正整数,且上三角矩阵 R 的阶

数 1−= pn 。

Cholesky 分解可用于对线性方程组 bx =⋅A 进行快速求解:

( )bx \\ RR ′= (6-19)

Page 248: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

236

【例 6-25】矩阵 Cholesky 分解示例。

【解】

用以下 MATLAB 语句对三阶 Pascal 矩阵进行 Cholesky 分解:

A=pascal(3)

[R,p]=chol(A)

B=R.’*R

语句执行结果

A = 1 1 1

1 2 3

1 3 6

R = 1 1 1

0 1 2

0 0 1

p = 0

B = 1 1 1

1 2 3

1 3 6 运算结果表明, 0=p ,即三阶 Pascal 矩阵是正定矩阵; AB = 即矩阵 Cholesky 分解正

确。

【例 6-26】利用 Cholesky 分解求解线性方程组:

=++=++−

=+−

35.375.2

275.225.4

14

321

321

321

xxx

xxx

xxx

【解】

(1) 用以下 MATLAB 语句求解线性方程组:

A=[4 -1 1;-1 4.25 2.75;1 2.75 3.5];b=[1;2;3];

[R,p]=chol(A)

x=R\(R.’\b)

语句执行结果

R = 2.0000 -0.5000 0.5000

0 2.0000 1.5000

0 0 1.0000

p = 0

x = -0.0742

-0.2344

1.0625

运算结果表明,利用 Cholesky 分解法求得 0742.01 −=x , 2344.02 −=x , 0625.13 =x

(2) 用以下解方程组的 MATLAB 函数 solve ( ) 计算:

syms x1 x2 x3;

Page 249: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

237

[x1,x2,x3]=solve(’4*x1-x2+x3=1,-x1+4.25*x2+2.75*x3=2,x1+2.75*x2+3.5*x3=3’)

语句执行结果

x1 = -.7422e-1

x2 = -.2344

x3 = 1.063

运算结果表明,利用 Cholesky 分解法与求解方程组的方法两者计算结果相同。

[说明]

在 MATLAB 中,函数命令 solve ( ) 用来解方程,请参见第 7 章。

11. 矩阵的 LU 分解

将任何一个方阵 A 分解为一个下三角矩阵 L 与一个上三角矩阵 U 的乘积的运算叫 LU 分

解,即有

ULA ⋅= (6-20)

在 MATLAB 中用函数命令 lu ( )来实现 LU 分解。函数的调用格式为

[L,U]=lu (A) 函数的输入参量 A 是对象矩阵,输出参量 L 为分解的下三角矩阵的基本变换形式(行交

换),U 为分解的上三角矩阵。LU 分解也可用于对线性方程组 bx =⋅A 进行快速求解:

( )bx \\ LU= (6-21)

矩阵 A 行列式的值与矩阵 A 的逆还满足:

( ) ( ) ( )ULA detdetdet ⋅= (6-22)

与 ( ) ( ) ( )ULA invinvinv ⋅= (6-23)

【例 6-27】试对矩阵

=

764

142

321

A 进行 LU 分解。

【解】

用以下 MATLAB 语句对矩阵 A 进行 LU 分解:

A=[1 2 3;2 4 1;4 6 7];[L,U]=lu(A)

B=L*U

C=det(A)

D=det(L)*det(U)

E=inv(A)

F=inv(U)*inv(L) 语句执行结果

L = 0.2500 0.5000 1.0000

0.5000 1.0000 0

1.0000 0 0

U = 4.0000 6.0000 7.0000

0 1.0000 -2.5000

0 0 2.5000

B = 1 2 3

Page 250: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

238

2 4 1

4 6 7

C = -10

D = -10

E = -2.2000 -0.4000 1.0000

1.0000 0.5000 -0.5000

0.4000 -0.2000 0

F = -2.2000 -0.4000 1.0000

1.0000 0.5000 -0.5000

0.4000 -0.2000 0 运行结果表明:①输出参量 L 为下三角矩阵的基本变换形式(行交换),U 为分解的上三

角矩阵;②L 与 U 满足 ( ) ( ) ( )ULA detdetdet ⋅= 与 ( ) ( ) ( )ULA invinvinv ⋅= 。

【例 6-28】利用 LU 分解求解线性方程组:

−=+=−=+

13

3

1

21

21

21

xx

xx

xx

【解】

(1) 用以下的 MATLAB 语句求解线性方程组:

A=[1 1;1 -1;1 3];b=[1;3;-1];

[L,U]=lu(A)

x=U\(L\b)

语句执行结果

L = 1 0

1 1

1 -1

U = 1 1

0 -2

x = 2.0000

-1.0000 运算结果表明,利用 LU 分解法求得: 21 =x , 12 −=x 。

(2) 用以下解方程组的 MATLAB 函数命令 solve ( )计算:

syms x1 x2;

[x1,x2]=solve(’x1+x2=1,x1-x2=3,x1+3*x2=-1’)

语句执行结果

Warning: 3 equations in 2 variables.

> In C:\MATLABR12\toolbox\symbolic\solve.m at line 110

x1 = 2

x2 = -1 运算结果表明,利用 LU 分解法与求解方程组的方法两者计算结果相同。

12. 矩阵的 QR 分解

Page 251: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

239

将矩形矩阵 A 分解为一个正交矩阵 Q 与一个上三角矩阵 R 的乘积的运算叫 QR 分解,即

有 RQA ⋅= (6-24)

在 MATLAB 中,用函数命令 qr ( )来实现 QR 分解。函数的调用格式有两种:

[Q,R]=qr (A)

[Q,R,E]=qr (A) 第一种格式函数的输入参量 A 是对象矩阵,输出参量是分解的正交矩阵 Q 与上三角矩阵

R,满足 RQA ⋅= 。第二种格式函数的输出参量 E 是一置换矩阵,其它同第一种格式,此时

满足 RQEA ⋅=⋅ (6-25)

【例 6-29】试对矩阵

=

76

82

49

A 进行 QR 分解。

【解】

用以下 MATLAB 语句对矩阵 A 进行 QR 分解:

A=[9 4;2 8;6 7];

[Q,R,E]=qr(A)

QTQ=Q.’*Q

B=Q*R

C=A*E 语句执行结果

Q = -0.3522 0.8398 -0.4131

-0.7044 -0.5285 -0.4739

-0.6163 0.1241 0.7777

R = -11.3578 -8.2762

0 7.2460

0 0

E = 0 1

1 0

QTQ = 1.0000 0.0000 -0.0000

0.0000 1.0000 -0.0000

-0.0000 -0.0000 1.0000

B = 4.0000 9.0000

8.0000 2.0000

7.0000 6.0000

C = 4 9

8 2

7 6

运行结果表明:①输出参量 Q 为正交矩阵,解的 Q 与 R 满足关系为上三角矩阵;②分解

的 Q 与 R 满足关系 RQA ⋅= ;③分解的 Q、R 与 E 满足关系 RQEA ⋅=⋅ 。

Page 252: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

240

13. 矩阵的奇异值分解

矩阵的奇异值分解与前三种矩阵分解是完全不同的。对于矩阵 A、复数域 C 与自然数 m 、

n , 若 nmC ×∈A , 把 矩 阵 AA ⋅T 的 n 个 特 征 值 ( )nii ,,2,1 =λ 的 算 术 平 方 根

( )niii ,,2,1 == λσ 构成的矩阵叫做 A 的奇异值矩阵,求矩阵 A 奇异值的过程就是矩阵的

奇异值分解。

在 MATLAB 中矩阵的奇异值分解用函数命令 svd ( )来实现。函数的调用格式有两种:

S=svd(A)

[U,S,V]=svd(A) 第一种格式函数的输入参量 A 是对象矩阵,输出参量 S 是矩阵 A 的奇异值对角矩阵。第

二种格式函数的输出参量 U 与 V 是两个正交矩阵,且满足 TVSUA ⋅⋅= (6-26)

U、S 与 V 是叫做矩阵 A 的奇异值分解三对组。

【例 6-30】试对矩阵

−=

0000

1010

1001

A 进行奇异值分解。

【解】

用以下 MATLAB 语句对矩阵 A 进行奇异值分解:

A=[1 0 0 -1;0 1 0 1;0 0 0 0];

ATA=A’*A

[V,D]=eig(ATA)

sigma=sqrt(D)

[U,S,V]=svd(A)

UTU=U.’*U

VTV=V.’*V

USV=U*S*V’

语句执行结果

ATA = 1 0 0 -1

0 1 0 1

0 0 0 0

-1 1 0 2

V = 0.5074 -0.2755 0.7071 -0.4082

-0.5074 0.2755 0.7071 0.4082

-0.4771 -0.8788 0.0000 -0.0000

0.5074 -0.2755 0.0000 0.8165

D = -0.0000 0 0 0

0 0.0000 0 0

0 0 1.0000 0

0 0 0 3.0000

sigma = 0 + 0.0000i 0 0 0

Page 253: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

241

0 0.0000 0 0

0 0 1.0000 0

0 0 0 1.7321

U = -0.7071 0.7071 0

0.7071 0.7071 0

0 0 1.0000

S =1.7321 0 0 0

0 1.0000 0 0

0 0 0 0

V = -0.4082 0.7071 0 0.5774

0.4082 0.7071 0 -0.5774

0 0 1.0000 0

0.8165 0.0000 0 0.5774

UTU = 1.0000 -0.0000 0

-0.0000 1.0000 0

0 0 1.0000

VTV = 1.0000 0.0000 0 -0.0000

0.0000 1.0000 0 -0.0000

0 0 1.0000 0

-0.0000 -0.0000 0 1.0000

USV = 1.0000 0.0000 0 -1.0000

-0.0000 1.0000 0 1.0000

0 0 0 0 运 行 结 果 表 明 : ① 矩 阵 AA ⋅T 的 n 个 特 征 值 ( )nii ,,2,1 =λ 的 算 术 平 方 根

( )niii ,,2,1 == λσ 构成的矩阵就是 A 的奇异值矩阵 S;②参量 U 与 V 是两个正交矩阵;

③U 与 V 满足 TVSUA ⋅⋅= 。

14. 矩阵的 Jacobian 矩阵

矩阵函数相对于列向量( 或行向量)的导数,就是 Jacobian 矩阵。 设列向量函数 ( )vf :

( )( )

( )

=

vf

vf

f

n

1

v

与行向量 v: [ ]mvv ,,1 =v

则有 Jacobian 矩阵:

∂∂

∂∂

∂∂

∂∂

=

m

nn

m

v

f

v

f

v

f

v

f

1

1

1

1

Jacobian (6-27)

Page 254: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

242

在 MATLAB 中,求矩阵的 Jacobian 矩阵用函数命令 jacobian ( )来实现。函数的调用格式

为:

B=jacobian (f,v) 这种格式函数的输入参量 f 是列向量函数 ( )vf ,输入参量 v 是行向量,输出参量 B 是

矩阵的 Jacobian 矩阵。请看以下示例。

【例 6-31】已知 ( ) ( ) ( )

+=

vu

uwf

v

cossin

e与 [ ]vuw ,= ,试计算 f 的 Jacobian 矩阵。

【解】

用以下 MATLAB 语句计算 f 的 Jacobian 矩阵:

syms u v;

jacob= jacobian([u*exp(v);sin(u)+cos(v)],[u;v])

语句执行结果

jacob = [ exp(v), u*exp(v)]

[ cos(u), -sin(v)]

【例 6-32】已知 ( ) ( ) ( )[ ]( ) ( ) ( )

+=++−=

τωωτωτωτωωτωτ

cgcgcg

cgcgcgcgm

TTf

TTKGTf

cossin,

1sincos,

2

221 ,试计算 ( ) =Tf ,τ

( )( )

Tf

Tf

,

,

2

1

ττ

的 Jacobian 矩阵。

【解】 用以下 MATLAB 语句计算 f 的 Jacobian 矩阵:

syms K Gm tao T wcg;

f=[K*Gm*(cos(wcg*tao)-wcg*T*sin(wcg*tao))+1+wcg^2*T^2;sin(wcg*tao)+wcg*T*cos(wcg*t

ao)]

v=[tao T]

语句执行结果

jacob=jacobian(f,v)

f = [ K*Gm*(cos(wcg*tao)-wcg*T*sin(wcg*tao))+1+wcg^2*T^2]

[ sin(wcg*tao)+wcg*T*cos(wcg*tao)]

v = [ tao, T]

jacob=[K*Gm*(-sin(wcg*tao)*wcg-wcg^2*T*cos(wcg*tao)),

-K*Gm*sin(wcg*tao)*wcg+2*wcg^2*T]

[cos(wcg*tao)*wcg-wcg^2*T*sin(wcg*tao),

cos(wcg*tao)*wcg] 即 f 的 Jacobian 矩阵:

∂∂

∂∂

∂∂

∂∂

=

2

2

1

2

2

1

1

1

jacobian

x

f

x

fx

f

x

f

Page 255: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

243

( ) ( ) ( )( ) ( ) ( )

−+−−−

=τωωτωωτωω

ωτωωτωωτωω

cgcgcgcgcgcg

cgcgcgmcgcgmcgcgm

T

TKGTKGKG

cossincos

2sincossin2

22

[说明]

本例选自自动控制系统 PID 校正器设计,欲了解详细内容,请参见参考文献[28]。

15. 矩阵的 Jordan 标准形 若矩阵 nn×A 有相重的特征值,例如 1λ 为三重特征值, 2λ 为二重特征值,又具有各异的

特征值 iλ ,则以下形如 J 的矩阵

=

λλ

λλ

λ

00000

00000

01000

00000

00010

00001

2

2

1

1

1

J (6-28)

叫做矩阵 A 的约当(Jordan)标准形矩阵,简称约当标准形,它近似一个对角矩阵。对于矩阵 A,

有一个非奇异矩阵 V,使约当标准形满足

VAVVAVJ ⋅⋅=⋅= −1\

在 MATLAB 中用函数命令 jordan ( )来求矩阵的约当标准形。函数的调用格式为:

[V,J]=jordan (A) 这种格式函数的输入参量 A 是对象矩阵,输出参量 J 是矩阵 A 的 Jordan 标准形矩阵,输

出参量V 即是那个使约当标准形满足 VAVVAVJ ⋅⋅=⋅= −1\ 的非奇异矩阵。

【例 6-33】已知矩阵

−−−−

−−−−=

7341196

2561436621

2941647625

116663212

A ,试计算 A 的约当标准形,并验算:

①约当标准形与特征值的关系;②非奇异矩阵 V 满足 VAVVAVJ ⋅⋅=⋅= −1\ 。

【解】

用以下 MATLAB 语句计算 A 的约当标准形矩阵并验算:

A=sym([12 32 66 116;-25 -76 -164 -294;21 66 143 256;-6 -19 -41 -73]);

d=eig(A)

[V,J]=jordan(A)

detV=det(V)

VAV=V\A*V

P1AP=inv(V)*A*V 语句执行结果

d = [ 1]

[ 2]

[ 1]

[ 2]

Page 256: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

244

V = [ 4, -2, 4, 3]

[ -6, 8, -11, -8]

[ 4, -7, 10, 7]

[ -1, 2, -3, -2]

detV= 1

J = [ 1, 1, 0, 0]

[ 0, 1, 0, 0]

[ 0, 0, 2, 1]

[ 0, 0, 0, 2]

VAV = [ 1, 1, 0, 0]

[ 0, 1, 0, 0]

[ 0, 0, 2, 1]

[ 0, 0, 0, 2]

P1AP = [ 1, 1, 0, 0]

[ 0, 1, 0, 0]

[ 0, 0, 2, 1]

[ 0, 0, 0, 2] 运行结果表明:①特征值正是约当标准形左对角线上的元素;② ( ) 01det ≠=V 即矩阵 V

非奇异;③非奇异矩阵 V 满足 J=V\A·V=V -1·A·V。

6.2 矩阵运算在线性控制系统状态空间分析中的应用

状态空间模型是控制系统最新与最科学的描述方法,它能够完全表达系统的全部状态与

性能。它不但能描述线性系统,而且也能描述非线性系统与时变系统。它既能描述单输入单

输出系统,也能描述多输入多输出系统。状态空间模型是现代控制理论的基础。状态空间模

型都是用矩阵表示的,所以矩阵运算是线性控制系统状态空间分析计算与仿真的基础。3.7 节

与 6.1 节介绍的内容是学习本节的基础。

6.2.1 控制系统状态空间分析的几个基本概念

在经典控制理论中,常用传递函数这个数学模型对于单输入—单输出系统进行计算、分

析及设计,这是一种行之有效的方法。

在现代控制理论中,用状态变量法来描述系统,这时控制系统是用一阶矩阵向量微分方

程来描述的。之所以采用矩阵表示法是为了使描述系统的数学表达式简捷而明了,方便而高

效,并且容易用计算机求解,同时也为多变量系统与时变系统的分析与研究提供有力的工具。

以下了解几个有关自动控制的基本概念。

1. 状态变量

动力学系统的状态变量是确定动力学系统状态的一组最小变量。如果以最少的 n 个变量

( )tx1 , ( )tx2 ,⋯, ( )txn 就能够完全描述动力学系统的行为(即当 t≥ 0t 时输入和在 t = 0t 时

的初始状态给定后,系统的状态将完全可以被确定),那么这样的 n 个变量 ( )tx1 , ( )tx2 ,⋯,

Page 257: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

245

( )txn 就是系统的一组状态变量。但对于该系统而言,这一组状态变量不是唯一的。系统的状

态可由某一组状态变量来描述,也可由其它组的状态变量来描述,它们都能表达系统的状态

与性能。

2. 状态向量

如果完全描述一个给定系统的动态行为需要 n 个状态变量,那么可将这些状态变量看作

是向量 x ( t )的各个分量,即

x ( t )

( )( )

( )

=

tx

tx

tx

n

2

1

(6-29)

x ( t )就叫做 n 维状态向量。

3. 状态空间

以各状态变量作为坐标轴所组成的 n 维空间叫做状态空间。在特定的时刻 t,状态向量则

可用状态空间中的一个点来表示。

4. 状态方程

由外部施加到系统上的全部激励作用叫做输入。描述系统状态变量与输入变量之间关系

的一阶微分方程组(连续时间系统)或一阶差分方程组(离散时间系统)叫做状态方程。其一般形

式: ( )tfx ,, ux= (6-30)

或 ( ) ( ) ( )[ ]kkkk tttft ,,1 uxx =+ (6-31)

状态方程表征了系统由输入所引起的内部状态的变化。

5. 输出方程

能够从外部量测到的来自系统的信息叫做输出 。描述系统输出变量与输入变量及状态变

量之间函数关系的代数方程叫做输出方程。其一般形式为:

( ) ( ) ( )[ ]tttgt ,, uxy = (6-32)

输出方程表征了系统内部状态的变化和输入所引起系统输出的变化,它是一个变换过程。

6. 状态空间表达式

状态方程与输出方程联立起来,构成一个对动态系统的完整描述,总称为系统的状态空

间表达式,又叫做动态方程。其一般形式为:

( ) ( ) ( )[ ]( ) ( ) ( )[ ]

==

tttgt

tttft

,,

,,

uxy

uxx (6-33)

或 ( ) ( ) ( )[ ]( ) ( ) ( )[ ]

==+

kkkk

kkkk

tttgt

tttft

,,

,,1

uxy

uxx (6-34)

7. 线性系统状态空间表达式

线性系统的状态方程是一阶向量线性微分方程或一阶向量线性差分方程;输出方程是向

量代数方程。对于连续时间系统它的一般形式为:

Page 258: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

246

( ) ( ) ( ) ( ) ( )( ) ( ) ( ) ( ) ( )

+=+=

ttttt

ttttt

uDxCy

uBxAx (6-35)

而对于离散时间系统,由于在实践中常取 kTtk = (T 叫做该离散时间系统的采样周期),

故其状态空间表达式的一般形式可为:

( ) ( ) ( ) ( ) ( )( ) ( ) ( ) ( ) ( )

+=+=+

kkkkk

kkkkk

uDxCy

uGxFx 1 (6-36)

一般情况下,若状态 x、输入 u、输出 y 的维数分别为 n、p、q,则称 nn × 矩阵 ( )tA 与 ( )kF

为系统矩阵或状态矩阵;称 pn × 矩阵 ( )tB 与 ( )kG 为控制矩阵或输入矩阵;称 nq × 矩阵 ( )tC 与

( )kC 为观测矩阵或输出矩阵;称 pq × 矩阵 ( )tD 与 ( )kD 为输入输出矩阵。

在线性系统状态空间表达式中,若系数矩阵 ( )tA 、 ( )tB 、 ( )tC 、 ( )tD 或 ( )kF 、 ( )kG 、 ( )kC 、

( )kD 的各元素都是常数,则称该系统为线性定常系统,否则叫线性时变系统。线性定常系统

的一般形式为: ( ) ( ) ( )( ) ( ) ( )

+=+=

ttt

ttt

DuCxy

BuAxx (6-37)

( ) ( ) ( )( ) ( ) ( )

+=+=+

kkk

kkk

DuCxy

GuFxx 1 (6-38)

6.2.2 系统状态方程的解

控制系统的数学模型建立以后,只有求得了系统状态方程的解,才能确定系统的行为,

完成系统分析与设计的任务。

考察非齐次状态方程

BuAxx += (6-39) 式中 x 为 n 维向量,u 为 p 维向量,A 为 nn × 常数矩阵,B 为 pn × 常数矩阵。把式 (6-39)改

写成 ( ) ( ) ( )ttt BuAxx =−

以 At−e 左乘等式两边有

( ) ( )[ ] ( )[ ] ( )ttt

tt AtAtAt BuxAxx −−− ==− eed

de

在 0 到 t 之间对上式进行积分,可得:

( ) ( ) ( ) τττ de0e0

Buxx ∫ −− +=t

AAt t

再以 Ate 左乘上式两边,即得到状态方程的解:

( ) ( ) ( ) ( ) τττ de0e0

Buxx ∫ −+=t

tAAtt (6-40)

或 ( ) ( ) ( ) ( ) ( ) τττ d00

Buxx ∫ −+=t

ttt ΦΦ (6-41)

根据卷积的概念(参见 3.9 节),式(6-41) 还与下式等效:

( ) ( ) ( ) ( ) ( ) τττ d00

−+= ∫ tttt

Buxx ΦΦ (6-42)

Page 259: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

247

若状态方程是齐次的,即有

Axx = (6-43)

其解为 ( ) ( )0e xx Att = (6-44)

或 ( ) ( ) ( )0xx tt Φ= (6-45)

在以上的式(6-40)、式(6-41)、式(6-42)、式(6-44)与式(6-45)中,均假定初始时刻为零。如

果初始时刻为 t0,则 ( )0x 应改为 x ( )0t ,Φ ( ) Att e= 应改为Φ ( ) ( )0e0ttAtt −=− ,积分式的下限

0 应改为 0t 。

根据幂级数展开公式有:

Φ ( ) ( )[ ]1122

!

1

!2

1e −− −=+++++== AELAAAE st

kttt kkAt (6-46)

式中 E 为 n 阶单位矩阵,Φ (t)叫做控制系统的状态转移矩阵或称为矩阵指数函数。

【例 6-34】已知控制系统状态矩阵为:

−−

−=

300

020

001

A

用拉氏变换法求控制系统的状态转移矩阵Φ (t)。

【解】

用以下 MATLAB 语句计算控制系统的状态转移矩阵Φ (t):

syms s t;

A=[-1 0 0;0 -2 0;0 0 -3];I=[1 0 0;0 1 0;0 0 1];

B=s*I-A;C=det(B);E=inv(B);

phit=collect(factor(ilaplace(E)))

语句执行结果

phit = [ exp(-t), 0, 0]

[ 0, exp(-2*t), 0]

[ 0, 0, exp(-3*t)]

运算结果表明状态转移矩阵为:

Φ (t) [ ]

=−==−

−−

t

t

t

At s3

211

e00

0e0

00e

e AEL

【例 6-35】已知控制系统状态矩阵为:

−−=

120

010

112

A

试求:① 控制系统的特征矩阵;② 特征矩阵的行列式;③ 特征矩阵的逆;④ 用拉氏变换

法求控制系统的状态转移矩阵Φ (t)。

【解】

用以下 MATLAB 语句对控制系统进行计算:

syms s t;

Page 260: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

248

A=[2 -1 -1;0 -1 0;0 2 1];I=[1 0 0;0 1 0;0 0 1];

B=s*I-A

C=factor(det(B))

E=factor(inv(B))

phit=collect(factor(ilaplace(E)))

语句执行结果

B = [ s-2, 1, 1]

[ 0, s+1, 0]

[ 0, -2, s-1]

C = (s-2)*(s+1)*(s-1)

E = [ 1/(s-2), -1/(s-1)/(s-2), -1/(s-1)/(s-2)]

[ 0, 1/(s+1), 0]

[ 0, 2/(s+1)/(s-1), 1/(s-1)]

phit = [ exp(2*t), -exp(2*t)+exp(t), -exp(2*t)+exp(t)]

[ 0, exp(-t), 0]

[ 0, -exp(-t)+exp(t), exp(t)] 计算结果表明:

(1) 系统特征矩阵: [ ]

−−+

−=−=

120

010

112

s

s

s

s AEB ;

(2) 特征矩阵的行列式: ( )( )( )112 −+−=−= ssss AEC ;

(3) 特征矩阵的逆: [ ]( )( ) ( )( )

( )( )

−−+

+

−−−

−−−

=−= −

1

1

11

20

01

10

21

1

21

1

2

1

1

sss

s

sssss

s AEE ;

(4) 状态转移矩阵:Φ ( ) [ ]

+−

+−+−=−==

−−−

ttt

t

ttttt

At est

eee0

00

eeeee

e

222

11 AEL

【例 6-36】已知系统状态方程为

uxx

+

−−

−=

4

1

0

200

010

011

试求初始状态 ( ) ( )1;2;10 =x 时,系统在单位阶跃输入信号 ( ) ( )tt 1=u 作用下方程的解。

【解】

(1) 用以下 MATLAB 语句先计算齐次状态方程的解:

syms s t x0 x tao;

A=[-1 1 0;0 -1 0;0 0 -2];E=[1 0 0;0 1 0;0 0 1];

B=s*E-A;C=det(B);D=collect(inv(B));

Page 261: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

249

F0=ilaplace(D);x0=[1;2;1];x=F0*x0

t=tao;F=subs(F0,’t’,t) 语句执行结果

x = [ exp(-t)+2*t*exp(-t)]

[ 2*exp(-t)]

[ exp(-2*t)]

F = [ exp(-tao), tao*exp(-tao), 0]

[ 0, exp(-tao), 0]

[ 0, 0, exp(-2*tao)]

即齐次状态方程的解为:

( ) tt ttx −− += e2e1 , ( ) ttx −= e22 , ( ) ttx 23 e −=

(2) 根据式(6-42)再用以下 MATLAB 语句计算系统在单位阶跃输入信号 ( ) ( )ttu 1= 作用下

非齐次状态方程的解:

syms s t tao;

x=[exp(-t)+2*t*exp(-t);2*exp(-t);exp(-2*t)];

F=[exp(-tao) tao*exp(-tao) 0;0 exp(-tao) 0;0 0 exp(-2*tao)];

b=[0;1;4];f=F*b;bu=int(f,tao,0,t)

xbu=x+bu

语句执行结果

bu = [ -t*exp(-t)-exp(-t)+1]

[ -exp(-t)+1]

[ -2*exp(-2*t)+2]

xbu = [ t*exp(-t)+1]

[ exp(-t)+1]

[ -exp(-2*t)+2] 即系统在单位阶跃输入信号 ( ) ( )tt 1=u 作用下非齐次状态方程的解:

( )( )( )( )

−+

+=

=

t

t

tt

tx

tx

tx

t2

3

2

1

e2

e1

e1

x

6.2.3 系统状态方程的线性变换

为对于系统进行分析与综合设计,经常需要对系统作各种非奇异变换,如将状态矩阵对

角化、约当化,将其化为可控标准形,或化为可观测标准形等。这里,先来了解系统的传递

矩阵与线性变换的概念。

1. 传递矩阵

设系统的状态方程为

BuAx +=x (6-47)

系统的输出方程为 DuCxy += (6-48)

Page 262: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

250

x 为 n 维状态向量,u 为 p 维输入向量,y 为 q 维输出向量,A、B、C、D 分别为 nn × 、

pn × 、 nq × 、 pq × 常数矩阵。

对输入方程式(6-47) 两边进行拉氏变换(请参见 3.9 节),则有:

( ) ( ) ( ) ( )ssss BuxAxx +=− 0

移项并整理有: [ ] ( ) ( ) ( )sss BuxxAE +=− 0

以 [ ] 1−− AEs 式左乘上式等号两边,可得:

( ) [ ] ( ) [ ] ( )ssss BuAExAEx 11 0 −− −+−= (6-49)

再对于输出方程式(6-48) 两边进行拉氏变换,则有: ( ) ( ) ( )sss DuCxy += (6-50)

将式 (6-49) 代入式 (6-50) 则有:

( ) [ ] ( ) [ ] ( )ssss uDBAECxAECy +−+−= −− 11 0 (6-51)

若初始状态为零,式 (6-51) 则为:

( ) [ ] ( )sss uDBAECy +−= −1 (6-52)

由式(6-52) 可定义传递矩阵为:

( ) ( )( ) [ ] DBAEC

u

yG +−== −1s

s

ss (6-53)

传递矩阵 ( )sG 是一个 pq × 矩阵,可用来表示系统输出与输入之间的关系,即

( ) ( ) ( )sss uGy = (6-54)

在已知线性定常系统动态方程中的 A、B、C、D 之后,可以通过式(6-53) 计算传递矩阵 ( )sG 。

【例 6-37】已知系统的参数矩阵为:

−−

−=

041

020

122

A ,

−=

1

0

0

B , [ ]111 −=C , 1=D

试求该系统的传递矩阵 ( )sG 。

【解】 用以下 MATLAB 语句计算系统的传递矩阵 ( )sG :

syms s;

A=[-2 2 1;0 -2 0;1 -4 0];B=[0;0;-1];C=[1 -1 1];

E=[1 0 0;0 1 0;0 0 1];D=1;F=inv(s*E-A);

G=simple(C*F*B+D)

语句执行结果

G = (-4+s+s^2)/(s^2+2*s-1)

即系统的传递矩阵为:

( )12

42

2

−+−+=ss

sssG

【例 6-38】已知系统的动态方程为:

Page 263: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

251

+

−−=

+

−−

=

3

2

1

3

2

1

3

2

1

2

1

2

1

2

1

10

00

03

12

11

1211

01

32

10

u

u

u

x

x

x

y

y

yu

u

x

x

x

x

试求该系统的传递矩阵 ( )sG 。

【解】

已知系统的参数矩阵

−−

=32

10A ,

=

11

01B ,

−−=

12

11

12

C ,

=

10

00

03

D

用以下 MATLAB 语句计算系统的传递矩阵 ( )sG :

syms s;

A=[0 1;-2 -3];B=[1 0;1 1];C=[2 1;1 1;-2 -1];

D=[3 0;0 0;0 1];E=[1 0;0 1];F=inv(s*E-A)

G=simple(simple(C*F*B)+D) 语句执行结果

F = [ (3+s)/(3*s+s^2+2), 1/(3*s+s^2+2)]

[ -2/(3*s+s^2+2), s/(3*s+s^2+2)]

G = [ 3/(1+s)+3, 1/(1+s)]

[ 2/(s+2), 1/(s+2)]

[ -3/(1+s), -1/(1+s)+1] 即系统的传递矩阵 ( )sG 为:

( )

( )

++−

++

+++

=

11

32

1

2

21

1

1

23

s

s

s

ss

ss

s

sG

2.. 状态方程的线性变换

对于一个给定的动态系统,可以选取多组不同的状态变量,所以同一系统可以有许多状

态空间表达式,但这些状态空间表达式却描述着同一个物理现象。状态变量的不同选取,实

质上是状态变量间的一种线性变换或称坐标变换。如果已知状态变量之间的变换关系,就很

容易建立起系数矩阵之间的转换关系。

如果系统在 x 坐标系里的动态方程为:

=+=

xy

uxx

C

BA (6-55)

在 x 坐标系里的动态方程为:

=+=

xy

uxx

C

BA(6-56)

当系统从坐标系 x 变换到 x 时(即 xx P= ),根据自动控制原理,则两坐标系相应矩阵之

Page 264: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

252

间有下列关系成立:

===

CPC

BPB

APPA1

1

(6-57)

则称为对系统进行 P 变换。

反之,从 x 坐标系逆向变换到 x 坐标系,所进行的变换为 xx 1−= P ,根据自动控制原理,

两坐标系相应矩阵之间有以下关系

===

1

1

PCC

BPB

PAPA (6-58)

存在,此则称为对系统进行 1−P 变换。

经线性变换之后,虽然系统的状态变量变了,状态方程也变了,但是系统状态矩阵 A 与

矩阵 A 都具有相同的特征值。因为:

( ) AEAEPPPAEPPAEP

APPPPAPPPPAPPEAE

−=−=−=−=

−=−=−=−

−−−

−−−−−

ssss

ssss

111

11111

(6-59)

这就是系统特征值的不变性。请看以下示例。

【例 6-39】已知控制系统

uxx

+

−−−=

1

0

0

6116

100

010

欲对系统进行坐标变换,其变换关系为

−−−=

941

321

111

P 。试求系统线性变换后的系统动态

方程,并验证系统状态矩阵特征值的不变性。

【解】 (1) 系统从坐标系 x 变换到 x 坐标系时( xx P= ),其变换关系为式(6-57)。可以用以下

MATLAB 语句求系统的线性变换矩阵:

A=[0 1 0;0 0 1;-6 -11 -6];B=[0 0 1]’;

P=[1 1 1;-1 -2 -3;1 4 9];P1=inv(P)

A1=P1*A*P

B1=P1*B 程序运行后得 x 坐标系的系数阵:

P1 = 3.0000 2.5000 0.5000

-3.0000 -4.0000 -1.0000

1.0000 1.5000 0.5000

A1 = -1.0000 0.0000 -0.0000

0.0000 -2.0000 0.0000

-0.0000 -0.0000 -3.0000

Page 265: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

253

B1 = 0.5000

-1.0000

0.5000 由以上计算数据可得系统 x 坐标系里的动态方程为:

u

−+

−−

−=

5.0

1

5.0

300

020

001

3

2

1

3

2

1

x

x

x

x

x

x

(2) 用以下 MATLAB 语句验证系统状态矩阵特征值的不变性:

syms s;

A=[0 1 0;0 0 1;-6 -11 -6];

E=[1 0 0;0 1 0;0 0 1];

A1=P1*A*P;

sEA=det(s*E-A)

digits 2;

sEA1=vpa(det(s*E-A1),2)

语句执行结果

sEA = s^3+6*s^2+11*s+6

sEA1 = 11.*s+6.0*s^2+6.0+s^3 计算结果表明 =− AEs AE −s ,即系统状态矩阵特征值的不变性得到验证。

【例 6-40】 对【例 6-39】 x 坐标系里的系统进行坐标反变换(即是从 x 坐标系逆向变换到 x

坐标系)。

【解】

从 x 坐标系逆向变换到 x 坐标系,需进行 xx 1−= P 变换,有关系式(6-58)。

由【例 6-39】已知 1−P (P1=inv(P))与系统 x 坐标系里的动态方程分别为:

−−−=−

5.05.11

143

5.05.231P , u

−+

−−

−=

5.0

1

5.0

300

020

001

3

2

1

3

2

1

x

x

x

x

x

x

用以下 MATLAB 语句求系统的线性反变换矩阵:

A1=[-1 0 0;0 -2 0;0 0 -3];B1=[0.5 -1 0.5]’;

p1=[3 2.5 0.5;-3 -4 -1;1 1.5 0.5];

P=inv(P1);

A=P*A1*P1

B=P*B1 程序运行后可得:

A = 0.0000 1.0000 0.0000

0 0 1.0000

-6.0000 -11.0000 -6.0000

B =-0.0000

0.0000

Page 266: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

254

1.0000 将矩阵 A、B 代入式(6-47),则有:

u

+

−−−=

1

0

0

6116

100

010

3

2

1

3

2

1

x

x

x

x

x

x

上式即为 x 坐标系里的状态方程。

3. 范德蒙特(Vandermonde)矩阵及约当标准形

如果状态矩阵 A 具有如下的标准形式(有文献将这种形式称为友矩阵或正则形矩阵)

−−−−

=

−1210

1000

0100

0010

naaaa

A (6-60)

并且 A 又具有各异的特征值 1λ , 2λ ,⋯⋯, nλ ,则以下范德蒙德矩阵 P

=

−−−− 113

12

11

223

22

21

321

1111

nn

nnn

n

n

λλλλ

λλλλλλλλ

P (6-61)

可使 A 对角化。 如果矩阵 nn×A 有相重的特征值,并且按 iλ 所解得的独立特征向量的数目小于 n ,则矩阵

A 不能化为对角阵。但仍存在一个线性变换矩阵 P,使 A 变换成

APPJ 1−= (6-62)

J 矩阵接近是一个对角矩阵,叫做约当(Jordan)标准形矩阵,简称约当标准形。例如:

=

3

2

2

1

1

1

00000

10000

01000

00100

00010

00001

λλ

λλ

λλ

J (6-63)

设 jλ 为 K 重根,对应于 jλ 的约当块为:

KKj

j

j

×

λ

λλ

0

1

01

(6-64)

而与 jλ 相对应的独立特征值向量为:

[ ]Tnjjjjp 121 −= λλλ (6-65)

Page 267: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

255

则与约当块相对应的变换矩阵部分为:

=

1

1

2

2

Kj

jK

j

j

j

jj

d

pd

d

pd

d

dppP

λλλ (6-66)

在 6.1 节已经介绍过,MATLAB 中用函数命令 jordan ( )来求矩阵的约当标准形,此处不

再重述。需要补充说明的是,当矩阵 A 的特征值互异时,函数命令 jordan ( )也可用来将矩阵 A

对角化。请看以下示例。

【例 6-41】已知系统的正则形状态矩阵为

−−−=

6116

100

010

A

试求①线性变换矩阵 P;②若矩阵 A 的特征值互异时,就将矩阵 A 化为对角矩阵;否则求矩

阵 A 的约当标准形。

【解】

(1) 用以下 MATLAB 语句求系统的特征值:

A=[0 1 0;0 0 1;-6 -11 -6];d=eig(A);

d1=d(1,:)

d2=d(2,:)

d3=d(3,:) 语句执行结果

d1 = -1.0000

d2 = -2.0000

d3 = -3.0000 运算数据表明:系统有互异特征值 3,2,1 321 −=−=−= λλλ 。

(2) 用以下 MATLAB 语句求线性变换矩阵 P 与对角矩阵:

syms a b c d e f g h k lambda1 lambda2 lambda3 p1 p2 p3;

p1=[1 lambda1 lambda1^2].’;p2=[1 lambda2 lambda2^2].’;

p3=[1 lambda3 lambda3^2].’;P=[a b c;d e f;g h k];

P(:,1)=p1;P(:,2)=p2;P(:,3)=p3;

lambda1=-1;lambda2=-2;lambda3=-3;

P=subs(P,’[lambda1 lambda2 lambda3]’,[lambda1 lambda2 lambda3])

A=[0 1 0;0 0 1;-6 -11 -6];

P1=inv(P);

J=P1*A*P 语句执行结果

P = 1 1 1

-1 -2 -3

1 4 9

J = -1.0000 0.0000 -0.0000

0.0000 -2.0000 0.0000

-0.0000 -0.0000 -3.0000

Page 268: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

256

−−−=

941

321

111

P ,

−−

−=

300

120

001

J

(3) 用以下 MATLAB 语句验算化为对角矩阵:

A=[0 1 0;0 0 1;-6 -11 -6];

Jordan=jordan(A)

语句执行结果

Jordan = -1 0 0

0 -2 0

0 0 -3

运算数据表明:对角矩阵计算正确。

【例 6-42】已知系统的正则形状态矩阵为

−−−=

584

100

010

A

试求①线性变换矩阵 P;②若矩阵 A 的特征值互异时,就将矩阵 A 化为对角矩阵;否则求矩

阵 A 的约当标准形。

【解】

(1) 用以下 MATLAB 语句求系统的特征值:

A=[0 1 0;0 0 1;-4 -8 -5];

d=eig(A);

d1=d(1,:)

d2=d(2,:)

d3=d(3,:) 语句执行结果

d1 = -1.0000

d2 = -2.0000

d3 = -2.0000 运算数据表明:系统特征值 2,2,1 321 −=−=−= λλλ 。

(2) 用以下 MATLAB 语句求线性变换矩阵 P 与约当标准形:

syms a b c d e f g h k lambda1 lambda2 lambda3 p1 p2 p3;

p1=[1 lambda1 lambda1^2].’;

p2=[1 lambda2 lambda2^2].’;

p3=diff(p2,’lambda2’);

P=[a b c;d e f;g h k];

P(:,1)=p1;

P(:,2)=p2;

P(:,3)=p3;

lambda1=-1;lambda2=-2;lambda3=-2;

P=subs(P,’[lambda1 lambda2 lambda3]’,[lambda1 lambda2 lambda3])

Page 269: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

257

A=[0 1 0;0 0 1;-4 -8 -5];

P1=inv(P);

Jordan=P1*A*P

语句执行结果

P = [ 1, 1, 0]

[ (-1), (-2), 1]

[ 1, 4, -4]

Jordan = [ -1, 0, 0]

[ 0, -2, 1]

[ 0, 0, -2]

−−−=

441

121

011

P ,

−−

−=

200

120

001

Jordan

(3) 用以下 MATLAB 语句验算约当标准形:

A=[0 1 0;0 0 1;-4 -8 -5];

Jordan=jordan(A)

语句执行结果

Jordan = -1 0 0

0 -2 1

0 0 -2 运算数据表明:约当标准形计算正确。

[说明] 系统特征值 2,2,1 321 −=−=−= λλλ ,对应着 MATLAB 程序中的语句为:

p1=[1 lambda1 lambda1^2].’;

p2=[1 lambda2 lambda2^2].’;

p3=diff(p2,’lambda2’);

即 [ ]T2111 1 λλ=p , [ ]T2

222 1 λλ=p , [ ]T12

23 210

d

d λλ

==p

p

6.2.4 矩阵运算在线性系统的可控性与可观性分析中的应用

所谓系统的可控性是指系统的状态是能够可以被控制还是不能被控制;严格地说,系统

可控与状态的可控是有区别的。而系统的可观(测)性则是指系统状态的变化能够由输出检测反

映出来还是不能由输出检测反映出来。系统的可控性与可观性对系统的设计至关重要。

6.2.4.1 线性系统的可控性

1. 离散系统的完全可控性

离散线性定常系统: ( ) ( ) ( )( ) ( ) ( )

+=+=+

kkk

kkk

DuCxy

GuFxx 1 (6-67)

式中 ( )kx 为 n 维状态向量, ( )ku 为 p 维输入量,F 为 nn × 非奇异阵;G 为 pn × 矩阵(若为

Page 270: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

258

单输入时则 p =1),状态向量系统完全可控的必要且充分的条件是下列可控性矩阵

[ ]GFGFGCO 1−= n (6-68)

之秩为 n ( n 是状态向量 ( )kx 的维数), 即:

[ ] nn =− GFGFG 1rank (6-69)

也可以用 MATLAB 求可控性矩阵的函数命令 ctrb ( )求 npn × 可控性矩阵 CO ( np 意为

pn × 之值)。函数命令 ctrb ( ) 的调用格式为:

CO= ctrb(A,B) 其中,输入参量 A 为离散系统的系统矩阵 F 或者连续系统的系统矩阵 A ,输入参量 B 为离散

系统的控制矩阵 G 或者连续系统的控制矩阵 B,函数返回的就是系统可控性矩阵 CO。可见

函数 ctrb ( ) 既适用于离散系统,也适用于连续系统。

【例 6-43】有离散系统方程:

( ) ( ) ( )( ) ( ) ( )

+=+=+

kkk

kkk

DuCxy

GuFxx 1

已 知 方 程 式 中 : F=[0.9048 0 0;0.1338 0.4651 -0.2237;0.0243 0.2237 0.9602] ;

G=[0.0952;0.0784;0.0135];C=[0 0 2.5298];D=0;①试用函数命令 ctrb ( )验算式(6-68);②设

采样周期 T=0.1 s,试确定离散系统的可控性。

【解】

(1) 用 MATLAB 函数命令 ctrb ( )验算式 [ ]GFGFGCO 1−= n :

F=[0.9048 0 0;0.1338 0.4651 -0.2237;0.0243 0.2237 0.9602];A=F;

G=[0.0952;0.0784;0.0135];B=G;

C=[0 0 2.5298];D=0;n=3;

CAM=ctrb(A,B)

CO=[G F*G F*F*G]

程序运行结果

CAM =

0.0952 0.0861 0.0779

0.0784 0.0462 0.0257

0.0135 0.0328 0.0439

CO =

0.0952 0.0861 0.0779

0.0784 0.0462 0.0257

0.0135 0.0328 0.0439 运行结果表明,可控性矩阵 CAMCO = 。

(2) 已知离散系统方程的常数矩阵(F、G、C 与 D),计算系统的可控性矩阵,最后计算可

控性矩阵的秩。根据状态完全可控必要且充分的条件即可控性矩阵的秩为系统的阶次 n ,来

确定系统的可控性。可用以下 MATLAB 程序来确定离散系统的可控性:

F=[0.9048 0 0;0.1338 0.4651 -0.2237;0.0243 0.2237 0.9602];A=F;

G=[0.0952;0.0784;0.0135];B=G;

Page 271: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

259

C=[0 0 2.5298];D=0;N=size(F);n=N(1)

CAM=ctrb(A,B);rcam=rank(CAM);

if rcam ==n

disp(’System is controlled’)

elseif rcam<n

disp(’System is no controlled’)

end

程序运行结果

n = 3

System is controlled 运行结果表明,系统是完全可控的。

2. 连续系统的完全可控性

设线性系统的动态方程为:

+=+=

DuCxy

BuAxx

式中 A 、B、C、D 分别为 nn× 、 pn × 、 nq × 与 pq × 常数矩阵。

系统完全可控的条件是下列 npn × 可控性矩阵( np 意为 pn × 之值)

[ ]BABAABBCO 12 −= n (6-70)

的秩为 n ( n 是状态向量 ( )tx 的维数),即

[ ] nrank n =− BABAABB 12 (6-71)

【例 6-44】已知状态方程

uxx

+

−−

−=

3

4

0

200

010

011

试确定系统的可控性。

【解】

(1) 用 MATLAB 函数命令 ctrb ( )验算式 [ ]BABAABBCO 1−= n2 :

A=[-1 1 0;0 -1 0;0 0 -2]; B=[0;4;3];

CO=[B A*B A*A*B]

CAM=ctrb(A,B) 语句运行结果

CO = 0 4 -8

4 -4 4

3 -6 12

CAM = 0 4 -8

4 -4 4

3 -6 12 运行结果表明,可控性矩阵 CAMCO = 。

(2) 可用以下 MATLAB 程序来确定连续系统的可控性:

Page 272: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

260

A=[-1 1 0;;0 -1 0;0 0 -2]; B=[0;4;3];

N=size(A);n=N(1);CAM=ctrb(A,B);rcam=rank(CAM);

if rcam ==n

disp(’System is controlled’)

elseif rcam<n

disp(’System is no controlled’)

end 程序运行结果

System is controlled

运行结果表明,系统是可控的。

3. 连续系统的状态完全可控标准形 对于单输入系统 bA, ,若其状态矩阵与输入矩阵具有如下的正则标准形式

−−−−

=

−1210

1000

0100

0010

naaaa

A 与

=

1

0

0

0

b (6-72)

则系统一定可控,该矩阵对 ( )bA, 被叫做可控标准形。

若 n 维单输入线性系统可控,则一定能找到一个线性变换将系统变换成可控标准形。其

变换矩阵 P 可按以下步骤求得。

系统可控性矩阵

[ ]bAbAAbbS 1−= n2 (6-73)

为非奇异,其逆矩阵一定存在。若设

⋅=−

T

T2

T1

1

ns

s

s

cS (6-74)

式中 1s , 2s ,⋯, ns 为 1×n 列向量;c 为任意常数。则用 Tns , AT

ns ,⋯, 1T −nns A 构成的

下述矩阵即为变换矩阵

=

−1T

T

T

nn

n

n

s

s

s

A

AP

(6-75)

式中 Tns 是式(6-74)右端矩阵中最下的一个列向量。

【例 6-45】已知系统状态方程为:

uBxAx +=

Page 273: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

261

式中

−−−−

−=

5116

6116

110

A ,

=

1

1

0

B

①试求变换矩阵;②并将系统状态方程化为可控标准形;③确定原系统与变换后系统是

否可控。

【解】

(1) 将系统状态方程化为可控标准形

根据已知系统参数,首先计算系统的可控形矩阵及其行列式的值。若可控形矩阵的行列

式的值 0≠ ,必可计算系统可控形矩阵的逆;根据公式(6-74),系统可控形矩阵的逆的最后一

行是变换矩阵的第一行;按公式(6-75)依次计算变换矩阵的第二行第三行;再根据以上数据可

求出变换矩阵及其逆矩阵;最后计算系统可控标准形的矩阵对。还须说明,作矩阵线性变换时,

要应用从 x 坐标系逆向变换到 x 坐标系,所进行的变换为 xx 1−= P ,即对系统进行 1−P 变换,

两坐标系相应矩阵之间的关系应满足(6-58) 式。

根据这个思路给出以下 MATLAB 程序:

A1=[0 1 -1;-6 -11 6;-6 -11 5];B1=[0 1 1]’;S=ctrb(A1,B1);

if det(S)~=0

s1=inv(S);

end

P=[s1(3,:);s1(3,:)*A1;s1(3,:)*A1*A1]

P1=inv(P);

A=P*A1*P1

B=P*B1 程序运行结果

P = 1 0 0

0 1 -1

0 0 1

A = 0 1 0

0 0 1

-6 -11 -6

B = 0

0

1

即系统的变换矩阵与可控标准形对为:

−=

100

110

001

P ,

−−−=

6116

100

010

A ,

=

1

0

0

B

[说明]

s1(3,:)表示矩阵 1−S 中第 3 行对应的所有列元素组成的子数组。

(2) 用以下 MATLAB 程序确定原系统与变换后系统是否可控:

Page 274: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

262

A1=[0 1 -1;-6 -11 6;-6 -11 5];B1=[0 1 1]’;S=ctrb(A1,B1);

N1=size(A1);n1=N1(1);rS=rank(S);

if rS ==n1

disp(’A1B1 System is controlled’)

elseif rS<n1

disp(’A1B1 System is no controlled’)

end

if det(S)~=0

s1=inv(S);

end

P=[s1(3,:);s1(3,:)*A1;s1(3,:)*A1*A1];

P1=inv(P);A=P*A1*P1;B=P*B1;

N=size(A);n=N(1);CAM=ctrb(A,B);

rcam=rank(CAM);

if rcam ==n

disp(’AB System is controlled’)

elseif rcam<n

disp(’AB System is no controlled’)

end

程序运行结果

A1B1 System is controlled

AB System is controlled 运行结果表明,原系统与变换后系统都是完全可控的。

4. 连续系统的输出可控性

在控制系统的设计中,有时需要控制系统的输出,而不是控制系统的状态。对于输出控

制而言,状态完全可控既不是必要的,也不是充分的,因此需要定义系统的输出完全可控性。

若系统的状态方程为:

+=+=

DuCxy

BuAxx

式中 A 、B 、C 与 D 分别为 nn × 、 pn × 、 nq × 与 pq × 常数矩阵,状态变量 x、输入变量 u、

输出变量 y 的维数分别为 n 、 p 、 q 。

如果存在一个无约束的分段连续的控制向量 ( )tu ,在有限时间 ( )0tt f − 内,使得任一输出

( )0ty 能够转移到 ( )fty ,则称这个系统为输出完全可控。

上述系统输出完全可控的必要充分条件为下列 ( ) pnq 1+× 矩阵

[ ]DBCABCACABCBT 1−= n2

的秩为 q,即

( ) [ ] qrankrank n == − DBCABCACABCBT 12 (6-76)

T 称为输出可控性矩阵, q 为输出变量的维数。

【例 6-46】已知系统动态方程为:

Page 275: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

263

=

130

020

002

A ,

=

0

1

1

B ,

=

321

111C

试计算输出可控性矩阵 T 并确定系统状态的可控性与输出可控性。

【解】

(1) 用以下 MATLAB 程序确定系统状态的可控性:

A=[2 0 0;0 2 0;0 3 1];B=[1;1;0];C=[1 1 1;1 2 3];D=0;N=size(A);n=N(1);

CAM=ctrb(A,B);

if det(CAM)~=0

rcam=rank(CAM)

if rcam ==n

disp(’System is controlled’)

elseif rcam<n

disp(’System is no controlled’)

end

elseif det(CAM)==0

disp(’System is no controlled’)

end

程序运行结果

System is no controlled

运行结果表明,系统状态是不可控的。

(2) 用以下 MATLAB 程序确定系统输出的可控性:

A=[2 0 0;0 2 0;0 3 1];B=[1;1;0];C=[1 1 1];D=0;

t1=C*B;t2=C*A*B;t3=C*A^2*B;

T=[t1 t2 t3 D]

M=size(T);q=M(1);

rcaq=rank(T)

if rcaq ==q

disp(’System Output is controlled’)

elseif rcaq~=q

disp(’System Output is no controlled’)

end

程序运行结果

T =

2 7 17 0

rcam =

1

System Output is controlled

运行结果表明,输出可控性矩阵 [ ]01772=T ,并且系统输出是可控的。

Page 276: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

264

6.2.4.2 线性系统的可观测性

1. 线性离散系统的完全可观测性

设离散系统为

( ) ( ) ( ) ( ) ( )( ) ( ) ( ) ( ) ( )

+=∈+=+

kkkkk

Tkkkkkk k

uDxCy

uGxFx 1 (6-77)

若对初始时刻 kTl ∈ 的任一非零初始状态 ( ) 0xlx = ,都存在有限时刻 kTm ∈ , lm > ,且可由

[ ]ml, 上的输出 ( )ky 唯一地确定 0x ,则称系统在时刻 l 是完全可观测的。

式(6-77)中,F、G、C、D 为 nn × 、 pn × 、 nq × 与 pq × 矩阵。系统完全可观测的

条件为以下 nnq × ( nq 意为 qn × 之值)矩阵 1OB 的秩等于 n。即

=

−1

1

nCF

CF

C

OB

与 ( ) nrank =1OB (6-78)

可以用 MATLAB 的求可观性矩阵函数 obsv ( )来计算 nnq × 矩阵 OB 。函数 obsv ( ) 的调用格

式为:

OB= obsv(A,C) 其中,输入参量 A 即为离散系统的系统矩阵 F 或者连续系统的系统矩阵 A,输入参量 C 即为

离散系统的观测矩阵或者连续系统的观测矩阵,函数返回的就是系统可观性矩阵 OB 。可见

函数 obsv ( ) 既适用于离散系统,也适用于连续系统。 由于矩阵与其转置矩阵的秩是相同的,故系统完全可观测的条件又可为以下 nqn × 矩阵

2OB 的秩等于 n 。即

( )

=

− T1TTTT2 CFCFCOB

n 与 ( ) nrank =2OB (6-79)

【例 6-47】已知方程有离散系统方程:

( ) ( ) ( )( ) ( ) ( )

+=+=+

kkk

kkk

DuCxy

GuFxx 1

式中:C=[0 0 2.5298];D=0;F=[0.9048 0 0;0.1338 0.4651 -0.2237;0.0243 0.2237 0.9602];

G=[0.0952;0.0784;0.0135];①试用函数命令 obsv ( )验算式(6-78);②设采样周期 T=0.1 s,试

确定离散系统的可观测性。

【解】

(1) 用 MATLAB 函数命令 obsv ( )验算式(6-78)与(6-79):

F=[0.9048 0 0;0.1338 0.4651 -0.2237;0.0243 0.2237 0.9602];

G=[0.0952;0.0784;0.0135];C=[0 0 2.5298];D=0;

OB=obsv(F,C)

OB1=[C;C*F;C*F*F]

OB2=[C’ F’*C’ F’*F’*C’]’ 语句执行结果

OB = 0 0 2.5298

Page 277: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

265

0.0615 0.5659 2.4291

0.1904 0.8066 2.2058

OB1 = 0 0 2.5298

0.0615 0.5659 2.4291

0.1904 0.8066 2.2058

OB2 = 0 0 2.5298

0.0615 0.5659 2.4291

0.1904 0.8066 2.2058 计算结果表明: 21 OBOBOB == 。

(2) 用以下 MATLAB 程序确定离散系统的可观测性:

F=[0.9048 0 0;0.1338 0.4651 -0.2237;0.0243 0.2237 0.9602];

G=[0.0952;0.0784;0.0135];

C=[0 0 2.5298];D=0;N=size(F);n=N(1);

OB=obsv(F,C);

rob=rank(OB);

if rob ==n

disp(’System is observable’)

elseif rob~=n

disp(’System is no observable’)

end 程序执行结果

System is observable 计算结果表明:系统是可观的。

2. 连续系统的完全可观测性 如果在有限时间间隔 0t ≤ t ≤ ft 内,根据输出值 ( )ty 与给出的 ( )tu ,能够确定系统的初

始状态 ( )0tx 的每一个分量,则叫此系统为完全可观测的,简称可观测的。若系统中至少有一

个状态变量是不可观测的,则称此系统为不完全可观测,或简称不可观测。

设 n 维线性定常系统的动态方程为:

+=+=

DuCxy

BuAxx

式中 A、B、C、D 分别为 nn × 、 pn × 、 nq × 与 pq × 常数矩阵。系统完全可观测的条件为:

以下 nnq × 矩阵 1OB 的秩等于 n。即

=

−1CA

CA

C

OB

n

1 与 ( ) nrank =1OB (6-80)

或者以下 nqn × 可观测矩阵 2OB 的秩等于 n 。即

( )

=

− T1TTTT2 CACACOB

n 与 ( ) nrank =2OB (6-81)

Page 278: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

266

【例 6-48】已知线性系统动态方程为:

=

+

−−

−−=

xy

uxx

010

00101

00

10

041

020

122

试判别系统的可控性及可观测性。

【解】

用以下 MATLAB 程序判别系统的可控性及可观测性:

A=[-2 2 -1;0 -2 0;1 -4 0];B=[0 1;0 0;1 0];C=[1 0 0;0 1 0];D=[0];

CAM=ctrb(A,B);rcam=rank(CAM);N=size(A);n=N(1);

if rcam ==n

disp(’System is controlled’)

elseif rcam<n

disp(’System is no controlled’)

end

ob=obsv(A,C);

rob=rank(ob);

if rob ==n

disp(’System is observable’)

elseif rob~=n

disp(’System is no observable’)

end 程序运行结果

System is no controlled

System is observable

计算结果表明:本系统不可控但可观(测)。

3. 连续系统的完全可观测标准形 对于单输出系统 dcBA ,,, ,若其状态矩阵与输出矩阵有如下的标准形式

−−−

=

−1

2

1

0

100

010

001

000

na

a

a

a

A 与 [ ]1000 =c (6-82)

则该系统一定可观测,而矩阵对 ( )cA, 被叫做可观测标准形。

若单输入单输出系统可观测,则一定有一个线性变换 M xx M= (6-83)

可将系统转换为可观测标准形

=+=

xcy

uBxAx

Page 279: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

267

而以上两式中 A 与 c 将具有式(6-82)的标准形式。

若系统可观测,则有可观测矩阵 V

( )

=

− T1TTTT CACACVn

(6-84)

其逆矩阵 1−V 一定存在。设

=−

T

T2

T1

1

nv

v

v

V (6-85)

通过式(6-85)右端列向量最下一行元素 Tnv 构成的矩阵 P 可求得变换矩阵 M,即有

( )

=

−1TT

TT

T

nn

n

n

v

v

v

A

AP

(6-86)

与 TPM = (6-87)

进而求得可观测标准形的矩阵对: TT1 APPAMMA −− == (6-88)

TPcMcc == (6-89)

还有

BPBMB T1 == − (6-90)

【例 6-49】已知线性系统动态方程为:

[ ]

=

+

−−

−−=

xy

uxx

110

0

1

0

041

020

122

试求其变换矩阵,并将系统的动态方程化为可观测标准形。

【解】

用以下 MATLAB 程序求其变换矩阵并将系统的动态方程化为可观测标准形:

A=[-2 2 -1;0 -2 0;1 -4 0];B=[0;1;0];C=[0 1 1];D=[0];

V=obsv(A,C);

n=rank(V);

V1=inv(V);V10=(V1)’;

V11=(V10(3,:));VA=(V11)*(A)’;VAA=(V11)*(A)’*(A)’;

P=[V11;VA;VAA];

M=P’

A1=inv(M)*A*M

B1=inv(M)*B

Page 280: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

268

c1=C*M

程序运行结果

M = 2.0000 -3.0000 4.0000

0.3333 -0.6667 1.3333

-0.3333 0.6667 -0.3333

A1 = -0.0000 -0.0000 -2.0000

1.0000 -0.0000 -5.0000

0.0000 1.0000 -4.0000

B1 = -5.0000

-2.0000

1.0000

c1 = 0.0000 -0.0000 1.0000 计算求得变换矩阵为

−−−

−=

3/13/23/1

3/43/23/1

432

M

系统转换的可观测标准形为:

[ ]

==

−−

+

−−−

=+=

xxcy

uxuBxAx

1001

2

5

410

501

200

6.2.5 矩阵运算在系统状态反馈与状态观测器分析中的应用

负反馈闭环控制既是一种重要的控制策略,也是系统设计的主要方式。经典控制理论是

用传递函数来描述系统的,常用输出量作反馈量,此即为输出反馈。现代控制理论的特点是

用系统内部的状态变量来描述系统,所以在建立了状态变量的概念后,系统除了输出反馈之

外,还有状态反馈这种新的控制形式,因此也要建立状态反馈的概念。

先来介绍系统输出反馈后与状态反馈后的动态方程。

1. 系统的输出反馈与闭环系统的传递矩阵

设有如图 6-1 所示输出反馈系统,在原系统A、B、C中引入输出反馈后,系统的动态方

程为: HyBuAxx −+= (6-91)

系统的输出方程为: Cxy = (6-92)

将式(6-92)代入式(6-91)即得: ( ) BuxHCAx +−= (6-93)

Cxy = (6-94)

这就是由输出反馈构成的新动态方程。 另一种输出反馈的形式如图 6-2 所示。图中 ( )sG 为系统前向通道的传递矩阵,反馈通道

的传递矩阵为 ( )sH 。反馈向量 z ( )s 与误差向量 ( )se 之间有:

Page 281: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

269

( ) ( ) ( ) ( ) ( ) ( )ssssss eGHyHz == (6-95)

由此可求得 ( )z s 与 ( )e s 之间的传递矩阵并定义为:

( )( ) ( ) ( )sss

sGH

e

z = (6-96)

图 6-1 输出反馈系统 图 6-2 显式误差向量 ( )se 的输出反馈系统

现在来求闭环系统的传递矩阵。由图 6-2 有

( ) ( ) ( ) ( )[ ] ( ) ( ) ( ) ( )[ ]ssssssss yHuGzuGy −=−=

整理后可得 ( ) ( )[ ] ( ) ( ) ( )sssss uGyHGI =+

若 ( ) ( )[ ] 0det ≠+ ss HGI ,用 ( ) ( )[ ] 1−+ ss HGI 左乘上式两边,有

( ) ( ) ( )[ ] ( ) ( )sssss uGHGIy 1−+= (6-97)

故得闭环系统的传递矩阵为:

Φ ( ) ( )( ) ( ) ( )[ ] ( )sssss

s GHGIuy 1−+== (6-98)

2. 系统的状态反馈与闭环系统的状态矩阵

系统在采用现代控制理论后,常用状态反馈的方法来配置系统极点,使之具有特定的性

能。设系统的动态方程为

BuAxx += Cxy =

x 为 n 维状态向量,u 为 p 维输入向量,y 为 q 维输出向量,A、B、C 分别为 nn× 、 pn × 、

nq × 矩阵。

图 6-3 所示为系统结构图,加入了状态反馈后的系统结构图如图 6-4 所示。

图 6-4 中矩阵 K 叫做状态反馈矩阵,v 是闭环系统的输入,方框 B 的输入仍用 u 表示。

因此引入状态反馈后,有

Kx−= vu (6-99)

图 6-3 系统结构图 图 6-4 施加状态反馈后的系统结构图

此时闭环系统的状态方程可写作

BvBKxAxBuAxx +−=+=

或者

Page 282: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

270

( ) BvxBKAx +−= (6-100)

式中, ( )BKA − 为闭环系统的状态矩阵。于是,可以用系统 ( ) CBBKA ,,− 来表示引入状态

反馈后的闭环系统,而输出方程没有变化,仍为: Cxy =

3. 系统的极点配置

不论是镇定系统还是跟随系统都必须符合规定性能指标的要求。控制系统的动态响应主

要是由它的极点位置决定的。因此控制系统的设计就是应用状态反馈使闭环系统具有期望的

极点配置,将原系统的开环极点变成期望的系统极点,从而改善系统性能。所谓系统的极点

配置问题,就是给定了闭环系统的极点位置后,如何通过某种方法来达到给定的极点配置。

对一个可控系统,在采用状态反馈后,可以实现闭环极点的任意配置。即是通过状态反

馈的方法,使闭环系统的极点位于预先规定的位置上。由自动控制的基本原理,实现闭环极

点任意配置的必要且充分条件是系统完全可控。

在 MATLAB 系统中提供的 place ( )函数命令 ,它利用 Ackermann 公式计算反馈增益矩

阵 K,使采用全反馈 Kxu −= 的多输入系统具有指定的闭环极点 p。函数命令 place ( ) 的调用

格式为:

K=place (A,B,p )

其中,输入参量 A 为系统的状态矩阵,B 为系统的输入矩阵,p 为指定的闭环系统极点。返

回参量 K 为反馈增益矩阵即状态反馈矩阵。

函数命令 place ( )也可计算估计器增益矩阵 K,使采用全反馈 Kxu −= 的多输入系统具有

指定的闭环极点 p。其调用格式为:

K=place(A’,C’,p ) 其中,输入参量 A 为系统的状态矩阵, A′ 是 A 的转置矩阵;C 为系统的观测矩阵, C ′ 是 C

的转置矩阵;p 为指定的闭环系统极点。返回参量 K 为估计器增益矩阵。

【例 6-50】已知一系统的传递函数为

( )( ) ( )( )( )321

10

+++=

ssss

s

U

Y

试判别系统的可控性并求状态反馈增益矩阵 k ,使得系统的闭环特征值(即闭环极点)为:

101 −=λ 、 32j22 +−=λ 、 32j23 −−=λ 。在系统的闭环极点配置不变的情况下计算估计

器增益矩阵 K。

【解】

(1) 用以下 MATLAB 程序判别系统的可控性并求状态反馈增益矩阵 k:

n1=10;d1=conv(conv([1 1],[1 2]),[1 3]);

[A,B,C,D]=tf2ss(n1,d1)

N=size(A);n=N(1);

CAM=ctrb(A,B);

if det(CAM)~=0

rcam=rank(CAM)

if rcam ==n

disp(’System is controlled’)

Page 283: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

271

elseif rcam<n

disp(’System is no controlled’)

end

elseif det(CAM)==0

disp(’System is no controlled’)

end

p=[-2+2*sqrt(3)*j -2-2*sqrt(3)*j -10];

k=place(A,B,p) 程序运行结果

A = -6 -11 -6

1 0 0

0 1 0

B = 1

0

0

C = 0 0 10

D = 0

rcam = 3

System is controlled

place: ndigits= 15

k = 8.0000 45.0000 154.0000 运算数据表明:系统是可控的;状态反馈增益矩阵 [ ]154458=k

(2) 用以下 MATLAB 程序判别系统的可观性并计算估计器增益矩阵 K:

n1=10;d1=conv(conv([1 1],[1 2]),[1 3]);

[A,B,C,D]=tf2ss(n1,d1);p=[-2+2*sqrt(3)*j -2-2*sqrt(3)*j -10];

CAM=ctrb(A,B);N=size(A);n=N(1)

ob=obsv(A,C);roam=rank(ob);

if roam ==n

disp(’System is observable’)

elseif rcam~=n

disp(’System is no observable’)

end

K=place(A.’,C.’,p)

程序运行结果

n = 3

System is observable

place: ndigits= 15

K = 8.4000 -0.3000 0.8000 运算数据表明:系统是可观的;估计器增益矩阵 K [ ]8.03.04.8 −= 。

【例 6-51】已知一系统的状态空间方程为

Page 284: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

272

[ ]

=

+

−−

−−=

xy

uxx

100

8.9

0

3.6

02.08.94.1

001

01.004.0

试判别系统的可控性并求状态反馈增益矩阵 k ,使得系统的闭环特征值(即闭环极点)为:

21 −=λ 、 j12 +−=λ 、 j13 −−=λ 。

【解】

用以下 MATLAB 程序来判别系统的可控性并设计状态反馈控制器:

A=[-0.4 0 -0.01;1 0 0;-1.4 9.8 -0.02];

B=[6.3;0;9.8];C=[0 0 1];p=[-2 -1+1*j -1-1*j];

CAM=ctrb(A,B);N=size(A);n=N(1)

if det(CAM)~=0

rcam=rank(CAM)

if rcam ==n

disp(’System is controlled’)

elseif rcam<n

disp(’System is no controlled’)

end

elseif det(CAM)==0

disp(’System is no controlled’)

end

if rcam ==n

k=place(A,B,p)

end 程序执行结果

n = 3

rcam = 3

System is controlled

place: ndigits= 15

k = 0.4706 1.0000 0.0627 计算数据表明:

(1) 满足系统完全可控的必要且充分的条件,系统是可控的,由此系统可实现闭环极点任

意配置。 (2) 求得的反馈控制器为 [ ]0627.00.14706.0=k 。

4. 系统的状态观测器

为了实现状态反馈,需要系统全部的状态变量。但在实际系统中,大部分状态变量很难

直接测量到。因此,为了实现状态反馈控制,需要通过一个模型,利用已知的信息(如输出量

y 与输入量 u)对系统状态变量进行估计。这样,可以构造一个与已知实际系统 CBA ,, 具有

同样动态方程的模拟系统,用模拟系统的状态向量 ( )tx 作为实际系统状态向量 ( )tx 的估计值。

状态观测器就是状态估计器。

Page 285: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

273

一般情况下,系统的输出量 ( )ty 与控制输入量 ( )tu 均为已知,所以希望能从 ( )ty 与 ( )tu 对

构造的系统模型来估计出状态变量。可以证明,当系统完全可观测时,一定存在状态观测器。

状态观测器结构如图 6-5 所示。带观测器的整个系统如图 6-6 所示。

图 6-5 状态观测器结构

图 6-6 带观测器的系统

对图 6-6 ,有输出反馈后,观测器的状态方程为:

( ) ( ) ( ) ( )[ ]tttt yyHBuxAx −−+= ˆˆ (6-101)

对图 6-6 还有 ( ) ( )tt xCy ˆˆ = (6-102)

故有

( ) ( ) ( ) ( ) ( )tttt HyBuxHCAx ++−= ˆ (6-103)

式中 ( )HCA − 称为系统全维状态观测器矩阵,简称状态观测器。

对图 6-6 中的系统与观测器,将原系统状态方程 BuAxx += 与式(6-101)相减,可得状态

向量误差方程如下:

( ) ( )[ ] ( ) ( ) ( )[ ]tttt xxHCAxx ˆˆ −−=− (6-104)

在设计中,希望 ( )tx 尽量快地趋近于 ( )tx ,则要合理地选择矩阵 ( )HCA − 的特征值。

在 MATLAB 中,函数命令 acker ( ) ,用来计算估计器增益矩阵 K,使采用全反馈 Kxu −=的单输入系统具有指定的闭环极点 p。函数命令 acker ( ) 的调用格式为:

K=acker (A’,C’,p) 其中输入参量 A 为系统的状态矩阵, A′ 是 A 的转置矩阵;C 为系统的观测矩阵,C ′ 是 C 的

转置矩阵;p 为指定的闭环系统极点。返回参量 K 为估计器增益矩阵,而 HK =′ 。 对于已知的实际系统 CBA ,, ,通过函数命令 acker ( )先求出 K 后,进而求得 H( HK =′ ),

最后状态观测器式(6-103)即可解得。请看以下示例。

Page 286: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

274

【例 6-52】已知一系统的状态方程

[ ]

−=

+

−=

3

2

1

3

2

1

3

2

1

3

2

1

3

2

1

111

1

0

0

020

113

021

x

x

x

y

y

y

u

u

u

x

x

x

x

x

x

①试判别系统的可控性并求状态反馈增益矩阵 k ,使得系统的闭环特征值(即闭环极点)

为: 101 −=λ 、 3j12 +−=λ 、 3j13 −−=λ 。②试判别系统的可观性并对系统设计状态观

测器,使得系统的闭环极点为: 41 −=λ 、 j32 +−=λ 、 j33 −−=λ 。

【解】

(1) 用以下 MATLAB 程序来判别系统的可控性并设计状态反馈控制器:

A=[1 2 0;3 -1 1;0 2 0];

B=[0;0;1];

C=[-1 1 1];

p=[-10,-1+j*sqrt(3),-1-j*sqrt(3)];

CAM=ctrb(A,B);N=size(A);n=N(1)

if det(CAM)~=0

rcam=rank(CAM)

if rcam ==n

disp(’System is controlled’)

elseif rcam<n

disp(’System is no controlled’)

end

elseif det(CAM)==0

disp(’System is no controlled’)

end

if rcam ==n

k=place(A,B,p)

end

程序执行结果

n = 3

rcam = 3

System is controlled

place: ndigits= 15

k = 77.5000 33.0000 12.0000

计算数据表明:① 满足系统完全可控的必要且充分的条件,系统是可控的,由此系统可

任意配置闭环极点。② 求得的反馈控制器为 [ ]12335.77=k 。

(2) 用以下 MATLAB 程序来判别系统的可观性并设计状态观测器:

Page 287: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

275

A=[1 2 0;3 -1 1;0 2 0];B=[0;0;1];C=[-1 1 1];

p=[-4,-3+j,-3-j];

CAM=ctrb(A,B);N=size(A);n=N(1)

ob=obsv(A,C);

roam=rank(ob);

if roam ==n

disp(’System is observable’)

elseif rcam~=n

disp(’System is no observable’)

end

K=acker(A’,C’,p);H=K’

AHC=A-H*C 程序运行结果

n = 3

System is observable

H = 27

24

13

AHC = 28 -25 -27

27 -25 -23

13 -11 -13

计算结果表明,系统是可观的,所以存在状态观测器。系统的状态观测器为:

yuxx

+

+

−−−−−−

=13

24

27

1

0

0

ˆ

131113

232527

272528

5. 系统的状态降阶观测器

当观测器的阶数等于原系统状态向量的阶数时叫观测器为全阶观测器。所谓状态降阶观

测器就是观测器的阶数在低于原系统状态向量的阶数时,也能对原系统的状态做出最好的估

计。

对于一个 n 维的可观测系统:

uBxAx += (6-105)

xCy = (6-106)

式中, x 为 n 维向量,u 为 p 维向量, y 为 q 维向量, A 、 B 、C 分别为 nn × , pn × ,

nq × 矩阵。当 C 满行秩(即 rank C =q)时,可以定义一种非奇异线性变换

xQx 1−= (6-107)

其中 ( )

m

mnnn

=× C

DQ (6-108)

式中,D 是使 Q 非奇异的 ( ) nqn ×− 任意矩阵。

Page 288: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

276

系统 CBA ,, 经非奇异线性变换后的系统 CBA ,, :

==+=Cxyy

BuAxx (6-109)

式中

=

2

1

x

xx , == −1QAQA

2221

1211

AA

AA (6-110)

==

2

1

B

BBQB ,

11

−−

==

C

DCQCC (6-111)

由恒等式

=

=

C

DC

C

D

C

DCC

1

, [ ]

=

C

DEC 0 (6-112)

对比两式可得 [ ]EC 0= (6-113)

[ ]

=

=

+

=

22

1

2

1

2

1

2221

1211

2

1

0 xx

xEy

uB

B

x

x

AA

AA

x

x

(6-114)

以上各式中 1x 为( qn − )维列向量;x2 为( q )维列向量;

11A 为( qn − )×( qn − )维矩阵;A12 为( qn − )×q 维矩阵;

A21 为 q×(n-q)维矩阵;A22 为 q×q 维矩阵; B1 为( qn − )×p 维矩阵;B2 为 q×p 维矩阵。

因为系统 CBA ,, 可观测,经线性坐标变换后的系统 CBA ,, 仍为可观测系统。

由式(6-114)看出,通过直接测量输出 y,已可得到系统状态的一部分 2x ,现在只要设计

出能估计状态 1x 的( qn − )维观测器,它就是原系统 CBA ,, 的降阶观测器了。这个( qn − )

维观测器通常叫做龙伯格观测器。

综合以上各式,式(6-109)可以改写成如下形式:

( )

++=++=

uByAxAy

uByAxAx

222121

1121111

(6-115)

或者

( )

−−==++=

uByAyxAy

uByAxAx

2221211

1121111

(6-116)

式(6-116)表达的是以 1x 为状态的子系统,其中的第一式是它的状态方程。其输入为

( )uByA 112 + ,因为 y 可直接测量,故是已知的;第二式是输出方程,它表达了输出 1y 与状态

1x 的关系。

根据式(6-103),以 1x 为状态的子系统即式(6-116)的状态观测器应为:

( ) 1112121111 ˆˆ yHuByAxAAx +++−= H (6-117)

式中观测器输出反馈阵 H 为( qn − )×(q)维矩阵,观测器的输出就是 x1。

Page 289: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

277

考虑式(6-116),式(6-117)的降阶观测器可写成:

( ) ( )uByAyuByAxAAx 222112121111 ˆˆ +−+++−= HHH (6-118)

式中 ( )2111 AA H− 为系统降阶状态观测器矩阵。降维状态观测器的极点由特征方程

( ) 02111 =−− AA HEλ (6-119)

或者下式

( )[ ] ( )∏−

=

+=−−qn

k

ksAAs1

2111det λHE (6-120)

决定。式中 E 为单位矩阵。若是给定降阶状态观测器的极点,则可由式(6-119)或(6-120)解算

出观测器输出反馈矩阵 H。 还须指出,式(6-118)中 y 不是能直接量测得到的,为避免应用 y ,特作如下变量变换:

−=−=

yxw

yxw

H

H

1

1

ˆ

ˆ (6-121)

所以降阶观测器为:

( ) ( ) ( )[ ]

+=−+−+−+−=

ywx

yAAAAuBBwAAw

H

HHHHH

1

22122111212111

ˆ

(6-122)

这样,系统 CBA ,, 的状态估计则按下式求得:

ywy

yw

x

xx

+

=

+=

=

E

HEH

0

ˆˆ

2

1 (6-123)

自动控制理论中已经说明,只要子系统( 11A , 21A )完全能观测,H 就一定存在。由式(6-119)

或式(6-120)算出矩阵 H 后,状态观测器式(6-122)即可解得。请看以下示例。 【例 6-53】续【例 6-52】 对系统设计降阶状态观测器,使得系统的闭环极点为: 41 −=λ 、

42 −=λ 。

【解】

(1) 选择任意矩阵 D 构造非奇异线性变换矩阵 Q:

[ ]001=D

−=

=

111

010

001

C

DQ

(2) 根据系统参数,设输出反馈矩阵 ( )

== ××−

2

112 h

hqqn HH ,并用以下 MATLAB 程序计

算 ( )[ ]2111det AAs HE −− :

syms h1 h2 s;

A1=[1 2 0;3 -1 1;0 2 0];B1=[0;0;1];C1=[-1 1 1];

p=[-4 -4];E=[1 0;0 1];H=[h1 h2].’;Q=[1 0 0;0 1 0;-1 1 1];

Q1=inv(Q);A=Q*A1*Q1;A11=[A(1:2,1:2)];A21=[A(3,1:2)];

eq=collect(det(s*E-(A11-H*A21)),s)

Page 290: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

278

程序运行结果

eq = s^2+(1+3*h1-2*h2)*s+8*h2-2*h1-10 即

( )[ ] ( ) ( )1028231det 12212

2111 −−+−++=−− hhshhsAAs HE

根据式(6-120):

( )[ ] ( ) 1684det 222111 ++=+=−− sssAAs HE

对比上式的两端,即可用以下 MATLAB 语句求出 =H

2

1

h

h

syms h1 h2;

[h1,h2]=solve(’1+3*h1-2*h2=8’,’8*h2-2*h1-10=16’,’h1,h2’)

语句执行结果

h1 = 27/5

h2 = 23/5 即

=H

=

5/23

5/27

2

1

h

h

(3) 用以下 MATLAB 程序设计降阶状态观测器:

A1=[1 2 0;3 -1 1;0 2 0];B1=[0;0;1];C1=[-1 1 1];

Q=[1 0 0;0 1 0;-1 1 1];Q1=inv(Q);A=Q*A1*Q1;

A11=[A(1:2,1:2)];A12=[A(1:2,3)];

A21=[A(3,1:2)];A22=[A(3,3)];

QB1=Q*B1;B11=QB1(1:2,1);B12=QB1(3,1);C=C1*Q1;H=[27/5 23/5].’;

AHAW=(A11-H*A21)

BHBU=(B11-H*B12)

AHAY=(A11-H*A21)*H+A12-H*A22 程序运行结果

AHAW = -15.2000 12.8000

-9.8000 7.2000

BHBU = -5.4000

-4.6000

AHAY = -28.6000

-23.4000 即降阶状态观测器动态方程为:

+=

−−

+

−−

+

−−

=

ywx

yuww

5/23

5/27ˆ

4.23

6.28

6.4

4.5

2.78.9

8.122.15

1

【例 6-54】已知一系统的状态方程

Page 291: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

279

=

+

−=

3

2

1

2

1

2

1

3

2

1

3

2

1

110

001

10

10

01

100

110

001

x

x

x

y

y

u

u

x

x

x

x

x

x

试判别系统的可观性并对系统设计降阶状态观测器,使得系统的闭环极点为: 3−=λ 。

【解】

(1) 用以下 MATLAB 程序来判别系统的可观性:

A1=[-1 0 0;0 1 1;0 0 1];B1=[1 0;0 1;0 1];C1=[1 0 0;0 1 1];

CAM=ctrb(A1,B1);N=size(A1);n=N(1); ob=obsv(A1,C1);roam=rank(ob);

if roam ==n

disp(’System is observable’)

elseif rcam~=n

disp(’System is no observable’)

end

程序运行结果

System is observable

结果表明系统是可观的。

(2) 选择任意矩阵 D 构造非奇异线性变换矩阵 Q:

[ ]100=D

=

=

110

001

100

C

DQ

(3) 根据系统参数,设输出反馈矩阵 ( ) [ ]2121 hhqqn == ××− HH ,并用以下 MATLAB 程序

计算 ( )[ ]2111det AAs HE −− :

syms h1 h2 s;

A1=[-1 0 0;0 1 1;0 0 1];B1=[1 0;0 1;0 1];C1=[1 0 0;0 1 1];

p=[-3];E=[1];H=[h1 h2].’;Q=[0 0 1;1 0 0;0 1 1];

Q1=inv(Q);A=Q*A1*Q1;A11=[A(1:2,1:2)];A21=[A(3,1:2)];

eq=collect(det(s*E-(A11-H*A21)),s)

程序运行结果

eq = (h1-h2)*s-1+h1

即 ( )[ ] ( ) 1212111 1det hshhAAs +−−=−− HE

根据式(6-120): ( )[ ] ( )3det 2111 +=−− sAAs HE

对比上式的两端,即可用以下 MATLAB 语句求出 [ ]21 hh=H :

syms h1 h2;

Page 292: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

280

[h1,h2]=solve(’h1-h2=1’,’h1-1=3’,’h1,h2’)

语句执行结果

h1 = 4

h2 = 3 即

[ ] [ ]3421 == hhH

(4) 用以下 MATLAB 程序设计降阶状态观测器:

A1=[-1 0 0;0 1 1;0 0 1];B1=[1 0;0 1;0 1];C1=[1 0 0;0 1 1];

Q=[0 0 1;1 0 0;0 1 1];Q1=inv(Q);A=Q*A1*Q1;

A11=[A(1,1)];A12=[A(1,2:3)];A21=[A(2:3,1)];A22=[A(2:3,2:3)];

QB1=Q*B1;B11=QB1(1,1:2);B12=QB1(2:3,1:2);C=C1*Q1;H=[4 3];

AHAW=(A11-H*A21)

BHBU=(B11-H*B12)

AHAY=(A11-H*A21)*H+A12-H*A22 程序运行结果

AHAW = -2

BHBU = -4 -5

AHAY = -4 -9 即降阶状态观测器动态方程为:

=

3

2

x

xy ,

=

2

1

u

uu

[ ] [ ]

[ ]

+=

−−+

−−+−=

3

21

3

2

2

1

34ˆ

94542

x

xwx

x

x

u

uww

6.2.6 矩阵运算在系统稳定性分析中的应用

1. 系统稳定性概述

在经典控制理论分析中,稳定性的理论依据是控制系统特征方程式的根都分布在根(复)

平面虚轴的左半部。这样由微分方程的时域解来判定系统稳定性的便是李亚普诺夫第一法。

而现代控制理论中则用李亚普诺夫第二法或叫直接法,直接法是指不用求解系统的运动方程

直接可以判定系统稳定性的方法。因此对于不易求解的那些非线性系统与时变系统来说,李

亚普诺夫直接法是特别有用的。

稳定性与可控性以及可观测性都是控制系统的重要属性。几乎所有可运行的系统必须设

计成稳定的,不稳定的系统没有什么意义,因为它不能实际使用。系统稳定性是系统能够成

立与运行的首要条件。

对于任何一个物理系统,都有运动稳定性的问题存在。所谓运动稳定性理论,就是研究

某些确定性的或随机性的干扰作用对于运动状态的影响,从而建立判别运动状态是稳定的、

渐近稳定的或是不稳定的准则。

为了说明李亚普诺夫的稳定性理论,先来介绍标量函数正定性、负定性与不定性等的概

Page 293: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

281

念。 (1) 正定性 设有标量函数 ( )xV ,它对于 S 域中所有非零状态 x (即 0≠x ),总有 ( )xV >0 ;

且当 0=x (也在域 S 中)时, ( ) 0=xV ;则称标量函数 ( )xV 在 S 域内是正定的。

(2) 负定性 设有标量函数 ( )xV ,对于 S 域中所有非零状态 x,总有 ( )xV <0;且

( ) 00 =V ,则称标量函数 ( )xV 在域 S 内是负定的。 ( )xV− 则是正定的。

(3) 半正定性与半负定性 在域 S 中,对 0=x 及某些状态 x, ( ) 0=xV ;对 S 中所有其它

状态,都有 ( )xV >0;则称 ( )xV 是半正定的。如果 ( )xV− 是半正定的,则 ( )xV 是半负定的。

(4) 不定性 不管域 S 多么小,在域 S 内, ( )xV 能正能负,则称 ( )xV 是不定的。

(5) 非负定性 正定性与半正定性就是非负定性。

2. 李亚普诺夫意义下的稳定性理论

(1) 设系统的状态方程为: ( )tfx ,x= (6-124)

其平衡状态为: ( ) 0,0 =tf (6-125)

如果存在一个具有连续一阶偏导数的标量函数 ( )tV ,x ,并且满足以下条件:

① ( )tV ,x 是正定的;

② ( )tV ,x 是负定的,

则系统在状态空间原点处的平衡状态是一致渐近稳定的。 如果当 ∞→x 时,有 ( ) ∞→tV ,x ,则系统在状态空间原点处的平衡状态是在大范围内一

致渐近稳定的。

满足以上两个条件的标量函数叫做李亚普诺夫函数。李亚普诺夫函数的几何意义是:

( )xV 表示状态空间的原点到 x 之间的距离,而 ( )xV 则代表在 x 点处趋向状态空间原点的速

度。

(2) 设系统的状态方程为: ( )tf ,xx =

其平衡状态为: ( ) 0,0 =tf ( )0tt ≥ (6-126)

如果存在一个具有连续一阶偏导数的标量函数 ( )tV ,x ,并且满足以下条件:

① ( )tV ,x 是正定的;

② ( )tV ,x 是半负定的;

则系统在状态空间原点的平衡状态是稳定的。

③ 设系统的状态方程为 ( )tf ,xx =

其平衡状态为 ( ) 0,0 =tf ( )0tt ≥

如果存在一个具有连续一阶偏导数的标量函数 ( )txW , ,并且满足以下条件:

① ( )txW , 在原点的某一邻域内是正定的;

② ( )txW , 在同样的邻域内也是正定的。

则系统在状态空间原点的平衡状态是不稳定的。

Page 294: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

282

3. 线性定常系统的李亚普诺夫稳定性分析

设线性定常系统为

Axx = (6-127)

式中,x 为 n 维状态向量,A 为 nn× 维 常系数矩阵。假定 A 为非奇异矩阵,则系统的唯一

平衡状态在状态空间原点 x= 0 处。

对于方程(6-127)所确定的系统,取正定二次型函数

( ) xPxx T=V (6-128)

作为可能的李亚普诺夫函数。式中,P 是一个正定的实对称矩阵。 将 ( )xV 对于时间求导,可得到:

( ) ( )( )xPAPAxxPAxxPAx

xPAxxPAxxPxPxx

+=+=

+=+=TTTTT

TTTT tV (6-129)

由于 ( )xV 取为正定的,故若 ( )xV 为李亚普诺夫函数,则 ( )xV 必为负定的,即有:

( ) xQxx T−=V (6-130)

上式中要求 Q 为正定阵,即

( )PAPAQ +−= T (6-131)

由上可见:系统 Axx = 在平衡状态 x = 0 是大范围渐近稳定的充要条件为:给定一个正

定的实对称矩阵 Q(通常选 Q 为单位矩阵),存在一个正定的实对称矩阵 P,使得

QPAPA −=+T (6-132)

成立。这个结论是一个非常重要的定理,利用李亚普诺夫函数确定系统的稳定性时大多要用

到这个定理。

标量函数 ( ) xPxx T=V 就是一个李亚普诺夫函数。有些文献把式(6-132)叫做李亚普诺夫

矩阵代数方程。

4. 李亚普诺夫方程的求解

李亚普诺夫方程的求解有两种方法。首先,在 MATLAB 系统中,提供的求解李亚普诺

夫矩阵代数方程的函数命令为 lyap ( ) 。函数 lyap ( )的调用格式为:

X=lyap(A,C) 其中,输入参量 A 是已知系统的状态矩阵,C 就是给定的正定实对称矩阵 Q。返回的输出变

量 X 就是李亚普诺夫方程的解即正定实对称矩阵 P。

求解李亚普诺夫方程的函数还有 dlyap ( ) 与 lyap2 ( ) 。函数 dlyap ( ) 用于求解离散系统

的李亚普诺夫方程。函数 lyap2 ( ) 是采用特征值分解技术来求解李亚普诺夫方程,其运算速

度比函数 lyap ( )快很多。它们的调用格式为:

X=dlyap(A,C)

X=lyap2(A,C)

其中,输入参量与返回的输出参量的含义同上。

其次,也可以利用计算矩阵的方法直接求解李亚普诺夫矩阵代数方程。本书主要介绍这

种方法,请看以下示例。

【例 6-55】已知线性定常系统的状态方程为:

Page 295: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

283

u

kx

x

x

kx

x

x

+

−−−=

0

0

10

120

010

3

2

1

3

2

1

试选择正定的实对称矩阵 Q 后计算李亚普诺夫方程的解并利用李亚普诺夫函数确定系统的稳

定的 k 值范围。

【解】

(1) 根据系统状态矩阵用以下 MATLAB 语句确定原点状态:

syms k;

A=[0 1 0;0 -2 1;-k 0 -1];

detA=det(A) 语句执行结果

detA = -k 计算表明, ( ) 0det ≠−= kA ,即 A 非奇异,故原点为唯一的平衡状态。

(2) 讨论系统稳定性时可令给定输入 0=u 。选择半正定实对称矩阵 Q 为:

=

100

000

000

Q

则 ( ) 23

T xxxxV −=−= Q ,故 ( )xV 为负半定。

(3) 为了确定系统的稳定性,给出求李亚普诺夫矩阵代数方程左式的 MATLAB 程序:

syms p11 p12 p13 p21 p22 p23 p31 p32 p33;syms k positive;

P=[p11 p12 p13;p21 p22 p23;p31 p32 p33];

A=[0 1 0;0 -2 1;-k 0 -1];Q=[0 0 0;0 0 0;0 0 1];

FQ=-Q

APPA=A’*P+P*A 程序执行结果

FQ = 0 0 0

0 0 0

0 0 -1

APPA = [ -k*p31-p13*k, -k*p32+p11-2*p12, -k*p33+p12-p13]

[ p11-2*p21-p23*k, p12-4*p22+p21, p13-3*p23+p22]

[ p21-p31-k*p33, p22-3*p32+p31, p23-2*p33+p32] (4) 为了确定系统的稳定性,需验证P阵的正定性,这可以对各主子行列式进行校验。并

根据李亚普诺夫矩阵代数方程,给出求正定实对称矩阵P的MATLAB 程序:

A=[0 1 0;0 -2 1;-k 0 -1];

if det(A)~=0

[p11,p12,p13,p22,p23,p33]=solve(’-2*p13*k=0’,’-k*p23+p11-2*p12=0’,’-k*p33+p12-p13=0’,’

2*p12-4*p22=0’,’ p13-3*p23+p22=0’,’ 2*p23-2*p33=-1’);

p21=p12;p31=p13;p32=p23;P=[p11 p12 p13;p21 p22 p23;p31 p32 p33]

detp11=det(P(1,1))

detP2=det(P(2,2))

Page 296: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

284

detP=det(P)

end

程序执行结果

P = [ -1/2*k*(k+12)/(k-6), -3*k/(k-6), 0]

[ -3*k/(k-6), -3/2*k/(k-6), -1/2*k/(k-6)]

[ 0, -1/2*k/(k-6), -3/(k-6)]

detp11 = -1/2*k*(k+12)/(k-6)

detP2 = -3/2*k/(k-6)

detP = 1/8*k^3/(k-6)^2

即李亚普诺夫方程的解为:

−−

−−−

−−+

=

kk

kk

k

k

k

k

kk

k

k

kk

212

6

2120

212212

3

212

6

0212

6

212

122

P

因为

=

100

000

000

Q

是半正定阵,而 ( ) 23

T xxxxV −=−= Q 是半负定的。最后,对各主子行列式(det1、det2、detp)

进行校验说明,使 P 阵正定的必要充分的条件为: 0>k 与 0212 >− k 。所以,当 60 << k 时

系统渐近稳定。由于本系统是线性定常系统,所以应是大范围一致渐近稳定。

【例 6-56】已知线性定常系统的状态方程为:

xx

−=

32

11

试确定系统的平衡状态并计算系统的李亚普诺夫函数。

【解】

(1) 根据系统状态矩阵用以下 MATLAB 语句确定原点状态:

syms k;

A=[-1 1;2 -3];

detA=det(A) 语句执行结果

detA = 1 计算表明, ( ) 01det ≠=A ,即 A 非奇异,故原点为唯一的平衡状态。

(2) 讨论系统稳定性时可令给定输入 0=u 。选择正定实对称矩阵 Q 为:

=

10

01Q

(3) 给出求李亚普诺夫矩阵代数方程左式的 MATLAB 程序:

syms p11 p12 p21 p22;

Page 297: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

285

A=[-1 1;2 -3];P=[p11 p12;p21 p22];Q=[1 0;0 1];

FQ=-Q

APPA=A’*P+P*A

程序执行结果

FQ = -1 0

0 -1

APPA = [ -2*p11+2*p21+2*p12, -4*p12+2*p22+p11]

[ p11-4*p21+2*p22, p12-6*p22+p21] (4) 根据李亚普诺夫矩阵代数方程,给出求正定实对称矩阵 P 与求系统李亚普诺夫函数

的 MATLAB 程序:

syms x1 x2;

A=[-1 1;2 -3];Q=[1 0;0 1];

if det(A)~=0

[p11,p12,p22]=solve(’4*p12-2*p11=-1’,’p11-4*p12+2*p22=0’,’2*p12-6*p22=-1’);

p21=p12;

P=[p11 p12;p21 p22]

detp11=det(P(1,1))

detP=det(P)

end

x=[x1;x2];

vPx=collect(x.’*P*x)

vQx=collect(x.’*(-Q)*x) 程序运行结果

P = [ 7/4, 5/8]

[ 5/8, 3/8]

detp11 = 7/4

detP = 17/64

vPx = 7/4*x1^2+5/4*x2*x1+3/8*x2^2

vQx = -x1^2-x2^2

即李亚普诺夫方程的解为:

=

8/38/5

8/54/7P

程序已对各主子行列式(detp11、detP)进行计算,

( ) 04

7det 111 >== pp , ( ) 0

64

17det2 >== Pp

计算结果说明 P 阵确是正定阵。

还有系统的李亚普诺夫函数为:

( )

++== 2

22121

T

8

3

4

5

4

7xxxxxxxV P

在状态空间内, ( )xV 是正定的,而

Page 298: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

286

( ) ( ) ( )22

21

T xxxxxV +−=−= Q

在状态空间内, ( )xV 是负定的。另有,当 ∞→x 时,有 ( ) ∞→txV , ,因此系统原点处的平衡

状态是大范围内渐近稳定。

6.3 线性二次型最优控制的 M A T LA B 实现

所谓最优控制,就是根据建立的系统数学模型,选择一个容许的控制规律,使得控制系

统按预定要求运行,并使给定的某一性能指标达到极小值或极大值。最优控制是现代控制理

论的核心。

所谓最优控制系统,就是在一定的具体条件下,在完成所要求的控制任务时,系统的某

种性能指标具有最优值。根据系统不同的用途,可提出各种不同的性能指标。最优控制系统

的设计,就是选择最优控制,以使某一种性能指标为最小。

6.3.1 线性二次型最优控制的基本概念

为了介绍线性二次型最优控制及其 MATLAB 的实现,有必要简要介绍有关系统最优控制

最基本的问题与相关概念。

1. 最优控制问题

设系统状态方程为 ( ) ( ) ( )[ ] ( ) 00,,, xtttttx == xuxf (6-133)

式中, ( )tx 是 n 维状态向量; ( )tu 是 p 维控制向量;n 维向量函数 ( ) ( )[ ]ttt ,, uxf 是 ( )tx 、 ( )tu

与 t 的连续函数,且对 ( )tx 与 t 连续可微; ( )tu 在 [ ]ftt ,0 上分段连续。所谓最优控制问题,就

是要求寻找最优控制函数,使得系统状态 ( )tx 从已知初态 0x 转移到要求的终端状态 ( )ftx ,在

满足如下约束条件下:

(1) 控制与状态的不等式约束 ( ) ( )[ ]ttt ,, uxg ≥0 (6-134)

(2) 终端状态的等式约束 ( )[ ] 0, =ff ttxM (6-135)

使性能指标

( )[ ] ( ) ( )[ ] ttttFttJft

tff d,,,

0∫+Θ= uxx (6-136)

达到极值。式中, ( ) ( )[ ]tttx ,, ug 是 m 维连续可微的向量函数,m ≤ p ; ( )[ ]ff tt ,xM 是 q 维连续

可维的向量函数, q ≤ n ; ( )[ ]ff tt ,xΘ 与 ( ) ( )[ ]tttF ,, ux 都是 ( )tx 与 t 的连续可微纯量函数。

2. 最优控制的性能指标

自动控制的性能指标是衡量系统性能好坏的尺度,其内容与形式取决于最优控制问题所

要完成的任务,不同的控制问题应取不同的性能指标,其基本类型如下。

(1) 积分型性能指标

( ) ( )[ ] ttttFJft

td,,

0∫= ux (6-137)

Page 299: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

287

表示在整个控制过程中,系统的状态 ( )tx 与施加给系统的控制作用 ( )tu 应达到某些要求。例如:

① 最小时间控制 当选取 ( ) ( )[ ] 1,, =tttF ux

0d0

tttJ f

t

t

f

−== ∫ (6-138)

这种控制要求设计一个快速控制规律,使系统在最短时间内从已知的初态 ( )0tx 转移到要求的

末态 ( )ftx 。例如,导弹拦截器的轨道转移就是属于此类问题。

② 最少燃料消耗控制

当选取 ( ) ( )[ ] ( )∑=

=m

jj tutttF

1

,, ux

( ) ttuJft

t

m

jj d

0 1∫ ∑

=

= (6-139)

这是航天工程中常遇到的重要问题之一。例如,宇宙飞船这种航天器具所携带的燃料有限,

希望在轨道转移时,所消耗的燃料尽可能地少,就是属于此类问题。

③ 最小能量控制

当选取 ( ) ( )[ ] ( ) ( )tttttF uuux T,, =

( ) ( ) tttJft

td

0

T∫= uu (6-140)

对于一个能量有限的物理系统,例如,通信卫星上的太阳能电池,为了使系统在有限的能源

条件下尽可能长的时间内保证正常工作,需要对控制过程中的能量消耗进行约束,就是属于

此类问题。

④ 无限时间线性调节器 取 ∞→ft ,且

( )tF ,, ux = ( ) ( ) ( ) ( )[ ]tttt RuuQxx TT

2

1 +

其中,Q≥0,R>0,均为加权矩阵,则

=J ( ) ( ) ( ) ( )[ ] tttttt

d2

1 TT

0

RuuQxx +∫∞

(6-141)

⑤ 无限时间线性跟踪器 取 ∞→ft ,且

( )tux ,,F = ( ) ( )[ ] ( ) ( )[ ] ( ) ( ) tttttt RuuzyQzy TT +−−

=J ( ) ( )[ ] ( ) ( )[ ] ( ) ( ) tttttttt

d2

1 TT

0

RuuzyQzy +−−∫∞

(6-142)

其中, ( )ty 为系统输出向量, ( )tz 为系统希望输出向量。

在性能指标式(6-140)、式(6-141)、式(6-142)中,被积函数都是由 ( )tx 、 ( ) ( )tt zy − 或 ( )tu 的

Page 300: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

288

平方项所组成,这种形式的性能指标叫做二次型性能指标。

(2) 末值型性能指标 ( )[ ]ff ttxJ ,Θ= (6-143)

表示系统在控制过程结束后,要求系统的终端状态 ( )ftx 应达到某些要求,在实际工程中,例

如要求导弹的脱靶量最小、机床工作台移动准确停止等。终端时刻 ft 可以固定,也可以自由,

视最优控制问题的性质而定。

(3) 复合型性能指标

( )[ ] ( ) ( )[ ] ttttFttxJft

tff d,,,

0∫+= uxΘ (6-144)

表示对整个控制过程及控制过程结束后的终端状态均有要求,是最一般的性能指标形式。

3. 最优控制问题的数学分类法

最优控制过程从数学意义上讲,还有以下的分类讲究。

(1) 拉格朗日问题 如果已知系统的状态方程

( ) ( ) ( )[ ]tttftx ,, ux=

与初始状态 ( ) 00 xtx = ,要求最优控制 ( )tu ,使得以下性能指标

( ) ( )[ ] ttttFJft

td,,

0∫= ux

为极小。这样的最优控制问题叫做拉格朗日问题。以上介绍的积分型性能指标所涉及的 5 种

最优控制问题都属于拉格朗日问题。

(2) 迈耶尔问题 如果已知系统的状态方程

( ) ( ) ( )[ ]tttft ,, uxx =

与初始状态 ( ) 00 xt =x ,但是终端状态的某些分量 ( )ftx 与终端时刻 ft 没有给定,要求最优控

制 ( )tu ,使得以下性能指标

=J ( ) ( )[ ] ft

tttt

0,,uxΘ (6-145)

为极小。这样的最优控制问题叫做迈耶尔问题。迈耶尔问题是一个终端量最小问题。以上介

绍的末值型性能指标所涉及的最优控制问题都属于迈耶尔问题。

(3) 波尔扎问题 已知系统的状态方程

( ) ( ) ( )[ ]tttft ,, uxx =

要求最优控制 ( )tu ,使得以下性能指标

( ) ( )[ ] ft

ttttJ

0,,uxΘ= ( ) ( )[ ]∫+

ft

tttttF

0

d,, ux (6-146)

为极小。波尔扎问题是前述两个问题的复合。

这三类问题可以通过适当的变换相互转换。求解最优控制问题的基本数学原理有变分法、

极小值原理与动态规划法。

4. 最优控制问题的求解方法

(1) 解析法 当性能指标与约束条件为显式解析表达式时,适合用解析法。通常是用求导

Page 301: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

289

方法或变分方法求出最优控制的必要条件,从而得到一组方程式或不等式,然后求解这组方

程或不等式,最后得到最优控制的解析解。

(2) 数值计算法 当性能指标比较复杂或不能用变量的显函数表示时,可以采用试探法,

即直接搜索逐步逼近,经过若干次迭代,逐步逼近到最优点。

(3) 梯度型法 这是一种解析与数值计算相结合的方法。

5. 线性二次型最优控制

对于线性系统,若性能指标为二次型函数,这样实现的控制叫做线性二次型最优控制。

线性二次型最优控制方法是 20 世纪 60 年代发展起来的一种普遍采用的最优控制系统设计方

法。这种方法的对象是以状态空间表达式给出的线性系统,而性能指标(或叫目标函数)为对象

状态与控制输入的二次型函数。二次型问题就是在线性系统的约束条件下,选择控制输入使

得二次型目标函数达到最小。

到目前为止,这种二次型最优控制在理论上比较成熟,为解决这类控制问题而开发的

MATLAB 函数也比较多,而且这种控制应用非常广泛。本节主要介绍线性二次型最优控制的

MATLAB 实现。

6.3.2 连续系统线性二次型最优控制的 MATLAB 实现

1. 连续系统线性二次型最优控制

设线性连续定常系统的状态方程为: ( ) ( ) ( )ttt BuAxx += , ( ) 00 x=x (6-147)

式中, ( )tx 为 n 维状态向量; ( )tu 为 p 维控制向量,且不受约束;A 为 nn × 维常数矩阵,B 为

pn × 维常数矩阵。

系统的性能指标为:

( )∫∞

+=0

TT d2

1tJ uRuxQx (6-148)

式中,终端时间 ft 无限;Q 为维数适当的常数矩阵(常取 nn × 维常数矩阵);R 为维数适当的

常数矩阵,R>0, TRR = 。若下列条件之一满足:

(1) 0>Q , TQQ = ,阵对 [ ]BA, 完全可控;

(2) Q≥0, TQQ = ,阵对 [ ]BA, 完全可控,阵对 [ ]DA, 完全可观, QDD =T ,D 为任意

矩阵。则有最优反馈矩阵:

PBRK T1−= (6-149)

与唯一的最优控制:

( ) ( ) ( )ttt xPBRxKu T1−∗ −=−= (6-150)

以及最优性能指标:

( ) ( )002

1 T Pxx=∗J (6-151)

式中, P 为常值正定矩阵,它是以下黎卡提代数方程的唯一解:

0T1T =+−+ − QPBPBRPAPA (6-152)

闭环系统:

( ) ( ) ( )tt xPBBRAx T1−−= , ( ) 00 x=x (6-153)

Page 302: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

290

是渐近稳定的,其解为最优轨线 ( )t∗x 。

有些文献,把以上的线性二次型(linear quadratic)最优控制叫做 LQ 最优控制或者称为无限

长时间定常系统的状态调节器控制。

2. 连续系统线性二次型最优控制的 MATLAB 实现

在 MATLAB 系统里,有特别提供的函数来求解连续系统线性二次型状态调节器问题。其

函数有 lqr ( )、lqr2 ( ) 与 lqry ( )。函数的调用格式为:

[K,S,E]=lqr(A,B,Q,R,N)

[K,S]=lqr2(A,B,Q,R,N)

[K,S,E]=lqry(sys,Q,R,N) 其中,输入参量 sys 为系统的模型; A 为系统的状态矩阵;B 为系统的输入矩阵;Q 为给定的

半正定实对称矩阵;R 为给定的正定实对称矩阵;N 代表更一般化性能指标中交叉乘积项的

加权矩阵。输出参量 K 为最优反馈增益矩阵;S 为对应 Riccati 方程的唯一正定解 P(若矩阵

BKA − 是稳定矩阵,则总有 P 的正定解存在); E 为 BKA − 的特征值。

函数 lqr2 ( ) 与 lqr ( ) 类似,只是其计算采用了 Schar 方法,因此具有更强的鲁棒性。

函数 lqry ( ) 用来求解二次型状态调节器的特例,是用输出反馈替代状态反馈,即有:

( ) ( )tt yKu −= (6-154)

其性能指标则为:

( )∫∞

+=0

TT d2

1tJ uRuyQy (6-155)

这种二次型输出反馈控制叫做次优(或准最优)控制。

3. 连续系统线性二次型最优控制的 MATLAB 实现示例

【例 6-57】已知连续系统状态方程与初始条件为

( ) ( )( ) ( )

==

txtx

ttx

12

1

u

,( )( )

==

10

00

2

1

x

x

性能指标

( ) ( )∫∞

+=

0

222 d

4

1ttutxJ

试求最优控制 ( )tu∗ 与最优性能指标 ∗J 。

【解】

(1) 由系统状态方程直接写出状态矩阵、输入矩阵与初始条件:

=

01

00A ,

=

0

1B , ( ) ( )

( )

=

=

1

0

0

00

2

1

x

xx

(2) 选择矩阵

=

20

00Q ,

2

1=R

(3) 用以下 MATLAB 程序求解最优控制 ( )tu∗ 与最优性能指标 ∗J :

syms x1 x2;

x=[x1;x2];A=[0 0;1 0];B=[1;0];

Page 303: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

291

R=1/2;Q=[0 0;0 2];N=0;[K,P,E]=lqr(A,B,Q,R,N)

u=-inv(R)*B’*P*x

x0=[0;1];J=1/2*x0’*P*x0

d=eig(A-B*inv(R)*B’*P) 程序运行结果

K = 2.0000 2.0000

P = 1.0000 1.0000

1.0000 2.0000

E = -1.0000 + 1.0000i

-1.0000 -1.0000i

u = -2*x1-2*x2

J = 1.0000

d = -1.0000 + 1.0000i

-1.0000 -1.0000i 即有黎卡提代数方程的解 P ,它是以下常值正定矩阵:

=

21

11P

最优控制 ( )tu∗ :

( ) ( ) ( )txtxtu 21 22 −−=∗

最优性能指标 ∗J :

1=∗J

特征方程的特征值: j11 +−=λ , j12 −−=λ

由特征值数据可知,闭环系统渐近稳定。

【例 6-58】已知连续系统状态方程与初始条件为

( ) ( )( ) ( )

==

tutx

txtx

2

21

,( )( )

==

00

10

2

1

x

x

( ) ( )txty 1=

性能指标

( ) ( )[ ]∫∞

+=0

22 d2

1ttutyJ

试构造输出调节器实现次最优控制,并求其次最优控制 ( )tu∗ 与次最优性能指标 ∗J 。

【解】

(1) 由系统状态方程直接写出状态矩阵、输入矩阵与初始条件:

=

00

10A ,

=

1

0B , [ ]01=C , 0=D , ( ) ( )

( )

=

=

0

1

0

00

2

1

x

xx

(2) 选择矩阵 1=Q , 1=R

Page 304: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

292

(3) 用以下 MATLAB 程序求解最优控制 ( )tu∗ 与最优性能指标 ∗J :

syms x1 x2;

x=[x1;x2];

A=[0 1;0 0];B=[0;1];C=[1 0];D=0;

sys=ss(A,B,C,D);R=1;Q=1;N=0;

[K,P,E]=lqry(sys,Q,R,N)

u=-inv(R)*B’*P*x

x0=[1;0];J=1/2*x0’*P*x0

d=eig(A-B*inv(R)*B’*P) 程序运行结果

K = 1.0000 1.4142

P = 1.4142 1.0000

1.0000 1.4142

E = -0.7071 + 0.7071i

-0.7071 - 0.7071i

u = -x1-2^(1/2)*x2

J = 0.7071

d = -0.7071 + 0.7071i

-0.7071 - 0.7071i 即实现次最优控制而构造的输出调节器为最优反馈增益矩阵

[ ]21=K

黎卡提代数方程的解 P ,它是以下常值正定矩阵:

=

21

12P

最优控制 ( )tu∗ :

( ) ( ) ( ) ( ) ( )tytytxtxtu 22 21 −−=−−=∗

最优性能指标 ∗J :

707.0=∗J

特征方程的特征值:

2

2j

2

21 +−=λ , =2λ

2

2j

2

2 −−

由特征值数据可知,闭环系统渐近稳定。

6.3.3 离散系统线性二次型最优控制的 MATLAB 实现

1. 离散系统线性二次型最优控制

设完全可控线性离散系统的状态方程为:

( ) ( ) ( )kkk BuAxx +=+1 , ( ) 00 xx = , ( )1,,1,0 −= Nk (6-156)

式中, ( )kx 为 n 维状态向量; ( )ku 为 p 维控制向量,且不受约束;A 为 nn × 维非奇异矩阵,

Page 305: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

293

B 为 pn × 维矩阵。

系统的性能指标为:

( ) ( ) ( ) ( ) ( ) ( )[ ]∑−

=

++=1

0

TTT

2

1

2

1 N

k

kukukxkxNxNxJ RQS (6-157)

式中,Q 为 nn × 维正定或半正定实对称矩阵;R 为 pp × 维正定实对称矩阵;S 为 nn × 维

正定或半正定实对称矩阵。

最优控制作用与最优反馈矩阵可以有几种不同的表达式。则其中最优反馈矩阵之一为:

( ) ( ) ( )[ ]QPBRK −=−− kAk

1TT1 (6-158)

与之对应的最优控制序列:

( ) ( ) ( )kkk xKu −=∗ ( ) ( )[ ] ( )kk xQPABR −−=−− 1TT1 (6-159)

( )1,,1,0 −= Nk

以及最优性能指标:

( ) ( ) ( )0002

1 T xPx=∗J (6-160)

以上几式中, ( )kP 为正定矩阵,它是以下黎卡提差分方程的正定解:

( )kP = ( )[ ] ABBRPAQ1T11T 1

−−− +++ k (6-161)

若控制步数 N 为无限值,即令 ∞→N ,系统最优控制的解成为稳态解。系统性能指标则

改为:

( ) ( ) ( ) ( )[ ]∑∞

=

+=0

TT

2

1

k

kkkkJ RuuQxx (6-162)

( )kK 变成常数增益矩阵 K:

[ ] PABPBBRK T1T −+= (6-163)

( )kP 也变成常数矩阵 P:

P = [ ] ABBRPAQ1T11T −−− ++ (6-164)

对应的最优控制序列为:

( ) ( )kk xKu −=∗ [ ] ( )kPAxBPBBR T1T −+−= (6-165)

闭环系统的状态方程为:

( ) ( ) ( ) ( ) ( )

( ) ( )k

kkkk

AxPBBRI

xPABPBBRBABuAxx

1T1

T1T1

−−

+

=

+−=+=+

(6-166)

以及最优性能指标仍为:

( ) ( ) ( )0002

1 T xPx=∗J (6-167)

2. 离散系统线性二次型最优控制的 MATLAB 实现与示例

在 MATLAB 的工具箱里,有特别提供的函数来求解离散系统稳态线性二次型状态调节器

Page 306: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

294

问题。其函数有 dlqr ( ) 与 dlqry ( )。函数的调用格式为:

[K,S,E]=dlqr(A,B,Q,R,N)

[K,S,E]=dlqry(A,B,C,D,Q,R,N)

其中,输入参量 A 为系统的状态矩阵;B 为系统的输入矩阵;Q 为给定的正定或半正定实对

称矩阵;R 为给定的正定实对称矩阵;N 代表更一般化性能指标中交叉乘积项的加权矩阵。

输出参量 K 为离散最优反馈增益矩阵;S 为对应 Riccati 方程的唯一正定解 P;E 为 A-BK 的

特征值。

函数 dlqry ( ) 用来求解二次型状态调节器的特例,这个特例就是用输出反馈替代状态反

馈,即有: ( ) ( )kk yKu −= (6-168)

其性能指标则为:

( ) ( ) ( ) ( )[ ]∑∞

=

+=0

TT

2

1

k

kkkkJ RuuQyy (6-169)

【例 6-59】已知伺服系统动态结构图如图 6-7 所示:

图 6-7 伺服系统动态结构图

且 ( ) ( ) ( )kbkak uxx +=+1

( ) ( )kck xy =

式中

5.0=a , 1=b ,c = 1,d = 0

试计算稳态最优反馈增益矩阵并求系统闭环后的单位阶跃给定响应。

【解】

由结构图有: ( ) ( ) ( )kbkak uxx +=+1

( ) ( ) ( )kkkkk xvu 21 −=

( ) ( ) ( ) ( )1−+−= kkkk vyrv

( ) ( )kck xy =

由 ( )kv 有:

( ) ( ) ( ) ( )kkkk vyrv ++−+=+ 111 ( ) ( ) ( ) ( )1++−+−= kkcbkkca ruvx

由 ( )1+kx 与 ( )1+kv 写出矩阵:

( )( )

( )( ) ( ) ( )1

1

0

1

0

1

1+

+

+

=

++

kkcb

b

k

k

ca

a

k

kru

v

x

v

x (6-170)

Page 307: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

295

对于系统稳态, ∞=k ,以上矩阵就成为:

( )( )

( )( ) ( ) ( )∞

+∞

+

∞∞

=

∞∞

ruv

x

v

x

1

0

1

0

cb

b

ca

a (6-171)

令采样信号 ( )kxe = ( )kx - ( )∞x , ( )kve = ( )kv - ( )∞v , ( )kue = ( )ku - ( )∞u 。将以上两式相

减,可得:

( )( )

( )( ) ( )ku

cb

b

kv

kx

ca

a

kv

kxe

e

e

e

e

+

=

++

1

0

1

1

由 ( ) ( ) ( )kkkkk xvu 21 −=

有 ( ) ( ) ( )kxkkvkku eee 21 −=

再令 ( )kx1 = ( )kxe , ( )kx2 = ( )kve , ( )kw = ( )kue 。以上矩阵可写成:

( )( )

( )( ) ( )kw

cb

b

kx

kx

ca

a

kx

kx

+

=

++

2

1

2

1

1

0

1

1 (6-172)

式中

( ) [ ] ( )( )

−−=

kx

kxkkkw

2

112 (6-173)

当系统有单位阶跃给定输入时, ( ) ( ) rrr =∞=+1k 。将 ( ) ( ) ( )kkkkk xvu 21 −= 代入式(6-38)

可得: ( )( )

( )( ) [ ] ( )

( ) rk

kkk

cb

b

k

k

ca

a

k

k

+

+

=

++

1

0

1

0

1

112 v

x

v

x

v

x

根据矩阵乘法运算规则,整理以上矩阵有:

( )( )

( )( ) r

v

x

v

x

+

−+−

−=

++

1

0

11

1

12

12

k

k

cbkcbkca

bkbka

k

k (6-174)

还有:

( ) ( )kck xy = [ ] ( )( )

=

k

kc

v

x0 (6-175)

设定性能指标为:

( ) ( ) ( ) ( )[ ]∑∞

=

+=0

TT

2

1

k

kwkwkkJ RQxx (6-176)

式中参量 Q、R 选择为:

=

10

01000Q , [ ]1=R

根据以上分析以及式(6-170)、(6-174)与(6-175),为计算系统最优反馈增益矩阵并求系统

闭环后的阶跃响应,特给出如下 MATLAB 程序。

a=0.5;b=1;c=1;d=0;Q=[1000 0;0 1];R=[1];

A=[a 0;-c*a 1];B=[b;-c*b];Kx=dlqr(A,B,Q,R)

Page 308: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

296

k1=-Kx(2);k2=Kx(1);axc=[(a-b*k2) b*k1;(-c*a+c*b*k2) (1-c*b*k1)];

bxc=[0;1];cxc=[1 0];dxc=[0];

dstep(axc,bxc,cxc,dxc,1,100)

程序运行后可得系统最优状态反馈增益矩阵 Kx

Kx = 0.4995 -0.0311

程序运行后还绘制出系统闭环后的单位阶跃给定响应曲线如图 6-8 所示。

图 6-8 闭环系统单位阶跃给定响应曲线

【例 6-60】已知离散系统状态方程与初始条件为

( ) ( ) ( )kkk uxx 6321.03679.01 +=+ , ( ) 10 =x

试确定最优控制作用 ( )ku∗ 与最优轨线 ( )kx∗ ,使得以下性能指标为最小:

( )[ ] ( ) ( )[ ]∑=

++=9

0

222

2

110

2

1

k

kukxxJ

并求其最优性能指标 ∗J 。

【解】

(1) 由系统状态方程直接写出状态矩阵、输入矩阵与初始条件:

[ ]3679.0=A , [ ]6321.0=B , ( ) 10 =x

(2) 选择矩阵 1=S , 1=Q , 1=R

(3) 用以下 MATLAB 程序求解最优控制 ( )tu∗ 与最优性能指标 ∗J :

A=0.3679;B=0.6321;S=1;Q=1;R=1;P=1;x0=1;

N=11;p(N)=S;x(1)=1;Pnext=S;

for i=N-1:-1:1

P=Q+A’*inv((inv(P)+B*inv(R)*B’))*A;

p(i)=P;Pnext=P;

end

for i=N:-1:1

K=inv(R)*B’*inv(A’)*(p(i)-Q);

Page 309: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

297

k(i)=K;

end

for i=1:N-1

Xnext=(A-B*k(i))*x(i);

x(i+1)=Xnext;

end

for i=1:N

u(i)=-k(i)*x(i);

end

P0=p(1);

J=1/2*x0’*P0*x0

M=[p’ k’ x’ u’] 程序运行结果

J = 0.5518

M = 1.1037 0.1781 1.0000 -0.1781

1.1037 0.1781 0.2553 -0.0455

1.1037 0.1781 0.0652 -0.0116

1.1037 0.1781 0.0166 -0.0030

1.1037 0.1781 0.0042 -0.0008

1.1037 0.1781 0.0011 -0.0002

1.1037 0.1781 0.0003 -0.0000

1.1036 0.1781 0.0001 -0.0000

1.1032 0.1773 0.0000 -0.0000

1.0967 0.1662 0.0000 -0.0000

1.0000 0 0.0000 0

即最优控制作用

( )ku∗ 000000002.00008.0003.00116.00455.01781.0 −−−−−−=

最优轨线

( )kx∗ 0000001.00003.00011.00042.00166.00652.02553.00.1=

最优性能指标 5518.0=∗J

6.3.4 最优观测器的 MATLAB 实现

系统的 Kalman 滤波器就是最优观测器。对于带有系统噪声与量测噪声的实际系统,必须

通过适当的结构,抑制或滤掉噪声对系统的干扰及影响,对系统的状态做出充分精确的估计。

利用 Kalman 滤波器对系统进行最优控制是非常有效的。

1. 连续时不变系统的 Kalman 滤波

给定系统的状态方程与量测方程分别为:

( ) ( ) ( ) ( )twttt GBuAxx ++= (6-177)

( ) ( ) ( ) ( ) ( )tvtwttt +++= HDuCxy (6-178)

Page 310: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

298

式中, ( )tx 为 n 维状态向量; ( )tu 为 p 维控制向量; ( )ty 为 q 维量测向量;A 为 nn× 维常数矩

阵;B 为 pn × 维常数矩阵;G 为 pn × 维常数矩阵;C 为 nm× 维常数矩阵;D 为 pq × 维常数

矩阵;H 为 pq × 维常数矩阵;假定 ( )tw 为随机噪声干扰输入,它是零均值的 p 维白噪声过程;

假定 v ( )t 为随机量测噪声,是零均值的 q 维白噪声过程。 ( )tw 与 v ( )t 两噪声过程均平稳且互

不相关。即有: ( ) 0=twE ,对一切 t ≥ 0t

( ) 0=tvE ,对一切 t ≥ 0t

( ) ( ) ( )τδτ −= tQwtwE T0 ,对一切 t,τ ≥ 0t

此式中的 0Q 为常数矩阵(叫做模型噪声的协方差矩阵)。

( ) ( ) ( )τδτ −= tRvtvE 0T ,对一切 t,τ ≥ 0t

此式中的 R0 为常数矩阵(叫做量测噪声的协方差矩阵)。

( ) ( ) 0T =τvtwE ,对一切 t,τ ≥ 0t 。

令 ( )tx 与 ( )tx~ 分别为状态向量估计值与状态向量的估计误差值, ( )tx 为状态向量的理论值,则

有: ( )tx~ = ( )tx - ( )tx (6-179)

除上述假定外,还假定 A,C 是完全可观测的。在这些假定均成立的条件下,使估计

误差平方和的期望值最小(最小方差迹准则滤波估计)即有:

( ) ( )[ ] min~~ T == ttEJ xx (6-180)

其最优估计器为:

( ) ( ) ( ) ( ) ( )[ ] ( ) ( ) ( ) ( )tttttttt LyBuxLCAxCyLBuxAx ++−=−++= ˆˆˆ (6-181)

式中 1

0T

0−= RCPL (6-182)

其中 0P 为以下 Riccati 方程的解:

001

0T

0T

0T

00 =−++ − PPPP CRCGGQAA (6-183)

可以证明,Riccati 方程的解 0P 就是估计误差的协方差,而此协方差的迹(tr 0P )即为误差

方差。如是有:

( ) ( )[ ]tttrEtrP T0

~~ xx= = ( ) ( )[ ]ttE xx ~~ T (6-184)

2. Kalman 滤波的 MATLAB 实现

在 MATLAB 的工具箱里提供了 kalman ( ) 函数来求解系统的 Kalman 滤波器。函数的调

用格式为:

[Kest,L,P] = kalman(sys,Q,R,N) 其中,输入参量 sys 为连续或离散系统带扰动的状态空间模型(A, B

~,C, D

~), 当模型有两

个输入时, [ ]GBB =~, [ ]HDD =~

;Q 为模型噪声的协方差矩阵;R 为量测噪声的协方差矩

阵;N 为可选项,它对应模型噪声与量测噪声的相关项。输出参量 Kest 为 Kalman 滤波器的

状态估计器,其动态方程如下:

( ) ( ) ( ) ( ) ( ) ( )tttt LyuLDBxLCAx +−+−= ˆ (6-185)

Page 311: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

299

( )( ) ( ) ( )ttt

tu

Dx

E

C

x

y

+

=

0

ˆˆ

ˆ (6-186)

L 为 Kalman 滤波器的增益矩阵;P 为对应的 Riccati 方程的解,即估计误差的协方差。

在 MATLAB 老版本的工具箱里,还提供了两个配合使用的函数 lqe ( ) 与 estim ( )来求解

系统的 Kalman 滤波器。函数 lqe ( ) 的调用格式为:

[L,P,E] = lqe(A,G,C,Q,R,N)

其中,输入参量 A、G、C 为系统式 (6-177)与式(6-178)中的对应参量;Q 为模型噪声的协方

差矩阵;R 为量测噪声的协方差矩阵;N 为可选项,它对应模型噪声与量测噪声的相关项。

输出参量 L 为 Kalman 滤波器的增益矩阵;P 为对应的 Riccati 方程的解,即估计误差的协方

差;E 为估计器的闭环特征值。

函数 estim ( ) 的调用格式为:

est=estim (sys,L ) 这个函数用来生成连续系统的 Kalman 滤波器,即系统的状态估计器 est 。输入参量 sys 为

连续系统带扰动的状态空间模型,输入参量 L 为函数 lqe ( ) 求出的 Kalman 滤波器的增益矩

阵。

对于连续系统,用函数 kalman ( ) 计算的 Kalman 滤波器的状态估计器 Kest 与用函数

estim ( ) 求出的 Kalman 滤波器 est ,两者应相等。请看以下示例。

3. Kalman 滤波的 MATLAB 实现示例

【例 6-61】已知单位负反馈连续系统的受控对象与校正装置的传递函数分别为:

( )20

1

ssG = , ( ) ( )

10

118

++=

s

ssGc

试求系统 Kalman 滤波器的增益矩阵 L;系统估计误差的协方差 P 以及系统的 Kalman(最优)

滤波器。

【解】

用以下 MATLAB 程序求解:

n1=[0 0 1];d1=[1 0 0];sys1=tf(n1,d1);G1=ss(sys1);

n2=[0 18 18];d2=[0 1 10];sys2=tf(n2,d2);G2=ss(sys2);

G3=G1*G2;G=feedback(G3,1);q=1;r=0.01;

[Kest,L,P]=kalman(G,q,r)

est=estim(G,L) 程序运行结果

a = x1_e x2_e x3_e

x1_e 0 -84.81 -10.13

x2_e 1 -11.56 0

x3_e 0 -65.9 -10

b = y1

x1_e 66.81

x2_e 11.56

x3_e 49.9

Page 312: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

300

c = x1_e x2_e x3_e

y1_e 0 1 0

x1_e 1 0 0

x2_e 0 1 0

x3_e 0 0 1

d = y1

y1_e 0

x1_e 0

x2_e 0

x3_e 0

I/O groups:

Group name I/O Channel(s)

Measurement I 1

OutputEstimate O 1

StateEstimate O 2,3,4

Continuous-time model.

L = 66.8132

11.5597

49.8997

P = 14.8565 0.6681 12.6078

0.6681 0.1156 0.4990

12.6078 0.4990 10.7566

a = x1 x2 x3

x1 0 -84.81 -10.13

x2 1 -11.56 0

x3 0 -65.9 -10

b = u1

x1 66.81

x2 11.56

x3 49.9

c = x1 x2 x3

y1 0 1 0

y2 1 0 0

y3 0 1 0

y4 0 0 1

d = u1

y1 0

y2 0

y3 0

y4 0

Page 313: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

301

I/O groups:

Group name I/O Channel(s)

Measurement I 1

OutputEstimate O 1

StateEstimate O 2,3,4

Continuous-time model. 即系统 Kalman 滤波器的增益矩阵

=

8997.49

5597.11

8132.66

L

系统估计误差的协方差

=

7566.104990.06078.12

4990.01156.06681.0

6078.126681.08565.14

P

还有系统的 Kalman(最优)滤波器 ( )dcba ,,, 。计算表明,用函数 kalman ( ) 计算的 Kalman 滤波

器的状态估计器 Kest 与用函数 estim ( ) 求出的 Kalman 滤波器 est ,两者是相等的。

6.3.5 线性二次型 Guass 最优控制的 MATLAB 实现

考虑系统随机输入噪声与随机量测噪声的线性二次型最优控制叫做线性二次型高斯

(Guass)最优控制,即 LQG 控制。线性二次型高斯最优控制是输出反馈控制。这种计及系统

受到随机因素的作用而采取的控制策略,对解决线性二次型最优控制问题,显然更具有实

用性。

1. LQG 最优控制的求解

给定系统的状态方程与量测方程分别为:

( ) ( ) ( ) ( )twttt GBuAxx ++= (6-187)

( ) ( ) ( ) ( )tvttt ++= DuCxy (6-188)

式中,参量 ( )tx 、 ( )tu 、 ( )ty 、A、B、G、C、D 含义同前。假定 ( )tw 为随机噪声干扰输入,

它是零均值的 p 维白噪声过程;假定 v ( )t 为随机量测噪声,是零均值的 q 维白噪声过程。 ( )tw

与 v ( )t 两噪声过程均平稳且互不相关。系统的性能指标为:

[ ]

+= ∫

0

TT dtEJ RuuQxx (6-189)

根据 LQG 问题的分离原理,LQG 最优控制是两个方面问题的综合:一是二次型调节器

问题,二是最优估计器问题。

(1) LQ 最优控制就是二次型调节器问题。前面已经介绍过,最优状态反馈控制有最优反

馈矩阵式(6-149):

PBRK T1−=

最优控制为式(6-150):

Page 314: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

302

( ) ( ) ( )tttu xPBRxK T1−∗ −=−=

以及 P 满足的 Riccati 方程式(6-152):

0T1T =+−+ − QPBPBRPAPA

(2) 利用 Kalman 滤波理论,从状态 ( )tx 中得到最优估计 ( )tx ,使估计误差平方和的期望

值最小(最小方差迹准则滤波估计)即有式(6-180):

( ) ( )[ ] min~~ T == ttEJ xx

这种最优估计器为式(6-181):

( ) ( ) ( ) ( ) ( )tttt LyBuxLCAx ++−= ˆ

上式中,L 为 Kalman 滤波器增益,即式(6-182):

10

T0

−= RCPL

其中 0P 为以下 Riccati 方程式(6-183)的解:

001

0T

0T

0T

00 =−++ − PRPQPP CCGGAA

分别计算 LQ 最优控制与最优估计,尔后将这两个问题的解综合在一起,就得到 LQG 控

制的最优解。

2. LQG 最优控制的 MATLAB 实现与示例

在 MATLAB 的工具箱里,有特别提供的函数 reg ( ) 来求解 LQG 最优控制。函数的调用

格式为:

rsys = reg(sys,K,L) 其中,输入参量 sys 为系统的状态空间模型;K 为由函数 lqr ( ) 求得的最优状态反馈增益矩阵;

L 为函数 lqe ( ) 求得的 Kalman 滤波器状态估计增益矩阵。

【例 6-62】已知系统的状态方程如下:

wuxx

+

+

−−

−−=

0

0

1

8.9

0

3.6

02.08.94.1

001

01.004.0

[ ] vxy += 100

二次型挑节器性能指标为

( )∫∞

+=0

TT dtJ uRuxQx

式中

=

100

010

001

Q , 1=A

输入噪声与量测噪声的有关参数分别为 10 =Q , 10 =R 。要求:①试由系统状态方程求其传

递函数;②对原系统进行阶跃给定输入的仿真;③试设计 LQG 控制器;④对 LQG 最优控制

的系统进行阶跃给定输入的仿真。

Page 315: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

303

【解】

(1) 用以下 MATLAB 程序求系统传递函数:

A=[-0.4 0 -0.01;1 0 0;-1.4 9.8 -0.02];

B=[6.3;0;9.8];C=[0 0 1];D=[0];

sys=ss(A,B,C,D);tf(sys) 程序执行结果

Transfer function:

9.8 s^2 - 4.9 s + 61.74

--------------------------------

s^3 + 0.42 s^2 - 0.006 s + 0.098 (2) 用以下 MATLAB 程序对原系统进行阶跃给定输入的仿真:

A=[-0.4 0 -0.01;1 0 0;-1.4 9.8 -0.02];

B=[6.3;0;9.8];C=[0 0 1];D=[0];

sys=ss(A,B,C,D);t=0:0.001:50;step(sys,t) 程序执行后得到原系统的给定输入阶跃响应仿真曲线如图 6-9 所示。

图 6-9 原系统的系统阶跃响应仿真曲线

由系统的阶跃响应曲线可以看到原系统的阶跃响应为发散的振荡,系统是不稳定的。

(3) 用以下 MATLAB 程序设计 LQG 控制器并对其系统进行阶跃给定输入的仿真:

A=[-0.4 0 -0.01;1 0 0;-1.4 9.8 -0.02];

B=[6.3;0;9.8];C=[0 0 1];D=[0];s1=ss(A,B,C,D);

G=[1;0;0];Q=[1 0 0;0 1 0;0 0 1];R=1;Q0=1;R0=1;

K=lqr(A,B,Q,R);L=lqe(A,G,C,Q0,R0);

[af,bf,cf,df]=reg(A,B,C,D,K,L);

sf=ss(af,bf,cf,df);

sys=feedback(s1,sf);

t=0:0.01:10;step(sys,t) 程序执行后得到 LQG 最优控制的系统给定输入阶跃响应仿真曲线如图 6-10 所示。

由图 6-10 的 LQG 最优控制的系统阶跃响应仿真曲线可以看到系统是稳定的,并且阶

跃响应稍有超调与微弱的振荡,曲线是较理想的。这比不稳定的原系统确是最优控制的结

果。

Page 316: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

304

图 6-10 LQG 最优控制的系统阶跃响应仿真曲线

Page 317: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

第 7 章 MATLAB 符号方程解算的应用

内 容 提 要 在 3.8 节介绍了 MATLAB 符号方程求解的函数命令、功能、调用格式及其使

用方法,本章就来介绍 MATLAB 的符号方程解算的应用,并把求解分式方程、无

理方程与超越方程安排在本章,这是因为这些方程大多是数值方程,数值方程的计

算可以看成是符号方程解算的应用。全章共 3 节:7.1 节介绍了 MATLAB 符号代数

方程解算的应用;7.2 节介绍了 MATLAB 符号超越方程解算的应用;7.3 节介绍了

MATLAB 符号微分方程解算的应用。通过本章的介绍,使读者更进一步熟悉并掌握

符号方程解算的函数命令及其用来计算实际问题的综合使用方法。

7.1 M A T LA B 符号代数方程解算的应用

7.1.1 分式方程求解

分母中含有未知数的方程叫做分式方程。通常是将分式方程化成整式方程后来进行求解。

将分式方程化成整式方程时,很可能引进增根。正如已经强调的,在用 MATLAB 函数命令求

解分式方程时,看不到方程变形过程,只能看到所求的方程解,所以都毫不例外地要对其解

进行验算。

【例 7-1】解分式方程:

1

1

3

1

4

1

2

1

+−

+=

+−

+ xxxx

【解】

(1) 求方程解的 MATLAB 语句如下:

syms x;

[x]= solve(’1/(x+2)-1/(x+4)=1/(x+3)-1/(x+1)’)

语句执行结果

x = [ -5/2+1/2*3^(1/2)]

[ -5/2-1/2*3^(1/2)] 即方程的解为

2

3

2

52,1 ±−=x

(2) 验算两个根 2,1x

对第一个根,可执行如下 MATLAB 校验语句:

x=-5/2+1/2*3^(1/2);

Page 318: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

306

expr=1/(x+2)-1/(x+4)-1/(x+3)+1/(x+1) 语句执行结果

expr = 4.4409e-016

这是由计算机精度与计算程序引起的误差,实际上为 0 即

01

1

3

1

4

1

2

1 =+

++

−+

−+ xxxx

对第二个根,可执行如下 MATLAB 校验语句:

x=-5/2-1/2*3^(1/2);

expr=1/(x+2)-1/(x+4)-1/(x+3)+1/(x+1) 语句执行结果

expr = 2.6645e-015

这也是由计算机精度与计算程序引起的误差,实际上为 0 即

01

1

3

1

4

1

2

1 =+

++

−+

−+ xxxx

由验算结果可知, 2,1x 均为方程的解。

【例 7-2】解分式方程:

0213

1643

164

132

2

2

2

=−++−+⋅−

−+++

xx

xx

xx

xx

【解】

(1) 求方程解的 MATLAB 语句如下:

syms x;

solve(’(x^2+3*x+1)/(4*x^2+6*x-1)-3*(4*x^2+6*x-1)/(x^2+3*x+1)-2=0’) 语句执行结果

x = [ 0]

[ -9/5]

[ -15/22+1/22*401^(1/2)]

[ -15/22-1/22*401^(1/2)]

即方程的解为

01 =x ;5

92 −=x ;

22

401153

+−=x ;22

401154

−−=x

(2) 验算 4 个根 4,3,2,1x

对第一个根,可执行如下 MATLAB 校验语句:

x=0;

expr=(x^2+3*x+1)/(4*x^2+6*x-1)-3*(4*x^2+6*x-1)/(x^2+3*x+1)-2 语句执行结果

expr = 0

0213

1643

164

132

2

2

2

=−++−+⋅−

−+++

xx

xx

xx

xx

对第二个根,可执行如下 MATLAB 校验语句:

Page 319: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

307

x=-9/5;

expr=(x^2+3*x+1)/(4*x^2+6*x-1)-3*(4*x^2+6*x-1)/(x^2+3*x+1)-2 语句执行结果

expr = 0 即

0213

1643

164

132

2

2

2

=−++−+⋅−

−+++

xx

xx

xx

xx

对第三个根,可执行如下 MATLAB 校验语句:

x=-15/22+1/22*401^(1/2);

expr=(x^2+3*x+1)/(4*x^2+6*x-1)-3*(4*x^2+6*x-1)/(x^2+3*x+1)-2

语句执行结果

expr = -9.3259e-015

这是由计算机精度与计算程序引起的误差,实际上为 0 即

0213

1643

164

132

2

2

2

=−++−+⋅−

−+++

xx

xx

xx

xx

对第 4 个根,可执行如下 MATLAB 校验语句:

x=-15/22-1/22*401^(1/2);

expr=(x^2+3*x+1)/(4*x^2+6*x-1)-3*(4*x^2+6*x-1)/(x^2+3*x+1)-2 语句执行结果

expr = 2.6645e-015

这是由计算机精度与计算程序引起的误差,实际上为 0 即

0213

1643

164

132

2

2

2

=−++−+⋅−

−+++

xx

xx

xx

xx

由验算结果可知, 4,3,2,1x 均为方程的解。

7.1.2 无理方程求解

根号内含有未知数的方程叫做无理方程或根式方程。无理方程的求解通常是设法将其变

形为有理方程,然后再解其有理方程。将无理方程去掉根号的变形过程中,很可能引进增根。

正如已经强调的,求解无理方程时,计算出的所有根也必须进行验算。

还需要指出的是,在实数范围与复数范围内,无理方程的解是不一样的:例如无理方程

在实数范围内的增根,当把数的范围扩展到复数时就可能是正常根了。

【例 7-3】解无理方程:

xx −=− 71

【解】

(1) 求方程解的 MATLAB 语句如下:

syms x;

[x]= solve(’sqrt(x-1)=7-x’) 语句运行结果

x = 5 即方程的解为

Page 320: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

308

5=x

(2) 验根可执行如下 MATLAB 语句:

x=5;

expr=sqrt(x-1)-7+x 语句运行结果

expr = 0 由验算结果可知, 5=x 为方程的解。

【例 7-4】解无理方程:

064 =−− xx

【解】

(1) 求方程解的 MATLAB 语句如下:

syms x;

[x]= solve(’x^(1/2)-x^(1/4)-6=0’) 语句执行结果

x = 81 即方程的解为

81=x

(2) 验算可执行如下 MATLAB 语句:

x=81;

expr=x^(1/2)-x^(1/4)-6

语句执行结果

expr = 0 由验算结果可知, 81=x 为方程的解。

【例 7-5】解无理方程组:

−−=−−=−−

yxxy

yxxy

1

3

【解】

(1) 求方程解的 MATLAB 语句如下:

syms x y;

[x,y]=solve(’(3-y)^1/2-x^1/2=(x-y)^1/2’,’(1-y)^(1/2)=x^1/2-(x-y)^1/2’,’x,y’) 语句执行结果

x = 3/2

y = 2*2^(1/2)-2

即方程的解为

2/3=x ; 222 −=y

(2) 验根可执行如下 MATLAB 语句:

x=3/2;y=2*2^(1/2)-2;

expr1=(3-y)^1/2-x^1/2-(x-y)^1/2

expr2=(1-y)^(1/2)-x^1/2+(x-y)^1/2

Page 321: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

309

语句执行结果

expr1 = 0

expr2 = -3.3307e-016

这是由计算机精度与计算程序引起的误差,实际上为 0 即 expr2=0。

由验算结果可知, 2/3=x 与 222 −=y 为方程组的解。

7.1.3 符号代数方程求解应用题

【例 7-6】已知菱形的边长为 a ,面积为 S (图 7-1),求其对角线的长。

图 7-1 边长为 a 的菱形

【解】

(1) 列方程组

设菱形的两条对角线长分别为 x 与 y,根据图 7-1 与菱形的性质以及已知条件列方程组如

下:

( )

=

+

=⋅

222

22

822

ayx

Syx

(2) 求方程解的 MATLAB 语句如下:

syms x y a S;

[x,y]=solve(’x/2*y/2=S/8’,’(x/2)^2+(y/2)^2=a^2’);

x=simple(factor(x))

y=simple(factor(y)) 语句执行结果

x = [ S/((4*a^2+S)^(1/2)+(4*a^2-S)^(1/2))]

[ S/((4*a^2+S)^(1/2)-(4*a^2-S)^(1/2))]

[ -S/((4*a^2+S)^(1/2)-(4*a^2-S)^(1/2))]

[ -S/((4*a^2+S)^(1/2)+(4*a^2-S)^(1/2))]

y = [ 1/2*(4*a^2+S)^(1/2)+1/2*(4*a^2-S)^(1/2)]

[ 1/2*(4*a^2+S)^(1/2)-1/2*(4*a^2-S)^(1/2)]

[ -1/2*(4*a^2+S)^(1/2)+1/2*(4*a^2-S)^(1/2)]

[ -1/2*(4*a^2+S)^(1/2)-1/2*(4*a^2-S)^(1/2)]

即方程的解为

SaSa

Sx

−++=

221

44;

−++= SaSay 22

1 442

1

SaSa

Sx

−−+=

222

44;

−−+= SaSay 22

2 442

1

Page 322: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

310

SaSa

Sx

−−+

−=22

344

−−+−= SaSay 22

3 442

1

SaSa

Sx

−++

−=22

444

−++−= SaSay 22

4 442

1

(3) 验算

对于第一组解,其验算可执行如下 MATLAB 语句:

syms x y a S;

x=S/((4*a^2+S)^(1/2)+(4*a^2-S)^(1/2));

y=1/2*(4*a^2+S)^(1/2)+1/2*(4*a^2-S)^(1/2);

expr1=simple(x/2*y/2-S/8)

expr2=simple((x/2)^2+(y/2)^2-a^2) 语句执行结果

expr1 = 0

expr2 = 0 由验算结果可知,第一组 1x 、 1y 确实是方程组的解。

依此验算另外三组解,由结果可知, 2x 、 2y ; 3x 、 3y ; 4x 、 4y 都是方程组的解。

[说明]

当作数值计算时,含有负值的解应当舍去。

【例 7-7】把三根导体串联时电阻是 a,并联时是 b,并且其中一根导体的电阻比其它两根导

体串联时的电阻少 c,求当 Ω= 11a 、 Ω= 1b 、 Ω= 1c 时每根导体的电阻。

【解】

(1) 列方程组

设三根导体的电阻分别为 x、y、z,根据导体串并联的概念以及已知条件列方程组如下:

−+==++

=++

czyx

bzyx

azyx

/1/1/1

(2) 求方程解的 MATLAB 语句如下:

syms x y z;

[x,y,z]=solve(’x+y+z=11’,’1/x+1/y+1/z=1’,’x=y+z-1’);

x=vpa(x,20)

y=vpa(y,20)

z=vpa(z,20)

语句执行结果

x = [ 5.]

[ 5.]

y = [ 1.7752551286084109509]

[ 4.2247448713915890491]

z = [ 4.2247448713915890491]

[ 1.7752551286084109509] 即方程的解为

Page 323: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

311

Ω= 51x ; Ω= 0841095097752551286.11y ; Ω= 9158904912247448713.41z

Ω= 52x ; =2y Ω9158904912247448713.4 ; =2z Ω0841095097752551286.1

(3) 验算可执行如下 MATLAB 语句:

x=5;y=1.7752551286084109509;z= 4.2247448713915890491;

l1=x+y+z

r1=11

l2=1/x+1/y+1/z

r2=1

l3=y+z-x

r3=1 语句执行结果

l1 = 11

r1 = 11

l2 = 1

r2 = 1

l3 = 1

r3 = 1

即第一式左=第一式右=11;第二式左=第二式右=1;第三式左=第三式右=1。 考虑到第二组解与第一组解是对应的,只是交换了 y 、 z 的标识,实际上是一组解。由

验算结果可知, 1x 、 1y 、 1z ; 2x 、 2y 、 2z 确实是方程组的解。

【例 7-8】在优选法中用“黄金分割法”来确定试验点。其方法是:将线段 AB 分割成 AC 与 CB

两段(图 7-2 ),使 AB 与 AC 的长度比等于 AC 与 CB 的长度比。试求 AC 的长。

图 7-2 黄金分割

【解】

(1) 列方程

设 AB=1, xAC = ,则 xCB −= 1 ,根据黄金分割法列方程如下:

x

x

x −=

1

1

(2) 求方程解的 MATLAB 语句如下:

syms x;

[x]=solve(’1/x=x/(1-x)’);

digits(10);x=vpa(x,10)

语句执行结果

x = [ .6180339890]

[ -1.618033989] 即方程的解为

6180339890.01 =x ; 6180339890.12 −=x ;

(3) 对 6180339890.01 =x 其验算可执行如下 MATLAB 语句:

Page 324: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

312

x=.6180339890;

l=1/x

r=x/(1-x)

语句执行结果

l = 1.6180

r = 1.6180 即左式=右式。

(4) 对 6180339890.12 −=x 其验算可执行如下 MATLAB 语句:

x=-1.618033989;

l=1/x

r=x/(1-x) 语句执行结果

l = -0.6180

r = -0.6180

即左式=右式。 由验算结果可知, 1x 、 2x 都是方程的解。

(5) 答案: AC 为负值的解应舍去,那么 ABxAC 6180339890.01 == 。

【例 7-9】用一条长 cma 的铁丝弯成一个直角三角形,要使其一条直角边长比另一条直角边

长短 cmb ,试计算 a = 36cm、 cm3=b 时短直角边的长度。

【解】

(1) 列方程

设短的直角边长为 x ,则长的直角边长为 bx + ,根据勾股定理列方程如下:

( ) ( ) abxxbxx =+++++ 22

(2) 求方程解的 MATLAB 语句如下:

syms x a b;

[x]=solve(’x+(x+b)+sqrt(x^2+(x+b)^2)=a’)

a=36;b=3;x0=subs(x,’[a b]’,[a b])

语句执行结果

x = [ -1/2*b+a+1/2*(b^2+2*a^2)^(1/2)]

[ -1/2*b+a-1/2*(b^2+2*a^2)^(1/2)]

x0 = 60

9 即方程的解为

601 =x ; 92 =x ;

(3) 对 92 =x 其验算可执行如下 MATLAB 语句:

syms x a b

x=9;a=36;b=3;

expr=x+(x+b)+sqrt(x^2+(x+b)^2)-a 语句执行结果

expr = 0

Page 325: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

313

同此验算, 1x 也是方程的解,即 1x 、 2x 都是方程的解。

(4) 答案: cm601 =x 的解应舍去,因为它比三边长度和还长,那么短直角边的长度应为

9cm( 2x )。

7.2 M A T LA B 符号超越方程解算的应用

7.2.1 指数方程求解及应用

指数中含有未知数的方程叫做指数方程。指数方程是一种超越方程。我们知道,指数函

数 yax = 与对数函数 xy alog= 互为反函数。指数式 yax = 中的底数 a 、指数 y 、幂 x 与对数

式 xy alog= 中的底数 a、对数 y 、真数 x 相对应。所以指数方程的求解通常是与取对数联系

在一起的,但用 MATLAB 函数命令求解对数方程时,与求解其它方程一样也看不到方程的变

形过程,只能看到求解的结果。

需要指出的是,在实变函数中,负数无对数,而复变数函数中,负数是有对数的。与求

解其它方程一样,对指数方程求的解都要进行验算。

【例 7-10】解指数方程: 233 252 += ++ xx

【解】

(1) 求方程解的 MATLAB 语句如下:

syms x ;

[x]= solve(’3^(2*x+5)=3^(x+2)+2’);x=factor(simple(x))

语句执行结果

x = [ log(-2/27)/log(3)]

[ -log(9)/log(3)] 即方程的解为

( )( )3ln

27/2ln1

−=x ,( )( )

( )( ) 23ln

3ln2

3ln

9ln2 −=−=−=x

(2) 验算方程的解

第一个根代入方程两边的 MATLAB 语句如下:

x=log(-2/27)/log(3);

l=3^(2*x+5)

r=3^(x+2)+2 语句运行结果

l = 1.3333 - 0.0000i

r = 1.3333 + 0.0000i

即验算结果:左式=右式。

第二个根代入方程两边的 MATLAB 语句如下:

x=-log(9)/log(3);

l=3^(2*x+5)

r=3^(x+2)+2 语句运行结果

Page 326: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

314

l = 3.0000

r = 3.0000 即验算结果:左式=右式。

(3) 验算结论:所求 2,1x 确是方程的解。

【例 7-11】解指数方程组:

=−=⋅−

− xy

yxx

42

552451

3

【解】

(1) 求方程组解的 MATLAB 语句如下:

syms x y;

[x,y]= solve(’5^(3*x)-24*5^x=-5^y’,’2^(y-1)=4^x’);

digits(20);

x=vpa(simple(x),20)

y=vpa(simple(y),20)

语句运行结果

x = .68260619455733947440

y = 2.3652123891146789488 (2) 将解代入方程组两边的 MATLAB 语句如下:

x=.68260619455733947440;

y=2.3652123891146789488;

l1=5^(3*x)-24*5^x

r1=-5^y

l2=2^(y-1)

r2=4^x

语句运行结果

l1 = -45.0000

r1 = -45.0000

l2 = 2.5761

r2 = 2.5761 即:第一式左=第一式右;第二式左=第二式右。

结论:x=.68260619455733947440 与 y=2.3652123891146789488 是方程组的解。

【例 7-12】解指数方程:9

8033 =− −xx 。

【解】

(1) 求方程解的 MATLAB 语句如下:

syms x ;

[x]= solve(’3^x-3^(-x)=80/9’);

digits(10)

x=vpa(simple(x),10) 语句运行结果

Page 327: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

315

x = [ -2.000000000+2.859600867*i]

[ 2.] (2) 将解 1x 代入方程两边的 MATLAB 语句如下:

x=-2.000000000+2.859600867*i;

l=3^x-3^(-x)

r=80/9 语句运行结果

l = 8.8889 + 0.0000i

r = 8.8889

即:左式=右式 (3) 将解 2x 代入方程两边的 MATLAB 语句如下:

x=2;

l=3^x-3^(-x)

r=80/9 语句运行结果

l = 8.8889

r = 8.8889

即:左式=右式 结论: 1x 与 2x 都是方程的解。

【例 7-13】放射性元素镭的衰变规律为 tNN λ−= e0

式中, 0N 是初始时刻( 0=t 时)镭的原子数, 1110358.1 −×=λ (1/s)是镭的衰变系数, N 是经过

t 秒后剩下的原子数。试计算需要多少时间镭原子剩下一半?

【解】

(1) 求方程解的 MATLAB 语句如下:

syms t lambda;

[t]= solve(’1/2=exp(-lambda*t)’);lambda=1.358*10^(-11);

digits(20);t=vpa(subs(t,’lambda’,lambda),20) 语句运行结果

t = 51041765873.339111328

(2) 将方程的解代入方程两边的 MATLAB 语句如下:

syms t lambda;

lambda=1.358*10^(-11);

t=51041765873.339111328;

r=exp(-lambda*t) 语句运行结果

r = 0.5000 即:左式=右式

结论: =t 51041765873.339111328 是方程的解。

(3) 将秒换算为年

Page 328: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

316

t=51041765873.339111328 秒/365/24/60/60

t = 1.6185e+003 年

(4) 答案:需要 =t 51041765873.339111328 秒或 1618 年多,镭原子剩下一半。

7.2.2 对数方程求解及应用

在对数符号后面含有未知数的方程叫做对数方程。对数方程是一种超越方程。我们知道,

对数函数 xy alog= 与指数函数 yax = 互为反函数。对数的底 a 为任意不等于 1 的正数。

对于任意不等于 1 的底 a 的对数计算,通常要转换成对特定底的对数的计算,这就要用

到换底公式。对数换底公式的一般表达式为

b

NN

a

ab log

loglog =

式中 a 为不等于 1 的正数,当 10=a 时,就是常用对数;当 e=a 时,就是自然对数。

在 MATLAB 中求解对数方程时,通常用以 e 为底的自然对数计算为最佳选择。若遇到

以 10 或非 10 为底的对数时,需用对数的换底公式将其转换为以 e 为底的自然对数,即:

( )( )10ln

lnlog10

NN = 或

( )( )b

NNb ln

lnlog =

还要特别注意,在 MATLAB 中, 常用对数函数为 log10( );自然对数为 log( )。与求解

指数方程一样,也要验算对数方程的解。

【例 7-14】解对数方程:

( ) axx xa =log2

【解】

(1) 需用对数的换底公式将其转换为以 e 为底的自然对数,即: ( )( )a

NNa ln

lnlog =

(2) 求方程解的 MATLAB 语句如下:

syms x a;

[x]= solve(’x^(2*log(x)/log(a))=a*x’);x=simple(factor(x))

语句运行结果

x = [ 1/a^(1/2)]

[ a]

即方程的解是:a

x1

1 = 与 ax =2

(3) 验算解a

x1

1 = 的 MATLAB 语句如下:

x=1/a^(1/2);l=simple(x^(2*log(x)/log(a)))

r=a*x

语句运行结果

l = a^(1/2)

r = a^(1/2) (4) 验算解 ax =2 的 MATLAB 语句如下:

Page 329: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

317

x=a;l=simple(x^(2*log(x)/log(a)))

r=a*x 语句运行结果

l = a^2

r = a^2 (5) 结论: 1x 与 2x 都是方程的解。

【例 7-15】解方程组

( )

==−

−−

13

12222log

42

10 xy

yxyx

【解】

(1) 需用对数的换底公式将常用对数转换为以 e 为底的自然对数,即:

( )( )10ln

lnlog10

NN =

(2) 求方程组解的 MATLAB 语句如下:

syms x y;

[x,y]= solve(’2^((x-y)/2)-2^((x-y)/4)=12’,’3^(log(2*y-x)/(log(10)))=1’);

x=simple(factor(x))

y=simple(factor(y)) 语句运行结果

x = [ (log(2)+8*log(3))/log(2)]

[ 17]

y = [ (log(2)+4*log(3))/log(2)]

[ 9]

即方程组的解是:( ) ( )

( )2ln

3ln82ln1

+=x 与( ) ( )

( )2ln

3ln42ln1

+=y ; 172 =x 与 92 =y

(3) 验算解 1x 、 1y 的 MATLAB 语句如下:

x=(log(2)+8*log(3))/log(2);y=(log(2)+4*log(3))/log(2);

l1=2^((x-y)/2)-2^((x-y)/4)

r1=12

l2=3^(log(2*y-x)/(log(10)))

r2=1 语句运行结果

l1 = 6.0000

r1 = 12

l2 = 1

r2 = 1

即第一式左≠第一式右;第二式左=第二式右。 (4) 验算解 2x 、 2y 的 MATLAB 语句如下:

x=17;y=9;

Page 330: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

318

l1=2^((x-y)/2)-2^((x-y)/4)

r1=12

l2=3^(log(2*y-x)/(log(10)))

r2=1 语句运行结果

l1 = 12

r1 = 12

l2 = 1

r2 = 1

即第一式左=第一式右;第二式左=第二式右。 (5) 结论: 1x 与 1y 不是方程组的解, 172 =x 与 92 =y 是方程组的解。

【例 7-16】解方程组:

( ) ( ) ( )

+=+=−−

2lnln21ln

42 22

yy

yxx

【解】

(1) 求方程组解的 MATLAB 语句如下:

syms x y;

[x,y]=solve(’log(1+y)=2*log(y)+log(2)’,’2^sqrt(x^2-x-2)=4*y’);

x=simple(factor(x))

y=simple(factor(y))

语句运行结果

x = [ -2]

[ 3]

y = [ 1]

[ 1] (2) 验算解 1x 、 1y 的 MATLAB 语句如下:

x=-2;y=1;

l1=log(1+y)

r1=2*log(y)+log(2)

l2=2^sqrt(x^2-x-2)

r2=4*y 语句运行结果

l1 = 0.6931

r1 = 0.6931

l2 = 4

r2 = 4

即第一式左=第一式右;第二式左=第二式右。 (3) 验算解 2x 、 2y 的 MATLAB 语句如下:

x=3;y=1;

Page 331: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

319

l1=log(1+y)

r1=2*log(y)+log(2)

l2=2^sqrt(x^2-x-2)

r2=4*y 语句运行结果

l1 = 0.6931

r1 = 0.6931

l2 = 4

r2 = 4

即第一式左=第一式右;第二式左=第二式右。

(4) 结论: 21 −=x 与 11 =y , 32 =x 与 12 =y 都是方程组的解。

【例 7-17】解方程: ( ) ( ) 6094.1ln3

4ln 3 −= xx

【解】

(1) 求方程组解的 MATLAB 语句如下:

syms x;

[x]= solve(’log(x^(1/3))=4*log(x)/3-1.6094’) 语句运行结果

x = 4.9998104414228343646830810517634

(2) 验算解的 MATLAB 语句如下:

x=4.9998104414228343646830810517634 ;

l=log(x^(1/3))

r=4*log(x)/3-1.6094

语句运行结果

l = 0.5365

r = 0.5365 (3) 结论: =x 4.9998104414228343646830810517634 是方程的解。

7.2.3 三角方程求解及应用

在中学的三角学中学过,三角函数是周期函数。正弦、余弦、正割、余割函数的周期为 π2

或 °360 ;正切、余切函数的周期为 π 或 °180 。

含有未知数的三角函数的方程叫做三角方程。三角方程是一种超越方程。代数方程的解

法、同解性、增根与遗根产生的原因都适用于三角方程。解三角方程比解代数方程要复杂些,

因为在解三角方程的过程中,往往要经过三角函数的变换,有时会改变自变量允许值的范围,

引发增根或遗根。于是,检查增根或遗根就比解代数方程来得更复杂些,必须特别强调验算

方程解的重要性与必要性。

解三角方程时,还要特别关注实际问题是否确定未知数的指定区间。从数学的角度来讲,

如果没有指定区间,就表示区间为 )~( +∞−∞ 内的一切实数。但需要特别说明的是:首先,用

MATLAB 函数命令计算三角方程的解,即角度仅指在 °° 360~0 范围内(可以用负角度表示),

不是三角方程的通解;其次,三角方程的解,可以是弧度为单位表示的角度,也可以是对应

Page 332: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

320

复平面的代数式表示的复数。 【例 7-18】解三角方程: ( ) ( )xx 3sin4sin =

【解】

(1) 求三角方程的解的 MATLAB 语句段如下:

syms x;

[x]= solve(’sin(4*x)=sin(3*x)’);

digits(20);x=vpa(x,20) 语句段执行结果

x = [ 0]

[ 3.1415926535897932385]

[ .44879895051282760551+.23259336875383628361e-19*i]

[ -.44879895051282760551-.23259336875383628361e-19*i]

[ 2.2439947525641380275+.90588483535828705931e-20*i]

[ -2.2439947525641380275-.90588483535828705931e-20*i]

[ 1.3463968515384828165-.10217933598143025832e-19*i]

[ -1.3463968515384828165+.10217933598143025832e-19*i] (2) 验算 8 个解

校验第 1 个解,可执行如下 MATLAB 语句:

x=0;

l=sin(4*x)

r=sin(3*x)

语句段执行结果

l = 0

r = 0 即左式=右式

校验第 2 个解,可执行如下 MATLAB 语句:

x=3.1415926535897932385;

digits(20);

l=vpa(sin(4*x),20)

r=vpa(sin(3*x),20) 语句段执行结果

l = -.48985871965894128287e-15

r = .36739403974420593750e-15

这是由计算机精度与计算程序引起的误差,实际上为 0 即左式=右式

对第 3 个解,可执行如下 MATLAB 校验语句:

x=.44879895051282760551+.23259336875383628361e-19*i;

l=sin(4*x)

r=sin(3*x) 语句段执行结果

l = 0.9749 - 0.0000i

Page 333: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

321

r = 0.9749 + 0.0000i

即左式=右式

对第 4 个解,可执行如下 MATLAB 校验语句:

x=-.44879895051282760551-.23259336875383628361e-19*i;

l=sin(4*x)

r=sin(3*x) 语句段执行结果

l = -0.9749 + 0.0000i

r = -0.9749 - 0.0000i

即左式=右式。

由验算结果可知,第 1、2、3、4 个解都是 4 的解。同样验算后可知,第 5、6、7、8 个

解也都是方程的解。 【例 7-19】解三角方程: ( ) ( ) 1cossin =− xx

【解】

求三角方程的解的 MATLAB 语句段如下:

syms x;

[x]= solve(’sin(x)-cos(x)=1’) 语句段执行结果

x = [ 1/2*pi]

[ pi] 经验算,2 个解都是方程的解。

【例 7-20】解三角方程: ( )xxx cot24

tan4

tan =

π−+

π+

【解】

求三角方程的解的 MATLAB 语句段如下:

syms x;

[x]= solve(’tan(x+pi/4)+tan(x-pi/4)=2*cot(x)’) 语句段执行结果

x = [ 1/2*pi]

[ -1/2*pi]

[ 1/6*pi]

[ 5/6*pi]

[ -1/6*pi]

[ -5/6*pi]

经验算,6 个解都是方程的解。

【例 7-21】解三角方程:( )( ) 2

1

cos1

sin1 =++

x

x

【解】

求三角方程的解的 MATLAB 语句段如下:

syms x;

Page 334: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

322

[x]= solve(’(1+sin(x))/(1+cos(x))=1/2’);

digits(10);x=vpa(x,10) 语句段执行结果

x = [ 0]

[ -2.214297436]

经验算,2 个解都是方程的解。

【例 7-22】解方程: ( ) ( ) ( ) ( ) 0cos3cossin2sin 22 =−− xxxx

【解】

(1) 求三角方程的解的 MATLAB 语句段如下:

syms x;

[x]= solve(’(sin(x))^2-2*sin(x)*cos(x)-3*(cos(x))^2=0’) 语句段执行结果

x = [ -1/4*pi]

[ atan(3)]

(2) 验算 2 个解

校验第 1 个解,可执行如下 MATLAB 语句:

语句段执行结果

l = 0

r = 0 即左式=右式

经验算,这 2 个解都是方程的解。

7.3 M A T LA B 符号微分方程解算的应用

在科学研究与工程技术中,常常需要求出描述某些物理量之间关系的函数。这些变量间

的函数关系虽不一定能直接找出,但往往能根据具体问题的客观规律(物理的、化学的、机械

的、电气的、液压的、甚至数学的、几何的等等),并运用各种定理、定律、公式,列写出一

个含有自变量、未知函数及其未知函数的导函数或微分的关系式即微分方程。通过求解微分

方程,找出待求的函数关系。可以说,微积分是高等数学的基础,微分方程及其求解是高等

数学的精华之一。

正如小学生求解算术应用题要分析题意列写算式一样,求解微分方程也要分析题意列写

微分方程,这是求解微分方程应用题至关重要的关键一环。

列写微分方程的方法有以下几种:

“直接翻译”法,系指问题中直接给出了自变量、未知函数及其未知函数的导函数之间

的规律,将这个规律的数学表达式列写出来就是微分方程。

“间接翻译”法,系指问题中没有直接给出事物应遵循的规律,而需要根据有关学科的

知识,分析问题研究其间的变量必须服从的规律,然后将这个规律翻译成微分方程。

“微元”法,系用微积分的基本思想对问题直接进行具体分析,将从整体上看是变化着

的量加以“细分”,使之转化为从局部上可相对地看作是不变的量,利用微分的概念并按照

事物规律列出方程。

Page 335: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

323

有了微分方程,其求解的工作就交给 MATLAB 的函数命令来完成。

下面就来举例说明 MATLAB 符号微分方程的应用。通过以下示例,使读者基本掌握用

MATLAB 函数命令解微分方程应用题的分析方法与计算步骤。 【例 7-23】一列车在平直线路上以 km/h72 (或 m/s20 )的速度行驶,当制动时列车获得加速度

2m/s4.0− 。试计算开始制动后多长时间列车才能停住?列车在这段时间里又行驶了多少路

程?

【解】

(1) 分析问题并列方程

设列车在开始制动后 t 秒行驶了 s 米。根据题意,反映制动阶段列车运动规律的函数

( )tss = 应满足关系式

4.0d

d2

2

−=t

s

并且有 0=t 时, 0=s , 20d

d==

t

sv 。

(2) 用以下 MATLAB 语句求微分方程的通解:

syms t s v;

s=dsolve(’D2s=-0.4’,’t’)

语句执行结果

s = -1/5*t^2+C1*t+C2

即微分方程的通解

212

5

1CtCts +⋅+−=

(3) 用以下 MATLAB 语句求微分方程的特解与速度:

syms t s v;

s=dsolve(’D2s=-0.4’,’Ds(0)=20,s(0)=0’,’t’)

v=diff(s,t) 语句执行结果

s = -1/5*t^2+20*t

v = -2/5*t+20

即微分方程的特解为 tts ⋅+−= 205

1 2 ,还有列车的速度 205

2 +−= tv 。

(4) 求开始制动至停止时经历的时间与距离:

syms t s v;

t=solve(’0=-2/5*t+20’)

s=-1/5*t^2+20*t 语句执行结果

t = 50

s = 500

(5) 答案:可经验算,列车从开始制动至停止经历的时间为 50s,且行驶了 500m 的距离。

【例 7-24】计算发射人造卫星的最小速度,即第二宇宙速度(见图 7-3)。

Page 336: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

324

图 7-3 发射人造卫星示意图

【解】 (1) 已 知 数 据 : 地 球 的 半 径 为 == km6437R

m1037.64 5× ,地面上的重力加速度为 2m/s8.9=g 。

(2) 分析:在第二宇宙速度下,火箭将摆脱地球的引

力,绕太阳运行而成为人造卫星。设地球的质量为 M ,

发射的人造卫星及其搭载火箭的质量为 m ,r 表示地球的

中心与火箭重心之间的距离,k 为万有引力常数。根据牛

顿万有引力定律,不计空气阻力时地球作用于火箭的引力

F 为

2r

MmkF

⋅=

在万有引力的作用下,火箭的运动规律满足以下微分方程

2r

Mmk

⋅2

2

d

d

t

rm−= 或

22

2

d

d

r

Mk

t

r −=

这里的负号表示物体的加速度是负值,因为引力的作用使 r 变小。因为上式不显含自变量,

故作变换

vt

r =d

d

则有

r

vv

t

r

r

v

t

v

t

r

tt

r

d

d

d

d

d

d

d

d

d

d

d

d

d

d2

2

⋅=⋅==

=

(3) 列方程

r

vv

d

d⋅2r

Mk−=

(4) 计算 ① 求微分方程的通解 可用如下 MATLAB 语句求微分方程的通解 ( )rv :

syms t r k M R v0;

v=dsolve(’v*Dv=-k*M/(r^2)’,’r’)

语句执行结果

v = [ 1/r*(r*(2*k*M+C1*r))^(1/2)]

[ -1/r*(r*(2*k*M+C1*r))^(1/2)]

② 求积分常数 1C 根据初始条件 00

0 d

d, v

t

rRr

tt

===

= ,用如下 MATLAB 语句求 1C :

syms t r k M R v0;

C1=solve(’v=1/r*(r*(2*k*M+C1*r))^(1/2)’,’C1’);

r=R;v=v0;

C1=subs(C1,’[r v]’,[r v]);

C1=simple(C1) 语句执行结果

C1 = -2/R*k*M+v0^2

Page 337: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

325

当 v=-1/r*(r*(2*k*M+C1*r))^(1/2)时,求得 1C 的值相同。

③ 求 2v 为了便于分析问题,需要求出 2v ,可用如下 MATLAB 语句求之:

syms t r k M R v0;

C1 = -2/R*k*M+v0^2;

v=1/r*(r*(2*k*M+C1*r))^(1/2);

v2=v^2;

v2=simple(v2)

语句执行结果

v2 = 2*k*M/r-2/R*k*M+v0^2

R

kMv

r

kMv

22 20

2 −+=

④ 求 0v 由于火箭运动的速度必须始终保持是正值,即 02 >v ,而随着 r 的增大,r

kM2

变成任意小,因此,R

kMv

220 − ≥0。在地球表面时, ====

2

2

d

d,

t

rmmgFRr

2R

Mmk

⋅− ,即

2gRkM = ,那么 gRvR

gRv 2

2 20

220 −=− ≥0。

用如下 MATLAB 语句求 0v :

syms t r k M R v0 C1;

v0=solve(’-2/R*g*R^2+v0^2 =0’,’v0’);

g=9.8;R=64.37*10^5;

v0=subs(v0,’[g R]’,[g R])

语句执行结果

v0 = 1.0e+004 *

1.1232

-1.1232 (5) 答案:第二宇宙速度为 km/s232.11m/s101232.1 4 =× (负值舍去)。

【例 7-25】设一物体加热到 0τ 度(高于室温)时移入室内,如果室温保持常值 a 度,试求物体

的温度τ 与时间 t 的关系。

【解】

(1) 分析问题并列微分方程 根据物体的温度τ 的变化速度和物体的温度τ 与室温之差 ( )a−τ 成正比的规律,物体加

热到的温度 0τ 度是高于室温的,故移入室内后物体的温度τ 要下降。设 k 为散热系数,可以

列出微分方程:

( )akt

−⋅−= ττd

d

(2) 用以下 MATLAB 语句解微分方程:

syms t tao k a tao0;

tao=dsolve(’Dtao=-k*(tao-a)’,’tao(0)=tao0’,’t’) 语句执行结果

Page 338: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

326

tao = a+exp(-k*t)*(-a+tao0) 即物体的温度τ 与时间 t 的关系为:

( ) tkaa −⋅−+= e0ττ

【例 7-26】一电动机运转后每秒钟温度升高 10,设室内温度恒为 15,电动机温度升高后

冷却速度和电动机与室内温度差成正比,求电动机温度与时间的函数关系。

【解】

(1) 分析问题并列微分方程

电动机运转后要发热使温度升高,在 dt 时间内电机发热共升高温度 10·dt,而其中散热冷

却的温度为 ( ) tk d15 ⋅−− τ ,τ 为电动机温度。设在 dt 时间内电机升高温度 τd ,散热系数为 k ,

故有以下温度平衡方程: ( ) tkt d15d10d ⋅−−⋅= ττ

即得微分方程

kkt

1510d

d +=⋅+ ττ

(2) 用以下 MATLAB 语句解微分方程:

syms t tao k;

tao=dsolve(’Dtao+k*tao=10+15*k’,’tao(0)=15’,’t’) 语句执行结果

tao = 10/k+15-10*exp(-k*t)/k 即电动机温度与时间的函数关系为:

( ) ( )kt

kt −−+= e1

1015τ

【例 7-27】如图 7-4 所示,设跳伞员与伞的质量为 m ,降落伞的浮力 R 与它下降的速度 v 成

正比。求下降的速度 v 的变化规律 ( )tvv = ,并计算当 00

==tv 时 v 的特解。

图 7-4 跳伞员与伞受力示意图

【解】

(1) 问题分析并列微分方程

设 F 为作用在跳伞员上的合力,则

PRF += 其中,降落伞的浮力 ( )0>−= kkvR ,跳伞员与降落伞的重力 mgP = 。设跳伞员与降落伞下降

的加速度为 a 、速度为 v ,则有

PRF +=t

vmmakvmg

d

d==−=

Page 339: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

327

即得微分方程 mgkvt

vm =+

d

d

(2) 用以下 MATLAB 语句解微分方程:

syms t k m v g;

v=dsolve(’m*Dv+k*v=m*g’,’t’)

v=factor(dsolve(’m*Dv+k*v=m*g’,’v(0)=0’,’t’)) 语句执行结果

v = m*g/k+exp(-1/m*k*t)*C1

v = -m*g*(-1+exp(-1/m*k*t))/k 即得微分方程的通解

tm

k

Ck

gmv

−⋅+= e1

与微分方程的特解

−⋅=

− tm

k

k

gmv e1

(3) 答案:跳伞员与降落伞下降的速度 v 的变化规律为t

m

k

Ck

gmv

−⋅+= e1 ,当 0

0==t

v 时

跳伞员与降落伞下降的速度 v 的变化规律为

−⋅=

− tm

k

k

gmv e1 。

【例 7-28】设一两端固定的、均匀柔软的绳索,在重力的作用下而下垂。试求其曲线方程(此

曲线叫做悬链线)。

图 7-5 悬链线

【解】

(1) 分析问题并列方程 如图 7-5 所示,设绳索的最低点为 A ,取 y 轴通过 A 点铅直向上,并取 x 轴水平向右。设

绳索曲线的方程为 ( )xyy = 。考察绳索上点 A 到另一点 ( )yxM , 间的一段弧 AM ,设其长为 s 。

假定绳索的线密度为 ρ ,则弧的重量为 gsρ 。因为绳索是柔软的,所以在点 A 的张力沿水平

的切线方向,其大小设为 H ;在 M 点处的张力沿该点的切线方向,设其与水平方向的夹角为

θ ,其大小为T 。因作用于弧段 AM 的外力相互平衡,即把作用于弧上的力沿铅直与水平两

方向分解后得两方向上的力平衡方程式: ( ) gsT ρθ =⋅ sin 与 ( ) HT =⋅ θcos

将这两式相比,得到

Page 340: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

328

图 7-6 弹簧物体位移示意图

( )a

s=θtan

式中g

Ha

⋅=

ρ。

根据导数的几何意义 ( ) y′=θtan

与高等数学中弧微分的定义

( ) ( ) xyxx

yyxs d1d

d

d1ddd 2

222 ⋅′+=⋅

+=+=

将上式两端积分: xysx

d10

2 ⋅′+= ∫

将 s 代入 y′ 得

aa

sy

1==′ xyx

d10

2 ⋅′+⋅ ∫

将上式两端对 x 求导,便得满足的微分方程

211

ya

y ′+=′′

根据悬链线的图示,令 aOA = ,于是有初始条件 0,00

=′= == xxyay ,则得

0,,11

002 =′=′+=′′

== xxyayy

ay

(2) 用如下 MATLAB 语句求解微分方程:

syms x y a;

y=dsolve(’D2y=1/a*sqrt(1+(Dy)^2)’,’y(0)=a,Dy(0)=0’,’x’)

语句执行结果

y = a*cosh(1/a*x)

即微分方程的解为

⋅=

a

xay cosh

(3) 答案:悬链线方程为

+=

⋅=

−a

x

a

xa

a

xay ee

2cosh

【例 7-29】设一弹簧的上端固定,下端挂一个质量为 m 的物体。如果使物体离开平衡位置,

试确定弹簧物体振动规律的微分方程,并计算简谐振动的通解与当初瞬 0=t 时的位置为

00xx

t== ,初始速度 0

0d

dv

t

x

t

==

的特解。

【解】

(1) 分析问题并列方程

如图 7-6 所示,弹簧下端挂的物体处于静止状态时,作

用在物体上的重力与弹性力大小相等、方向相反,这个位置

就是物体的平衡位置。取 x 铅直向下,并取物体的平衡位置

为坐标原点。

Page 341: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

329

如果使物体具有一个初速度(不为零),那么物体便离开平衡位置,并在平衡位置附近作

上下振动,物体的位置 x 将随 t 而变化,即 x 是 t 的函数 ( )txx = 。

根据力学原理,弹簧使物体回到平衡位置的弹性恢复力 f (它不包括在平衡位置时与重力

mg 相平衡的那一部分弹性力)与物体离开平衡位置的位移 x 成正比:

xcf ⋅−=

式中 c 为弹簧的弹性系数,负号表示弹性恢复力的方向与物体位移的方向相反。

另外根据力学原理,物体在运动过程中还受到阻尼介质(如空气、水等)的阻力作用,使

得振动逐渐趋向停止。阻力 R 的方向总是与运动方向相反,当振动不大时,其大小与物体运

动的速度成正比,设比例系数为 µ ,则有

t

xR

d

d⋅−= µ

设 F 为使弹簧产生位移的力,根据牛顿第二定理,有力的平衡方程式: RfF +=

或 t

xxc

t

xm

d

d

d

d2

2

⋅−⋅−= µ

移项并记 m

nµ=2 ,

m

ck =2

常数 n 叫做阻尼系数;常数 k 叫做恢复系数。于是便得在有阻尼情况下物体自由振动的

微分方程:

0d

d2

d

d 22

2

=++ xkt

xn

t

x

该方程描述的振动现象叫做自由振动。

当阻尼系数 n=0 时,物体振动的方程则为:

0d

d 22

2

=+ xkt

x

此式叫做简谐运动方程或无阻尼自由振动方程,该方程描述的振动现象叫做简谐振动。

如果物体在振动过程中还受到铅直干扰力

( )ptHFd sin=

的作用,则有物体强迫振动的微分方程

( )pthxkt

xn

t

xsin

d

d2

d

d 22

2

=++

式中m

Hh = 。

(2) 用如下 MATLAB 语句求解简谐振动微分方程 0d

d 22

2

=+ xkt

x:

syms x t x0 v0 k;

x=dsolve(’D2x+k^2*x=0’,’t’)

x=dsolve(’D2x+k^2*x=0’,’x(0)=x0,Dx(0)=v0’,’t’) 语句执行结果

x = C1*sin(k*t)+C2*cos(k*t)

Page 342: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

330

x = v0/k*sin(k*t)+x0*cos(k*t)

即简谐振动方程的通解 ( ) ( )ktCktCx cossin 21 ⋅+⋅=

与简谐振动方程当 00xx

t== 与 0

0d

dv

t

x

t

==

的特解

( ) ( )ktxktk

vx cossin 0

0 ⋅+⋅=

【例 7-30】续【例 7-29】题,设物体受弹性恢复力 f 与干扰力 dF 的作用(不考虑阻尼作用),

试确定弹簧物体的振动规律。

【解】

(1) 引用方程

由上题,物体在振动过程中受到铅直干扰力 ( )ptHFd sin=

的作用,则有物体强迫振动的微分方程

( )pthxkt

xn

t

xsin

d

d2

d

d 22

2

=++

当不考虑阻尼作用即阻尼系数 n=0 时,物体振动的方程则为:

( )pthxkt

xsin

d

d 22

2

=+

(2) 求解微分方程 ( )pthxkt

xsin

d

d 22

2

=+

用如下 MATLAB 语句解其方程:

syms x t x0 v0 k n p h;

x=dsolve(’D2x+k^2*x=h*sin(p*t)’,’t’);x=simple(x)

语句执行结果

x =

(-h*sin(p*t)-C1*cos(k*t)*k^2+C1*cos(k*t)*p^2-C2*sin(k*t)*k^2+C2*sin(k*t)*p^2)/(-k^2+p^2)

即在弹性恢复力 f 与干扰力 dF 的作用下弹簧物体振动规律为:

( ) ( ) ( ) ( )ktCkpktCpk

pthx sincos

sin2

22122

⋅+−⋅⋅+−

⋅=

【例 7-31】根据材料力学原理,梁的弯矩 M、剪力 Q、荷重密度 q 与梁的弹性变形 y 之间存

在以下微分关系,即

MyJE =′′ , QyJE =′′′ , ( ) qyJE =4

式中 E 为梁的弹性模量,J 为梁的截面对于中性轴的惯性矩。 两支座在梁的两端,l 为梁的长度。初始条件为:当 2/lx = 时, 0=Q ;当 0=x 时, 0=M ;

当 2/lx = 时, 0d

d=

x

y;当 x=0 时, 0=y 。试求受均布荷重时其荷重密度为 q 而向下弯曲的

情况下,梁的弹性曲线方程(即梁的弹性变形 y 与沿梁长度 x 之间的关系 ( )xyy = )。

【解】

(1) 分析问题并列微分方程

Page 343: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

331

根据材料力学原理,梁的弹性模量 E,梁的截面对于中性轴的惯性矩 J,梁的弯矩 M,

与梁的弹性变形 y 之间存在以下微分关系,即

Mx

yEJ =

2

2

d

d

梁的弯矩 M 对 x 的一阶导数等于梁的剪力 Q,剪力 Q 对 x 的一阶导数等于梁的荷重密度

q,即

Qx

yJE

x

M ==3

3

d

d

d

d, q

x

yJE

x

Q==

4

4

d

d

d

d

则得微分方程 qx

yJE =

4

4

d

d。

(2) 解题思路

材料力学关于梁的弯矩 M、梁的剪力 Q、梁的荷重密度 q 与梁的弹性变形 y 之间的关系,

是三个重要的概念。在解题的过程中,最好与三个概念相关联,其初始条件的概念清晰明确。

于是考虑求解以上微分方程为一阶时的等效方程,即把 y ′′′ 先当作一个未知函数求解,以便利

用已知的初始条件计算积分常数。再依次将 y ′′ 、 y′ 、 y 当作未知函数来求解,利用已知的初

始条件逐个计算积分常数,最后求得微分方程的解答。 (3) 求 y ′′′ 与 1C

设 yyyy ′′′= ,用以下 MATLAB 语句求解微分方程:

syms E J y yyy x q Q M;

yyy=dsolve(’E*J*Dyyy=q’,’x’) 语句执行结果

yyy = q/E/J*x+C1

即 1CEJ

qxy +=′′′

并用以下 MATLAB 语句求 C1

syms E J y x q Q M l;

x=l/2;

C1=solve(’E*J*(q/E/J*x+C1)=0’,’C1’);

C1=subs(C1,’x’,x) 语句执行结果

C1 = -1/2*q/E/J*l

即 EJ

qlC

21 −=

那么 EJ

qxy =′′′

EJ

ql

2− 或 qxyEJ =′′′

2

ql−

(4) 求 y ′′ 与 1C

设 =yy y ′′ ,用以下 MATLAB 语句求解微分方程:

syms E J y yy x q Q M;

yy=dsolve(’E*J*Dyy=q*x-1/2*q*l’,’x’) 语句执行结果

Page 344: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

332

yy = 1/2*q/E/J*x^2-1/2*q/E/J*l*x+C1

即 1

2

22C

EJ

qxl

EJ

qxy +−=′′

并用以下 MATLAB 语句求 1C :

syms E J y x q Q M;

x=0;

C1=solve(’E*J*(1/2*q/E/J*x^2-1/2*q/E/J*l*x+C1)=0’,’C1’);

C1=subs(C1,’x’,x)

语句执行结果

C1 = 0 即 01 =C

那么 EJ

qxl

EJ

qxy

22

2

−=′′ 或22

2 qxlqxyEJ −=′′

(5) 求 y′ 与 1C

设 =y y′ ,用以下 MATLAB 语句求解微分方程:

syms E J y yy x q Q M;

yy=dsolve(’E*J*Dy=1/2*q*x^2-1/2*q*l*x’,’x’)

语句执行结果

yy = 1/6*q/E/J*x^3-1/4*q/E/J*l*x^2+C1

即 1

23

46C

EJ

qlx

EJ

qxy +−=′

并用以下 MATLAB 语句求 1C :

syms l E J y x q Q M;

x=l/2;

C1=solve(’1/6*q/E/J*x^3-1/4*q/E/J*l*x^2+C1=0’,’C1’);

C1=subs(C1,’x’,x)

语句执行结果

C1 = 1/24*q*l^3/E/J

即 EJ

qlC

24

3

1 =

那么 +−=′EJ

qlx

EJ

qxy

46

23

EJ

ql

24

3

或 =′yEIJ +−46

23 qlxqx

24

3ql

(6) 求 y 与 1C

用以下 MATLAB 语句求解微分方程:

syms l E J y x q Q M;

y=dsolve(’E*J*Dy=1/6*q*x^3-1/4*q*l*x^2+1/24*q*l^3’,’x’)

语句执行结果

y = 1/24*q/E/J*x^4-1/12*q/E/J*l*x^3+1/24*q/E/J*l^3*x+C1

即 ( ) 1334 2

24Cxllxx

EJ

qy ++−=

Page 345: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

333

并用以下 MATLAB 语句求 C1 :

syms E J y x q Q M;

x=0;

C1=solve(’1/24*q/E/J*x^4-1/12*q/E/J*x^3*l+1/24*q/E/J*l^3*x+C1=0’,’C1’);

C1=subs(C1,’x’,x)

语句执行结果

C1 = 0

(7) 答案:梁的弹性曲线方程为

( )xllxxEJ

qy 334 2

24+−=

[说明]

若不论及梁的弯矩 M、梁的剪力 Q、梁的荷重密度 q 等概念,也可执行以下 MATLAB

语句求解梁的弹性曲线方程,也会得到同样的结果。

syms E J y x;

y=dsolve(’E*J*D4y=q’,’y(0)=0,Dy(l/2)=0,D2y(0)=0,D3y(l/2)=0’,’x’);

y=simple(y)

【例 7-32】设单摆的摆长为 l,摆锤质量为 m。将摆锤拉一小角度 0θ 然后放开使其自由摆动,

如图 7-7 所示。在不计空气阻力的条件下,求单摆的角位移θ 随时间 t 变化的规律。

图 7-7 单摆示意图

【解】

(1) 分析问题并列微分方程 取反时针方向为角位移θ 的正方向。由题示意图,使摆锤运动的力是重力 mg 的切向分力,

即 ( )θsin⋅− mg ,取负号是因为力的方向与角的正向相反。若角位移 ( )tθθ = 所对应的弧长为 s ,

弧的半径为摆长 l 。 °360 的圆心角所对应的弧长就是圆周长 lπ2 ,所以 °1 的圆心角所对应的

弧长就是180

360/2l

=π ,那么 °n 的圆心角所对应的弧长 s 就是180

lns

π= ,则 °n 的圆心角换

算为弧度数为l

sn =π=180

θ 或 ls ⋅= θ 。

摆锤的切向加速度就是2

2

2

2

d

d

d

d

tl

t

sa

θ== ,根据牛顿第二定律,则有

===2

2

2

2

d

d

d

d

tml

t

smma

θ ( )θsin⋅− mg

Page 346: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

334

=2

2

d

d

tl

θ ( )θsin⋅− g

这是一个非线性微分方程。考虑到当θ 很小时,有 ( ) θθ =sin ,于是得线性微分方程:

=2

2

d

d

tl

θ θ⋅−g

(2) 用以下 MATLAB 语句解微分方程:

syms t l m g zeta zeta0;

zeta=dsolve(’l*D2zeta+g*zeta=0’,’t’)

zeta=dsolve(’l*D2zeta+g*zeta=0’,’zeta(0)=zeta0,Dz(0)=0’,’t’)

语句执行结果

zeta = C1*sin((g/l)^(1/2)*t)+C2*cos((g/l)^(1/2)*t)

zeta = zeta0*cos((g/l)^(1/2)*t) 即得微分方程的通解

⋅+

⋅= t

l

gCt

l

gC cossin 21θ

与微分方程的特解

⋅= t

l

gcos0θθ

(3) 答案:单摆的角位移θ 随时间 t 变化的规律为

⋅= t

l

gcos0θθ 。

【例 7-33】在 R、L、C 与电源串联的电路中(见图 7-8),电动势为 E 的电源对电容器 C 充电。

已知 V20=E , F102.0 6−×=C , H1.0=L ,在接通电路前电容器两端电压 0=cu ,电路中

电流 0=i 。试求接通电路后的电流 ( )ti 及电压 ( )tuc 的变化规律。

图 7-8 R、L、C 与电源串联电路

【解】

(1) 问题分析并列微分方程

电流 i 流过电感 L 产生自感电势t

iL

d

d。 对电容器 C 充电电流为 i,经时间 t 后,积蓄有

电荷 q,电容器 C 两端有电压 cu 。根据电容的定义cu

qC = ,或 it

CC

quc

1== ,当电流是变化

的时候,需要对电流进行积分,即有 ∫== tiCC

quc d

1。当电路接通后,有基尔霍夫第二定理

Page 347: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

335

即电压平衡方程式:

∫ =++ EtiC

Rit

iL d

1

d

d

注意到 ∫= tiC

uc d1

或t

uCi c

d

d=

将电流代入电压平衡方程式得微分方程

Eut

uRC

t

uLC c

cc =++d

d

d

d2

2

还有初始条件 ( ) 00

==tc tu 与 ( ) 0d

d0

=== t

uCti c

t

(2) 用以下 MATLAB 语句解微分方程

syms L C R ai uc E;

L=0.1;C=0.2*10^(-6);R=1000;E=20;

uc=dsolve(’0.1*0.2*10^(-6)*D2uc+1000*0.2*10^(-6)*Duc+uc=20’,’uc(0)=0,Duc(0)=0’,’t’);

uc=simple(factor(uc))

digits(3);ai=vpa(C*diff(uc),3) 语句执行结果

uc = 20-20/exp(t)^5000*sin(5000*t)-20/exp(t)^5000*cos(5000*t)

ai = .400e-1/exp(t)^5000*sin(.500e4*t) 即接通电路后的电压 ( )tuc 的变化规律为

( ) ( ) ( )[ ]tttu tc 5000sin5000cose2020 5000 +−= −

即接通电路后的电流 ( )ti 的变化规律为

( ) ( ) ttti 5000e5000sin04.0 −⋅=

【例 7-34】求二阶系统

( ) ( ) ( ) 222

2

d

d2

d

dnnn tc

t

tc

t

tc ωωςω =++

的时域响应,并绘制当 5.0=ς 、 5=nω 、 00

==tc 、 00

=′=t

c 时的响应曲线。

【解】

求二阶系统的时域响应,就是求解微分方程。可用以下 MATLAB 语句求时域响应并绘

制响应曲线:

syms t c r zeta omegan;

c=dsolve(’D2c+2*zeta*omegan*Dc+omegan^2*c=omegan^2’,’c(0)=0,Dc(0)=0’,’t’);

zeta=0.5;omegan=5;c=subs(c,’[zeta omegan]’,[zeta omegan]);

digits(5);c=vpa(c,5)

ezplot(c,[0 2]) 语句执行结果

c =

1.+(-.50003+.28868*i)*exp((-2.5000+4.3303*i)*t)+(-.50003-.28868*i)*exp((-2.5000-4.3303*i)*t)

绘制的时域响应曲线如图 7-9 所示。

Page 348: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

336

图 7-9 二阶系统的时域响应曲线

[说明]

本例中绘制曲线不能用 plot( )函数命令,只能用 ezplot( )函数命令。

Page 349: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

第 8 章 MATLAB 符号积分

变换与反变换的应用

内 容 提 要

在 3.9 节已经介绍过,数学中经常采用一种变换手段,把较复杂的运算转化为

简单的运算。并且介绍了三种积分变换对:Fourier 变换对、Laplace 变换对与 z 变换

对。这些变换在科学研究与工程技术中的应用十分广泛。

Fourier 变换(式)叫做频谱函数。基于频谱函数的频谱分析在无线电技术、声学

技术等信息技术中占有十分重要的地位,并有非常广泛的应用。

已经介绍过拉氏变换是研究与分析线性电路或系统的一个重要的工具。电路

或系统的网络函数或传递函数模型就是用拉氏变换来定义的;拉氏变换还能把微

分方程转换为代数方程,将复杂而麻烦的微分方程求解转换为中学里就可解算的

简单代数方程求解。

z 变换是采样控制系统的重要数学研究工具。用 z 变换定义的脉冲传递函数是采

样控制系统的复域分析法的理论基础,z 变换能把求解差分方程转换为求解代数方程。

可以说,没有 z 变换这个数学工具,就不可能有采样控制系统的创立与研究发展。

用 MATLAB 符号运算的积分变换函数命令,在以上涉及的应用领域中,会使常

规的繁琐计算过程变得非常简单、方便而且有效。

虽然这一章所用到的 MATLAB 函数命令主要是三个积分变换对:fourier( )与

ifourier( )、laplace( )与 ilaplace( )、ztrans( )与 iztrans( ),但是有的解题还要使用绘图函

数命令,有的则要用到 MATLAB 程序才能解决问题。

本章共 3 节:8.1 节介绍 Fourier 变换运算的应用;8.2 节介绍 Laplace 变换运算

的应用;8.3 节介绍 Z 变换运算的应用。通过本章的介绍,使读者了解、熟悉并掌握

符号运算积分变换的主要应用及其相应的函数命令、语句与程序的编写方法。

8.1 Fourier 变换与反变换运算的应用

8.1.1 求频谱函数及绘制频谱图

1. 频谱函数及频谱图的概念

Fourier 变换与频谱概念有着非常密切的关系。随着无线电技术、声学技术、振动学

的蓬勃发展,频谱理论也相应地得到了发展,它的应用也越来越广泛。

根据频谱理论,有两类频谱:离散频谱与连续频谱。

Page 350: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

338

(1) 离散频谱的概念 由高等数学的 Fourier 级数理论,对一个以 T 为周期的非正弦周期

函数 ( )tfT ,其 Fourier 级数的三角形式为:

( ) ( )∑∞

=

++=1

0 sincos2

nnnT tnbtna

atf ωω (8-1)

式中

( ) 02

2

0 2d2

AttfT

aT

T == ∫+

− (8-2)

( ) ( ) ( ),3,2,1dcos2 2

2

== ∫+

−nttntf

Ta

T

Tn ω (8-3)

( ) ( ) ( ),3,2,1dsin2 2

2

== ∫+

−nttntf

Tb

T

Tn ω (8-4)

式(8-1)的第 n 次谐波

( )nnnnnnnnn tAtbtatnbtna ϕωωωωω +=+=+ sinsincossincos (8-5)

的振幅为

22nnn baA += (8-6)

若ω 为角频率,第 n 次谐波的角频率为

T

nnn

π2== ωω (8-7)

第 n 次谐波的复指数形式为

( ) =+ nnn tA ϕωsin tn

tn

nn cc ωω jj ee −−+ (8-8)

式中

2

j nnn

bac

−= ,

2

j nnn

bac

+=− (8-9)

并且

22

2

1nnnn bacc +== − (8-10)

这样以T 为周期的非正弦周期函数 ( )tfT 的第 n 次谐波的振幅式(8-6)为

( ),2,1,0,222 ==+= ncbaA nnnn (8-11)

描述各次谐波的振幅 nA 与角频率 ω 之间的分布关系 ( )ωnA ,就叫做 ( )tfT 的振幅频谱简称

频谱。由于T

nnn

π2== ωω , ,,2,1,0 =n 那么 nA 对于横坐标 ω 不是在连续的点上而只是在 ω

的整数倍的点上取值,所以振幅频谱又称之为离散频谱。 以T 为周期的非正弦周期函数 ( )tfT 的振幅频谱是离散频谱。

Page 351: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

339

绘制振幅频谱图的命令要使用火柴杆图绘制函数 stem ( ),有关 stem ( ) 函数的功能与调用

格式已经在 4.1 节里介绍过。还要特别注意,绘制图形时,必须将函数的参变量代入具体的

数量值。 (2) 连续频谱的概念 在 3.9 节介绍过 Fourier 变换。对一个非周期函数 ( )tf ,当它满足

狄利克雷条件时,在 ( )tf 的连续点处可表示为关系式(3-19):

( ) ( ) ωω ω deπ2

1 j tFtf ∫+∞

∞−=

式中

( ) ( )∫+∞

∞−

−= ttfF t de jωω

则 ( )ωF 即式 (3-18)叫做 ( )tf 的 Fourier 变换(式)。

在频谱分析中, ( )ωF 又叫做 ( )tf 的频谱函数。频谱函数 ( )ωF 的模 ( )ωF 则叫做 ( )tf 的

振幅频谱简称频谱。频谱通常描绘成 ( )ωF 与角频率 ω 之间的关系曲线,此即称为频谱图。

由于 ω 是连续变化的,故将 ( )ωF 称为连续频谱。对一个时间函数作 Fourier 变换,就是求

这个时间函数的频谱。应用 Fourier 变换求频谱函数就是解算非周期函数 ( )tf 的连续频谱

( )ωF 。

绘制频谱函数的命令要使用函数命令 ezplot( ),有关 ezplot( )函数的功能与调用格式已经

在 4.4 节里介绍过。也要提请读者注意,绘制图形时,须将函数的参量代入具体的数量值,

否则是绘不出图形的。

有了函数的连续或者离散频谱图,其函数进一步的频谱分析就是相关专业课程研究的内

容了。

2. 离散频谱的计算举例

绘制离散频谱的函数是非正弦周期函数。请看以下示例。 【例 8-1】对图 8-1 所示的奇函数矩形波,求这个周期函数的 Fourier 系数并绘制当 1=mE 时

的振幅(离散)频谱图 ( )ωnA 。

图 8-1 周期矩形波奇函数

【解】 (1) 列写 ( )tf 的解析表达式

( )

≤<−−

<≤=

02

,

20,

tT

E

TtE

tf

m

m

(2) 求 ( )tf 的 Fourier 系数

Page 352: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

340

根据式(8-2)、式(8-3)、式(8-4)与式(8-6),应用定积分计算法,求周期函数 ( )tf 的直流分

量 0a 与 Fourier 系数 na 、 nb ,可以运行以下 MATLAB 语句:

syms T Em t n x;pi=sym(’pi’);

a0=2/T*int(-Em,t,-T/2,0)+2/T*int(Em,t,0,T/2);A0=a0/2

an=2/T*int(-Em*cos(2*pi*n*t/T),t,-T/2,0)+2/T*int(Em*cos(2*pi*n*t/T),t,0,T/2)

bn=2/T*int(-Em*sin(2*pi*n*t/T),t,-T/2,0)+2/T*int(Em*sin(2*pi*n*t/T),t,0,T/2) 运行结果

A0 = 0

an = 0

bn = -2*Em*(-1+cos(pi*n))/pi/n 即

00 =a ; 0=na ; ( )[ ]1πcosπ

2−−= n

n

Eb m

n

nnnnn bbbaA ==+= 222

(3) 绘制当 1=mE 时的振幅频谱图

先运行以下 MATLAB 语句计算当 1=mE 时的谐波振幅 nA :

syms Em A n c

bn=2*Em*c;

Em=1;

c=-(cos(n*pi)-1)/(n*pi);

bn=subs(bn,’[Em c]’,[Em c]) 运行结果

bn = 2*(-cos(pi*n)+1)/pi/n 即

( )[ ]1πcosπ

2 +−== nn

bA nn

再运行以下 MATLAB 程序段绘制振幅频谱图:

A=[0 0 0 0 0 0 0 0 0 0 0];

n=1:1:11;

for n=1:11

bn=2*(-cos(n*pi)+1)/(n*pi);

A(n)=bn;

An=A(n)

end

x1=1;x2=11;

x=x1:x2;

stem(x,A,’r’,’filled’); 程序段运行后,得 Fourier 系数 nb (谐波振幅 A(n)=bn):

Page 353: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

341

An = 1.2732 0 0.4244 0 0.2546 0 0.1819 0 0.1415 0 0.1157

程序运行后还绘制振幅频谱图如图 8-2 所示。

图 8-2 周期矩形波振幅频谱图

[说明]

① 为了给出符号解析解,须将π定义为符号对象:pi=sym(’pi’)。

② 绘制振幅频谱图的绘图命令须使用离散序列杆状图即火柴杆图绘制函数 stem( )。请注

意 stem( )函数横坐标构成的方法。

③ 离散序列杆状图取为 10 个间隔 11 个值,以便看出 ω11 范围内的振幅频谱情况。为了

计算出谐波振幅的 11 个值,绘图程序采用了循环结构来实现。 ④ 绘图程序中设置了数组 A,用来存储在循环中计算所得的振幅值 nA ,请注意数组赋

初值的形式以及输出数据的语句格式。以后的举例中,还设置了数组 S,用来存储在循环中计

算所得的 Fourier 系数值 na 或 nb 。

⑤ 绘图程序中语句 A(n)=bn,意为输出的数组 A 的值即为 nb 。

【例 8-2】对图 8-3 所示的正锯齿形波函数,求这个周期函数的 Fourier 系数并绘制当齿高 1=h时的振幅频谱(离散频谱)图 ( )ωnA 。

图 8-3 正锯齿形波函数

【解】 (1) 列写 ( )tf 的解析表达式

根据解析几何的原理,写出 ( )tf 的分段函数表达式:

( )

≤<−+

<≤=

02

,

20,

tT

hTT

h

Ttt

T

h

tf

(2) 求 ( )tf 的 Fourier 系数

根据式(8-2)、式(8-3)、式(8-4)与式(8-6),应用定积分计算法,求周期函数 ( )tf 的直流分

Page 354: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

342

量 0a 与 Fourier 系数 na 、 nb ,可以运行以下 MATLAB 语句:

syms T Em t n h;pi=sym(’pi’);

a01=2/T*int((h*t/T+h),t,-T/2,0);a02=2/T*int(h*t/T,t,0,T/2);

bn1=2/T*int((h*t/T+h)*sin(2*pi*n*t/T),t,-T/2,0);

bn2=2/T*int(h*t/T*sin(2*pi*n*t/T),t,0,T/2);

an1=2/T*int((h*t/T+h)*cos(2*pi*n*t/T),t,-T/2,0);

an2=2/T*int(h*t/T*cos(2*pi*n*t/T),t,0,T/2);h=1;

A0=subs((a01+a02)/2,’h’,h)

bn=subs(simple(bn1+bn2),’h’,h)

an=subs(simple(an1+an2),’h’,h)

运行结果

A0 = 0.5000

bn = -1/pi/n+1/pi^2/n^2*sin(pi*n)

an = sin(pi*n)/pi/n 用循环程序确定 na 的值:

a=[0 0 0 0 0 0 0 0 0 0 0];n=1:1:11;

for n=1:11

an=sin(pi*n)/pi/n;

a(n)=an;

an=a(n)

end

运行结果

an = 0 (3) 绘制当 1=h 时的振幅频谱图

运行以下 MATLAB 程序段即可绘制其振幅频谱图:

A=[0 0 0 0 0 0 0 0 0 0 0];

S=[0 0 0 0 0 0 0 0 0 0 0];n=1:1:11;

for n=1:11

bn=-1/pi/n+1/pi^2/n^2*sin(pi*n);

S(n)=bn;Sn=S(n)

A(n)=abs(Sn);

end

x1=1;x2=11;x=x1:x2;stem(x,A,’r’,’filled’) 程序段运行后,得 Fourier 系数 nb :

Sn = -0.3183 -0.1592 -0.1061 -0.0796 -0.0637 -0.0531

-0.0455 -0.0398 -0.0354 -0.0318 -0.0289 程序运行后绘制振幅频谱图如图 8-4 所示。

[说明]

① Fourier 级数谐波次数 n 应为角频率ω 的整数倍, 即 n 为正整数。但 MATLAB 没有定

义正整数, 本题用循环程序的方法来确定 na 的终值。

Page 355: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

343

图 8-4 正锯齿形波振幅频谱图

② 经计算 Fourier 系数 nb 为负值。为了输出系数 nb 的值,特设置了数组 S。程序中语句

S(n)=bn,意为输出语句 Sn=S(n)输出的数组 S 的值即为 nb 。

③ 同样设置了数组 A,用来存储在循环中计算所得的振幅值 nA 。振幅频谱图 ( )ωA 中,

谐波振幅 22nnn baA += ,程序中用语句 A(n)=abs(Sn)来实现。也请注意数组赋初值的形式以及

输出数据的语句格式。

【例 8-3】对图 8-5 所示的周期性的正弦交流电整流全波函数,计算这个周期函数的 Fourier系数并绘制当正弦交流振幅 1=A 时的振幅频谱(离散频谱)图 ( )ωnA 。

图 8-5 正弦交流电整流全波函数

【解】 (1) 列写 ( )tf 的解析表达式

( )( )

( )

≤≤−−

≤≤=

02

,sin

20,sin

tT

tA

TttA

tfω

ω

(2) 求 ( )tf 的 Fourier 系数

根据式(8-2)、式(8-3)、式(8-4)与式(8-6),应用定积分计算法,求周期函数 ( )tf 的直流分

量 0a 与 Fourier 系数 na 、 nb ,可以运行以下 MATLAB 语句:

syms T t n A;pi=sym(’pi’);

f=A*sin(2*pi*t/T);

a0=2/T*(int(f,t,0,T/2)+int(-f,t,-T/2,0));

an1=2/T*int(f*cos(2*pi*n*t/T),t,0,T/2);

Page 356: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

344

an2=2/T*int(-f*cos(2*pi*n*t/T),t,-T/2,0);

bn1=2/T*int(f*sin(2*pi*n*t/T),t,0,T/2);

bn2=2/T*int(-f*sin(2*pi*n*t/T),t,-T/2,0);

A=sym(’1’);

A0=subs(simple(a0/2),’A’,A)

an=subs(simple(an1+an2),’A’,A)

bn=subs(simple(bn1+bn2),’A’,A) 运行结果

A0 = 2/pi

an = -2*(cos(pi*n)+1)/pi/(-1+n^2)

bn = 0 (3) 绘制当 1=A 时的振幅频谱图

运行以下 MATLAB 程序段即可绘制其振幅频谱图:

A=[0 0 0 0 0 0 0 0 0 0 0];

S=[0 0 0 0 0 0 0 0 0 0 0];

n=1:1:11;

for n=1:11

an=-2*(cos(pi*n)+1)/pi/(-1+n^2);

S(n)=an;

Sn=S(n)

A(n)=abs(Sn);

end

x1=1;x2=11;x=x1:x2;

stem(x,A,’r’,’filled’); 程序段运行后,得 Fourier 系数 na :

Sn = NaN -0.4244 0 -0.0849 0 -0.0364 0 -0.0202 0 -0.0129 0 程序运行后绘制振幅频谱图如图 8-6 所示。

图 8-6 正弦交流电整流全波函数振幅频谱图

Page 357: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

345

[说明] ① 正弦函数的振幅为 A ,不要与数组 A、谐波振幅值 nA 混为一谈。

② 为了给出符号解析解,需将 1 定义为符号对象:pi=sym(’1’)。 ③ 经计算 Fourier 系数 na 为负值。为了输出系数 na 的值,也设置了数组 S。程序中语

句 S(n)=an,意为输出语句 Sn=S(n)输出的数组 S 的值即为 na 。

(3) 连续频谱的计算举例

绘制连续频谱的函数是非周期函数。请看以下示例。

【例 8-4】对图 8-7 所示的方波函数,求这个非周期函数的频谱函数并绘制当 1=A 与 1=a 时

的频谱图 ( )ωF 。

图 8-7 方波函数

【解】 解算非周期函数 ( )tf 的连续频谱 ( )ωF 就是应用 Fourier 变换求频谱函数。

(1) 列写 ( )tf 的解析表达式

图 8-7 所示方波函数可以看成两个阶跃函数的叠加,即

( ) ( ) ( ) ( )( ) ( )atAatAtftftf −⋅−−−⋅=+= 1121

(2) 计算频谱函数并绘制频谱图 将 ( )tf 进行 Fourier 变换即可求得它的频谱函数。在 MATLAB 程序中,必须注意阶跃函

数定义为符号对象的方法;还有,在进行 Fourier 变换后还要进行化简。以下就是本题解算的

MATLAB 程序段:

syms A t a w;

f=sym(’A*Heaviside(t+a)-A*Heaviside(t-a)’);

F=fourier(f);

F1=simple(F)

A=1;a=1;

F2=subs(F1,’[A a]’,[A a]);

ezplot (abs(F2),[-3*pi,3*pi]) 程序运行结果

F1 = 2*A*sin(a*w)/w 即频谱函数为:

( ) ( )[ ] ( ) ( )[ ]ω

ωω aAatAatAFtfFF

sin211 =−⋅−+⋅==

与当 1=A 与 1=a 时,在 ( )π3,3 +π− 之间绘制的频谱图如图 8-8 所示。

[说明] ① 在 MATLAB 中,方波函数 ( )tf 应描述为:

Page 358: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

346

f=sym(’A*Heaviside(t+a)-A*Heaviside(t-a)’)

② 作为绘图函数 ezplot( ) 纵坐标即 ( )ωF 须计算其绝对值。

③ 绘图函数 ezplot( )输入横坐标的量值变化时,频谱图画面会有所改变。

图 8-8 方波函数的频谱图

【例 8-5】对钟形脉冲函数 ( ) ( )0,e2

>= − ββ tAtf ,计算这个非周期函数的频谱函数并绘制当

4=A 与 2=β 时的频谱图 ( )ωF 。

【解】

本题有两种解算方法:Fourier 变换法与定积分法。

(1) Fourier 变换计算法

计算频谱函数并绘制频谱图的 MATLAB 程序如下:

syms A t beta w;pi=sym(’pi’)

beta=sym(’beta’,’positive’);f=A*exp(-beta*t^2);

F=fourier(f,t,w);F=simple(F)

A=4;beta=2;F1=subs(F,’[A beta]’,[A beta])

ezplot (F1,[-10,10]) 程序运行结果

F = A*(pi/beta)^(1/2)*exp(-1/4*w^2/beta)

F1 = 2*2^(1/2)*pi^(1/2)*exp(-1/8*w^2) 即频谱函数为:

( ) βω

βω 4

2

eπ −

= AF

频谱图如图 8-9 所示。

(2) 定积分计算法

根据 Fourier 变换的定义式(3-10)

( ) ( )[ ] ( )∫+∞

∞−

−== ttftfFF t de jωω

Page 359: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

347

图 8-9 钟形脉冲函数的频谱图

计算频谱函数并绘制频谱图的如下 MATLAB 程序运行后会得出与第一法相同的结果。

syms A t beta w;pi=sym(’pi’);

beta=sym(’beta’,’positive’);f=A*exp(-beta*t^2)*exp(-j*w*t);

F=int(f,t,-inf,inf);F1=simple(F)

A=4;beta=2;F2=subs(F1,’[A beta]’,[A beta]);

ezplot (F2,[-10,10])

【例 8-6】对高斯分布函数 ( ) 2

2

2eπ2

1 σσ

t

tf−

= ,计算这个非周期函数的频谱函数并绘制当

1=σ 时的频谱图 ( )ωF 。

【解】

解算本题也可用两种解算方法:Fourier 变换法与定积分法。

(1) 定积分计算法

根据 Fourier 变换的定义式(3-10)

( ) ( )[ ] ( )∫+∞

∞−

−== ttftfFF t de jωω

计算频谱函数并绘制频谱图的 MATLAB 程序段如下:

syms A t a w tao;

sigma=sym(’sigma’,’positive’);

f=exp(-t^2/(2*sigma^2))/(sqrt(2*pi)*sigma)*exp(-j*w*t);

F=int(f,t,-inf,inf);F1=simple(F);

digits(4);F2=vpa(F1)

sigma=1;F3=subs(F2,’sigma’,sigma)

ezplot (F3,[-2*pi,2*pi]) 程序运行结果

F2 = 1.000*exp(-.5000*sigma^2*w^2)

F3 = 1.000*exp(-.5000*w^2) 即频谱函数为

( ) 2

22

eωσ

ω−

=F

Page 360: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

348

程序段运行后还绘制频谱图如图 8-10 所示。

(2) Fourier 变换计算法

根据 Fourier 变换公式,计算频谱函数并绘制频谱图的如下 MATLAB 语句运行后会得出

与第一法相同的结果。

syms A t a w

sigma=sym(’sigma’,’positive’);

f=exp(-t^2/(2*sigma^2))/(sqrt(2*pi)*sigma);

F=fourier(f,t,w);F1=simple(F);

digits(4);F2=vpa(F1)

sigma=1;F3=subs(F2,’sigma’,sigma)

ezplot (F3,[-2*pi,2*pi])

图 8-10 高斯分布函数的频谱图

8.1.2 相关函数与能量谱密度 1.Parseval 公式 若 ( ) ( )[ ]tfFF =ω ,根据积分变换原理,有

( )[ ] ( ) ( ) ωωωω dπ2

1d

π2

1d

22 ∫∫ ∫

+∞

∞−

+∞

∞−

+∞

∞−== SFttf (8-12)

式(8-12)称为 Parseval(巴塞瓦)公式。式中

( ) ( ) 2ωω FS = (8-13)

叫做能量密度函数或能量谱密度。由能量密度函数可知, ( )ωS 是ω 的偶函数,即

( ) ( )ωω −= SS (8-14)

【例 8-7】应用 Parseval 公式计算无穷积分 tt

td

sin2

2

∫+∞

∞−。

【解】 应用 Parseval 公式计算,应首先计算 ( ) ( )[ ]tfFF =ω ;然后运算式 (8-12)。如是可执行以

下 MATLAB 程序:

Page 361: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

349

syms t w;

pi=sym(’pi’);f=sin(t)/t;

F=simple(fourier(f));

I=1/(2*pi)*int((abs(F))^2,w,-inf,inf) 程序运行结果

I = pi 即

πdsin

2

2

=∫+∞

∞−t

t

t

用定积分的方法,执行以下 MATLAB 语句可得到同样的结果:

syms t w

f=(sin(w))^2/w^2;int(f,w,-inf,inf) 2. 相关函数的概念 对于两个不同的函数 ( )tf1 与 ( )tf2 ,则积分

( ) ( ) ttftf d21∫+∞

∞−+τ

叫做 ( )tf1 与 ( )tf2 的互相关函数,记为 ( )τ12R 。即有

( ) ( ) ( ) ttftfR d2112 ∫+∞

∞−+= ττ (8-15)

而积分

( ) ( ) ttftf d21∫+∞

∞−+τ

记为 ( )τ21R ,即有

( ) ( ) ( ) ttftfR d2121 ∫+∞

∞−+= ττ (8-16)

当 ( ) ( ) ( )tftftf == 21 时,则积分

( ) ( ) ttftf d∫+∞

∞−+τ

叫做函数 ( )tf 的自相关函数,简称相关函数,记为 ( )τR 。即有

( ) ( ) ( ) ttftfR d∫+∞

∞−+= ττ (8-17)

根据积分变换的原理,有 ( ) ( )ττ RR =− (8-18)

与 ( ) ( )ττ −= 1221 RR (8-19)

3. 相关函数与能量谱密度的关系 对于相关函数 ( )τR 与能量谱密度 ( )ωS ,根据积分变换原理,有

( ) ( ) ωωτ ωτ deπ2

1 j∫+∞

∞−= SR (8-20)

Page 362: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

350

( ) ( ) ττω ωτ de j∫+∞

∞−

−= RS (8-21)

对照公式 (3-18)与式(3-19),可以看出 ( )τR 与 ( )ωS 是一个 Fourier 变换对:

( ) ( )[ ]τω RFS = (8-22)

( ) ( )[ ]ωτ SFR 1−= (8-23)

即 Fourier 变换 ( )ωS 是 ( )τR 的象函数,Fourier 反变换 ( )τR 是 ( )ωS 的(象)原函数。既然 ( )τR

与 ( )ωS 是一个 Fourier 变换对,那么两者之间的计算完全符合 Fourier 变换与反变换运算的规

则,这就是相关函数与能量谱密度的关系。

求出能量谱密度后,有关进一步的理论分析便是相关的专业课程的内容了。

【例 8-8】已知某信号的相关函数为 ( ) ( )ττ aR cos2

1= ,求它的能量谱密度。

【解】 根据相关函数与能量谱密度的关系,用 Fourier 变换函数命令求 ( )ωS 的 MATLAB 语句如

下:

syms t w a tao

R=cos(a*tao)/2;

S=fourier(R) 运行结果

S = 1/2*pi*Dirac(-w+a)+1/2*pi*Dirac(w+a) 即能量谱密度

( ) ( ) ( )[ ]aaS ++−= ωδωδω2

π

【例 8-9】已知某信号的相关函数为

( ) ( ) ( )

−+

++−++=

222

1 aaaaR τδτδτδτδτ

求它的能量谱密度。

【解】 根据式(8-22),用 Fourier 变换函数命令求 ( )ωS 的 MATLAB 语句如下:

syms t w a tao

R=(sym(’Dirac(tao+a)’)+sym(’Dirac(tao-a)’)+sym(’Dirac(tao+a/2)’)+sym(’Dirac(tao-a/2)’))/2;

S=simple(fourier(R)) 运行结果

S = cos(1/2*a*w)+cos(a*w) 即能量谱密度函数

( ) ( )

+=

2coscos

ωωω aaS

Page 363: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

351

【例 8-10】已知某信号的相关函数为

( ) ( )ττ τ uR aje=

求它的能量谱密度。

【解】 根据式(8-22),用 fourier( )函数命令计算 ( )ωS 的 MATLAB 语句如下:

syms t w a tao

R=exp(j*a*tao)*sym(’Heaviside(tao)’);

S=fourier(R)

S1=simple(S) 语句运行结果

S =1/2/pi*(2*pi^2*Dirac(-w+a)-2*i*pi/(w-a))

S1 = i/(-w+a) 即能量谱密度

( ) ( )aS

−=

ωω

j

1

【例 8-11】已知某信号的相关函数为

( ) ( )τττ τ uR aje=

求它的能量谱密度。

【解】 根据式(8-22),用 Fourier 变换函数命令求 ( )ωS 的 MATLAB 语句如下:

syms t w a tao

R=exp(j*a*tao)*tao*sym(’Heaviside(tao)’);

S=fourier(R)

S1=simple(S) 语句运行结果

S = 1/(-i*a+i*w)^2

S1 = -1/(-w+a)^2 即能量谱密度函数为

( )( )2

2

ωω

−−=

aS

8.2 Laplace 变换与 Laplace 反变换运算的应用

8.2.1 计算用图形表示的函数的 Laplace 变换

在 3.9 节介绍了函数的 Laplace 变换。理论研究中,经常还会要计算用图形表示的函数的

Laplace 变换。一般说来,解算的图形通常都能分解成多个典型基本函数的叠加,然后用 Laplace

变换的线性性质求解即可。这里举例来说明此类问题求解过程。

Page 364: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

352

【例 8-12】对图 8-11 所示的单个等腰三角形波,求其 Laplace 变换。

【解】

(1) 单个三角形波图形分析

单个三角形波可以看成如图 8-12 所示的 3 个斜坡函数的叠加:

图 8-11 单个三角形波 图 8-12 单个三角形波等效 3 个斜坡函数叠加

由解析几何基本原理,图 8-12 所表示的基本图形叠加的函数表达式为:

( ) ( ) ( ) ( ) ( ) ( )ττττ 222 −⋅−+−⋅−−⋅= tuttuttuttf

(2) 求函数的 Laplace 变换的 MATLAB 程序如下:

syms s t;tao=sym(’tao’,’positive’);

f1=t*sym(’Heaviside(t)’);

f2=-2*(t-tao)*sym(’Heaviside(t-tao)’);

f3=(t-2*tao)*sym(’Heaviside(t-2*tao)’);

F0=laplace(f1+f2+f3)

F=factor(F0) 程序执行结果

F0 = 1/s^2-2*exp(-tao*s)/s^2+exp(-2*tao*s)/s^2

F = -(-1+2*exp(-tao*s)-exp(-2*tao*s))/s^2 即单个三角形波的 Laplace 变换为

( ) ( )[ ] == tfLsF [ ( ) ( ) ( ) ( ) ( ) ]ττττ 222 −⋅−+−⋅−−⋅ tuttuttutL

( ) ( )2

22

2e1

1ee21

1 ss

ss

s τττ −− −=+−=−

[说明]

① 必须仔细观察已知图形,将其分解成多个基本图形,再根据解析几何基本原理,写

出各个基本图形的函数表达式将其叠加。这是解题的基础。

② 常数 tao 必须进行实数且为正数的限定性设置,在 MATLAB 符号运算中用语句 syms

tao positive 或者 tao=sym(’tao’,’positive’)来实现,否则解算不出结果。在 MATLAB 程序中,希

腊字母τ 用其发音字符串’tao’来表示。如遇到其它希腊字母,都按同样办法处理。

【例 8-13】对图 8-13 所示的单个正弦半波,求其 Laplace 变换。

【解】

(1) 图形所示的函数分析

图 8-13 中单个正弦半波可以看成图 8-14 所示的 2 个振幅均为 A 的正弦函数的叠加:一个

是从时间 0=t (即 π0 ⋅=tω )开始的正弦函数(其周期为T ),另一个是从时间 2Tt − 即 π=tω 开

Page 365: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

353

始的正弦函数,两函数求代数和即为单个正弦半波。于是,图 8-14 所表示的函数表达式可

写为:

( ) ( ) ( )

−⋅

−−⋅=

22sinsin

Ttu

TtAtutAtf ωω

式中

Tf

π2π2 ==ω

图 8-13 单个正弦半波 图 8-14 单个正弦半波等效 2 正弦函数的叠加

(2) 求函数的 Laplace 变换的 MATLAB 语句如下:

syms A t s;T=sym(’T’,’positive’);

f1=A*sin(2*pi*t/T)*sym(’Heaviside(t)’);

f2=A*sin(2*pi*(t-T/2)/T)*sym(’Heaviside(t-T/2)’);

F0=laplace(f1+f2);

F=factor(F0) 语句执行结果

F = 2*A*pi*T*(1+exp(-1/2*s*T))/(s^2*T^2+4*pi^2) 即图 8-13 的 Laplace 变换为

( ) ( )[ ] == tfLsF [ ( ) ( ) ]

−⋅

−⋅−⋅⋅

22sinsin

Ttu

TtAtutAL ωω

222

2

π4

e1π2

+

+

=

Ts

TATs

【例 8-14】求图 8-15 所示的正弦单相交流电(振幅 1=A )全波整流函数的 Laplace 变换。

【解】

(1) 正弦交流电整流全波函数图形分析

正弦交流电整流全波可以看成如图 8-16 所示的所有连续 n 个单个正弦半波的叠加。由前

题,图 8-16 所表示的第一个单个正弦半波函数表达式为:

Page 366: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

354

( ) ( )

−⋅

−+⋅

=

22

π2sin

π2sin

Ttu

Tt

Ttu

T

ttf

图 8-15 正弦交流电整流全波函数 图 8-16 交流整流全波等效为连续 n 个单个正弦半波的叠加

(2) 求第一个单个正弦半波的 Laplace 变换的 MATLAB 语句如下:

syms s t;T=sym(’T’,’positive’);

f1=sin(2*pi*t/T)*sym(’Heaviside(t)’);

f2=sin(2*pi/T*(t-T/2))*sym(’Heaviside(t-T/2)’);

F0=laplace(f1+f2);

F=factor(F0) 语句执行结果

F = 2*pi*T*(1+exp(-1/2*s*T))/(s^2*T^2+4*pi^2) 即正弦交流电整流全波的第一个半波的 Laplace 变换为

( ) ( )[ ] == tfLsF [ ( ) ]

−⋅

−+⋅

22

π2sin

π2sin

Ttu

Tt

Ttu

T

tL

+

+=

− Ts

Ts

T 2

1

222e1

π4π2

(3) 正弦交流电整流全波的第 2 个半波的 Laplace 变换的 MATLAB 语句如下:

syms s t;T=sym(’T’,’positive’);

f1=sin(2*pi*(t-T/2)/T)*sym(’Heaviside(t-T/2)’);

f2=sin(2*pi*(t-T)/T)*sym(’Heaviside(t-T)’);

F0=laplace(f1+f2);

F=factor(F0) 语句执行结果

F = 2*pi*T*(exp(-1/2*s*T)+exp(-s*T))/(s^2*T^2+4*pi^2) 即正弦交流电整流全波的第 2 个半波的 Laplace 变换为

( ) ( )[ ]tfLsF =222

2

π4

eeπ2

+

+

=

−−

Ts

T sTTs

+

+=

−− TsTs

Ts

T 2

1

2

1

222ee1

π4

π2

Page 367: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

355

(4) 求整流全波的第 3 个半波的 Laplace 变换的 MATLAB 语句如下:

syms s t;T=sym(’T’,’positive’);

f1=sin(2*pi*(t-T/2-T/2)/T)*sym(’Heaviside(t-T/2-T/2)’);

f2=sin(2*pi*(t-T-T/2)/T)*sym(’Heaviside(t-T-T/2)’);

F0=laplace(f1+f2);

F=factor(F0) 语句执行结果

F = 2*pi*T*(exp(-s*T)+exp(-3/2*s*T))/(s^2*T^2+4*pi^2) 即正弦交流电整流全波的第 3 个半波的 Laplace 变换为

F(S)=L[f(t)]= ]e[e4

2 2

3

22

TsTs

Ts

−−2

+π+

π

(5) 由交流电整流全波的前 3 个半波之和,用归纳法推导出整流全波 Laplace 变换的一般

表达式:

( )

+

+=

− Ts

Ts

TsF 2

1

222e1

π4

π2222

2

π4

eeπ2

+

+

+

−−

Ts

T sTTs

++

+

+

−−

222

2

3

π4

eeπ2

Ts

T sTTs

+++⋅

+

+= −−−

TsTsTs

Ts

Tee1e1

π4

π2 2

1

2

1

222

(6) 求无穷级数

+++ −−Ts

Tsee1 2

1

的和可用以下 MATLAB 语句:

syms s;n=sym(’n’,’positive’);T=sym(’T’,’positive’);

ss=symsum((exp(-n*T*s/2)),n,0,inf) 语句执行结果

ss = 1/(1-exp(-1/2*T*s))

即无穷级数

+++ −−Ts

Tsee1 2

1

的和为

Ts

TsTs

2

12

1

e1

1ee1

−−

=

+++

(7) 整流全波的 Laplace 变换为

( )222 π4

π2

+=

Ts

TsF

Ts

Ts

2

1

2

1

e1

e1

+⋅

【例 8-15】对下图 8-17 图形所示的特别折线波,求其 Laplace 变换。

【解】

(1) 图形所示的函数分析

图 8-17 图形可以看成图 8-18 所示的多个基本图形的等效叠加。根据解析几何的基本原

Page 368: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

356

理,图 8-18 所示的多个基本图形函数叠加后,其函数表达式为:

( ) ( ) ( ) ( ) ( )

( ) ( ) ( )ττ

ττ

ττ

τττ

22

21

221

−⋅−+−⋅+

−⋅−−−⋅−⋅+=

tut

tu

tut

tutut

tf

(2) 求函数的 Laplace 变换的 MATLAB 程序如下:

syms s t;tao=sym(’tao’,’positive’);

f1=1*sym(’Heaviside(t)’);

f2=t/tao*sym(’Heaviside(t)’);

f3=-2*sym(’Heaviside(t-tao)’);

f4=-2*(t-tao)/tao*sym(’Heaviside(t-tao)’);

f5=1*sym(’Heaviside(t-2*tao)’);

f6=(t-2*tao)/tao*sym(’Heaviside(t-2*tao)’);

f=f1+f2+f3+f4+f5+f6;

F0=laplace(f);

F=factor(F0)

图 8-17 特别折线波 图 8-18 特别折线波等效多个函数叠加

程序执行结果

F = (1-2*exp(-tao*s)+exp(-2*tao*s))*(tao*s+1)/tao/s^2 即图 8-17 的 Laplace 变换为 ( ) ( )[ ] == tfLsF

[ ( ) ( ) ( ) ( )

( ) ( ) ( ) ]ττ

ττ

ττ

τττ

22

21

221

−⋅−+−⋅+

−⋅−−−⋅−⋅+

tut

tu

tut

tutut

L

( ) ( )1

e12

2

+− −s

s

s

ττ

【例 8-16】对下图 8-19 图形所示单个梯形波,求其 Laplace 变换。

【解】

(1) 图形所示的函数分析

图 8-19 梯形波可以看成图 8-20 所示的多个基本图形函数的等效叠加。根据解析几何的

Page 369: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

357

基本原理,图 8-20 所示的多个基本图形函数叠加后,其函数表达式为:

( ) ( ) ( ) ( )( ) ( ) ( ) ( )τ

τττ

ττ

ττ

ττ

44

33 −⋅−+−⋅−−

−⋅−−⋅=

tutA

tutA

tutA

tuAt

tf

图 8-19 梯形波 图 8-20 梯形波等效多个基本函数叠加

(2) 求函数的 Laplace 变换的 MATLAB 程序如下:

syms A t s;tao=sym(’tao’,’positive’);

f1=A*t/tao*sym(’Heaviside(t)’);

f2=-A*(t-tao)/tao*sym(’Heaviside(t-tao)’);

f3=-A*(t-3*tao)/tao*sym(’Heaviside(t-3*tao)’);

f4=A*(t-4*tao)/tao*sym(’Heaviside(t-4*tao)’);

f=f1+f2+f3+f4;

F0=laplace(f);

F=factor(F0) 程序执行结果

F = -A*(-1+exp(-tao*s)+exp(-3*tao*s)-exp(-4*tao*s))/tao/s^2 即图 8-19 的 Laplace 变换为

( ) ( )[ ] == tfLsF

[ ( ) ( ) ( )

( ) ( ) ( ) ( ) ] =−⋅−+−⋅−−

−⋅−−⋅

ττ

τττ

τ

ττ

ττ

44

33

tutA

tutA

tutA

tuAt

L

( )sss

s

A τττ

τ43

2eee1 −−− −−−

8.2.2 微分方程的 Laplace 变换解法

在第 3 章已经交代过可用 Laplace 变换的方法求解微分方程。这里所说的微分方程是指

线性微分方程,即微分方程是未知函数及其各阶导数的一次方程。拉氏变换能把微分方程转

换为代数方程,而且根据 Laplace 变换的线性性质与微分性质,能把初始条件直接反映在方程

Page 370: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

358

中,这便是 Laplace 变换的奇特作用。在此,用 MATLAB 符号运算的拉氏变换函数命令来进

行求解,其解算过程就更加简单方便。

Laplace 变换的微分性质就是求(时间)连续函数的导函数的象函数,用得最多的是求一阶

与二阶导函数的象函数。其公式如下:

即有若 ( )[ ] ( )sFtfL = ,则有( ) ( ) ( )0

d

dfsFs

t

tfL −=

( ) ( ) ( ) ( )00d

d 22

2

ffssFst

tfL ′−−=

式中 s ——Laplace 算子即 ωσ j+=s ;

( )0f ——时间连续函数在 0=t 时的函数值即 ( )0=ttf ;

( )0f ′ ——时间连续函数的一阶导函数在 0=t 时的函数值即( )

0d

d

=tt

tf。

1. 微分方程的 Laplace 变换解法求解步骤

根据工程数学原理,用 Laplace 变换的方法求解微分方程的步骤如下: (1) 将微分方程进行积分下限为 −0 的拉氏变换,得到以 s 为变量的代数方程,即变换方

程。方程中的初始值应取 −= 0t 时的对应值。

(2) 解算变换方程,求出未知函数的象函数表达式。

(3) 将未知函数的象函数表达式展开成部分分式。

(4) 对部分分式进行 Laplace 反变换即得微分方程的全解。

2. 微分方程的 Laplace 变换解法举例 【例 8-17】在图 8-21 所示的 RC 网络中,开关 K 闭合前,电容器 C 上有初始电压 ( )0cu 。若

串联直流电压 E ,试求开关 K 闭合后电容器 C 两端的电压 ( )tuc 。 并绘制 1=T s、 5=E V、

( ) 30 =cu V 时的 ( )tuc 。

图 8-21 RC 网络

【解】 (1) 根据电工原理,列写出 RC 网络以 ( )tuc 为输出量的微分方程如下:

( )tEut

uRC c

c 1d

d⋅=+ 或 ( )tEu

t

uT c

c 1d

d⋅=+

式中 RCT = 。

(2) 根据用 Laplace 变换的方法解微分方程的步骤求算如下: ① 将微分方程进行积分下限为 −0 的拉氏变换,得到对应的变换方程。在此要特别强调,

时间连续函数 f 必须写成 ( )tf ,不能省略小括号以及其内的 t 。于是可执行如下 MATLAB

Page 371: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

359

程序:

syms t s R C E T;

z00=laplace(R*C*diff(sym(’uc(t)’))+sym(’uc(t)’));

R=T/C;

z0=subs(z00,’R’,R);

z=factor(z0);

y=laplace(E*sym(’Heaviside(t)’));

S=z-y 程序段运行结果

S = T*s*laplace(uc(t),t,s)-T*uc(0)+laplace(uc(t),t,s)-E/s ② 解算变换方程,求出未知函数的象函数表达式,并进行 Laplace 反变换即得微分方程

的全解。这里要特别强调,在解代数方程(即象函数方程)列写 MATLAB 语句时,必须改写所

有函数的初始条件 ( )0f 为 f0(即略去小括号),并代入所有初始条件;改写所有函数 f(t)的

laplace(f(t),t,s)为 F ,即省略小括号以及其内的 s。例如函数 uc(t)的 laplace(uc(t),t,s)为 cU 。否

则代数方程无法求解。解算变换方程的 MATLAB 语句段如下:

syms t s T uc0 E Uc;

S = T*s*Uc-T*uc0+Uc-E/s;

F=solve(S,Uc);

uc=ilaplace(F); 语句段执行结果

uc = E-exp(-t/T)*E+exp(-t/T)*uc0 即微分方程的解为

( ) ( ) tT

c

tT

c uEEtu11

e0e−−

+−=

(3) 对微分方程的解绘制曲线。在此特别强调,对微分方程解的一般表达式中所有参量,

必须要设置具体的数值,才能画出曲线,否则曲线无法画出。本例中,取 1=T s; 5=E V;

( ) 30 =cu V。对微分方程的解画曲线的 MATLAB 程序如下:

T=1;E=5;uc0=3;

uc1= E;

t=0:0.1:6;

uc2=subs(-exp(-t/T)*E,’[T E]’,[T E]);

uc3=subs(exp(-t/T)*uc0,’[T uc0]’,[T uc0]);

uc=uc1+uc2+uc3;

plot(t1,uc1,’-b’,t1,uc2,’:g’,t1,uc3,’--r’,t,uc,’-k’);

程序运行后得到图 8-22 的 RC 网络阶跃响应曲线,其中实线即为电容器 C 两端 ( )tuc 。

由微分方程解的表达式看出, ( )tuc 是三个分量叠加构成的:第一分量 5=E V(如图 8-22 的上

边 框 线 所 示 ) ; 第 二 分 量t

TE1

e−

− V( 伏 )( 如 图 8-22 中 的 下 方 点 线 所 示 ) ; 第 三 分 量

( ) tT

cu1

e0−

V(伏)(如图 8-22 的中间部位的点划线所示)。

Page 372: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

360

图 8-22 RC 网络的阶跃响应曲线

【例 8-18】求解微分方程 xDyCt

yB

t

yA ⋅=⋅+⋅+⋅

d

d

d

d2

2

。方程中 y 为输出量; x 为输入量。

并绘制当 1=A 、 2=B 、 2=C 、 1=D 且 ( ) ( ) 000 == yy 、 ( )tx δ= 时的微分方程解 ( )ty 的曲线。

【解】 (1) 将微分方程进行积分下限为 −0 的拉氏变换,得到对应的变换方程。这可执行如下

MATLAB 程序:

syms t s A B C D y x;

z0=A*diff(sym(’y(t)’),2)+B*diff(sym(’y(t)’))+C*sym(’y(t)’);

z=laplace(z0);

y=laplace(D*sym(’Dirac(t)’));

S=z-y 程序段运行结果

S =

A*(s*(s*laplace(y(t),t,s)-y(0))-D(y)(0))+B*(s*laplace(y(t),t,s)-y(0))+C*laplace(y(t),t,s)-D (2) 解变换方程求未知函数的象函数表达式,并进行拉氏反变换求微分方程的全解。重写

变换方程:改写 ( )0y 为 y0 并省略小括号,并代入所有初始条件;改写 laplace(y(t),t,s)为 Y ,

并且计及 ( ) ( ) 000 == yy 。于是有以下 MATLAB 语句段:

syms t s Y X A B C D;

S =A*s^2*Y+B*s*Y+C*Y-D;

F=solve(S,Y);

f0=ilaplace(F);

y=simple(factor(f0)) 语句段运行结果

y = 2*D*exp(-1/2*B/A*t)/(4*C*A-B^2)^(1/2)*sin(1/2*(4*C*A-B^2)^(1/2)*t/A) (3) 当 1=A 、 2=B 、 2=C 、 1=D 且 ( ) ( ) 000 == yy 时对微分方程的解绘制曲线。

① 求微分方程的全解。参变量代入具体数值的 MATLAB 程序如下:

Page 373: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

361

syms t s Y X A B C D;

A=1;B=2;C=2;D=1;

S =A*s^2*Y+B*s*Y+C*Y-D;

F=solve(S,Y);

f0=ilaplace(F);

y=simple(factor(f0)) 语句段运行结果

y = -1/2*i*exp(-t+i*t)+1/2*i*exp(-t-i*t) ② 对微分方程的解画曲线。可运行以下 MATLAB 语句段:

t=0:0.001:10;

y = -1/2*i*exp(-t+i*t)+1/2*i*exp(-t-i*t);

plot(t,y,’-r’); 语句段运行后即得微分方程解的曲线 ( )ty ,如图 8-23 所示。

图 8-23 微分方程解 ( )ty 的曲线

【例 8-19】正弦对称三相交流电系统发生三相短路时,在保护装置动作之前,电源到短路点

之间会流通短路电流,其单相的等效电路如图 8-24 所示。电源至短路点之间的电阻为 R ,电

源至短路点之间的电感为 L ,若正弦相电压 ( )tur ( )um tU ψω += sin ,试绘制 1.0=R Ω、

007.0=L H、 3/10000=Um V、 50/1=T s、 6/π=α 、 16.314=ω rad/s、 ( ) 00 =i 时的短路

电流变化曲线 ( )ti 。

【解】

图 8-24 RL 网络

(1) 根据电工原理,短路发生相当于图 8-24 中的开关 K 将正弦电源电压突然接通 RL 网

络。 RL 网络的电流 ( )ti 满足以下的微分方程:

=+ iRt

iL

d

d ( )tur

Page 374: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

362

式中

( ) =tur ( )um tU ψω +sin

(2) 根据用 Laplace 变换的方法解微分方程的步骤解算如下。

① 将微分方程进行积分下限为 −0 的拉氏变换,得到对应的变换方程。这可执行如

下 MATLAB 程序:

syms t s R L Um w T T1 ai alpha;

z0=laplace(L*diff(sym(’ai(t)’))+R*sym(’ai(t)’));

y0=laplace(Um*sin(2*pi*t/T+alpha));

R=0.1;L=0.007;T1=L/R;T=1/50;Um=10000/sqrt(3);

alpha=pi/6;

z=subs(z0,’[R L Um]’,[R L Um]);

y=subs(y0,’[Um alpha T]’,[Um alpha T]);

S0=z-y;

digits(4);

S=vpa(S0,4) 程序段运行结果

S =

.7000e-2*s*laplace(ai(t),t,s)-.7000e-2*ai(0)+.1000*laplace(ai(t),t,s)-1.*(2887.*s+.1571e7)/(s

^2+.9870e5) ② 解变换方程求未知函数的象函数表达式,并进行拉氏反变换求微分方程的全解。重

写变换方程:改写 laplace(ai(t),t,s)为 Ai ,并且计及 ( ) 00 =ai 。于是可运行以下 MATLAB 程

序段:

syms t s w R C ai Ai Uc T T1 z;

S =.7000e-2*s*Ai+.1000*Ai-1.*(2887.*s+.1571e7)/(s^2+.9870e5);

Ai=solve(S,Ai);Ai1=ilaplace(Ai);

digits(4);ai=vpa(ai1,4) 程序段运行结果

ai = 2210.*exp(-14.29*t)-2210.*cos(314.2*t)+1413.*sin(314.2*t)

(3) 运行以下 MATLAB 程序绘制短路电流变化曲线 ( )ti :

t=0:0.001:0.06;

ai1=2210.*exp(-14.29*t);

ai2=-2210.*cos(314.2*t)+1413.*sin(314.2*t);

ai=ai1+ai2;

[mp,tf]=max(ai);

mp

plot(t,ai1,’:g’,t,ai2,’--r’,t,ai,’-k’);

程序段运行后得到短路电流最大值为

mp = 4.5898e+003 A

还得到如图 8-25 所示的短路电流变化曲线 ( )ti 。

Page 375: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

363

图 8-25 短路电流变化曲线 ( )ti

[说明]

① 电力线路的电阻远比线路的电抗要小。线路的分布电抗与导线的几何尺寸、三相导体

排列方法与导线间距离有关。

② 在 MATLAB 语句程序中,电流不能用 i 来标识,因为 MATLAB 默认 i 为虚数单位,

即 1−=i 。为此,计算电路电流时,特将电流用 ai 来标识。

③ 短路前的负载电流与短路电流相比可以忽略不计,即有短路初始条件 ( ) 00 =ai 。

④ 短路电流变化曲线 ( )ti 图 8-25 中,点划线为短路电流周期分量;点线为短路电流非周

期分量;实线为短路全电流。后者为前两者的代数和。 ⑤ 由短路电流变化曲线 ( )ti 可以看出,短路后经过半个周期(0.01s)短路电流瞬时值达到

最大值(4.5898e+003A)。这一电流叫做短路冲击电流,其值可达数千安培甚至数十千安培。短

路冲击电流引发的电动力将对电力系统的设备产生破坏作用,这是电力系统的设计必须解决

的问题。 ⑥ 由短路电流变化曲线 ( )ti 还可以看出,约经过 0.2s 短路电流非周期分量基本衰减完毕。

这个数值对电力系统继电保护的设计是很重要的。

【例 8-20】在受控热核反应中需要强大的脉冲磁场,脉冲磁场是由特大的脉冲电流产生的。

这个电流可由 R、L、C 串联的放电电路(图 8-26)来得到。已知 Ω×= −4106R 、 H106 9−×=L 、

F1700=C 、 V1015 30 ×=U 。开关接通前电容已充电 0U ,试求放电电流变化曲线 ( )ti ,

并判断最大电流为多少。

图 8-26 RLC 网络

【解】

(1) 根据电工原理,列写 RLC 串联电路基尔荷夫电压方程式:

Page 376: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

364

0d

d

d

d2

2

=++ ccc ut

uCR

t

uLC

式中

t

uCi c

d

d=

(2) 根据用 Laplace 变换的方法解微分方程的步骤运算如下。

① 将微分方程进行积分下限为 −0 的拉氏变换,得到对应的变换方程。这可执行如

下 MATLAB 语句:

syms t s R L C Um w T T1 uc alpha;

z=laplace(L*C*diff(sym(’uc(t)’),2)+

R*C*diff(sym(’uc(t)’))+sym(’uc(t)’));

y=0;S=z-y 语句段运行结果

S =

L*C*(s*(s*laplace(uc(t),t,s)-uc(0))-D(uc)(0))+R*C*(s*laplace(uc(t),t,s)-uc(0))+laplace(uc(t),t,s) ② 解算变换方程,求出未知函数的象函数表达式,并进行 Laplace 反变换即得微分方程

的全解。已经指出过,在解代数方程(即象函数方程)时,必须分别改写 D(uc)(0)、uc(0)为 Duc0、

uc0 并省略小括号,并代入所有初始条件;改写函数 uc(t)的 laplace(uc(t),t,s)为 cU ,否则方程

无法求解。代入数据 Ω×= −4106R 、 H106 9−×=L 、 F1700=C 、 V1015 30 ×=U ,解算

变换方程的 MATLAB 语句段如下:

syms t s R C L Uc uc0 Duc0;

S0=L*C*(s*(s*Uc-uc0)-Duc0)+R*C*(s*Uc-uc0)+Uc;

R=6*10^(-4);L=6*10^(-9);C=1.7*10^(-3);

uc0=15000;Duc0=0;

S=subs(S0,’[R L C uc0 Duc0]’,[R L C uc0 Duc0]);

Uc=solve(S,Uc);uc00=ilaplace(Uc);uc0=factor(simple(uc00));

digits(3);uc=vpa(uc0,3);

ai0=-C*diff(uc);ai=factor(subs(ai0,’C’,C)) 语句段运行结果

ai =

.814e7*exp(-.500e5*t)*sin(.310e6*t) 即电流

( ) ( )tti t 310000sine8140000 50000 ⋅⋅= −

(3) 对微分方程的解绘制曲线。其 MATLAB 语句如下:

syms t;

ai=.814e7*exp(-.500e5*t)*sin(.310e6*t);

ezplot(ai,[0 0.00006]) 语句段运行后得到放电电流变化曲线 ( )ti ,如图 8-27 所示。

Page 377: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

365

图 8-27 放电电流变化曲线 ( )ti

(4) 由放电电流表达式 ( ) ( )tti t 310000sine8140000 50000 ⋅⋅= − 与图 8-27 放电电流变化曲线

( )ti 可以看出:

① 放电电流 ( )ti 曲线呈现衰减的正弦振荡变化。

② 瞬时最大放电电流出现在衰减正弦振荡的第一个半波的峰值处,时间约为 5105.0 −× s。

③ 瞬时最大放电电流约大于 6106 × A,即 600 多万安培,以满足热核研究的需要。

[说明] 绘制放电电流 ( )ti 曲线不能用函数命令 plot ( ),因为放电电流表达式中出现了卷积,只

能用 ezplot ( ) 函数命令绘制 ( ) ( )tti t 310000sine8140000 50000 ⋅⋅= − 电流曲线。

8.2.3 求线性控制系统的传递函数

1. 线性系统传递函数的概念及计算举例

微分方程是未知函数及其各阶导数的一次方程者叫线性微分方程。一个用线性常系数微

分方程描述的系统叫做线性系统。外加给系统的随时间 t 变化的输入函数叫做激励,系统的

随时间 t 变化的输出函数叫做响应。一个有输入端与输出端的线性系统如图 8-28 所示。线性

系统在电路理论中又叫做线性网络(简称网络)。

图 8-28 线性系统

在一般情况下,一个单输入单输出线性系统,其激励 ( )tx 与响应 ( )ty 满足以下微分方程:

( ) ( ) ( ) ( )

( ) ( ) ( ) ( )txbt

txb

t

txb

t

txb

tyat

tya

t

tya

t

tya

m

m

mm

m

m

n

n

nn

n

n

011

1

1

011

1

1

d

d

d

d

d

d

d

d

d

d

d

d

++++

=++++

(8-24)

Page 378: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

366

其中

mn bbbaaa ,,,,,,, 1010 均为常数,m, n 为正整数,且 n≥m。

设 ( )[ ] ( )sYtyL = , ( )[ ] ( )sXtxL = ,根据 Laplace 变换的微分性质,有

[ ] ( ) ( ) ( ) ( ) ( )[ ]0000 1321 −−−− ++′′+′+−= kkkkk

kk

kk yysysysasYsayaL

式中 nk ,,3,2,1,0 =

等号右边方括号中各项是由 ( )ty 初始条件不为 0 产生的分量。

[ ] ( ) ( ) ( ) ( ) ( )[ ]0000 1321 −−−− ++′′+′+−= kkkkk

kk

kk xxsxsxsbsXsbxbL

式中 nk ,,3,2,1,0 =

等号右边方括号中各项是由 ( )tx 初始条件不为 0 产生的分量。

对式(8-24)两边取 Laplace 变换并整理,可得

( ) ( ) ( ) ( ) ( ) ( )sMsXsMsMsYsD hxhy −=−

( ) ( )( ) ( ) ( ) ( )

( )sD

sMsMsX

sD

sMsY

hxhy −+= (8-25)

式中

( ) 011

1 asasasasD nn

nn ++++= −

( ) 011

1 bsbsbsbsM mm

mm ++++= −

( )sM hy 是由响应 ( )ty 即系统初始条件不为 0 产生的分量;

( )sM hx 是由激励 ( )tx 初始条件不为 0 产生的分量。

令 ( ) ( )( )sD

sMsG =

则式(8-25)可写成

( ) ( ) ( ) ( ) ( )( )sD

sMsMsXsGsY

hxhy −+= (8-26)

式中

( ) =sG01

11

011

1

asasasa

bsbsbsbn

nn

n

mm

mm

++++++++

−−

−−

(8-27)

称 ( )sG 为系统的传递函数,它表达了系统本身的特征,而与激励及系统的初始状态无关。

若 ( ) 0=sM hy , ( ) 0=sM hx ,则(8-26)式就是

( ) ( ) ( )sXsGsY ⋅= 或 ( ) ( )( )sX

sYsG = (8-28)

将式(8-28)图形化为图 8-29,它表明激励的拉氏变换 ( )sX 乘以系统的传递函数 ( )sG 等于响应

Page 379: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

367

的拉氏变换 ( )sY ,或系统的传递函数 ( )sG 等于响应的拉氏变换 ( )sY 除以激励的拉氏变换

( )sX 。

图 8-29 线性系统传递函数

至此,可归纳传递函数的定义为:在零初始条件下,系统响应(输出量)的拉氏变换 ( )sY 与

激励(输入量)的拉氏变换 ( )sX 之比

( ) ( )( ) ==sX

sYsG

011

1

011

1

asasasa

bsbsbsbn

nn

n

mm

mm

++++++++

−−

−−

(8-29)

传递函数是基于微分方程与 Laplace 变换引出的概念,无论何种系统,只要描述系统运

动规律的数学模型即微分方程相同,在相同的激励与初始状态下就会有相同的响应。可见传

递函数并不表明系统的物理性质,许多不同的物理系统,诸如电系统、机械系统、液压系统、

气动系统等可以有相同的传递函数。传递函数不同的物理系统,即使有相同的激励,其响应

也是不同的。

在自动控制中,图 8-29 为系统传递函数方框图,也称动态结构图,是一个非常重要的有

用工具。 传递函数 ( )sG 是线性系统首要的基本概念,它是自动控制分析的理论基础。以下就来举

例说明系统传递函数的计算。 【例 8-21】系统在激励 ( ) ( ) ( )ttttx 11 ⋅+= 的作用下,测得系统响应

( ) ( ) ttty 10e9.09.0 −−+=

已知系统 −0 状态为零,试求系统的传递函数。

【解】 (1) 系统的传递函数 ( )sG 等于响应的拉氏变换 ( )sY 除以激励的拉氏变换 ( )sX ,即式

(8-28):

( ) ( )( )sX

sYsG =

(2) 求响应的拉氏变换 ( )sY 与激励的拉氏变换 ( )sX , ( )sY 除以 ( )sX 即系统的传递函数

( )sG 。其 MATLAB 的语句段如下:

syms t s;

x=1*sym(’Heaviside(t)’)+t*sym(’Heaviside(t)’);

y=t+0.9-0.9*exp(-10*t);

X=laplace(x);

Y=laplace(y);

G0=Y/X;

G=factor(G0)

Page 380: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

368

语句段运行结果

G = 10/(s+10) 即系统的传递函数 ( )sG 为

( )10

10

+=

ssG

【例 8-22】已知系统的输入信号为 ( ) ( )ttx 1= ,初始条件为零,系统输出响应如图 8-30 所示。

试求系统的传递函数。

图 8-30 等腰三角形波

【解】

(1) 由解析几何基本原理,图 8-30 所表示的图形,其叠加的基本函数表达式为:

( ) ( ) ( ) ( ) ( ) ( )τττ

ττττ

222 −⋅−+−⋅−−⋅= tutK

tutK

tutK

ty

(2) 求系统的传递函数的 MATLAB 语句段如下:

syms s t K;tao=sym(’tao’,’positive’);

x=1*sym(’Heaviside(t)’);X=laplace(x);

y1=K/tao*t*sym(’Heaviside(t)’);

y2=-2*K/tao*(t-tao)*sym(’Heaviside(t-tao)’);

y3=K/tao*(t-2*tao)*sym(’Heaviside(t-2*tao)’);

Y0=laplace(y1+y2+y3);

Y=factor(Y0);

G=Y/X 语句段运行结果

G = -K*(-1+2*exp(-tao*s)-exp(-2*tao*s))/tao/s 即系统的传递函数为

( ) [ ] ( )22 e1ee21 sss

s

K

s

KsG τττ

ττ−−− −=+−=

【例 8-23】已知图 8-31 系统中, ( )sG 与 ( )sH 两方框相应的微分方程分别是:

( ) ( ) ( )ttyt

tye2010

d

d6 =+

( ) ( ) ( )tytbt

tb105

d

d20 =+

其初始条件均为零,试求系统的传递函数。

Page 381: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

369

图 8-31 反馈连接系统

【解】

(1) 求负反馈闭环前向通道的传递函数

① 对负反馈闭环前向通道的微分方程求其变换方程,其 MATLAB 语句如下:

syms t s;

y=6*diff(sym(’y(t)’))+10*sym(’y(t)’);

e=20*sym(’e(t)’);Y=laplace(y);

E=laplace(e);S1=Y-E 语句段运行结果

S1 =

6*s*laplace(y(t),t,s)-6*y(0)+10*laplace(y(t),t,s)-20*laplace(e(t),t,s) ② 求解前向通道的变换方程及其传递函数,其 MATLAB 语句如下:

syms t s E Y;

S1=6*s*Y-6*y0+10*Y-20*E;

y0=0;Y=solve(S1,Y);

G=Y/E 语句段运行结果

G = 10/(3*s+5) 即负反馈闭环前向通道的传递函数

53

10

+=

sG

(2) 求负反馈闭环反馈通道的传递函数

① 对负反馈闭环反馈通道的微分方程求其变换方程,其 MATLAB 语句如下:

syms t s;

b=20*diff(sym(’b(t)’))+5*sym(’b(t)’);

y=10*sym(’y(t)’);Y=laplace(y);

B=laplace(b);S2=B-Y 语句段运行结果

S2 = 20*s*laplace(b(t),t,s)-20*b(0)+5*laplace(b(t),t,s)-10*laplace(y(t),t,s) ② 求解反馈通道的变换方程及其传递函数,其 MATLAB 语句如下:

syms t s B Y;

S1=20*s*B-20*b0+5*B-10*Y;

b0=0;B=solve(S1,B);

H=B/Y

Page 382: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

370

语句段运行结果

H = 2/(4*s+1) 即负反馈闭环反馈通道的传递函数

14

2

+=

sH

(3) 求负反馈闭环系统的传递函数,其 MATLAB 语句如下:

n1=[10];d1=[3 5];G=tf(n1,d1);

n2=[2];d2=[4 1];H=tf(n2,d2);

phi=10*feedback(G,H) 语句段运行结果

Transfer function:

400 s + 100

------------------

12 s^2 + 23 s + 25 即系统的传递函数为

252312

1004002 ++

+=ss

sĵ

[说明]

求负反馈闭环系统的传递函数,要用到 MATLAB 的函数命令 tf ( )与 feedback ( ),其函

数功能、调用格式与使用方法参见参考文献[28]或参考 MATLAB 的相关联机帮助。

2. 系统脉冲响应函数的概念及计算举例

设系统的传递函数为

( ) ( )( )sX

sYsG =

或 ( ) ( ) ( )sXsGsY ⋅= ,

若以 ( )tg 表示 ( )sG 的 Laplace 反变换,即

( ) ( )[ ]sGLtg 1−= (8-30)

根据传递函数的定义与 Laplace 变换的卷积定理,有

( ) ( )[ ] ( ) ( )[ ] ( ) ( ) ( ) ( ) τττ d0

11 −=⊗=⋅== ∫−− txgtxtgsXsGLsYLtyt

(8-31)

即有结论:系统的响应 ( )ty 等于其激励 ( )tx 与 ( )tg 的卷积。

当激励为单位脉冲函数时,即 ( ) ( )ttx δ= ,在零初始条件下,有

( ) ( )[ ] ( )[ ] 1=== tLtxLsX δ

所以 ( ) ( ) ( ) ( )sGsXsGsY =⋅=

那么 ( ) ( )tgty =

Page 383: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

371

可见, ( )tg 就是在零初始条件下,激励为 ( )tδ 时系统的响应 ( )ty 。故而把 ( )tg 叫做系统的

脉冲响应函数或单位脉冲响应、脉冲过度函数,它等于系统传递函数的 Laplace 反变换,即式

(8-30): ( ) ( )[ ]sGLtg 1−= 。

如果已知系统的传递函数 ( )sG ,根据脉冲响应函数的定义式(8-30)求其反变换即求得脉

冲响应函数。 如果已知系统的激励 ( )tx 与脉冲响应函数 ( )tg ,根据式(8-31)可求系统输出的响应 ( )ty 。

如果已知系统的 ( )sX 与 ( )sG ,也可用 ( ) ( )[ ] ( ) ( )[ ]sXsGLsYLty ⋅== −− 11 求系统输出的响应 ( )ty 。

以下就来列举计算脉冲响应函数的示例。

【例 8-24】一阶系统的传递函数为: ( )1

1

+=

sTsG ,试求一阶系统的脉冲响应函数。

【解】

根据脉冲响应函数的定义: ( ) ( )[ ]

+

== −−

1

111

sTLsGLtg ,本题解算的 MATLAB 语句如

下:

syms T s t

G=1/(T*s+1);

g=ilaplace(G) 语句执行结果

g = exp(-t/T)/T 即一阶系统的脉冲响应函数为

( ) tT

TsTLtg

11 e

1

1

1 −− =

+

=

【例 8-25】若在单位阶跃激励 ( ) ( )ttx 1= 输入时,系统零初始条件下的输出响应为

( ) ttty −− +−= ee1 2

试求系统的传递函数与脉冲响应函数。

【解】

根据系统传递函数与脉冲响应函数的定义,解算本题的 MATLAB 程序段如下:

syms t s;

x=1*sym(’Heaviside(t)’);

y=1-exp(-2*t)+exp(-t);

X=laplace(x);

Y=laplace(y);

G=simple(Y/X);

[GN,GD]=numden(simple(Y/X))

g=ilaplace(G) 程序段执行结果

GN = 4*s+s^2+2

Page 384: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

372

GD = (s+2)*(1+s)

g = Dirac(t)+2*exp(-2*t)-exp(-t)

即系统传递函数与脉冲响应函数分别为

( ) ( )( )21

242

++++=

ss

sssG

( ) ( ) ttttg −− −+= ee2 2δ

求系统脉冲响应函数还可以执行如下 MATLAB 语句段,结果相同。

syms t s;

y=1-exp(-2*t)+exp(-t);

G=laplace(y)*s;

g=ilaplace(G) 3. 频率特性的概念及计算举例

在系统传递函数中,复变量 ωσ j+=s ,称为 Laplace 算子。若令其实部 0=σ ,即 ωj=s ,

传递函数则成为

( ) ( )( ) ==

ωωωj

jj

X

YG

( ) ( ) ( )( ) ( ) ( ) 01

11

011

1

jjj

jjj

aaaa

bbbbn

nn

n

mm

mm

++++

++++−

−−

ωωωωωω

(8-32)

称 ( )ωjG 为系统的频率特性函数,简称频率特性或频率响应。

频率特性函数 ( )ωjG 与传递函数 ( )sG 一样,都是复数函数。如果以 ( )ωA 作为模,以 ( )ωϕ

作为幅角,频率特性复数函数的模幅式则为 ( ) ( )ωϕω jeA 。 ( )ωA 叫做振幅频率特性,简称幅频

特性; ( )ωϕ 叫做相位频率特性,简称相频特性;二者合起来即频率特性复指数函数 ( ) ( )ωϕω jeA

叫做振幅相位频率特性,简称幅相特性,在复平面上画出的复数函数 ( ) ( )ωϕω jeA 的图像叫做

Nyquist 曲线。以横轴为实轴,纵轴为虚轴,构成复数平面。若将频率特性表示为复指数形式,

系统幅相特性即 Nyquist 曲线也就是极坐标图:频率特性为复平面上的向量,向量的长度为频

率特性的幅(模)值 ( )ωA ,向量与实轴正方向的夹角为频率特性的相位 ( )ωϕ 。

由自动控制理论知道,幅频特性 ( )ωA 为ω 的偶函数,相频特性 ( )ωϕ 为ω 的奇函数,则

ω 从零变化至 +∞ 与从零变化至 −∞ 的 Nyquist 曲线关于实轴对称,因此,在自动控制原理的

教科书中,一般只绘制 ω 从零变化至 +∞ 的幅相特性曲线。而在 MATLAB 中的函数命令

nyquist ( )则绘制了ω 从 −∞ 到 +∞ 的关于横轴对称的幅相特性曲线。 频率特性函数 ( )ωjG 也是线性系统基本的重要概念之一,它是自动控制系统频域分析的

理论基础。

自动控制中还有一个经常使用的重要而基本的概念——对数频率特性,又叫做 Bode(波

德)图。波德图有两条曲线分别是对数振幅频率特性与对数相位频率特性。两条曲线绘制在一

起(参见以下举例),其横坐标都是角频率ω ,是按常用对数刻度的即 ωlog ,其单位是 rad/s。

对数(振)幅频(率)特性的纵坐标是 ( ) ( )ωω AL log20= ,等分刻度,其单位为 dB(分贝);而对数

相(位)频(率)特性的纵坐标是 ( )ωϕ ,也是等分刻度的,其单位为角度(°)。波德图是线性自动

控制系统分析、计算与设计不可或缺的有效工具。

【例 8-26】求惯性环节 ( )1

1

+=

TssG 的频率特性并绘制 1=T s 时的振幅频率特性曲线 ( )ωA 与

相位频率特性曲线 ( )ωϕ 及其 Nyquist 曲线。

Page 385: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

373

【解】 (1) 根据频率特性的定义, ( )ωjG 是复变函数。在程序中出现的符号对象除 s 外都应是实

数,这种限定必须在程序开始部分进行设置。本题求解 ( )ωA 与 ( )ωϕ 的 MATLAB 程序段如下:

syms s ;

T=sym(’T’,’real’);omega=sym(’omega’,’real’);

G0=1/(s*T+1);s=j*omega;

G=subs(G0,’[s]’,[s]);Gabs=abs(G)

Gr=simple(real(G));Gi=simple(imag(G));

Gang=atan(Gi/Gr)

T=1;Gabs0=subs(Gabs,’T’,T);A=Gabs0

Gang0=subs(Gang,’T’,T);phi=Gang0

figure(1);

ezplot(A,[0 10]);hold on

figure(2);

ezplot(phi,[0 10]); 程序段运行后求得惯性环节的振幅频率特性 ( )ωA 与相位频率特性 ( )ωϕ 为:

A = 1/(1+omega^2*T^2)^(1/2)

phi = -atan(omega*T) 即

( ) ( )1

1j

22

22

+=+==

ωωω

TGiGrGA ,

( ) ( ) ωωωϕ TGr

GiG tanarctanarcj −==∠= ,

( ) ( ) ( ) ( ) ( )

( )ω

ωωϕ

ω

ωωω

ω

T

G

T

GAT

G

tanarcj

22

jjj

e1

1

eje1j

1j

+=

==+

=

程序段运行后还绘制出振幅频率特性曲线 ( )ωA 与相位频率特性曲线 ( )ωϕ 如图 8-32 所

示。

图 8-32 惯性环节的 ( )ωA 与 ( )ωϕ 曲线

Page 386: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

374

(2) 绘制惯性环节 Nyquist 曲线的 MATLAB 语句段如下:

num=[1];den=[1 1];s=tf(num,den);

nyquist(s) 语句段运行后绘制惯性环节的 Nyquist 曲线如图 8-33 所示。

图 8-33 惯性环节的 Nyquist 曲线

[说明]

(1) 绘制惯性环节的 Nyquist 曲线需使用 MATLAB 函数命令 nyquist ( )。函数 nyquist ( )

属于 MATLAB 的 Control System Toolbox(控制系统工具箱)中的一条命令,其功能、使用方法

与调用格式可参见参考文献[28]或其它有关 MATLAB 文献。 (2) 由于幅频特性 ( )ωA 为 ω 的偶函数,相频特性 ( )ωϕ 为 ω 的奇函数,则 ω 从零变化至

+∞ 与从零变化至 −∞ 的 Nyquist 曲线关于实轴对称。因此,在教科书中,一般只绘制ω 从零

变化至 +∞ 的幅相特性曲线,惯性环节的 Nyquist 曲线通常说成是第四象限的一个半圆。而

MATLAB 函数命令 nyquist ( )运行后,则绘制出ω 从 −∞ 变化至零与从零变

化至 +∞ 的 Nyquist 曲线,即为图 8-33 所示。

【例 8-27】求积分环节 ( )s

KsG = 的频率特性并绘制 100=K 时的对数振幅频率特性曲线

( ) ( )ωω AL log20= 与对数相位频率特性曲线 ( )ωϕ 。

【解】

(1) 计算积分环节的频率特性

根据频率特性的定义,求解频率特性的 MATLAB 程序段如下:

syms s ; K=sym(’K’,’real’);omega=sym(’omega’,’real’);

G0=K/s;s=j*omega;G=subs(G0,’[s]’,[s]);

Gabs=abs(G)

Gr=real(G)

Gi=imag(G)

Gang=-atan(Gi/Gr);K=100;Gabs0=subs(Gabs,’K’,K);

Gang0=subs(Gang,’K’,K);

A=Gabs0

phi=Gang0

Page 387: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

375

digits(4);L0=20*log10(A);L=vpa(L0,4) 语句段运行结果

A = abs(K/omega)

Gr = 0

Gi = -K/omega

phi = -1/2*pi

L = 8.686*log(100./abs(omega)) 即频率特性为

( ) ( )ω

ωω KGiGrGA =+== 22j

( ) ( )2

πarctgarctgj −=−=−=∠=

Gr

Gi

Gr

GiG ωωϕ

( ) ( ) ( ) ( ) ( )

∠ === 2

πj

jjj eejejω

ωωω ωωϕ KGAG G

(2) 绘制积分环节的对数频率特性曲线(Bode 图)

根据以上计算的对数幅频与对数相频值,绘制 Bode 图的 MATLAB 语句段如下:

omega=0.1:0.1:100;L = 8.686*log(100./abs(omega));

phi=-1/2*pi;

figure(1);semilogx(omega,L);hold on

grid on

figure(2);semilogx(omega,phi,’-r’);grid on 程序段运行后绘制出 Bode 图如图 8-34 所示。

图 8-34 积分环节的 Bode 图

[说明]

① 根据已经介绍的 Bode 图的横坐标须对数刻度、纵坐标须等分刻度的要求,绘制 Bode

图必须使用特殊坐标的绘图函数 semilogx ( )绘制半对数坐标图形(参见第 4 章)。 ② 由积分环节 Bode 图的 L 图可以看出,L 曲线的斜率为 dB/dec20− 。并且当 100=K 时,

对应着横坐标 1=ω 的 dB40=L ,即 Klog20 。而当 1=K 时,L 曲线穿越横坐标 1=ω 的点。

③ 由积分环节 Bode 图的 ( )ωϕ 图可以看出, ( )ωϕ 曲线的值为 2/π− 。

Page 388: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

376

8.2.4 卷积与 Laplace 变换的卷积定理的应用

在第 3 章已经介绍 ( )tf1 与 ( )tf2 的卷积式(3-35):

( ) ( ) =⊗ tftf 21 ( ) ( ) τττ d20

1 −∫ tfft

若 ( )[ ] ( )sFtfL 11 = 与 ( )[ ] ( )sFtfL 22 = ,拉氏变换的卷积定理式 (3-37)与式(3-38):

( ) ( )[ ] ( ) ( )sFsFtftfL 2121 ⋅=⊗

( ) ( )[ ] ( ) ( )tftfsFsFL 21211 ⊗=⋅−

由这些关系式可知,Laplace 变换的卷积定理可用来计算拉氏反变换。 如果 ( )sF1 与 ( )sF2 分别是激励与系统传递函数的象函数,Laplace 变换的卷积与卷积定理

则为

( ) ( ) ( ) ( ) τττ d0

−⋅=⊗ ∫ tgxtgtxt

(8-33)

若 ( )[ ] ( )sXtxL = 与 ( )[ ] ( )sGtgL = ,那么

( ) ( )[ ] ( ) ( )sGsXtgtxL ⋅=⊗ (8-34)

( ) ( )[ ] ( ) ( )tgtxsGsXL ⊗=⋅−1 (8-35)

还有式 (8-31):

( ) ( )[ ] ( ) ( )[ ] ( ) ( ) ( ) ( ) τττ d0

11 −=⊗=⋅== ∫−− txgtxtgsXsGLsYLtyt

由上式,Laplace 变换的卷积与卷积定理也可用来计算系统的输出响应。输出响应就是系

统的输出量随时间变化的过程,故而又称为时域响应。

1. 卷积用来解算系统的输出响应

【例 8-28】一阶系统的传递函数为: ( )1

1

+=

sTsG ,试求一阶系统的单位斜坡响应。

【解】

根据 (8-31)式,解算本题的 MATLAB 程序段如下:

syms t s T tao;

x=t;

G=1/(T*s+1);

g=ilaplace(G);

xg=subs(x,t,tao)*subs(g,t,(t-tao));

y=int(xg,tao,0,t) 程序段运行结果

y = -T+t+exp(-t/T)*T 即一阶系统的单位斜坡响应为

( ) T

t

t TTtssT

Lty−− +−=

+= e

1

1

12

1

Page 389: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

377

根据卷积的交换率,卷积积分表达式 ( ) ( )ττ −= tgxxg 还可以写成以下三种形式,其运行

结果都相同。

xg=subs(x,t,(t-tao))*subs(g,t,tao)

xg=subs(g,t,(t-tao))*subs(x,t,tao)

xg=subs(g,t,tao)*subs(x,t,(t-tao))

【例 8-29】单位负反馈系统的开环传递函数为 ( ) ( )2

40 +

=ss

sG ,试绘制系统的单位阶跃响应

与单位斜坡响应曲线。

【解】

(1) 求闭环系统的传递函数

解题的 MATLAB 语句段如下:

n=[4];d=[1 2 0];G0=tf(n,d);

G=feedback(G0,1) 语句段运行结果

Transfer function:

4

-------------

s^2 + 2 s + 4 即求得闭环系统的传递函数为

( )42

42 ++

=ss

sG

(2) 求系统的单位阶跃响应曲线

根据式(8-8),求系统的单位阶跃响应曲线的 MATALB 程序段如下:

syms t s tao;

x=1;G=4/(s^2+2*s+4);g=ilaplace(G);

xg=subs(x,’t’,tao)*subs(g,’t’,(t-tao));

y=int(xg,tao,0,t);ezplot(y,[0 5]); 程序段运行后绘制出系统的单位阶跃响应曲线如图 8-35 所示。

图 8-35 系统的单位阶跃响应曲线

Page 390: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

378

以下程序段运行后会得到与 图 8-35 相同的结果。

syms t s tao;

x=sym(’Heaviside(t)’);G=4/(s^2+2*s+4);

X=laplace(x);Y=G*X;y=ilaplace(Y);

ezplot(y,[0 5]); (3) 求系统的单位斜坡响应曲线

根据式(8-31),求系统的单位斜坡响应曲线的 MATALB 程序段如下:

syms t s tao;

x=t;G=4/(s^2+2*s+4);g=ilaplace(G);

xg=subs(x,’t’,tao)*subs(g,’t’,(t-tao));

y=int(xg,tao,0,t);ezplot(y,[0 3]); 程序段运行后绘制出系统的单位斜坡响应曲线如图 8-36 所示。

图 8-36 系统的单位斜坡响应曲线

2. 卷积用来计算拉氏反变换

【例 8-30】一阶系统的传递函数为: ( )1

1

+=

sTsG ,试求在激励 ( ) 2

2

1ttx = 信号作用下的输出

响应 ( )ty 。

【解】

根据式(8-31),本题用 Laplace 反变换方法解算的 MATLAB 程序段如下:

syms T s t tao;

G=1/(T*s+1);x=t^2/2;

X=laplace(x); Y=X*G;

y=ilaplace(Y) 程序段执行结果

y = T^2-T*t+1/2*t^2-T^2*exp(-t/T) 即系统的输出响应为

( ) ( )[ ] ( ) ( )[ ] T

t

TTTttsGsXLsYLty−−− −+−=⋅== e

2

1 22211

Page 391: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

379

本题用卷积的方法能算得同样的结果,其解算的 MATLAB 程序段如下:

syms T s t tao;

G=1/(T*s+1);g=ilaplace(G);

x=t^2/2;xg=subs(x,t,tao)*subs(g,t,(t-tao));

y=int(xg,tao,0,t)

【例 8-31】二阶系统的传递函数为: ( )22

2

2 nn

n

sssG

ωςωω

++= ,试求二阶系统临界阻尼状态下

的单位阶跃响应并绘制 6=nω 时的单位阶跃响应曲线。

【解】 (1) 二阶系统临界阻尼状态下, 1=ς 。

(2) 根据式(8-31),本题用 Laplace 反变换方法解算的 MATLAB 程序段如下:

syms T s t zeta omegan;

x=1*sym(’Heaviside(t)’);X=laplace(x);

G1=omegan^2/(s^2+2*zeta*omegan*s+omegan^2);

zeta=1;G=subs(G1,’zeta’,zeta);

Y=G*X;y=ilaplace(simple(Y)) 程序段执行结果

y = 1-(1+omegan*t)*exp(-omegan*t) 即二阶系统临界阻尼状态下的单位阶跃响应

( ) ( ) tn

ntth ωω −+−= e11

(3) 绘制 6=nω 时的单位阶跃响应曲线

用函数 ezplot ( ) 命令绘制单位阶跃响应曲线的 MATLAB 语句段如下:

syms t omegan;

y0=1-(1+omegan*t)*exp(-omegan*t);

omegan=6;

y=subs(y0,’omegan’,omegan);

ezplot(h,[0 1.5]) 程序段运行后绘制出单位阶跃响应曲线如图 8-37 所示。

图 8-37 二阶临界阻尼系统单位阶跃响应曲线

Page 392: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

380

【例 8-32】二阶系统的传递函数为: ( )22

2

2 nn

n

sssG

ωςωω

++= ,试绘制当 85=nω 、 =ς ,2.0

,8.0,6.0,4.0 4.1,2.1,0.1 时的单位阶跃响应曲线。

【解】

必须说明,绘制二阶系统的单位阶跃响应曲线需使用 MATLAB 函数命令 step ( )与循环结

构程序设计。函数 step ( )属于 MATLAB 的 Control System Toolbox(控制系统工具箱)中的一条

命令,其功能、使用方法与调用格式可参见参考文献[28]或其它有关 MATLAB 文献。

本题解算的 MATLAB 程序如下:

syms omegan zeta;

omegan=85;

for zeta=0.2:0.2:1.4

num=omegan^2;

den=[1 2*zeta*omegan omegan^2];

G=tf(num,den);

step(G),hold on

end

gtext(’1 zeta=0.2’)

gtext(’2 zeta=0.4’)

gtext(’3 zeta=0.6’)

gtext(’4 zeta=0.8’)

gtext(’5 zeta=1.0’)

gtext(’6 zeta=1.2’)

gtext(’7 zeta=1.4’) 程序运行后绘制出单位阶跃响应曲线如图 8-38 所示。

图 8-38 二阶系统单位阶跃响应曲线

Page 393: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

381

8.3 z 变换与 z 反变换运算的应用

8.3.1 离散控制系统的有关概念

在 3.9 节介绍了采样函数、z 变换及 z 反变换的概念,为了应用 z 变换,还需要介绍离散

控制系统、差分与差分方程的概念。

1. 离散控制系统的概念

如果控制系统中的所有信号都是时间变量的连续函数,或者说这些信号在全部时间上都

是已知的,则这样的系统叫做连续(时间)系统。如果控制系统中有一处或几处信号是一串脉冲

或数码,换句话说,这些信号仅定义在离散时间上,则这样的系统叫做离散(时间)系统。通常,

把系统中的离散信号是脉冲序列形式的离散系统称为采样控制系统或脉冲控制系统;而把数

字序列形式的离散系统称为数字控制系统或计算机控制系统。

2. 离散控制系统的数学定义

在离散时间系统理论中,所涉及的离散信号总是以序列的形式出现,故而把离散系统抽

象为如下数学定义: 将输入序列 ( ) ,,2,1,0, ±±=nnx 变换为输出序列 ( )ny 的一种变换关系叫做离散系统,

记作 ( ) ( )[ ]nxFny = (8-36)

式中, ( )nx 与 ( )ny 可以理解为 nTt = 时,系统的输入序列 ( )nTx 与系统的输出序列

( )nTy , T 为采样周期且 T =1 s。

如果式(8-36)所示的变换关系是线性的,则叫做线性离散系统;如果这种变换关系是非线

性的,则称为非线性离散系统。线性系统满足叠加原理。输入与输出关系不随时间而改变的

线性离散系统叫做线性定常离散系统,可以用线性定常(常系数)差分方程描述。在此只讨论线

性定常离散系统。

8.3.2 差分方程的 z 变换解法

1. 差分的概念

差分与差分方程是离散控制系统所特有的概念,很少用在其它地方。差分方程是离散控

制系统的基本数学模型,正如微分方程是连续控制系统的基本数学模型一样。要论及 z 变换

的应用,必须要了解差分与差分方程。 连续时间函数 ( )tf 经采样周期为 T 的采样开关进行采样,即信号 ( )tf 在 nTt = 处取值即

为采样值 ( )nTf 。在第 3 章已经说明过,为计算方便起见,通常取 1=T s,即

( ) ( )nfnTfT

==1 (8-37)

一阶前向差分定义为 ( ) ( ) ( )nfnfnf −+=∆ 1 (8-38)

二阶前向差分定义为

( ) ( )[ ] ( )[ ( )]nfnfnfnf −+∆=∆∆=∆ 12

( ) ( )nfnf ∆−+∆= 1

Page 394: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

382

( ) ( ) ( ) ( )[ ]nfnfnfnf −+−+−+= 112

( ) ( ) ( )nfnfnf ++−+= 122 (8-39)

k 阶前向差分定义为

( ) ( ) ( )nfnfnf kkk 11 1 −− ∆−+∆=∆ (8-40)

同理,一阶后向差分定义为 ( ) ( ) ( )1−−=∇ nfnfnf (8-41)

二阶后向差分定义为

( ) ( ) ( )( ) ( ) ( )212

12

−+−−=−∇−∇=∇

nfnfnf

nfnfnf (8-42)

k 阶后向差分定义为

( ) ( ) ( )111 −∇−∇=∇ −− nfnfnf kkk (8-43)

2. 差分方程的概念

如 果 方 程 的 变 量 除 了 含 有 ( )nf 本 身 外 , 还 含 有 ( )nf 的 差 分 ( ) ( )nfnf k∆∆ 与

( ) ( )nfnf k∇∇ ,则方程都是差分方程,前者称为前向差分方程,后者称为后向差分方程。

如果线性定常离散系统的输入为 ( )nx ,输出为 ( )ny ,有 k 阶前向差分方程:

( ) ( ) ( ) ( )( ) ( ) ( ) ( )nxbnxbmnxbmnxb

nyanyaknyakny

mm

kk

++++−+++=++++−+++

11

11

110

11

(8-44)

与 k 阶后向差分方程为: ( ) ( ) ( ) ( )

( ) ( ) ( ) ( )mnxbmnxbnxbnxb

knyaknyanyany

mm

kk

−++−++−+=−++−++−+

11

11

110

11

(8-45)

其中, kaaa ,,, 21 与 mbbbb ,,,, 210 为常系数, m ≤ k 。差分方程的阶次是最高差分与最低

差分之差: knkn =−+ 与 ( ) kknn =−− 说明式 (8-44)与式(8-45)都是 k 阶的。

3. 差分方程的求解

在第 3 章简单提到 z 变换是采样控制系统的重要研究工具。z 变换能把求解差分方程转换

为求解代数方程,而且根据 z 变换的线性性质与时移定理,能把初始条件直接反映在方程中

进行求解。

差分方程的 z 变换解法与微分方程的 Laplace 变换解法的步骤相类似:

(1) 对差分方程两端进行 z 变换,得到以 z 为变量的代数方程,即变换方程。

(2) 解算变换方程,求出未知函数的象函数表达式,并注意方程应计入初始条件值。

(3) 将未知函数的象函数表达式展开成部分分式(在 MATLAB 程序语句中反应不出来)。

(4) 对部分分式进行 z 反变换即得差分方程的解。

【例 8-33】一阶采样系统的前向差分方程为:

( ) ( ) xnbyny =−+1

已知输入信号 nax = , ( ) 00 =y ,求差分方程的解 ( )ny 。

【解】

根据用 z 变换的方法解差分方程的步骤如下:

Page 395: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

383

(1) 对差分方程两边进行 z 变换,求对应的变换方程的 MATLAB 语句段如下:

syms a n T b z;

r=a^n;R=factor(ztrans(r));

l=sym(’y(n+1)’)-b*sym(’y(n)’);

L=factor(ztrans(l));S=L-R 语句段运行结果

S = z*ztrans(y(n),n,z)-y(0)*z-b*ztrans(y(n),n,z)+z/(-z+a) (2) 解算变换方程,求出未知函数的象函数表达式,并进行 z 反变换即得差分方程的解。

这里要特别强调,在解代数方程(即象函数方程)列写 MATLAB 语句时,必须改写所有函数的

初始条件 ( )1f 、 ( )0f 分别为 f1、f0(即略去小括号),并代入所有初始条件值;改写所有函数

f(n)的 ztrans(f(n),n,z)为 F。例如函数 y(n)的 ztrans(y(n),n,z)为 Y。否则代数方程无法求解。解

算变换方程的 MATLAB 语句段如下:

syms a n T b z Y

y0=0; S=z*Y-y0*z-b*Y+z/(-z+a);

Y=solve(S,Y);y=iztrans(Y) 语句段运行结果

y = (a^n-b^n)/(-b+a) 即差分方程的解为

( ) ( ) ( ),2,1,01 =−−

= nbaba

ny nn

【例 8-34】用 z 变换法解解二阶前向差分方程:

( ) ( ) ( ) xnycnybnya =⋅++⋅++⋅ 12

已知 1=a , 3=b , 2=c , 0=x ,初始条件: ( ) 01 =y , ( ) 00 =y ,求响应 ( )ny 。

【解】

(1) 对差分方程两边进行 z 变换,求对应变换方程的 MATLAB 语句如下:

syms a b c d n T z;

a=1;b=3;c=2;

l=a*sym(’y(n+2)’)+b*sym(’y(n+1)’)+c*sym(’y(n)’);

L=factor(ztrans(l));R=0;S=L-R 语句段运行结果

S =

z^2*ztrans(y(n),n,z)-y(0)*z^2-y(1)*z+3*z*ztrans(y(n),n,z)-3*y(0)*z+2*ztrans(y(n),n,z) (2) 解算变换方程,求出未知函数的象函数表达式,并进行 z 反变换即得差分方程的解。

在列写 MATLAB 语句时,必须改写所有函数的初始条件 ( )1y 、 ( )0y 分别为 y1、y0,并代入

所有初始条件;改写函数 y(n)的 ztrans(y(n),n,z)为 Y。解算变换方程的 MATLAB 语句段如下:

syms a n T b z Y y0 y1;

y0=0;y1=1;

S=z^2*Y-y0*z^2-y1*z+3*z*Y-3*y0*z+2*Y;

Y=solve(S,Y);y=iztrans(Y) 语句段运行结果

Page 396: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

384

y = (-1)^n-(-2)^n 即差分方程的解为

( ) ( ) ( ) ( ),2,1,021 =−−−= nny nn

8.3.3 求离散控制系统的脉冲传递函数

有了差分方程这个数学模型,再引入脉冲传递函数概念,离散系统的静态与动态分析,

稳态误差、其它性能指标及动态校正计算就有了工具与基础。

1. 脉冲传递函数的概念

设开环离散系统如图 8-39 所示,在零初始条件下,连续输入信号 ( )tx 采样后 ( )tx∗ 的 z 变

换为 ( )zX ,系统连续部分的输出为 ( )ty ,采样后 ( )ty∗ 的 z 变换为 ( )zY ,则线性定常离散系统

的脉冲传递函数定义为系统输出采样信号的 z 变换 ( )zY 与输入采样信号的 z 变换 ( )zX 之比,

记作

( ) ( )( )

( )

( )∑

∑∞

=

=

⋅==

0

0

n

n

n

n

znTx

znTy

zX

zYzG (8-46)

从式(8-46)可知,输出采样信号的 z 变换 ( )zY 与输入采样信号的 z 变换 ( )zX 以及脉冲传

递函数 ( )zG ,已知三者中的两者就可以求出第三者。

图 8-39 开环离散系统

【例 8-35】已知离散系统采样开关的采样周期 1=T s,脉冲传递函数为:

( )1

1

37.01

1.053.0−

−+=

z

zzG

输入采样信号的 z 变换为 ( ) ( )1−=

zz

zzX ,试求系统输出信号 ( ) ( )nynTy

T==1

【解】 根据式(8-46),求系统输出采样信号 z 变换 ( )zY 的 MATLAB 语句段如下:

syms t s z a T

G=(0.53+0.1*z^(-1))/(1-0.37*z^(-1));

X=z/(z-1);

Y=X*G;

y=simple(factor(iztrans(Y)))

Page 397: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

385

语句段运行结果

y = 1-47/100*(37/100)^n 即系统输出采样信号为

( ) ( )nny 37.047.01−=

2. 从开环系统传递函数 ( )sG 求脉冲传递函数 ( )zG

系统的脉冲传递函数 ( )zG 常常是通过脉冲过度函数 ( )tg 而求得的。 从本章第 2 节介绍的

脉冲过度函数知道,如果连续系统的传递函数为 ( )sG ,其系统脉冲过度函数为 ( )tg ,那么有

式(8-30):

( ) ( )[ ]sGLtg 1−=

根据第 3 章第 9 节介绍的 z 变换的定义,应用式(3-39)、式(3-43)、式(3-44)、式(3-46),

应有

( ) ( ) ( )[ ]tgZznTgzGn

n =⋅= ∑∞

=

0

(8-47)

所以,脉冲传递函数 ( )zG 就是连续系统脉冲过度函数为 ( )tg 经采样后的 z 变换。

由上可知,从 ( )sG 经 Laplace 反变换求得 ( )tg ,再将 ( )tg 经 z 变换即可求得 ( )zG 。

3. 开环系统脉冲传递函数的计算举例

【例 8-36】结构如图 8-39 所示的离散系统,其连续部分传递函数为:

( ) ( )( )bsas

ksG

++=

试求该开环系统的脉冲传递函数 ( )zG 。

【解】 根据式(8-30)、式(8-47),求系统的脉冲传递函数 ( )zG 的 MATLAB 语句段如下:

syms t s z k a b;

Gs=k/((s+a)*(s+b));g=ilaplace(Gs);

Gz=factor(ztrans(g)) 语句段运行结果

Gz = k*z*(exp(-b)-exp(-a))/(-b+a)/(-z+exp(-a))/(-z+exp(-b)) 即系统的脉冲传递函数为

( ) ( )( )( ) ( )ba

ba

zazab

zkzG

−−

−−

−−−−

=e

ee

【例 8-37】具有零阶保持器的开环系统结构如图 8-40 所示,其零阶保持器与连续部分传递函

数分别为:

( )s

sGTs

h

−−= e1与 ( ) ( )ass

asG p +

=

试求系统的脉冲传递函数 ( )zG 。

Page 398: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

386

图 8-40 有零阶保持器的开环系统

【解】 根据式(8-30)、式(8-47),求系统的脉冲传递函数 ( )zG 的 MATLAB 语句段如下:

syms t s z a T

Gs=(1-exp(-s))/s*a/(s*(s+a));

g=ilaplace(Gs);

Gz=simple(factor(ztrans(g))) 语句段运行结果

Gz = 1/a*(z*exp(-a)-exp(-a)+a*z-a*exp(-a)-z+1)/(z-1)/(z-exp(-a)) 即系统的脉冲传递函数为

( )( ) ( )

( ) ( )( ) ( )a

aaa

a

aaa

zza

aza

zza

zaazzzG

−−−

−−−

−−⋅−−++−

=

−−⋅+−−+−⋅=

e1

ee1e1

e1

1eee

【例 8-38】开环系统结构如图 8-41 与图 8-42 所示,其连续部分两方框传递函数分别为:

( )s

sG1

1 = 与 ( )10

102 +

=s

sG

图 8-41 只有一个采样开关的开环系统 图 8-42 有二个采样开关的开环系统

采样开关的采样周期 1=T s,试分别求其系统的脉冲传递函数 ( )zG 。

【解】

(1) 只有一个采样开关的开环系统 根据自动控制原理与式(8-30)、式(8-47),求系统的脉冲传递函数 ( )zG 的 MATLAB 程序

段如下:

syms t s z a T;

T=1;G1s=1/s;G2s=10/(s+10);

G=G1s*G2s;g=ilaplace(G);

Gz=simple(factor(ztrans(g))) 程序段运行结果

Gz = -z*(exp(-10)-1)/(z-1)/(z-exp(-10)) 即系统的脉冲传递函数为

Page 399: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

387

( ) ( )( ) ( )10

10

e1

e1−

−−−=

zz

zzG

(2) 有二个采样开关的开环系统 同理,求系统的脉冲传递函数 ( )zG 的 MATLAB 程序段如下:

syms t s z a T

T=1;G1s=1/s;G2s=10/(s+10);

g1=ilaplace(G1s);g2=ilaplace(G2s);

Gz1=simple(factor(ztrans(g1)));

Gz2=simple(factor(ztrans(g2)));

Gz=Gz1*Gz2 语句段运行结果

Gz = 10*z^2/(z-1)/(z-exp(-10)) 即系统的脉冲传递函数为

( )( ) ( )10

2

e1

10−−−

=zz

zzG

[说明]

离散系统中采样开关的位置是至关重要的。采样开关的位置不同,脉冲传递函数的计算

是不一样的。根据自动控制原理,只有一个采样开关的开环系统,其脉冲过度函数为对两个

传递函数方框的乘积求其 Laplace 反变换;而二个采样开关的开环系统则要对采样开关后的传

递函数方框分别求其脉冲过度函数,再分别求其 z 变换,最后将两个方框的脉冲传递函数乘

起来即得系统的脉冲传递函数。

4. 闭环系统脉冲传递函数的计算举例

离散系统中采样开关的位置不同,脉冲传递函数的计算是不一样的。开环离散系统如此,

闭环离散系统更有讲究。图 8-43 所示闭环离散系统与图 8-44 所示闭环离散系统脉冲传递函数

的计算参见以下两例,其计算方法可参阅自动控制的有关原理。

【例 8-39】闭环离散系统结构如图 8-43 所示,其前向信道的零阶保持器与连续部分传递函数

分别为: ( )s

sGTs

h

−−= e1与 ( ) ( )1

1

+=

sssG p

图 8-43 闭环离散系统

当采样开关的采样周期 1=T s,试求闭环系统的脉冲传递函数 ( )zƒµ 。

【解】 根据式(8-30)、式(8-47),求系统的脉冲传递函数 ( )zG 的 MATLAB 程序段如下:

syms t s z a T

Page 400: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

388

T=1; Gs=(1-exp(-s))/s*1/(s*(s+1));

g=ilaplace(Gs);Gz=factor(ztrans(g));

phi=simple(factor(Gz/(1+Gz))) 程序段运行结果

phi = (z*exp(-1)-2*exp(-1)+1)/(z^2-exp(-1)-z+1) 即闭环系统的脉冲传递函数为

( )632.0

264.0368.0

1e

1e2e212

11

+−+=

+−−+−⋅=

−−

zz

z

zz

zzĵ

【例 8-40】闭环离散系统结构如图 8-44 所示,其连续部分的前向通道与反馈通道的传递函数

分别为: ( )140

5

+=

ssG 与 ( )

1

1

+=

ssH ,

图 8-44 闭环离散系统

当采样开关的采样周期 1=T s 与 2=T s,试分别求闭环系统的脉冲传递函数 ( )zƒµ 。

【解】

(1) 采样周期 T=1s 根据自动控制原理与式(8-30)、式(8-47),求系统的脉冲传递函数 ( )zG 的 MATLAB

程序段如下:

syms t s z a T

Gs=5/(40*s+1);g=ilaplace(Gs);

Gz=factor(ztrans(g));Hs=1/(s+1);

GHs=Gs*Hs;gh=ilaplace(GHs);

GHz=factor(ztrans(gh));

digits(3);phi=vpa(simple(factor(Gz/(1+GHz))),3) 程序段运行结果

phi = 4.88*(-1.*z+.368)*z/(-39.*z^2+49.4*z-14.0) 即闭环系统的脉冲传递函数为

( ) ( )144.4939

368.088.42 +−

−=zz

zzzĵ

(2) 采样周期 2=T s 系统的脉冲传递函数 ( )zG 的 MATLAB 程序段如下:

syms t s z a n T;

Gs=5/(40*s+1);g0=ilaplace(Gs);

t=n*T;g=subs(g0,’t’,t);Gz=factor(ztrans(g));

Page 401: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

389

Hs=1/(s+1);GHs=Gs*Hs;gh0=ilaplace(GHs);

gh=subs(gh0,’t’,t);GHz=factor(ztrans(gh));

T=2;digits(3);phi0=vpa(simple(factor(Gz/(1+GHz))),3);

phi=subs(phi0,’T’,T) 程序段运行结果

phi = -4.88*(z-.135)*z/(-39.*z^2+38.2*z-4.95) 即闭环系统的脉冲传递函数为

( ) ( )95.42.3839

135.088.42 +−

−=zz

zzzĵ

Page 402: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

第 9 章 MATLAB 符号运算在

复变函数计算中的应用

内 容 提 要

数从实数拓展到复数,这是数学发展史中的一个重要里程碑。在实数范围内无

法解决-1 开平方的问题,在复数范围内就可迎刃而解。除此之外,引入复数的概念,

特别是复数引伸为向量后,将正弦时间函数用时间向量来表示,使得复数在电工理

论、自动控制理论等自然科学与工程技术中有着广泛的应用。复变函数的理论与方

法,更是解决诸如流体力学、热力学、弹性理论分析计算的有力工具。本章就来介

绍 MATLAB 符号运算在复变函数中的应用。

本章共分 5 节,9.1 节首先介绍复数与复矩阵的生成;9.2 节介绍复数的 MATLAB

符号运算;9.3 节介绍 MATLAB 符号运算在电工基础交流电路计算中的应用;9.4

节介绍 MATLAB 符号运算在自动控制中频率特性计算中的应用;9.5 节介绍留数。

通过本章的学习,使读者了解并掌握复数 MATLAB 符号运算各种函数命令的功能、

调用格式以及用来解决实际问题的步骤与方法。在后面会看到,用 MATLAB 函数命

令,将会使复杂而繁琐的关于复数的各种计算变得异常简单、方便而快捷。

9.1 复数与复矩阵的生成

不需要事先定义,MATLAB 系统定义的数值元素就是复数,这是 MATLAB 区别其它高

级语言的最大特点之一,它给诸多领域的计算带来极大的方便。

9.1.1 复数的概念

在初等数学里,遇到一个在实数范围内无法解决的问题,就是 1− 开平方,或者说要解方

程 012 =+x ,其根究竟为多少的问题。于是引入了一个特殊的量 i 或 j,规定 i 1−= 。有了

这个规定,那么上述方程的根则为 i2,1 ±=x 。

对于任意二实数 x, y,称 yxz i+= ( )yxz j+= 或 iyxz += ( )jyxz += 为复数,其中 x, y

分别叫做复数 z 的实部与虚部,记作

( ) ( )zyzx Im,Re ==

而 i 或 j 叫做虚单位。当 0=x 时, yz i= 叫做纯虚数;当 0=y 时,则 xz = 是实数。

两个复数相等,必须且只须它们的实部与虚部分别相等。与实数不同,两个复数不能比

较大小。

Page 403: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

391

9.1.2 MATLAB 关于复变量的函数命令

1. 关键标识 i 或 j 在 MATLAB 中,复数单位为 ( )1sqrtji −== ,其数值在 MATLAB 工作空间中显示为

i0000.10 + 。在 MATLAB 中生成复数,必须有这个关键标识。

2. 实变量定义标识 real

在 MATLAB 中,通过实变量定义标识 real 将构成复变量的两部分设置为实变量后,再生

成标准复变量。例如,将变量 x 与 y 设置为实变量的 MATLAB 语句格式:

x=sym(’x’,’real’);

y=sym(’y’,’real’); 也可以用以下的简捷格式:

syms x y real; 3. 复变量的实部与虚部

求复变量的实部与虚部可用函数命令 real ( ) 与 imag ( )来实现。例如有复变量 yxz j+= ,

求复变量 z 实部与虚部的 MATLAB 语句如下:

syms x y real;

z=x+y*j;

Re=real(z)

Im=imag(z) 语句执行后就求出复变量 z 实部与虚部:

Re = x

Im = y 4. 复变量的模与辐角

求复变量的模与辐角可使用函数命令 abs ( ) 与 angle ( )。需要注意的是:

(1) angle ( )计算出的辐角的单位是弧度,且是辐角的主值(参见 9.2 节)。

(2) angle ( )函数命令只能对数值量进行运算。 【例 9-1】对复变量 yxz j+= ,求其 z 的模与辐角。

【解】

求 z 的模与辐角的 MATLAB 程序如下:

syms A theta;

x=sym(’x’,’real’);y=sym(’y’,’real’);

x=5;y=5;z=x+y*j;A=abs(z)

theta=angle(z) 程序执行后就求出复变量 z 的模与辐角:

A = 7.0711

theta = 0.7854 5. 共轭复数

将实部相同而虚部正负号相反的两个复数叫做共轭复数。复数的共轭可用函数 conj ( ) 来

实现。 【例 9-2】对复数 yxz j−= ,求其 z 的共轭复数。

Page 404: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

392

【解】

求 z 的共轭复数的 MATLAB 语句如下:

syms x y real;

z=x-y*j;

conj(z) 语句执行后就求出复数 yxz j−= 的共轭复数:ans =x+i*y

9.1.3 复数的生成与创建复矩阵

1. 复数的生成

复数可由代数式 z=x+y*j ( 或 z=x+y*i) 语句生成,也可简写成 z=x+yj ( 或 z=x+yj )。复

数也可由指数式(参见 9.2 节) z=A*exp(j*theta) (或 z=A*exp(i*theta) )语句生成,也可简写成

z=A*exp(theta*j)(或 z=A*exp(theta*i) ),其中 A 是复数的模,theta 是复数辐角的弧度数。

z=A*exp(j*theta)语句执行后,仍得到复数的代数式。

【例 9-3】用指数式 z=r*exp(j*theta)语句生成复数。

【解】

用以下 MATLAB 语句生成复数:

syms A theta;

A=1;theta=0.5236;

z=A*exp(theta*j) 语句执行结果

z = 0.8660 + 0.5000i 即生成复数 j5.0866.0 +=z 。

2. 创建复矩阵

复矩阵就是构成矩阵的元素都是复数或是复变量。创建复矩阵有两种方法。第一种方法

与生成一般的矩阵一样,只是将矩阵的元素改换成复变量或复数即可。第二种方法是将实部

与虚部矩阵分别创建,然后再结合虚单位 j 写成复数的形式。

【例 9-4】用代数式 z=x+y*j 与指数式 z=A*exp(theta*j) 语句生成复矩阵。

【解】

(1) 用以下 MATLAB 语句生成一个符号复矩阵:

syms a b c d e f g h;

A=[-a+b*j c-d*j;e*exp(f*j) -g*exp(h*j)] 语句执行结果

A = [ -a+i*b, c-i*d]

[ e*exp(i*f), -g*exp(i*h)] (2) 用以下 MATLAB 语句生成一个数字复矩阵:

syms a1 a2 a3 a4 b1 b2 b3 b4 real;

B=[a1+j*b1 a2+j*b2;a3*exp(j*b3) a4*exp(j*b4)];

a1=3;b1=5;a2=-2;b2=3;a3=9;b3=6;a4=23;b4=33;

B=subs(B,’[a1 b1 a2 b2 a3 b3 a4 b4]’,[a1 b1 a2 b2 a3 b3 a4 b4]) 语句执行结果

Page 405: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

393

B = 3.0000 + 5.0000i -2.0000 + 3.0000i

8.6415 - 2.5147i -0.3054 +22.9980i 【例 9-5】用随机函数生成复矩阵。

【解】

用 rand ( ) 函数生成复矩阵的 MATLAB 语句如下:

Re=rand(3,2);

Im=rand(3,2);

Com=Re+Im*j 语句执行结果

Com = 0.4103 + 0.1389i 0.3529 + 0.6038i

0.8936 + 0.2028i 0.8132 + 0.2722i

0.0579 + 0.1987i 0.0099 + 0.1988i

9.2 复数的 M A T LA B 符号运算

9.2.1 复数的几何表示

任一复数 jyxz += 与一对有序实数 x, y 一一对应,并且可以用一个平面上某点的两个坐

标 ( )yx, 来表示,参见图 9-1。这个平面叫做复平面或 z 平面,平面的横轴即 x 轴称为实轴,

纵轴即 y 轴称为虚轴。这样,复数与复平面上的点形成一一对应的关系。 复数 z 还能用从原点指向点 ( )yx, 的向量来表示。向量的长度即为复数的模,几何上量的

关系是

22 yxAz +== (9-1)

计算向量的长度,在 MATLAB 中正是 9.1 节介绍的 abs()函数的功能。

图 9-1 复平面 z

表示复数 z 的向量与 x 轴的夹角θ 叫做 z 的辐角,记作 ( )zArg ,其几何关系是

( )

==

x

yz tanarcArg θ (9-2)

这个关系式用来计算向量的辐角,在 MATLAB 中正是 9.1 节介绍的 angle ( )函数的功能。请

注意,angle ( )函数只能对数值量进行运算,如要对符号对象求辐角,只能用式(9-2)进行计算。 任何一个复数或向量 ( )0≠zz 有无穷多个辐角,如果 1θ 是其中的一个,那么

( ) π2Arg 1 kz += θ (9-3)

Page 406: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

394

式 (9-3) 给出了 z 的全部辐角,且等式两边角度的单位均为弧度。在 z 的辐角中,将满足

0π θ<− ≤π的 0θ 叫做 ( )zArg 的主值,记作 ( )zarg0 =θ 。

利用直角坐标与极坐标的关系: ( )θcos⋅= Ax , ( )θsin⋅= Ay

可有复数 z 的三角表示法:

( ) ( )[ ]θθ sinjcos ⋅+⋅= Az (9-4)

有与此对应的复数 z 的代数表示法: j⋅+= yxz (9-5)

还可利用 Euler 公式:

( ) ( )θθθ sinjcose j ⋅+=⋅

引出复数 z 的指数式表示(或叫极坐标式表示)法:

θ⋅⋅= jeAz (9-6)

复数 z 的指数表示在电工技术中有着广泛的应用。 【例 9-6】求四个复数 j551 +=z , j552 −=z , j553 +−=z , j554 −−=z 的模与辐角,并写

出四个复数的指数表示。

【解】

(1) 用以下 MATLAB 语句对复数进行运算:

syms z1 z2 z3 z4;

z1=5+5j;z2=5-5j;z3=-5+5j;z4=-5-5j;

A1=abs(z1)

A2=abs(z2)

A3=abs(z3)

A4=abs(z4)

theta1=angle(z1)*180/pi

theta2=angle(z2)*180/pi

theta3=angle(z3)*180/pi

theta4=angle(z4)*180/pi 语句执行结果

A1 = 7.0711

A2 = 7.0711

A3 = 7.0711

A4 = 7.0711

theta1 = 45

theta2 = -45

theta3 = 135

theta4 = -135 即四个复数的模 0711.74321 ==== AAAA ;还有辐角 °= 451θ 、 °−= 452θ 、 °= 1353θ 、

Page 407: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

395

°−= 1354θ 。

(2) 四个复数的指数表示可以直接写出: °⋅⋅= 45j

1 e0711.7z , ( )°−⋅⋅= 45j2 e0711.7z

( )°⋅⋅= 135j3 e0711.7z , ( )°−⋅⋅= 135j

4 e0711.7z

9.2.2 复数代数运算的 MATLAB 实现

两个复数可以进行加法、减法、乘法与除法等代数运算,也可以对复数计算其实部、虚

部、模、辐角及共轭复数。复数的加法与减法比较简单,只需要将实部与虚部分别进行加、

减就可以了。复数乘法与除法运算要复杂一些,以下作一复习。

1. 复数乘法

设有两个复数 ( ) ( )[ ]1111 sinjcos θθ ⋅+= Az , ( ) ( )[ ]2222 sinjcos θθ ⋅+= Az ,

那么 ( ) ( )[ ]112121 sinjcos θθ ⋅+⋅=⋅ AAzz ( ) ( )[ ]22 sinjcos θθ ⋅+⋅

( ) ( ) ( ) ( )[ ]212121 sinsincoscos θθθθ −⋅= AA

( ) ( ) ( ) ( )( )[ ]212121 sincoscossinj θθθθ +⋅⋅+ AA

( ) ( )[ ]212121 sinjcos θθθθ +++⋅= AA (9-7)

或者 ( )21j2121 e θθ +⋅⋅=⋅ AAzz (9-8)

对于 n 个复数有

( ) ( )[ ]nnnn AAAzzz θθθθθθ +++++++⋅= 21212121 sinjcos =

( )nnAAA θθθ +++⋅ 21j

21 e (9-9)

2. 复数除法

设有两个复数 ( ) ( )[ ]1111 sinjcos θθ ⋅+= Az , ( ) ( )[ ]2222 sinjcos θθ ⋅+= Az ,

那么 ( ) ( )[ ]( ) ( )[ ]

( )12

1

2j

1

2j

1

j2

111

222

1

2 ee

e

sinjcos

sinjcos θθθ

θ

θθθθ −==

++

=A

A

A

A

A

A

z

z (9-10)

【例 9-7】设两个复数 j,j, 222111 bazbaz +=+= 试计算 21 zz + , 21 zz − , ( )21conj zz + ,

( )21real zz + , ( )21imag zz + , ( )1abs z , ( )2abs z , ( )21abs zz + 。

【解】

用以下 MATLAB 语句对两个复数进行运算:

a1=sym(’a1’,’real’);b1=sym(’b1’,’real’);

a2=sym(’a2’,’real’);b2=sym(’b2’,’real’);

z1=a1+b1*j;z2=a2+b2*j;

za=z1+z2

zb=z1-z2

zc=conj(za)

Page 408: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

396

zr=real(za)

zi=simple(imag(za))

Az1=abs(z1)

zA2=abs(z2)

Az12=factor(abs(za)) 语句执行结果

za = a1+i*b1+a2+i*b2

zb = a1+i*b1-a2-i*b2

zc = a1-i*b1+a2-i*b2

zr = a1+a2

zi = b1+b2

Az1 = (a1^2+b1^2)^(1/2)

Az2 = (a2^2+b2^2)^(1/2)

Az12 = (a1^2+2*a1*a2+a2^2+b1^2+2*b1*b2+b2^2)^(1/2) 即

jj 212121 bbaazz +++=+

jj 212121 bbaazz −+−=−

( ) jjconj 212121 bbaazz −−+=+

( ) 2121real aazz +=+

( ) 2121imag bbzz +=+

( ) 21

211abs baz +=

( ) 22

222abs baz +=

( ) ( ) ( )221

22121abs bbaazz +++=+

【例 9-8】已知两个复数 j,43j,55 21 +−=−= zz 试求 21 zz + , 21 zz − , 21 zz ⋅ , 21 / zz ,

2

1conjz

z,

2

1absz

z,

2

1anglez

z。

【解】

用以下 MATLAB 语句对两个复数进行运算:

syms z1 z2 za zb zc zd ze;

z1=5-5j;z2=-3+4j;

za=z1+z2

zb=z1-z2

zc=z1*z2

zd=z1/z2

ze=conj(z1/z2)

Page 409: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

397

A=abs(z1/z2)

theta=angle(z1/z2)

theta=theta*180/pi 语句执行结果

za = 2.0000 - 1.0000i

zb = 8.0000 - 9.0000i

zc = 5.0000 +35.0000i

zd = -1.4000 - 0.2000i

ze = -1.4000 + 0.2000i

A = 1.4142

theta = -2.9997

theta = -171.8699

即 j221 −=+ zz , j9821 −=− zz , j35521 +=⋅ zz , j2.04.1/ 21 −−=zz

j2.04.1conj2

1 +−=

z

z, 4142.1abs

2

1 =

z

z, 9997.2−=θ rad °−= 8699.171

【例 9-9】化简复数j1

j3

j

1

−−=z ,并求 ( )zreal , ( )zimag , ( )zconj , ( )zabs 与 ( )zangle 。

【解】

用以下 MATLAB 语句对复数进行运算:

syms z;

z=1/j-3j/(1-j)

Rez=real(z)

Imz=imag(z)

conj(z)

Az=abs(z)

theta=angle(z)

theta=theta*180/pi 语句执行结果

z = 1.5000 - 2.5000i

Rez = 1.5000

Imz = -2.5000

ans = 1.5000 + 2.5000i

Az = 2.9155

theta = -1.0304

theta = -59.0362 即

j5.25.1j1

j3

j

1 −=−

−=z , ( ) 5.1real =z , ( ) 5.2imag −=z

( ) j5.25.1conj +=z , ( ) 9155.2abs =z 与 0304.1−=θ rad °−= 0362.59

Page 410: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

398

9.2.3 复数乘幂与方根运算的 MATLAB 实现

1. 乘幂运算

n 个相同复数 z 的乘积,叫做 z 的 n 次幂,记作 nz ,即 zzzz n ⋅⋅= ,复数 z 自乘 n 次

其结果显然仍是一个复数。对于式(9-9),若是 =1z zzz n ===2 ,则有

[ ] ( ) ( )[ ] ( ) ( )[ ]θθθθθ nnAAAz nnnnn sinjcossinjcose j +⋅=+⋅=⋅= (9-11)

当 1=A 时,有 De Moivre 公式:

( ) ( )[ ] ( ) ( )[ ]θθθθ nnn sinjcossinjcos +=+ (9-12)

【例 9-10】求复数 j3 −=z 的五次方幂 5z 。

【解】

(1) 用以下 MATLAB 语句对复数进行运算:

syms z;

z=sqrt(3)-j;Power=z^5 语句执行结果

Power = -27.7128 -16.0000i

即复数 j3 −=z 的五次方幂为

( ) j167128.27j35

−−=−

(2) 用式(9-11)验算以上结果的 MATLAB 语句如下:

z=sqrt(3)-j;c=angle(z);

d=(sqrt((sqrt(3))^2+(-1)^2))^5;

a=d*cos(5*c)

b=d*sin(5*c) 语句执行结果说明计算结果正确。

2. 方根运算

求实数的方根是初中数学的内容,而计算复数的方根,根据复变函数的理论却要另行定

义。设两个复变量 ( ) ( )[ ]θθ sinjcos += Az 与 ( ) ( )[ ]ϕϕρ sinjcos +=w ,如果 zwn = ,根据 De Moivre

公式有:

( ) ( )[ ] =+ θθ sincos fA ( ) ( )[ ]ϕϕρ nnn sinjcos +

那么 nA /1=ρ , ( ),2,1,0,π2 ±±=+= k

n

kθϕ (9-13)

所以

++

+⋅==

n

k

n

kAzw nn π2

sinjπ2

cos1 θθ

(9-14)

需要提请读者注意的是,用 MATLAB 函数命令求出的复数方根,是公式(9-14)中对应于

0=k 时的值。

Page 411: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

399

【例 9-11】试计算 ( )3

1j1− 。

【解】

(1) 用以下 MATLAB 语句对复数进行运算:

syms z;

z=1-j;w=z^(1/3) 语句执行结果

w = 1.0842 - 0.2905i 即

( ) j2905.00842.1j1 3

1−=−

(2) 用式(9-13)验算以上结果的 MATLAB 语句如下:

syms rho phi theta real;

z=1-j;;

rho=(abs(z))^(1/3);phi=angle(z)/3;

rho*(cos(phi)+j*sin(phi)) 语句执行结果说明计算结果正确。

9.2.4 复数指数与对数运算的 MATLAB 实现

实数的指数与对数的计算是读者熟悉的,而计算复数的指数与对数,根据复变函数的

理论也都要另行定义。

1. 复数的指数运算

对于复变量 yxz j+= ,有复变函数 ( ) ( ) ( )[ ]yyzf x sinjcose += 。此函数 ( )zf 具备以下三条

件:①在复平面处处解析;② ( ) ( )zfzf =′ ;③当 ( ) 0Im =z 时, ( ) xzf e= ,其中 ( )zx Re= ,则

称复变函数 ( ) ( ) ( )[ ]yyzf x sinjcose += 为复变量 z 的指数函数,记作

( ) ( ) ( )[ ]yyz x sinjcoseexp += (9-15)

( )( )[ ]

+==

π2expArg

eexp

kyz

z x

(9-16)

上式中,k 为任何整数。值得注意的是,用 MATLAB 函数命令求出的复数指数函数,是

公式(9-16)中对应于 0=k 时的值。

【例 9-12】试计算 j32e + 与 je 。

【解】

(1) 用以下 MATLAB 语句计算 j32e + :

syms z;

z=2+3j;exp(z) 语句执行结果

ans = -7.3151 + 1.0427i 即

Page 412: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

400

j0427.13151.7e j32 +−=+

用式(9-15)验算以上结果的 MATLAB 语句如下:

syms z;

z=2+3j;exp(2)*(cos(3)+j*sin(3)) 语句执行结果说明计算结果正确。

(2) 用以下 MATLAB 语句计算 je :

syms z;

z=-j;exp(z) 语句执行结果

ans = 0.5403 - 0.8415i 即

j8415.05403.0e j −=−

2. 复数的对数运算

如果 0≠z ,满足方程 zw =e 的函数 ( )zfw = 叫做对数函数。

令 θjeAz = , vuw j+= 。那么 θjjj eeee Azvuvu ==⋅=+ ,于是有 Au =e , θ=v 。因此

( ) ( ) ( )zzAw LnArgjln =⋅+= ( ) ( )zz Argjln ⋅+= (9-17)

由于 ( )zArg 为多值函数,所以对数函数 ( )zfw = 也是多值函数。如果规定式(9-17)中的 ( )zArg

取主值 ( )zarg ,那么 ( )zLn 就为一个单值函数,记作 ( )zln ,称为 ( )zLn 的主值。于是有

( )zln ( ) ( )zz argjln ⋅+= (9-18)

【例 9-13】试计算 ( )j32ln + 与 ( )jln − 。

【解】 (1) 用以下 MATLAB 语句计算 ( )j32ln + :

syms z;

z=2+3j;

log(z) 语句执行结果

ans = 1.2825 + 0.9828i 即 ( ) j9828.02825.1j32ln +=+

用式(9-18)验算以上结果的 MATLAB 语句如下:

syms z;

z=2+3j;log(abs(z))+j*angle(z)

语句执行结果说明计算结果正确。 (2) 用以下 MATLAB 语句计算 ( )jln − :

syms z;

z=-j;log(z)

Page 413: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

401

语句执行结果

ans = -1.5708i 即 ( ) j5708.1jln −=−

9.2.5 复数三角函数与双曲函数及其反函数运算的 MATLAB 实现

实数的三角函数与双曲函数及其反函数的计算也是读者熟悉的,而计算复数的三角函数

与双曲函数及其反函数,根据复变函数的理论也都要另行定义。

1. 复数的三角函数运算

根据欧拉公式: ( ) ( )θθθ sinjcose j ⋅+= 与 ( ) ( )θθθ sinjcose j ⋅−=− ,有欧拉公式的变形:

( )2

eecos

jj θθθ

−+= 与 ( )j2

eesin

jj θθθ

−−= 。

根据复变函数的理论,将实变量θ 推广到复变量 z ,则有:

( )2

eecos

jj zz

z−+= (9-19)

( )j2

eesin

jj zz

z−−= (9-20)

其它复变量三角函数的定义如下:

( ) ( )( )z

zz

cos

sintan = , ( ) ( )

( )z

zz

sin

coscot = , ( ) ( )z

zcos

1sec = , ( ) ( )z

zsin

1csc =

【例 9-14】试计算复数 ( )j32 + 与 ( )j− 的三角函数。

【解】 (1) 用以下 MATLAB 语句计算 ( )j32 + 的三角函数:

syms z;

z=2+3j;sinz=sin(z)

cosz=cos(z)

tanz=tan(z)

secz=sec(z)

cscz=csc(z) 语句执行结果

sinz = 9.1545 - 4.1689i

cosz = -4.1896 - 9.1092i

tanz = -0.0038 + 1.0032i

secz = -0.0417 + 0.0906i

cscz = 0.0905 + 0.0412i

即 ( ) j1689.41545.9j32sin −=+ 、 ( ) j1092.91896.4j32cos −−=+

( ) j0032.10038.0j32tan +−=+

( ) j0906.00417.0j32sec +−=+ 、 ( ) j0412.00905.0j32csc +=+

Page 414: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

402

用式(9-20)验算计算 ( )j32sin + 结果的 MATLAB 语句如下:

syms z;

z=2+3j;(exp(j*z)-exp(-j*z))/(2*j) 语句执行结果说明计算结果正确。同理可以验算其它三角函数的计算结果。 (2) 同理可以求得 ( )j− 的三角函数:

( ) j1752.1jsin −=− 、 ( ) 5431.1jcos =− 、 ( ) j7616.0jtan −=−

( ) j3130.1jcot =− 、 ( ) 6481.0jsec =− 、 ( ) j8509.0jcsc =−

用式(9-19)验算计算 ( )jcos − 的结果 MATLAB 语句如下:

syms z;

z=-j;(exp(j*z)+exp(-j*z))/2 语句执行结果说明计算结果正确。按照此法,可以验算其它三角函数的计算结果。

2. 复数的双曲函数运算

根据复变函数的理论,定义

( )2

eecosh

zz

z−+= (9-21)

( )2

eesinh

zz

z−−= (9-22)

分别为双曲余弦与双曲正弦函数。并且当 yxz j+= 时,有

( ) ( ) ( ) ( ) ( ) ( )yxyxyxz sinsinhjcoscoshjcoshcosh ⋅⋅+⋅=+= (9-23)

( ) ( ) ( ) ( ) ( ) ( )yxyxyxz sincoshjcossinhjsinhsinh ⋅⋅+⋅=+= (9-24)

【例 9-15】试计算复数的双曲函数 ( )j32sinh + 与 ( )j32cosh + 。

【解】 (1) 用以下 MATLAB 语句计算 ( )j32sinh + 与 ( )j32cosh + :

syms z;

z=2+3j;sinh=sinh(z)

cosh=cosh(z) 语句执行结果

sinh = -3.5906 + 0.5309i

cosh = -3.7245 + 0.5118i

即 ( ) j5309.05906.3j32sinh +−=+

( ) j5118.07245.3j32cosh +−=+

用式(9-24)与式(9-23)验算计算 ( )j32sinh + 与 ( )j32cosh + 结果的 MATLAB 语句如下:

syms z;

z=2+3j;cosh=cosh(2)*cos(3)+j*sinh(2)*sin(3)

sinh=sinh(2)*cos(3)+j*cosh(2)*sin(3) 语句执行结果说明计算结果正确。

Page 415: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

403

3. 复数的反三角函数运算 复数三角函数的反函数定义为复数反三角函数。设 ( )wz cos= ,那么称 w 为 z 的反余弦函

数,记作 ( )zw cosArc= 。由 ( ) ( )wwwz jj ee2

1cos −+== 得 wje 的二次方程:

01e2e jj2 =+− ww z

解 wje 的二次方程得: 1e 2j −+= zzw 。对此式两端取对数得:

( )

−+−== 1jLncosArc 2zzwz (9-25)

同理可得: ( )

−+−= 21jjLnsinArc zzz (9-26)

( )

−+

−=z

zz

j1

j1Ln

2

jArctg (9-27)

【例 9-16】试计算复数的反余弦函数 ( )j32cos +a 。

【解】 用以下 MATLAB 语句计算 ( )j32cos +a :

syms z;

z=2+3j;acos(z) 语句执行结果

acos = 1.0001 - 1.9834i 即 ( ) j9834.10001.1j32cos −=+a

用式(9-25)验算计算 ( )j32cos +a 的结果 MATLAB 语句如下:

syms z;

z=2+3j;-j*log(z+sqrt(z^2-1)) 语句执行结果说明计算结果正确。

4. 复数的反双曲函数运算

复数双曲函数的反函数定义为复数反双曲函数。根据复变函数理论,有

Arsin ( )

++= 1Ln 2zzz (9-28)

Arcos ( )

−+= 1Ln 2zzz (9-29)

Artg ( )

−+=

z

zz

1

1Ln

2

1 (9-30)

【例 9-17】试计算复数的反双曲正弦函数 ( )j32sinh +a 。

【解】 (1) 用以下 MATLAB 语句计算 ( )j32sinh +a :

syms z;

z=2+3j;asinh=asinh(z) 语句执行结果

Page 416: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

404

asinh = 1.9686 + 0.9647i 即 ( ) j9647.09686.1j32sinh +=+a

用式(9-28)验算计算 ( )j32sinh +a 的结果 MATLAB 语句如下:

syms z;

z=2+3j;log(z+sqrt(z^2+1)) 语句执行结果说明计算结果正确。

9.3 M A T LA B 符号运算在正弦交流电路计算中的应用

正弦交流电路,顾名思义,电路里的电势、电压、电流等电量都是时间的正弦函数。根

据电工基础的理论,时间的正弦量可以用直角坐标系中时间的旋转向量或时间向量来表示,

从而简化计算。根据 9.2 节介绍的复数的几何表示法,向量可以用复数来表示,那么,正弦

量的计算就转换为复数的计算。

9.3.1 有关正弦交流电的几个问题

(1) 根据电工基础的理论,正弦交流电路里的电势、电压、电流都是时间的正弦函数。正

弦量的计算,首要的是振幅即最大值、角频率与初相角三特征量的计算。除此之外,还有交

流电的有效值或方均根值这一重要特征量的计算,并且注意正弦量的振幅为有效值的 2 倍。

还需要注意,余弦函数曲线是正弦函数把坐标原点向右移动 2/π 个单位作为新原点的曲

线,或余弦函数是把正弦函数相对坐标原点向左移动 2/π 个单位的函数,余弦函数比正弦函

数超前 2/π 。在同一个问题中可能同时出现正弦函数与余弦函数,此时必须以一个三角函数

为基准,注意另一个三角函数与该基准三角函数间相隔 2/π 的相位关系。

(2) 根据电工基础的理论,正弦量用平面向量表示时,其向量长度为其正弦量的振幅或

有效值,其向量方向与横轴成其正弦量的初相角,且角度的正负方向符合三角学的规定,即

由横轴正向逆时针方向旋转为正,顺时针方向旋转为负。

稳态计算中,一般同一个问题讨论的正弦量多具有相同的角频率,即各向量均以相等的

角速度ω 旋转,于是要计算各向量的相对位置。这就为正弦交流电采用复数计算的方法提供

了理论基础。为了与空间矢量(例如力、电场强度等)区别,也有教科书或文献将描述正弦量的

幅值或有效值与初相角的平面向量叫做正弦量的相量,并在所注文字上打一“•”,例如 I 是

电流有效值相量, mU 是电压幅值相量。而正弦量的角频率相当于一个旋转因子。由于各相量

的相对位置是不变的,所以在将正弦量转换成相量的计算中,角频率并不出现,但要注意,

该相量隐含着正弦量角频率对应的一个旋转因子。请看以下示例。

【例 9-18】已知正弦电流与正弦电压分别为

( )6/314sin4.141 π+= ti 与 ( )3/314sin1.311 π−= tu

求表示 i 与 u 的相量并绘制正弦电流与正弦电压的波形曲线。

【解】

(1) 用以下 MATLAB 语句计算 i 与 u 的相量:

syms ai Aim U Um phi1 phi2 real;

digits 2;Ai=141.4/sqrt(2);Ai=vpa(Ai,2)

Page 417: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

405

phi1=pi/6*180/pi

U=311.1/sqrt(2);U=vpa(U,2)

phi2=pi/3*180/pi 语句执行结果

Ai =100.

phi1 = 30.0000

U = .22e3

phi2 = 60.0000 即 i 与 u 的有效值相量为

100=I°30je , 220=U

°− 60je

(2) 用以下 MATLAB 语句绘制电流与电压波形曲线:

t=0:0.00001:0.025;

ai=141.4*sin(314*t+pi/6);u=311.1*sin(314*t-pi/3);

plot(t,ai);hold on

plot(t,u)

gtext(’1 i(t)’),gtext(’2 u(t)’) 语句执行后绘制出电流与电压波形曲线如图 9-2 所示。

图 9-2 i 与 u 的波形曲线

从图 9-2 中看出,图形纵坐标对应着电压与电流有效值的伏特数与安培数,横坐标为弧

度数。因 314/2 =π= Tω ,可知正弦函数的周期为 02.0 rad。电流 ( )ti 如曲线 1 所示,电源端

电压 ( )tu (曲线 2)比电流 ( )ti 滞后( °90 或 2/π rad)。

(3) 应用复数表示正弦量后,正弦量的加减运算就转换为复数的加减运算。应该注意的

是:复数不能表示其它任何周期交变量,复数的加减只能代表同频率正弦量的加减。因此只

有在正弦交流电路中才能应用复数来计算,这种方法因其中引入了虚单位符号 j(或 i)而称为符

号法。

以上电工基本原理,是每一个学过电工基础的都明白的。但是,以下用 MATLAB 的函数

命令进行交流电路的计算,对许多读者可能是新鲜的,但是却很简单,方便且高效。

2 u(t)

1 i(t)

Page 418: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

406

9.3.2 电阻、电感、电容三种电路元件电压与电流的复数关系

1. 电阻电路电压与电流的复数关系、电阻的复阻抗

根据电工基础的理论,用复数表示纯电阻电路的电压与电流的关系时,有

RIU = (9-31)

式中U 是电阻两端电压有效值相量,I 是流过电阻的电流有效值相量。由式(9-31)可知,电阻

两端电压相量与电阻的电流相量同相位。

对单一的电阻而言,其复阻抗就是由式(9-31)求得的 IU / ,即 RZ = 。

2. 电感电路电压与电流的复数关系、电感的复阻抗

根据电工基础的理论,用复数表示纯电感电路的电压与电流的关系时,有

ILIxU L ωjj == (9-32)

式中U 是电感两端电压有效值相量,I 是流过电感的电流有效值相量。由式(9-32)可知,电感

两端电压相量超前电感的电流相量 2/π 。

对单一的电感而言,其复阻抗是由式(9-32)求得的 IU / ,即 LZ ωj= 。

【例 9-19】已知 RL 串联电路的电流为 ( )ti 2cos10= , Ω= 4R , HL 2= 。试计算电阻、电感

两端电压及总电压,并绘制回路电流 i 与各元件上的电压瞬时值的波形曲线。

【解】

(1) 用以下 MATLAB 程序计算:

syms omega R L ai uR uL u;

omega=2;R=4;L=2;ai=10*exp(j*0);uR=ai*R

uL=j*omega*L*ai

AuL=abs(uL)

theta1=angle(uL)

theta1=theta1*180/pi

u=uR+uL;Au=abs(u)

theta2=angle(u)

theta2=theta2*180/pi 程序执行结果

uR = 40

uL = 0 +40.0000i

AuL = 40

theta1 = 1.5708

theta1 = 90

Au = 56.5685

theta2 = 0.7854

theta2 = 45 即

40=RU°0je , 40=LU

°90je , 5685.56=+LRU°45je

Page 419: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

407

(2) 用以下 MATLAB 语句绘制电流与电压波形曲线:

t=0:0.001:5;

ai=10*cos(2*t);

uR=40*cos(2*t);

uL=40*cos(2*t+pi/2);u=uR+uL;

plot(t,ai);hold on

plot(t,uR)

plot(t,uL)

plot(t,u)

gtext(’1 i(t)’),gtext(’2 uR(t)’), gtext(’3 uL(t)’),gtext(’4 u(t)’) 语句执行后绘制出波形曲线如图 9-3 所示。

从图 9-3 中看出,图形纵坐标对应着电压与电流有效值的伏特数与安培数,横坐标为弧

度数。因 2/2 =π= Tω rad/s,可知该余弦函数的周期为 14163. rad。电流 ( )ti 如曲线 1 所示,

电阻电压 ( )tuR (曲线 2)与电流 ( )ti 同相位;电感电压 ( )tuL 比电阻电压 ( )tuR 超前 °90 或 2/π rad。

总电压 ( )tu 如曲线 4 所示。

图 9-3 ( )tI 、 ( )tRU 、 ( )tU L 、 ( )tU 的波形曲线

3. 电容电路电压与电流的复数关系、电容的复阻抗

根据电工基础的理论,用复数表示纯电容电路的电压与电流的关系时,有

C

IIxU C ωj

j =−= (9-33)

式中U 是电容两端电压有效值相量,I 是流过电容的电流有效值相量。由式(9-33)可知,电容

两端电压相量迟后电容的电流相量 2/π 。

对单一的电容而言,其复阻抗是由式(9-33)求得的 IU / ,即C

Zωj1= 。

9.3.3 电阻、电感、电容串联电路计算的 MATLAB 实现

根据电工基础的理论,串联电路的复阻抗为各串联元件复阻抗之和;串联电路流过各串

4 U(t)

3 UL(t)

1 I(t)

2 UR(t)

Page 420: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

408

联元件的电流相等;串联电路总电压与各串联元件的电压符合基尔荷夫电压定律。

用以下示例来计算电阻、电感、电容串联电路的复阻抗并计算串联电路的电压、电流。

【例 9-20】计算电阻、电感、电容三元件串联电路的复阻抗。

【解】

用以下 MATLAB 语句计算电阻电感电容串联电路的复阻抗:

syms w R L C real;

Z=R+1/(j*w*C)+j*w*L

Zabs=abs(Z)

Zr=simple(real(Z))

Zi=simple(imag(Z))

Zang=atan(Zi/Zr) 语句执行结果

Z = R-i/w/C+i*w*L

Zabs = (R^2+(-1/w/C+w*L)^2)^(1/2)

Zr = R

Zi = -1/w/C+w*L

Zang = atan((-1/w/C+w*L)/R) 即

baC

LRxxRZ CL jj

1jjj +=++=−+=

ωω (9-34)

Ra = ,C

Lbω

ω 1−=

2222 1

−+=+=

CLRbaZ

ωω (9-35)

R

CL

a

bZ

ωω 1

arctananarct

−==∠ (9-36)

R

CL

Z

CLRZZ

ωω

ωω

1

arctanj2

2j e1

e

−−∠ ⋅

−+== (9-37)

【例 9-21】已知 R, L, C 串联电路中,端电压 ( ) V5000sin2100 tu = , Ω= 15R , mh12=L ,

F5=C 。试求电路中的电流 i 与各元件上的电压瞬时值,并绘制电压 u 与电流 i 以及各元件

上的电压瞬时值的波形曲线。

【解】

(1) 用以下 MATLAB 程序对电路进行计算:

syms U Z R L C omega ai;

U=100*exp(j*0);omega=5000;

Page 421: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

409

L=12*10^(-3);C=5*10^(-6);R=15;

Z=R+j*omega*L-j/(omega*C);ai=U/Z

Aai=abs(ai)

theta1=angle(ai)

theta1=angle(ai)*180/pi

uR=ai*R

abs(uR)

theta2=angle(uR)

theta2=angle(uR)*180/pi

uL=j*omega*L*ai

abs(uL)

theta3=angle(uL)

theta3=angle(uL)*180/pi

uC=-j*ai/(omega*C)

abs(uC)

theta4=angle(uC)

theta4=angle(uC)*180/pi 程序执行结果

ai = 2.4000 - 3.2000i

Aai = 4

theta1 = -0.9273

theta1 = -53.1301

uR = 36.0000 -48.0000i

ans = 60

theta2 = -0.9273

theta2 = -53.1301

uL = 1.9200e+002 +1.4400e+002i

ans = 240

theta3 = 0.6435

theta3 = 36.8699

uC = -1.2800e+002 -9.6000e+001i

ans = 160.0000

theta4 = -2.4981

theta4 = -143.1301 即有效值相量为

4j2.34.2 =−=I°− 13.53je 4= j9273.0e−

60j4836 =−=RU°− 13.53je 60= j9273.0e−

240j144192 =+=LU°36.87je 240= j6435.0e

Page 422: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

410

160j96128 =−−=CU°− 13.143je 160= j4981.2e−

将相量的复数形式写成正弦函数的瞬时值形式:

( )°−= 13.535000sin24 ti ( )9273.05000sin24 −= t

( )°−= 13.535000sin260 tuR ( )9273.05000sin260 −= t

( )°+= 87.365000sin2240 tuL ( )6435.05000sin2240 += t

( )°−= 13.1435000sin2160 tuC ( )4981.25000sin2160 −= t

(2) 用以下 MATLAB 语句绘制电路的电流与各个电压分量波形曲线:

t=0:0.00001:0.0015;u=100*sqrt(2)*sin(5000*t);

Ai=4*sqrt(2)*sin(5000*t-0.9273);

uR=60*sqrt(2)*sin(5000*t-0.9273);

uL=24*sqrt(2)*sin(5000*t+0.6435);

uC=160*sqrt(2)*sin(5000*t-2.4981);

plot(t,u);hold on

plot(t,Ai)

plot(t,uR)

plot(t,uL)

plot(t,uC)

gtext(’1 u(t)’),gtext(’2 i(t)’),gtext(’3 uR(t)’),

gtext(’4 uL(t)’),gtext(’5 uC(t)’) 语句执行后得到绘制出的电路电流与各个电压分量波形曲线如图 9-4 所示。

图 9-4 电压电流波形曲线

从图 9-4 中看出,图形纵坐标对应着电压与电流的伏特数与安培数,横坐标为弧度数。

因 5000/2 =π= Tω ,可知正弦函数的周期为 0013.0 rad。电源端电压 ( )tu 如曲线 1 所示,回路

电流 ( )ti (曲线 2)比电压 ( )tu 滞后( °13.53 或 9273.0 rad);回路电流 ( )ti 与电阻电压 ( )tuR (曲线 3)

两曲线波形同相位;电感电压 ( )tuL (曲线 4)比电阻电压 ( )tuR 曲线波形超前 °90 ,电容电压

Page 423: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

411

( )tuC (曲线 5)比电阻电压 ( )tuR 曲线波形滞后 °90 。这正是电工基础最基本的电路规律。

9.3.4 电阻、电感、电容并联电路计算的 MATLAB 实现

根据电工基础的理论,单一电阻的复导纳为

RGYR

1== (9-38)

式中 G 称为电阻的电导;单一电感的复导纳为

LLL

L BLLxZ

Y j1

jj

1

j

11 −=−====ωω

(9-39)

式中L

L xB

1= 称为电感的感纳;单一电容的复导纳为

CCC

C BCxZ

Y jjj

11 ==−

== ω (9-40)

式中C

C xB

1= 称为电容的容纳;电阻、电感、电容并联电路的复导纳为其三元件复导纳之和:

CLR YYYY ++= ϕωω

jej1

j1

yBGCLR

=−=

−−= (9-41)

并联电路各元件两端的电压(无论是瞬时值还是有效值或相量)相等;流过并联电路各元

件的电流与总电流的关系符合基尔荷夫电流定律;并联电路的欧姆定律

UYI = (9-42)

还有以下关系:

LxL ω= ,C

xC ω1= (9-43)

RZ R = , LxZ LL ωjj == ,CC

xZ CC ωω1

jj

1j −==−= (9-44)

CL

BBB CL ωω

−=−= 1 (9-45)

( ) 2222 BGBBGy CL +=−+= (9-46)

G

BB

G

B CL −== arctanarctanϕ (9-47)

【例 9-22】已知图 R, L, C 三元件并联电路中,端电压 ( ) ( ) V1000cos2100 ttu = , Ω= 3R ,

mh4=L , F200=C 。试求电路中的电流 ( )ti1 、 ( )ti2 、 ( )ti 与并联电路的复阻抗及复导纳。

图 9-5 电路相量模型

Page 424: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

412

【解】

用以下 MATLAB 语句对电路进行计算:

syms U Z1 Z2 Z R L C omega ai ai1 ai2 Y1 Y2 Y;

U=100*sqrt(2)*exp(j*0);omega=1000;

L=4*10^(-3);C=200*10^(-6);R=3;

Z1=R+j*omega*L;Y1=1/Z1;

ai1=U*Y1;Aai1=abs(ai1)

theta1=angle(ai1)*180/pi

Z2=-j/(omega*C);Y2=1/Z2;

ai2=U*Y2;Aai2=abs(ai2)

theta2=angle(ai2)*180/pi

ai=ai1+ai2;Aai=abs(ai)

theta=angle(ai)*180/pi

Z=Z1*Z2/(Z1+Z2)

Y=1/Z 语句执行结果

Aai1 = 28.2843

theta1 = -53.1301

Aai2 = 28.2843

theta2 = 90

Aai = 17.8885

theta = 18.4349

Z = 7.5000 - 2.5000i

Y = 0.1200 + 0.0400i 即电流 ( )ti1 、 ( )ti2 、 ( )ti 与并联电路的复阻抗及复导纳分别为

( ) ( ) Atti °−= 13.531000cos2843.281 ( ) At °−= 13.531000cos220 ,

( ) ( ) Atti °+= 901000cos2843.282 ( ) At °+= 901000cos220

( ) ( ) Atti °+= 435.181000cos8885.17 ( ) At °+= 435.181000cos265.12

j5.25.7 −=Z , j04.012.0 +=Y

9.3.5 电阻、电感、电容混联电路(或复杂电路)计算的 MATLAB 实现

有了电阻、电感、电容串并联电路的复阻抗与复导纳的概念,用 MATLAB 来计算其复

杂电路,其实现也很简单、方便。

【例 9-23】已知图 9-6 电路中,端电压 ( ) ( ) V2cos10 ttus = ,电阻 Ω= 11R 与电阻 Ω= 12R ,电

感 h1=L ,电容 F1=C 。试求电路中电流 ( )ti1 与 ( )ti2 。

【解】

(1) 根据电路的基本原理,列写出电路两个网孔的电压相量方程:

Page 425: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

413

( )( )

=−+−=−+

0j5.02

e10j21

21

0j21

II

II

图 9-6 电路相量模型

(2) 用以下 MATLAB 语句计算电路电流 ( )ti1 与 ( )ti2 :

syms u ai1 ai2;

[ai1,ai2]=solve(’10*exp(j*0)=(1+j*2)*ai1-ai2’,’-ai1+ai2*(2-j*0.5)=0’,’ai1,ai2’);

digits 2;ai1=vpa(ai1,2)

ai2=vpa(ai2,2) 语句执行结果

ai1 = 1.4-4.9*i

ai2 = 1.2-2.2*i (3) 用以下 MATLAB 语句计算电流 ( )ti1 与 ( )ti2 余弦表达式:

ai1=1.4-4.9*j;ai2=1.2-2.2*j;Aai1=abs(ai1)

theta1=angle(ai1)*180/pi

Aai2=abs(ai2)

theta2=angle(ai2)*180/pi 语句执行结果

Aai1 = 5.0961

theta1 = -74.0546

Aai2 = 2.5060

theta2 = -61.3895 即电流 ( )ti1 与 ( )ti2 余弦表达式分别为

( ) ( )A0546.742cos1.51°−= tti , ( ) ( )A3895.612cos5.22

°−= tti

【例 9-24】已知图 9-7R, L, C 并联电路中, Ω= 101R , Ω= 52R , Ω== 25jj LZ L ω ,

Ω−=−= 15j1

jC

Z C ω,电流 Ae10 0j=sI 。试求电路中的电流 1I 、 2I 与各支路的复功率以

及电源发出的复功率。

图 9-7 电路相量模型

Page 426: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

414

【解】

(1) 根据电路的基本理论,任何一个无源一端口网络的电压相量U 与电流相量 I之共轭复

数∗I 的乘积定义为该一端口网络所吸收的复功率(其单位为“VA”),记为 S ,即

∗= IUS

S 的实部就是该一端口网络吸收的有功功率,虚部就是无功功率。

引入复功率的目的是能够直接应用由相量法计算出的电压相量与电流相量来简单计算有

功功率、无功功率与视在功率。因为乘积 IU 是没有意义的。需要注意,复功率 S 虽然是一个

复数,但它不代表正弦量,不反映时域范围的功能关系。

(2) 用以下 MATLAB 程序对电路进行计算:

syms ais omega R1 R2 L C;

ais=10*exp(j*0);R1=10;R2=5;

Z1=R1;Z2=R2;Z3=25*j;Z4=-15*j;

ai1=ais*(Z2+Z4)/(Z1+Z2+Z3+Z4)

ai2=ais-ai1

uab=(Z1+Z3)*ai1

S1=uab*conj(ai1)

S2=uab*conj(ai2)

S=uab*ais

SS=S1+S2 程序执行结果

ai1 = -2.3077 - 8.4615i

ai2 = 12.3077 + 8.4615i

uab = 1.8846e+002 -1.4231e+002i

S1 = 7.6923e+002 +1.9231e+003i

S2 = 1.1154e+003 -3.3462e+003i

S = 1.8846e+003 -1.4231e+003i

SS = 1.8846e+003 -1.4231e+003i 即电路中的电流为

j4615.83077.21 −−=I , j4615.83077.122 +=I

两支路的复功率与电源发出的复功率分别为

VAj1.192323.7691 +=S , VAj4.33464.11152 −=S , VAj1.14236.1884 −=S

(3) 验算复功率的实部与虚部就是该一端口网络吸收的有功功率与无功功率。

① 第一条支路

syms Aai1 R1 X1;

ai1=-2.3077-8.4615j;Aai1=abs(ai1);

R1=10;P1=Aai1^2*R1

X1=25;Q1=Aai1^2*X1 语句执行结果

Page 427: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

415

P1 = 769.2246

Q1 = 1.9231e+003

即支路电阻消耗的有功功率是 1S 的实部,电感消耗的无功功率是 1S 的虚部。

② 第二条支路

syms Aai2 R2 X2;

ai2=12.3077+8.4615j;Aai2=abs(ai2);

R2=5;P2=Aai2^2*R2

X2=15;Q2=Aai2^2*X2 语句执行结果

P2 = 1.1154e+003

Q2 = 3.3461e+003 即支路电阻消耗的有功功率是 2S 的实部,电容消耗的无功功率是 2S 的虚部。

9.3.6 三相正弦交流电路计算的 MATLAB 实现

根据电工基础的理论:三相对称正弦交流电的三相依次为 A 相、B 相与 C 相,此为正相

序,反之为逆相序;无论是电源还是负载都可以联接成星形或三角形;三相相对于电源的中

性点的电压叫做相电压;三相之间的电压叫做线电压;三相正弦对称交流电的线电压是相电

压的 3 倍;三相瞬时相电压依次为 Au 、 Bu 与 Cu ,三个正弦电压相等,互成 3/2π 或 °120 ,

B 相滞后 A 相 °120 ,C 相滞后 B 相 °120 ,即 C 相又超前 A 相 °120 ;三相交流电的线电压也是

对称的且超前各自对应相电压的 °30 ;三角形联接的负载阻抗可以等效地转换成星形联接负载

阻抗,其规则为 3/∆= ZZY 等等。除这些电工的基本概念之外,需要指出,三相电路实质上

是复杂交流电路的一种特殊类型,前面简述的电路规律对三相电路完全适用。请看以下示例。

【例 9-25】已知三相电路中,三相星形对称负载 Ω= 4

πj

e10Z ,三相对称电压分别为

( ) ( ) V314cos100 ttua =

( ) ( )V120314cos100 °−= ttub

( ) ( ) V120314cos100 °+= ttuc

试求电路中的负载作星形联接时的线电流 ( )tia 、 ( )tib 、 ( )tic 与作三角形联接时的负载电流

( )tiab 、 ( )tibc 、 ( )tica 。

【解】 (1) 用以下 MATLAB 语句计算负载作星形联接时的线电流 ( )tia 、 ( )tib 、 ( )tic :

syms Z ua ub uc aia aib aic;

Z=10*exp(j*pi/4);ua=100*exp(j*0);

ub=100*exp(-j*2*pi/3);uc=100*exp(j*2*pi/3);

aia=ua/Z;Aaia=abs(aia)

thetaa=angle(aia)*180/pi

aib=ub/Z;Aaib=abs(aib)

thetab=angle(aib)*180/pi

Page 428: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

416

aic=uc/Z;Aaic=abs(aic)

thetac=angle(aic)*180/pi 语句执行结果

Aaia = 10

thetaa = -45

Aaib = 10

thetab = -165.0000

Aaic = 10

thetac = 75.0000 即负载作星形联接时的线电流 ( )tia 、 ( )tib 、 ( )tic 分别为:

( ) ( )A45314cos10 °−= ttia

( ) ( )A165314cos10 °−= ttib

( ) ( )A75314cos10 °+= ttic

(2) 用以下 MATLAB 语句计算负载作三角形联接时的负载电流 ( )tiab 、 ( )tibc 、 ( )tica :

syms Z uab ubc uca aiab aibc aica;

Z=10*exp(j*pi/4);

uab=100*sqrt(3)*exp(j*pi/6);

ubc=100*sqrt(3)*exp(-j*pi/2);

uca=100*sqrt(3)*exp(j*5*pi/6);

aiab=uab/Z;Aaiab=abs(aiab)

thetaab=angle(aiab)*180/pi

aibc=ubc/Z;Aaibc=abs(aibc)

thetabc=angle(aibc)*180/pi

aica=uca/Z;Aaica=abs(aica)

thetaca=angle(aica)*180/pi 语句执行结果

Aaiab = 17.3205

thetaab = -15.0000

Aaibc = 17.3205

thetabc = -135

Aaica = 17.3205

thetaca = 105.0000 即负载作三角形联接时的负载电流 ( )tiab 、 ( )tibc 、 ( )tica 分别为

( ) ( )A15314cos3205.17 °−= ttiab

( ) ( )A135314cos3205.17 °−= ttibc

( ) ( )A105314cos3205.17 °+= ttica

Page 429: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

417

9.4 在自动控制系统的频率特性计算中的应用

正弦交流电路应用复数来计算,因其中引入了符号 j (或 i)而称为符号法。自动控制的频

率特性也是因为其中有符号 j(或 i),所以其计算也能用复数来进行。

在 8.2 节介绍控制系统传递函数时已经引出频率特性的概念。但是,就频率特性的复数

性质以及工程上的大量繁杂计算,如果用计算器来进行,繁琐且易出错,还不能对文字符号

进行运算。以下会看到,用 MATLAB 的符号运算方法,这些问题都能迎刃而解。

9.4.1 自动控制系统的频率特性与复数计算的关系

根据自动控制理论,控制系统的频率特性就是指线性系统或环节在正弦信号作用下,稳

态输出与输入之比对频率的关系特性。频率特性与控制系统的传递函数之间有着确切而简单

的关系,即频率特性是传递函数中将复变量 s 用 ωj 代换的结果。根据积分变换的理论,如果

把 Fourier 变换看成 Laplace 变换中当 s= ωj 时的特例,那么稳定系统的频率特性就是系统输

出与输入的 Fourier 变换之比。 8.2 节介绍过 Laplace 变换,它是函数 ( )tf 在 s 的某一域内收敛的一无穷积分,即

( ) ( ) ttfsF st de0∫∞ −=

其中复变量 ωα j+=s 。不管是复变量 s 还是将 s 用 ωj 代换,其中都有符号 j(或 i),所以频率

特性都是一个复数函数,那么频率特性的计算理所当然可以用复数来进行。

9.4.2 自动控制系统典型环节频率特性计算的 MATLAB 实现

无论是自动控制系统还是其中的典型环节,它们的频率特性都是一个复数函数,用

MATLAB 的函数命令来进行计算是最简单方便的。在对具体问题进行计算时,为了简单、明

了起见,通常用传递函数来指代具体的环节或系统。

【例 9-26】试计算惯性环节 ( )1

1

+=

TssG 的频率特性。

【解】

用以下 MATLAB 语句计算惯性环节的频率特性:

syms T omega real;

G=1/(j*omega*T+1); Aabs=abs(G)

[Re]=simple(real(G))

[Im]=simple(imag(G))

Gang=atan(Im/Re) 语句执行结果

Aabs = 1/(1+omega^2*T^2)^(1/2)

Re = 1/(1+omega^2*T^2)

Im = -omega*T/(1+omega^2*T^2)

Gang = -atan(omega*T) 即惯性环节的实频特性与虚频特性及频率特性分别为

Page 430: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

418

( ) baT

G j1j

1j +=

+=

ωω ,

1

122 +

=ωT

a ,122 +

−=ω

ωT

Tb

( ) ( ) ( ) ( ) ( ) ( )ωωωϕ

ωωω

ωω TG

TGA

TG arctanj

22

jjj e1

1eje

1j

1j −∠

+===

+=

还有惯性环节的幅频特性与相频特性分别为

( ) ( )1

1j

22

22

+=+==

ωωω

TbaGA , ( ) ( ) ωωωϕ T

a

bG arctanarctanj −==∠=

【例 9-27】试计算振荡环节 ( )22 2

1

nnsssG

ωςω ++= 的频率特性。

【解】

用以下 MATLAB 语句计算振荡环节的频率特性:

syms zet omega omegan real;

G=omegan^2/((j*omega)^2+2*zet*omegan*(j*omega)+omegan^2);

Aabs=abs(G)

[Re]=simple(real(G))

[Im]=simple(imag(G))

Gang=simple(atan(Im/Re)) 语句执行结果

Aabs=omegan^2/(omega^4-2*omega^2*omegan^2+omegan^4+4*zet^2*omegan^2*omega

^2)^(1/2)

Re=(-omega^2*omegan^2+omegan^4)/(omega^4-2*omega^2*omegan^2+omegan^4+4*ze

t^2*omegan^2*omega^2)

Im=-2*omegan^3*zet*omega/(omega^4-2*omega^2*omegan^2+omegan^4+4*zet^2*omeg

an^2*omega^2)

Gang = -atan(2*omegan*zet*omega/(omegan^2-omega^2)) 即振荡环节的实频特性与虚频特性分别为

( )( ) 22

2

j2j

nn

nGωωςωω

ωω

++−= ba j+=

( )( ) ( )2222

222

2 nn

nnaςωωωω

ωωω

+−

−= , ( ) ( )2222

2

2

2

nn

nnbςωωωω

ωωςω

+−

∗−=

还有振荡环节的幅频特性与相频特性分别为

( ) ( )( ) ( ) 2

2

222222

2

21

1

2

j

+

=+−

==

nn

nn

nGA

ωως

ωωωςωωω

ωωω

Page 431: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

419

( ) =ωϕ ( )222

1

2

arctan2

arctanj

−=−

−=∠

n

n

n

nG

ωω

ωως

ωωωςω

ω

【例 9-28】试计算积分环节 ( )s

sG1= 的频率特性。

【解】

用以下 MATLAB 语句计算积分环节的频率特性:

syms omega real;

G=1/(j*omega); Aabs=abs(G)

[Re]=simple(real(G))

[Im]=simple(imag(G))

Gang=-atan(abs(Im)/Re) 语句执行结果

Aabs = 1/abs(omega)

Re = 0

Im = -1/omega

Gang = -1/2*pi 即积分环节的频率特性与实频特性及虚频特性分别为

( ) ( ) ( ) ( ) ( ) ( )2/jjjj e1

ejej

1j π−∠ ====

ωωω

ωω ωωϕ GGAG

( ) baG jj

1j +==

ωω , 0=a ,

ω1−=b

还有积分环节的幅频特性与相频特性分别为

( ) ( )ω

ωω 1j 22 =+== baGA , ( ) ( )

2

πarctanj −==∠=

a

bG ωωϕ

【例 9-29】试计算延迟环节 ( ) ssG τ−= e 的频率特性。

【解】

用以下 MATLAB 语句计算延迟环节的频率特性:

syms tao omega real;

G=exp(-tao*omega*j); Aabs=abs(G)

[Re]=simple(real(G))

[Im]=simple(imag(G))

Gang=atan(Im/Re) 语句执行结果

Aabs = 1

Re = cos(tao*omega)

Im = -sin(tao*omega)

Page 432: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

420

Gang = -atan(sin(tao*omega)/cos(tao*omega)) 即延迟环节的频率特性与实频特性及虚频特性分别为

( ) ( ) ( ) ( ) ( ) ( )ωτωωϕωτ ωωω −∠− ==== jjjjj eejeej GGAG ba j+=

( )ωτcos=a , ( )ωτsin−=b

还有延迟环节的幅频特性与相频特性分别为

( ) ( ) 1j 22 =+== baGA ωω , ( ) ( ) τωωωϕ −==∠=a

bG arctanj

【例 9-30】试计算一阶微分环节 ( ) 1+= sTsG 的频率特性。

【解】

用以下 MATLAB 语句计算一阶微分环节的频率特性:

syms T omega real;

G=1+T*omega*j; Aabs=abs(G)

[Re]=simple(real(G))

[Im]=simple(imag(G))

Gang=atan(Im/Re) 语句执行结果

Aabs = (1+T^2*omega^2)^(1/2)

Re = 1

Im = T*omega

Gang = atan(T*omega) 即一阶微分环节的频率特性与实频特性及虚频特性分别为

( ) ( ) ( ) ( ) ( ) ( )ωωωϕ ωωωωω TG TGATG arctanj22jjj e1eje1jj +===+= ∠

( ) baTG j1jj +=+= ωω , 1=a , ωTb =

还有一阶微分环节的幅频特性与相频特性分别为

( ) ( ) 1j 2222 +=+== ωωω TbaGA

( ) ( ) ωωωϕ Ta

bG arctanarctanj ==∠=

9.5 留 数

在复变函数中,留数的计算也是很重要而且是经常遇到的课题。在 MATLAB 系统中,有

专门为求留数而开发的函数命令。

9.5.1 留数的概念

设 0z 是函数 ( )zf 的孤立奇点,C 是 0z 的足够小的邻域内包含 0z 点于其内的任何一条正向

Page 433: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

421

简单闭曲线,且积分 ( )∫C

zzf d 为与 C 无关的定值。则 ( )∫C

zzf djπ2

1称为 ( )zf 在 0z 点的留数

或残数,记作 ( )[ ]0, zzfsRe 。即

( )[ ]0, zzfsRe ( )∫=C

zzf djπ2

1 (9-48)

这是根据复变函数的理论定义的留数,比较抽象。在微积分中,计算有理分式函数的积

分时,讨论过把分式分解成所谓部分分式的方法。在此,再给出部分分式中的留数的直观概

念。 若 n 阶多项式 ( )sA 不含有重根,则以下展开称为部分分式展开:

( )( ) ( )sk

ps

R

ps

R

ps

R

sA

sB

n

n +−

++−

+−

= 2

2

1

1 (9-49)

式中 nppp ,,, 21 称为极点; nRRR ,,, 21 称为留数;而 ( )sk 称为直接项。

若 ( )sA 含有 m 重根 jp ,那么相应部分则写为

( ) ( )mj

mj

j

j

j

j

ps

R

ps

R

ps

R

−++

−+

−−++ 1

2

1 (9-50)

在高等数学中,留数 nRRR ,,, 21 通常用待定系数法来计算。

9.5.2 计算留数的 MATLAB 函数命令

在 MATLAB 中求留数的函数命令为 residue( ),即 residue 意为留数(部分分式展开)。其

调用格式为:

[R,p,k] = residue(B,A)

函数命令输入参量为 B 与 A,B 与 A 是分子多项式 ( )sB 与分母多项式 ( )sA 以降幂排列的

多项式系数向量,residue( )函数是对两个多项式的比值( )( )sA

sB计算,计算结果作为函数的

输出量:即函数返回留数向量 R、极点向量 p,直接项返回到向量 k。函数返回的向量是以极

点向量 p 的元素从小到大的顺序排列的,留数向量 R 中元素与极点向量 p 中元素的位置顺序

一一对应。

极点的个数 n = length(A)-1=length(R)=length(p)。如果 length(B)<length(A),则直接项向

量为空;否则 length(k)=length(B)-length(A)+1。

[说明]

(1) MATLAB 中函数 length ( )的功能为计算向量的维数。

(2) 向量 k 中存放的是假分式( )( )sA

sB的有理整式的系数,即对应着从右向左依次为

,,,, 3210 ssss 等项的系数。

若 ( )sA 含有 m 重根 jp ,即 11 −++ === mjjj ppp ,函数返回的向量是仍以极点向量 p

的元素从小到大的顺序排列,而重根部分展开为式(9-50),即向量 R 与 p 元素的顺序与展开式

(9-50)各项从左到右的顺序一致。

Page 434: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

422

9.5.3 计算留数的应用

在自动控制的时域分析中,经常要用 Laplace 变换求解微分方程,求解过程中的重要一环

就是将输出量的象函数表达式展开成部分分式。可以用高等数学中介绍的待定系数法来求解,

而用 MATLAB 的函数 residue( )来计算就格外简单方便。请看以下示例。

【例 9-31】将输出量的象函数表达式 ( ) ( )3

3

+=

s

ssF 展成部分分式。

【解】

用以下 MATLAB 语句计算留数、极点与直接项:

B=[1 0 0 0];A=[1 3];

[R p k]=residue(B,A) 语句执行结果

R = -27

p = -3

k = 1 -3 9 即

( ) ( ) 3

2793

32

3

+−+−=

+=

sss

s

ssF

【例 9-32】将象函数表达式 ( )22

32 ++

+=ss

ssF 展成部分分式。

【解】

用以下 MATLAB 语句计算留数、极点与直接项:

B=[1 3];A=[1 2 2];

[R p k]=residue(B,A) 语句执行结果

R = 0.5000 - 1.0000i

0.5000 + 1.0000i

p = -1.0000 + 1.0000i

-1.0000 - 1.0000i

k = [ ] 即

( )22

32 ++

+=ss

ssF

j1

j5.0

j1

j5.0

+++

+−+−

=ss

【例 9-33】将函数表达式 ( )sss

sssF

+++−=

23

2

2

23展成部分分式。

【解】

用以下 MATLAB 语句计算留数、极点与直接项:

B=[1 -3 2];A=[1 2 1 0];

[R p k]=residue(B,A)

Page 435: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

423

语句执行结果

R = -1

-6

2

p = -1

-1

0

k = [ ] 即

( )( ) ssssss

sssF

2

1

6

1

1

2

23223

2

++−+

+−=

+++−=

Page 436: MATLAB符号运算及其应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/161373.pdf · 命令;第5 章介绍matlab 符号微积分运算的应用;第6 章介绍matlab

参 考 文 献

1 樊映川.高等数学讲义.北京:高等教育出版社,1958

2 同济大学数学教研室.高等数学习题集(1965 年修订本).北京:人民教育出社,1965

3 张元德.工学硕士入学考试数学复习指导及模拟练习.北京:清华大学出版社,1981

4 石福庆.高等数学辅导.北京:中国铁道出版社,1983

5 翟连林.高等数学习题集解答.北京:机械工业出版社,1986

6 同济大学数学教研室.线性代数(第二版).北京:高等教育出版社,1991

7 张凯院.矩阵论典型题解析及自测试题.西安:西北工业大学出版社,2001

8 南京大学数学系计算数学专业.线性代数.北京:科学出版社,1978

9 南京工学院数学教研组.积分变换.北京:人民教育出版社,1978

10 西安交通大学高等数学教研室.复变函数(第二版).北京:高等教育出版社,1981

11 福州教育学院.高中数学复习题解.天津:天津科学技术出版社,1985

12 中国数学会上海分会.高中数学复习资料.上海:上海教育出版社,1959

13 俞大光.电工基础.北京:人民教育出版社,1959

14 邱关源.电路.北京:高等教育出版社,1978

15 李瀚荪.电路分析基础.北京:人民教育出版社,1978

16 北京工业学院自控系.电路分析基础习题解答.北京:北京工业学院出版社,1980

17 童诗白.模拟电子技术基础.北京:清华大学出版社,1980

18 胡寿松.自动控制原理.北京:国防工业出版社,1984

19 孙虎章.自动控制原理.北京:中央广播电视大学出版社,1994

20 胡寿松.自动控制原理习题集.北京:国防工业出版社,1990

21 姜衍智 朱振青.自动控制理论习题详解.西安:陕西科学技术出版社,1981

22 莫正康.半导体变流技术.北京:北京机械工业出版社,1992

23 黄 俊.半导体变流技术.北京:北京机械工业出版社,1979

24 王沫然.MATLAB 6.0 与科学计算.北京:电子工业出版社,2001

25 张宜华.精通 MATLAB 5.北京:清华大学出版社,1999

26 张志涌.精通 MATLAB 5.3.北京: 北京航空航天大学出版社,2000

27 程卫国.MATLAB 5.3 应用指南.北京:人民邮电出版社,2000

28 黄忠霖.控制系统 MATLAB 计算及仿真.北京:国防工业出版社,2001

29 魏克新. MATLAB 语言与自动控制系统设计.北京:机械工业出版社,1997