matlab教程与心得整理版

上传人:大米 文档编号:578283810 上传时间:2024-08-23 格式:PDF 页数:113 大小:14.63MB
返回 下载 相关 举报
matlab教程与心得整理版_第1页
第1页 / 共113页
matlab教程与心得整理版_第2页
第2页 / 共113页
matlab教程与心得整理版_第3页
第3页 / 共113页
matlab教程与心得整理版_第4页
第4页 / 共113页
matlab教程与心得整理版_第5页
第5页 / 共113页
点击查看更多>>
资源描述

《matlab教程与心得整理版》由会员分享,可在线阅读,更多相关《matlab教程与心得整理版(113页珍藏版)》请在金锄头文库上搜索。

1、-M atlab学习主题-摘自: 莱农研究生论坛 电脑技术版整 理 : 半 匹 狼SYSU2006-03-12前言:MATLAB是美国MathWorks公司自20世纪80年代中期推出的数学软件,优秀的数值计算能力和卓越的数据可视化能力使其很快在数学软件中脱颖而出。到目前为止,其最高版本6.1版已经推出。随着版本的不断升级, 它在数值计算及符号计算功能上得到了进一步完善。MATLAB已经发展成为多学科、多种工作平台的功能强大的大型软件。在欧美等高校,MATLAB己经成为线性代数、自动控制理论、概率论及数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具,是攻读学位的大学生、

2、硕士生、博士生必须掌握的基本技能。学一学吧, 不管你是哪方面的研究可以都用到它.目录前言: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 1 -目 录. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .I线性规划问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 1 -非线性规划问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4、. . . . . . . . . . . . . . . . . . . . . . . - 2 -卷积问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 3 -1矩阵问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5、 . . . . . . . . . . . . . . . . . . . . . . . . - 3 -数值矩阵的生成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-3 -1 .实数值矩阵输入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6、. . . . . . . . . . . . .-3 -2 .复数矩阵输入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-4 -1.1.2 符号矩阵的生成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-

7、4 -1.1.3 大矩阵的生成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-5 -1.1.4 多维数组的创建. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-6 -1.1.5 特殊矩阵的生成. . . . .

8、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-7 -1矩阵运算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-13-1.1.1 .加、减运算. . . . . . . . . . . . . . .

9、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-13-1.2.2 乘法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-13-1.2.3 集合运算. . . . . . . . . . . . . . . . . . . .

10、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-17-1.2.4 除法运算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-21 -1.2.5 矩阵乘方. . . . . . . . . . . . . . . . . . . . . . . . .

11、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-21 -1.2.6 矩阵函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-21 -1.2.7 矩阵转置. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-22-1.2.8 方阵的行列式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-22-1.2.9 逆与伪逆. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-23-1.2.10 矩阵的迹. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-24-1.2.11 矩阵和向量的范数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14、 . . . . . . . . . . . . . . . . .-24-1.2.12 条件数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-25-1.2.13 矩阵的秩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15、. . . . . . . . . . . . .-25-1.2.14 特殊运算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-26-1.2.15 符号矩阵运算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16、. . . .-32-1.2.16 矩阵元素个数的确定. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-35-1.3 矩阵分解. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-35-1.4 线性方程的组的求解.

17、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-42-1.4.1 求线性方程组的唯一解或特解( 第一类问题). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-42-1.4.2 求线性齐次方程组的通解. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18、. . . . . . . . . . . . . . .- 45 -1.4.3 求非齐次线性方程组的通解. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-46-1.4.4 线性方程组的LQ解法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-48-1.4.5 双共挽梯度法解方程组.

19、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-48-1.4.6 稳定双共辄梯度方法解方程组. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .- 49 -1.4.7 复共挽梯度平方法解方程组. . . . . . . . . . . . . . . . . . . . . . . . . . .

20、. . . . . . . . . . . . . . . . . . . . . . .-50 -1.4.8 共挑梯度的LSQR方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 50 -1.4.9 广乂最小残差法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21、. . . . . . . -51-1.4.10 最小残差法解方程组. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -52-1.4.11 预处理共蛹梯度方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -53-1.4.12 准最小残差法解方程组. . .

22、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 53 -1 . 5 特征值与二次型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-54 -1.5.1 特征值与特征向量的求法. . . . . . . . . . . . . . . . . . . . . .

23、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 55 -1.5.2 提图特征值的计算精度. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 55 -1.5.3 复对角矩阵转化为实对角矩阵. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24、. . . . . . -56-1.5.4 正交基. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 56 -1.5.5 二次型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25、. . . . . . -57-1 . 6 秩与线性相关性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 5 7 -1.6.1 矩阵和向量组的秩以及向量组的线性相关性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 57 -1.6.2 求行阶梯矩阵及向量组的基. . . . . . . . . . . . . .

26、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -58-1 . 7 稀疏矩阵技术. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 5 9 -1.7.1 1 4 * * 仓 ,J . 591.7.2 将稀疏矩阵转化为满矩阵. . . . . . . . . . . . . . . . . . . . . .

27、. . . . . . . . . . . . . . . . . . . . . . . . . -60-1.7.3 稀 矩 非零兀素的索引. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .- 60 -1.7.4 外部数据转化为稀疏矩阵. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -61 -1.7.6 5-. - 63 -1.

28、7.7 画稀疏矩阵非零元素的分布图形. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .- 64 -1.7.8 矩阵变换. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 -1.7.9 稀疏矩阵的近似欧几里得范数和条件数. . . . . . . . . . . . . . . . . . . . .

29、 . . . . . . . . . . . . .- 66 -1.7.10 稀疏矩阵的分解. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .- 66 -1.7.12 稀疏矩阵的线性方程组. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-69-2曲线拟合与插值问题. . . . . . . .

30、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .- 6 9 -2 . 1 曲线拟合. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-69 -2 . 2 一维插值. . . . . . . . . . . . . . . . . . . . . . .

31、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -7 1 -2 . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 7 4 -2 . 4 M 文件举例. . . . . . . . . . . . . . . . . . . . . . . . . . . .

32、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-7 6 -2 . 5 小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -8 0 -3常用命令. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .- 8 0 -3 . 1 常用命令-管理命令和函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -8 0 -常用命令管理变量和工作区( 输入输出、内存管理等) . . . . . . . . . . . . . . . . . . . . . . . . . .-8 1 语言结构和调试命令程序设计. . . . . . . . .

34、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -8 1 -语言结构和调试命令流程控制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-8 2 语言结构和调试命令交互输入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35、 . -8 2 -语言结构和调试命令-面向对象编程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-8 3 -4语言结构和调试命令. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误! 未定义书签。语言结构和调试命令-程序调试. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36、 . . . . . . . . . . . . . .-8 3 -1 吾 枪 / 和调命 令 - la s t er r , a s fw a r n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - 8 3 -创建图形用户界面 对话框. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -8 4 -5创建图形用户界面.

37、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .- 8 4 -用户界面对象.-84-6图象可视化函数- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-84-图象可视化函数基本绘图和图象函数.- 84 -图象可视化函数三维绘图函数.-

38、 85 -图象可视化函数绘制标注和网络. - 85-图象可视化函数- 体数据可视化.- 86 -图象可视化函数表面、网格和轮廓绘制.-86-图象可视化函数-,域生成.- 86 -图象可视化函数- 专门图形绘制.-87-图象可视化函数视觉控制.- 88 -图象可视化函数-,颜色操作.- 88 -图象可视化函数-打印函数.- 89 -图象可视化函数-图形图象处理.- 89 -7双重函数和非线性数值方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-

39、90-8 SIMULINK 的命令集. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-90 -9数据分析和傅立叶变换. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-92-数据分析和傅立叶变换,滤波和卷积.- 92 -数据分析和傅立叶变换,相关.- 9

40、2 -数据分析和傅立叶变换,有限差分.- 93 -数据分析和傅立叶变换,傅立叶变换.- 93 -数据分析和傅立叶变换-向量函数. - 93 -10 MATLAB 使用的一点儿体会(FOR BEGINNER).-94-10.1. help:最有效的命令(参阅了瀚海mathtools的starrynight网友的文章) .- 94 -10.2. see also: 不可小瞧的关联.- 95 -10.3. lookfor: matlab 中的 google.- 95 -10.4. get,set: GUI object 属性的帮手.-95 -10.5. Edit: 查看m源文件的助手.- 95-10

41、.6. 其他常用命令: which, what .-96-10.7. 各个高校 bbs 的 mathtools 版.- 96 -10.8. 一些专业网站.- 96 -10.9. 最后一条,要大胆的去试,哪怕只有一丁点儿可能。.-96-11 MATLAB代码矢量化问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-97 -11.1、 基本技术. . . . . . . . . . . . . . . . . . . . . . . . . .

42、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-97-11.1.1 MATLAB 索引或引用(MXTLAB Indexing or Referencing).- 97 -1.1) 下标法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-97-1.2) 线性法. . . . . . . . . . . . .

43、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-98-1.3) 逻辑法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-98-11.12) 数组操作和矩阵操作(Array Operations vs. Matrix Operations).-99-11

44、.1.3) 布朗数组操作(Boolean Array Operations).- 99 -11.1.4) 从向量构建矩阵(Constructing Matrices from Vectors).- 100 -11.1.5) 相关函数列表(Utility Functions). - 100 -11.2、扩充的例子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-101-11.2.1 作用于两个向量的矩阵函数.-

45、101 -/7.2.2 排序、设置和计数(Ordering, Setting, and Counting Operations). - 102 -III11.2. 3 稀疏矩阵结构(Sparse Matrix Structures).- 103 -11.2. 4 附加的例小Additional Examples).- 104 -11.3 、更多资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-107-H

46、.3.1矩阵索引和运算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-107-11.3.2 矩阵存储管理(Matrix Memory Management). - 107 -11.3.3 发挥MATLAB 的最高性能(Maximizing MATLAB Performance).- 108 -11.4 结论. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-108-IV线性规划问题线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB6.0解决的线性规划问题的标准形式为:minsub.to:其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵。其它形式的线性规划问题都可经过适当变换化为此标准形式。在 MATLAB6.0版中,线性规划问题( Linear Programming)已 用 函 数 linprog取代了MATLAB5.X版中的Ip 函数。当然,由于版本的向下兼容性,一般说来,低版本中的函

48、数在 6.0版中仍可使用。函数 linprog格 式 x = linprog(f,A,b) %求 min f , *x sub.to线性规划的最优解。x = linprog(f,A,b,Aeq,beq) %等 式 约 束 ,若没有不等式约束,则 A=, b= x = linprog(f,A,b,Aeq,beq,lb,ub) %指定 x 的 范 围 ,若没有等式约束,则 Aeq二口,beq=x = linprog(f,A,b,Aeq,beq,lb,ub,xO) % 设置初值 x0x = Iinprog(f,A,b,Aeq,beq,lb,ub,x0,options) % options 为指定的优

49、化参数x,fval = linprog() % 返回目标函数最优值, 即fval= f *x。x,lambda,exitflag = linprog() % lambda 为解 x 的 Lagrange 乘子。x, lambda,fval,exitflag = linprog() % exitflag 为终止迭代的错误条件。x,fval, lambda,exitflag,output = linprog() % output 为关于优化的一些信息说 明 若 exitflag0表示函数收敛于解x, exitflag=O表示超过函数估值或迭代的最大数字,exitflag0,表示函数收敛于x , 若

50、 exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag v为向量,其长度可不相同。说 明长度为m的向量序列u和长度为n的向量序列v的卷积(C o n v o l ut i o n )定义为:式中:w向量序列的长度为(m + n - 1 ) ,当m=n时,w (l ) = u(l ) * v (l )w (2 ) = u( 1 ) * v (2 ) + u(2 ) * v ( 1 )w (3 ) = u( 1 ) * v (3 ) + u(2 ) * v (2 ) + u(3 ) * v ( 1 )w (n ) = u( 1 ) * v (n ) + u(2 ) * v (

51、n - 1 ) + . . . + u(n ) * v (l )-15-w(2*n l) = u(n)*v(n)例 1-26展开多项式解: w=conv( 1,2,2,conv( 1,4, 1,1)w =1 7 16 188 P=poly2str(w/s) % 将 w 表示成多项式P =sA4 + 7 sA3 + 16 sA2 + 18s + 87 . 反褶积(解卷) 和多项式除法运算函 数deconv格 式 q,r = deconv(v,u) %多项式v 除以多项式u , 返回商多项式q 和余多项式r。注意:v、u、q、r 都是按降基排列的多项式系数向量。例 1-27 , 则其卷积为 u =

52、 l 2 3 4 v = 10 20 30 c = conv(u,v)c =10 40 100 160 170 120则反褶积为 q j = deconv(c,u)q =10 20 30r =0 0 0 0 0 08 . 张量积函 数 kron格 式 C=kron (A,B) %A为 m X n矩阵,B 为 pX q矩阵,则 C 为 mpXnq矩阵。说 明 A 与 B 的张量积定义为: A B 与 B A 均为mpXnq矩阵,但一般地AB BA。例 1-28 求 AB。 A=l 2;3 4J;B=I 2 3;4 5 6;7 8 9J; C=kron(A,B)C =1 2 3 2 4 64 5

53、6 8 10 127 89 14 16 183 6 9 4 8 1212 15 18 16 20 2421 24 27 28 32 36- 16-1.2.3集合运算1 .两个集合的交集函数 i n t e r s e c t格 式c二i n t e r s e c t (a, b ) %返回向量a、b的公共部分,即c二a Gb。c = i n t e r s e c t (A , B , T o w s ) % A、B为相同列数的矩阵,返回元素相同的行。 c , i a, i b = i n t e r s e c t (a, b ) % c为a、b的公共元素,i a表示公共元素在a中的位置,

54、i b表示公共元素在b中位置。例 1 - 2 9 A = l 2 3 4 ; 1 2 4 6 ; 6 7 1 4 A =1 2 341 2466 7 1 4 B = l 2 3 8 ; 1 1 4 6 ; 6 7 1 4 B =1 2 3 811466 7 1 4 C = i n t e r s e c t (A , B , Y o w s )C =6714例 1 - 3 0 A=1 9 6 2 0 ; B = l 2 3 4 6 1 0 2 0 ; c , i a, i b = i n t e r s e c t (A , B )c =1 6 2 0i a =1 3 4i b =1 5 72

55、 .检测集合中的元素函数 i s m e m b e r格 式k=i s m e m b e r (a, S ) %当a中元素属于S时,k取1,否则,k取0。k = i s m e m b e r (A , S ; r o w s ) % A S有相同的列,返回行相同k取1,不相同取0的列向量。例 1 - 3 1 S = 0 2 4 6 8 1 0 1 2 1 4 1 6 1 8 2 0 ; a= l 2 3 4 5 6 ; k = i s m e m b e r (a, S )- 17-k =0 1 0 1 0 1 % 1表示相同元素的位置例 1 - 3 2 A = l 2 3 4 ; 1

56、2 4 6 ; 6 7 1 4 B = l 2 3 8 ; 1 1 4 6 ; 6 7 1 4 k = i s m e m b e r (A , B , r o w s )k =001% 1表示元素相同的行3 . 两集合的差函数 s e t d i f f格 式c = s e t d i f f (a , b ) %返回属于a但不属于b的不同元素的集合,C = a - b oc = s e t d i f f (A, B, To w s , ) 返回属于A但不属于B的不同行c , i = s e t d i f f ( ) %c与前面一致,i表示c中元素在A中的位置。例 1 - 3 3A =

57、1 7 9 6 2 0 ; B = l 2 3 4 6 1 0 2 0 ; c =s e t d i f f (A, B)c =7 9例 1 - 3 4 A=l 2 3 4 ;1 2 4 6 ;6 7 1 4 B = 1 2 3 8;1 1 4 6 ; 6 7 1 4 c =s e t d i f f (A, B, r o w s )c =12341 2464 . 两个集合交集的非(异或)函 数s e t x o r格 式c = s e t x o r (a , b ) %返回集合a、b交集的非c = s e t x o r (A, B, To w s ) %返回矩阵A、B交集的非,A、B有相

58、同列数。c , i a , i b = s e t x o r (- ) % i a i b表示c中元素分别在a (或A) b(或B)中位置例 1 - 3 5 A=l 2 3 4 ; B=2 4 5 8; C=s e t x o r (A, B)C =1 3 5 8例 1 - 3 6-18- A=l 2 3 4 ;1 2 4 6 ;6 7 1 4 A =1 2 3 41 2 4 66 7 1 4 B=l 2 3 8;1 1 4 6 ;6 7 1 4 B =1 2 3 81 1 4 66 7 1 4 C, i a , i b =s e t x o r (A, B, r o w s )C =1 1

59、 4 61 2 3 41 2 3 81 2 4 6i a =12i b =215 .两集合的并集函 数u n i o n格式 c = u n i o n (a , b ) %返回 a、b 的并集,E P c = a U b oc = u n i o n (A, B, Yo w s ) % 返回矩阵A、B不同行向量构成的大矩阵,其中相同行向量只取其* Oc , i a , i b = u n i o n ()% i a i b分别表示c中行向量在原矩阵(向量)中的位置例 1 - 3 7 A=l 2 3 4 ; B=2 4 5 8; c =u n i o n (A, B)则结果为c =1 2 3

60、4 5 8例 1 - 3 8 A=l 2 3 4 ;1 2 4 6 A =1 2 3 41 2 4 6 B=l 2 3 8;1 1 4 6 B =- 19-1 2381 146 |c,ia,ib=union(A,B,Tows)c =1 146123412381 246ia =12ib =216 . 取集合的单值元素函数格 式 b 二unique (a) %取集合a 的不重复元素构成的向量b = unique (A,Tows) %返回A、B 不同行元素组成的矩阵|b,i,j = unique () %i j 体现b 中元素在原向量(矩阵)中的位置例 1-39 A=l 12 2 4 4 6 4 6

61、A =1 1 2 2 4 4 6 4 6 二 unique(A)c =1246i =2 4 8 9j =1 1 2 2 3 3 4 3 4例 1-40 A=l 2 2 4;1 1 4 6;1 1 4 6A =1 2241 1461146 c,i,j=unique(A,rows,)c =1 14612243-20-1j =211.2.4 除法运算Matlab提供了两种除法运算:左 除 ()和 右 除 (/)o 一般情况下,x=ab是方程a*x=b 的解 , 而 x=b/a是方程x*a=b的解。例:a=l 2 3; 4 2 6; 7 4 9b=4;l;2;x=ab则显示:x=-1.50002.00

62、000.5000如果a 为非奇异矩阵,则 ab和 b/a可通过a 的逆矩阵与b 阵得到:ab = inv(a)*bb/a = b*inv(a)数组除法:A./B表示A 中元素与B 中元素对应相除。1.2.5 矩阵乘方运算符:人运算规则:(1 ) 当 A 为方阵,P 为大于。的整数时,A 表示A 的 P 次方,即 A 自乘P 次;P 为小于 0 的整数时,A”表示A-1的 P 次方。(2 ) 当 A 为方阵,p 为非整数时,则 其 中 V 为 A 的特征向量, 为特征值对角矩阵。如果有重根,以上指令不成立。(3 ) 标量的矩阵乘方P A ,标量的矩阵乘方定义为式中V, D 取自特征值分解AV=A

63、D。( 4 ) 标量的数组乘方P -A ,标量的数组乘方定义为数组乘方:A JP:表示A 的每个元素的 P 次乘方。1.2.6 矩阵函数命令方阵指数函 数 expm格 式 Y = expm(A) %使用Pade近似算法计算e A ,这是一个内部函数,A 为方阵。Y=expml(A) % 使用一个M 文件和内部函数相同的算法计算eAY=expm2(A) %使用泰勒级数计算eA-21 -Y=expm3(A) %使用特征值和特征向量计算eA命令矩阵的对数函 数 logm格 式 Y = logm(X)%计算矩阵X 的对数,它是expm(X)的反函数。Y,esterr = logm(X) %esterr

64、 为相对残差的估计值:norm(expm(Y) X)/norm(X)例 1-41 A=l 1 0;0 0 2;0 0-1; Y=expm(A)Y =2.7183 1.7183 1.08620 1.0000 1.26420 0 0.3679 A=logm(Y)A =1.0000 1.0000 0.00000 0 2.00000 0-1.0000命令方阵的函数函 数 funm格 式 F = funm(A,fun)%A为方阵,计算由fun指定的A 的矩阵函数,fun可以是任意基本函数,如 sin、cos 等 等 , 例 如 :funm(A, exp )=expm(A)oF,esteiT = funm

65、(A,fun) %esterr为结果所产生的相对误差的估计值。命令矩阵的方根函 数 sqrtm格 式 X = sqrtm(A)%矩阵A 的平方根A 1/2,相当于X*X=A,求 X。若 A 的特征值有非负实部,则 X 是唯一的;若 A 的特征值有负的实部,则 X 为复矩阵;若 A 为奇异矩阵,则X 不存在。X,resnorm = sqrtm(A) % resnorm为结果产生的相对误差X,alpha,condest = sqrtm(A) % alpha为稳定因子,condest为结果的条件数的估计值。命 令 矩 阵 A 的多项式函数 polyvalm格 式 polyvalm(P,A)%P为多项

66、式系数向量,方阵A 为多项式变量,返回多项式值。1.2.7 矩阵转置运算符:运算规则:若矩阵A 的元素为实数,则与线性代数中矩阵的转置相同。若 A 为复数矩阵,则 A 转置后的元素由A 对应元素的共粗复数构成。若仅希望转置,则用如下命令:A . 。1.2.8 方阵的行列式函 数 det-22-格 式 d = det(X)%返回方阵X 的多项式的值例 1-42 A=l 2 3;4 5 6;7 8 9A =1 234 56789 D=det(A)D =01.2.9逆与伪逆命令逆函 数 inv格 式 Y=inv(X)%求方阵X 的逆矩阵。若 X 为奇异阵或近似奇异阵,将给出警告信息。例 1-43求的

67、逆矩阵方法一A=1 2 3;22 1;343; 丫二足丫(人)或 Y=AA(-1)则结果显示为Y =1.0000 3.0000 -2.0000-1.5000 -3.0000 2.50001.0000 1.0000-1.0000方法二:由增广矩阵进行初等行变换B=1,2, 3, 1, 0, 0; 2, 2, 1, 0,1, 0; 3,4, 3, 0,0, 1;C=rref(B) %化行最简形X=C(:, 4:6) %取矩阵C 中的A /-1)部分显示结果如下:C =1.0000 0 0 1.0000 3.0000 -2.00000 1.0000 0 -1.5000 -3.0000 2.50000

68、 0 1.0000 1.0000 1.0000 -1.0000x =1.0000 3.0000 -2.0000-1.5000 -3.0000 2.50001.0000 1.0000-1.0000例 1-44 A=2 1 -1;2 1 2;1 -1 1; format rat % 用有理格式输出 D=inv(A)D =1/3 0 1/3-23-0 1/3 -2/3-1/3 1/3 0命令伪逆函 数 pinv格 式 B = pinv(A) %求矩阵A 的伪逆B = pinv(A, tol) %tol 为误差:max(size(A)*norm(A)*eps说明当矩阵为长方阵时, 方程AX=I和 XA

69、=I至少有一个无解, 这时A 的伪逆能在某种程度上代表矩阵的逆,若 A 为非奇异矩阵,则 pinv(A): inv(A)。例 1-45 A=magic(5); %产生5 阶魔方阵。 A=A(:,1:4) % 取 5 阶魔方阵的前4 列元素构成矩阵AoA =17 24 1 823 5 7 144 6 13 2010 12 192111 18 25 2 X=pinv(A) %计算A 的伪逆X =-0.0041 0.0527 -0.0222 -0.0132 0.00690.0437 -0.0363 0.0040 0.0033 0.0038-0.0305 0.0027 -0.0004 0.0068 0

70、.03550.0060 -0.0041 0.0314 0.0211 -0.03151.2.10 矩阵的迹函 数 trace格 式 b二 lrace(A)%返回矩阵A 的迹,即 A 的对角线元素之和。1.2.11 矩阵和向量的范数命 令 向量的范数函 数 norm格 式 n = norm(X)%X为向量,求欧几里德范数,即 。n = norm(X,inf) %求范数,即 。n = noiTn(XJ) % 求 1 -范数,即 。n = norm(X,-inf) %求向量X 的元素的绝对值的最小值,即 。n = norm(X, p) %求 p-范数,即 ,所以 norm(X,2) = norm(X)

71、。命令矩阵的范数函 数 norm格 式 n 二norm(A)%A为矩阵,求欧几里德范数,等于A 的最大奇异值。n = norm(A,I) %求 A 的列范数,等于A 的列向量的1-范数的最大值。n = norm(A,2) % 求 A 的欧几里德范数,和 norm(A)相同。-24-n = norm(A,inf)%求 行 范 数 ,等于A 的行向量的1-范数的最大值即:max(sum(abs(A)。n = norm(A, *fro) %求矩阵 A 的 Frobenius 范 数 ,即 sqrt(sum(diag(A*A),不能用矩阵p-范数的定义来求。命令范数的估计值函数 normest格 式

72、nrm = normest(A) %矩阵A 的 2- 范数( 欧几里德范数) 的估计值,相对误差小于106。nnn = normest(A,tol) %tol 为指定相对误差nrm,count = normest() count给出计算估计值的迭代次数1.2.12 条件数命令矩阵的条件数函 数 cond格 式 c = cond(X) % 求 X 的 2- 范数的条件数,即 X 的最大奇异值和最小奇异值的商。c = cond(X,p)%求 p-范数的条件数,p 的值可以是l 、2、inf或者fro。说明线性方程组AX=b的条件数是一个大于或者等于1 的实数,用来衡量关于数据中的扰动,也就是A/或

73、 b 对解X 的灵敏度。一个差条件的方程组的条件数很大。条件数的定义为:命 令 1-范数的条件数估计函数 condest格 式 c = condest (A) %方阵A 的 1-范数的条件数的下界估值。c,v = condest (A) %v 为向量,满 足 ,即 norm(A*v,l) =norm(A,l)*norm(v,l)/c。c,v = condest (A.t) % 求上面的c 和 v , 同时显示出关于计算的步骤信息。如果t = l , 则计算的每步都显示出来:如果t= - l,则给出商c/rcond(A)。命令矩阵可逆的条件数估值函 数 rcond格 式 c = rcond(A)

74、%对于差条件矩阵A 来说, 给出一个接近于0 的数; 对于好条件矩阵A,则给出一个接近于1 的数。命令特征值的条件数函数 condeig格 式 c = condeig(A) % 返回矩阵A 的特征值的条件数V,D,c = condeig(A) % D为 A 的特征值对角阵,V 为 A 的特征向量。1.2.13 矩阵的秩函 数 rank格 式 k = rank (A) %求矩阵A 的秩k = rank (A,tol) %tol 为给定误差-25-1.2.14特殊运算1 .矩阵对角线元素的抽取函 数 diag格 式 X = diag(v,k) %以向量v 的元素作为矩阵X 的第k 条对角线元素,当

75、 k=0时,v 为 X的主对角线;当 k0时,v 为上方第k 条对角线;当 k0:抽取上方第k 条对角线元素;k0为主对角线以上;k0为主对角线以上;kA=1 2 3 4 5 6 ;6 7 8 9 0 1A =1 2 3 4 5 66 7 8 9 0 1 B=ones(3,4)B =111111111111 B(=A(B =1 74063 962 8 5 1(2) Reshape函数变维格 式 B = reshape(A,m,n) %返回以矩阵A 的元素构成的m X n矩阵BB = reshape(A,m,n,p, , ,) %将矩阵 A 变维为 mXnXpX B = reshape(A,m

76、n p)%同上B = reshape(A,siz) % 由 siz决定变维的大小,元素个数与A 中元素个数相同。-27-例 1-49矩阵变维 a=l:12; b=reshape(a,2,6)b =1 3 5 79 112 4 6 8 10 124 .矩阵的变向( 1 ) 矩阵旋转函数格 式 B = rot90 (A) %将矩阵A 逆时针方向旋转908 二10190S,1大于关系V 大于关系=等于关系 =大于或等于关系 = B, C 3 = A = BC l =0 1 0 10 0 1 0C 2 =1 1 1 11 0 1 1C 3 =1 0 1 01 1 0 16 . 矩阵元素的数据变换对于小

77、数构成的矩阵A来说,如果我们想对它取整数,有以下几种方法:( 1 ) 按- 8 方向取整函 数 f l o o r格 式 f l o o r ( A ) % 将 A中元素按- 8 方向取整,即取不足整数。( 2 ) 按+8方向取整函 数 c e i l格 式 c e i l ( A ) % 将 A中元素按+8方向取整,即取过剩整数。( 3 ) 四舍五入取整函 数 r o u n d格 式 r o u n d ( A ) % 将 A中元素按最近的整数取整,叩四舍五入取整。( 4)按离0 近的方向取整函 数 f i x格 式 f i x ( A ) % 将 A中元素按离0 近的方向取整例 1-55

78、 A = -1.5+4*r a n d ( 3)A =2.3005 0.4439 0.3259-0.5754 2.0652-1.42600.9274 1.5484 1.7856 B 1 = f lo o r ( A ),B 2= c e i l( A )33= r o u n d ( A ),B 4= f i x ( A )B l =200-1 2-20 1 1-30-B2 =3 1 103-1122B3 =200-1 2-1122B4 =20002-10 1 1( 5 ) 矩阵的有理数形式函 数 rat格 式 n,d=rat (A) % 将 A 表示为两个整数矩阵相除,即 A=n./do例

79、1-56对于上例中的A n,d=rat(A)n =444 95 131-225 2059 -472166 48 1491d =193 214 402391 997 331179 31 835( 6 ) 矩阵元素的余数函 数 rem格 式 C = rem (A, x) %表示A 矩阵除以模数x 后的余数。若 x = 0 ,则定义rem(A, 0)=NaN,若 xW O ,则整数部分由Ex(A./x)表示,余数C=Ax.*Ex (A ./x)允许模x 为小数。7 . 矩阵逻辑运算设矩阵A 和 B 都是m X n矩阵或其中之一为标量, 在 MATLAB中定义了如下的逻辑运算:( 1) 矩阵的与运算格

80、式 A&B 或 and(A, B)说 明 A 与 B 对应元素进行与运算,若两个数均非0 , 则结果元素的值为1 , 否则为0。( 2 ) 或运算格式 A|B 或 or(A, B)说 明 A 与 B 对应元素进行或运算,若两个数均为0 , 则结果元素的值为0 , 否则为1。( 3 ) 非运算格 式 A或 not (A)说 明 若 A 的元素为0 , 则结果元素为1 , 否则为0。( 4 ) 异或运算-31 -格式 xor (A,B)说 明 A 与 B 对应元素进行异或运算,若相应的两个数中一个为0, 一个非0 , 则结果为0,否则为1。例 1-57 A=0 2 3 4;l 3 5 0,B=I

81、0 5 3;1 5 0 5A =0 2 3 41350B =10531505 C1 =A&B,C2=A|B,C3=A,C4=xor(A,B)Cl =00 1 11 100C2 =11111111C3 =10000 00 1C4 =1 10000 1 11.2.15符号矩阵运算1 .符号矩阵的四则运算Matlab 6 .x 抛弃了在4.2版中为符号矩阵设计的复杂函数形式,把符号矩阵的四则运算简化为与数值矩阵完全相同的运算方式,其运算符为:加 ( + )、减 ( 一 )、乘 ( X )、除 ( /、 )等或:符号矩阵的和( symadd)、差 ( symsub)、乘 (symmul)o例 1-58

82、 ;C=B-AD=ab则显示:C=x-l/x l-l/(x+l)x+2-l/(x+2) -l/(x+3)D=-6*x-2*xA3-7*xA2 1 /2*x A3+x+3/2*xA26+2*x 3+1 ()*x八 2+ 14*x -2*xA2-3/2*x-1 /2*xA3-32-2 . 其他基本运算符号矩阵的其他一些基本运算包括转置( )、行 列 式 (d e t),逆 ( inv)、秩 ( rank)、基( 人)和 指 数 ( exp和 expm )等都与数值矩阵相同3 . 将数值矩阵转化为符号矩阵函 数 sym格 式 B=sym(A) % 将 A 转化为符号矩阵B例 1-59 A=2/3,s

83、qrt(2),0.222; 1.4,1 /0.23,log(3)A =0.6667 1.4142 0.22201.4000 4.3478 1.0986 B=sym(A)B =2/3, sqrt(2), 111/500 7/5, 100/23, 4947709893870346*2八 (-52)4 . 符号矩阵的索引与修改符号矩阵的索引与修改同数值矩阵的索引与修改完全相同,即用矩阵的坐标括号表达式实现。例 1-60对上例中的矩阵BB (2,3)% 矩阵的索引ans =4947709893870346*2八 ( 52) B(2,3)=hg(7), %矩阵的修改B =2/3, sqrt(2), 11

84、1/500 7/5, 100/23, log(7)5 . 符号矩阵的简化符号工具箱中提供了符号矩阵因式分解、展开、合并、简化及通分等符号操作函数。( 1 ) 因式分解函 数 factor格 式 factor(s) %符号表达式s 的因式分解函数说 明 S 为符号矩阵或符号表达式,常用于多项式的因式分解。例 1-61将 x 9 -l分解因式在 Matlab命令窗口键入:-33-syms xfactor(xA9-l)则显示:ans =(x-1 )*(x 八 2+x+1 )*(x6+x 八 3+1)例 1-62问 “ 入”取何值时,齐次方程组 有非。解?解:在 Matlab编辑器中建立M 文件:sy

85、ms kA=l-k2 4;2 3-k 1;1 1 1-k;D=det(A)factor(D)其结果显示如下:D =-6*k+5*kA2-kA3ans =-k*(k-2)*(-3+k)从而得到:当 k=0、k=2或 k=3时,原方程组有非0 解。( 2 ) 符号矩阵的展开函 数 expand格式:expand %符号表达式s 的展开函数说明:s 为符号矩阵或表达式。常用在多项式的因式分解中,也常用于三角函数,指数函数和对数函数的展开中。例 1-63 将(x+l)3、sin(x+y)展开在 Matlab编辑器中建立M 文件:syms x yp=expand(x+ 1)A3)q=expand(sin

86、(x+y)则结果显示为P =xA3+3*xA2+3*x+lq =sin(x)*cos(y)+cos(x)*sin(y)( 3 ) 同类式合并函数 Collect格 式 Collect(s,v) % 将 s 中的变量v 的同基项系数合并Collect(s) % s 是矩阵或表达式,此命令对由命令findsym函数返回的默认变量进行同类项合并。( 4 ) 符号简化函 数 simple或 simplify %寻找符号矩阵或符号表达式的最简型格 式 simple (s) % s 是矩阵或表达式R,how=simple (s) % R为返回的最简形,how为简化过程中使用的主要方法。说 明 Simple

87、(s)将表达式s 的长度化到最短。 若还想让表达式更加精美, 可使用函数Pretty。格 式 Pretty(s) %使表达式s 更加精美例 1-64计算行列式的值。在 Matlab编辑器中建立M 文件:-34-syms ab edA=l 1 1 1 ;a b c d;aA2 bA2 cA2 dA2;aA4 bA4 cA4 dA4;dl=det(A)d2=simple(dl) %化简表达式 dlpretty(d2) %让 表达式d2符合人们的书写习惯则显示结果如下:dl =b*c 八 2*d 八 4-b*d 八 2加 八 4-1) 八 2气*( 1 八 4+1) 八 2*(1*(?人 4+1)

88、八 4*c*d 八 2-b 八 4*d*c 八 2-a*c 八 2*d 八 4+a*d 八 2*i4+a*bA2*d 八 4a*b 八 2*cA4a*b 八 4*( 1八 2+ *1?八 4*: 八 2+八 2*c*dA4-a八 2*(1*(?八 4 八 2*b*(jA4+aA2*b*c 八 4+a八2*b 八 4*&2八 2*1) 八 4 *c-a八 4 *c*d 八 2+a八 4 *d*c 八 2+a八 4 *b*d 八 2-a 八 4 *b*c 八 2-a八 4 *b 八 2*d+aA4*bA2*cd2 =(-d+c)*(b-d)*(b-c)*(-d+a)*(a-c)*(a-b)*(a+

89、c+d+b)(-d+c)(b-d)(b-c)(-d+a)(a-c)(a-b)(a+c+d+b)1.2.16矩阵元素个数的确定函 数 numel格 式 n = numel(a) %计算矩阵A 中元素的个数例 1-65 A=l 2 3 4;5 6 7 8; n=numel(A)n =81 .3 矩阵分解1.3.1 Cholesky 分解函 数 chol格 式 R = chol(X) % 如果X 为 n 阶对称正定矩阵,则存在一个实的非奇异上三角阵R , 满足 R, *R= X;若 X 非正定,则产生错误信息。R,p= chol(X) %不产生任何错误信息,若 X 为正定阵,则 p=0, R 与上相

90、同;若 X 非正定,则 p 为正整数,R 是有序的上三角阵。例 1-66 X=pascal(4) %产生 4 阶 pascal 矩阵X =111112341 36 101 4 10 20-35- R,p=chol(X)R =11110 12300 1 30 00 1P =01.3.2 LU 分解矩阵的三角分解又称LU 分解,它的目的是将一个矩阵分解成一个下三角矩阵L 和一个上三角矩阵U 的乘积,即人= 11)。函 数 lu格 式 L,U = lu(X)%U为上三角阵,L 为下三角阵或其变换形式,满足LU=X。L,U,P = lu(X) % U为上三角阵, L 为下三角阵, P 为单位矩阵的行变

91、换矩阵, 满足LU=PXo例 1-67 A=l 2 3;4 5 6;7 8 9; L,U=lu(A)L =0.1429 1.0000 00.5714 0.5000 1.00001.0000 0 0u =7.0000 8.0000 9.00000 0.8571 1.71430 0 0.0000 L,U,P=lu(A)L =1.0000 0 00.1429 1.0000 00.5714 0.5000 1.0000u =7.0000 8.0000 9.00000 0.8571 1.71430 0 0.0000P =00 11 000 1 0-36-1.3.3 QR 分解将矩阵A 分解成一个正交矩阵与

92、一个上三角矩阵的乘积。函 数 qr格 式 Q,R = qr(A)%求得正交矩阵Q 和上三角阵R, Q 和 R 满足A=QR。Q,R,E= qr(A) %求得正交矩阵Q 和上三角阵R, E 为单位矩阵的变换形式, R 的对角线元素按大小降序排列,满足AE=QR。Q,R = qr(A,O) % 产生矩阵A 的 “ 经济大小”分解Q,R,E= qr(A,O) % E的作用是使得R 的对角线元素降序,且 Q*R=A(:, E)。R = qr(A)%稀疏矩阵A 的分解,只产生一个上三角阵R , 满足R,*R 二A * A ,这种方法计算 A *A 时减少了内在数字信息的损耗。C,R = qr(A,b)

93、%用于稀疏最小二乘问题:minimize|Ax-b|的两步解:C,R = qr(A,b), x =RCoR = qr(A,O) %针对稀疏矩阵A 的经济型分解C,RJ = qr(A,b,O) % 针对稀疏最小二乘问题的经济型分解例 1-68 A = 1 2 3;456;789; 10 11 12;Q,R = qr(A)Q =-0.0776 -0.8331 0.5444 0.0605-0.3105 -0.4512 -0.7709 0.3251-0.5433 -0.0694 -0.0913 -0.8317-0.7762 0.3124 0.3178 0.4461R =-12.8841 -14.591

94、6-16.29920-1.0413-2.08260 0 0.0000000函数 qrdelete格 式 Q,R = qrdelete(Q,R,j) %返回将矩阵A 的第j 列移去后的新矩阵的q r分解例 1-69 A=-149 -50-154;537 180 546;-27 -9 -25; LQ,RJ=qr(A)Q =-0.2671 -0.7088 0.65290.9625 -0.1621 0.2176-0.0484 0.6865 0.7255R 二557.9418 187.0321 567.84240 0.0741 3.4577000.1451 Q,R=qrdelete(Q,R,3) % 将

95、 A 的第3 列去掉后进行q r分解。Q 二-37-0.2671 -0.7088 0.65290.9625 -0.1621 0.2176-0.0484 0.6865 0.7255R =557.9418 187.03210 0.074100函数 qrinsert格 式 Q,R = qrinsert(Q,R,j,x) %在矩阵A 中第j 列插入向量x 后的新矩阵进行q r分解。若j 大于A 的列数,表示在A 的最后插入列X。例 1-70 A=-149 -50 -154;537 180 546;-27 -9 -25; x=35 10 7;Q,R=qrinsert(Q,R,4,x)Q =-0.2671

96、 -0.7088 0.65290.9625 -0.1621 0.2176-0.0484 0.6865 0.7255R =557.9418 187.0321 567.8424 -0.06090 0.0741 3.4577 -21.62290 0 0.1451 30.10731.3.4 Schur 分解函 数 schur格 式 T = schur(A)%产 生 schur矩阵T , 即T 的主对角线元素为特征值的三角阵。T = schur(A,flag) % 若 A 有复特征根,则 flag=complex,否则 flag=realoU,T = schur(A,-) %返回正交矩阵 U 和 sch

97、ur 矩阵 T , 满足 A = U*T*U。例 1-71 H = -149 -50 -154; 537 180 546; -27 -9 -25 ; U,T=schur(H)U =0.3162 -0.6529 0.6882-0.9487 -0.2176 0.22940.0000 0.7255 0.6882T =1.0000 -7.1119-815.87060 2.0000 -55.02360 0 3.0000-38-1.3.5实 Schur分解转化成复Schur分解函数 rsf2csf格 式 U,T = rsf2csf(U,T) %将实舒尔形式转化成复舒尔形式例 1-72 A=l 1 1 3;

98、1 2 1 1;1 1 3 1;-2 1 1 4;lu,t=schur (A)u =-0.4916-0.4900 -0.6331 -0.3428-0.4980 0.2403 -0.2325 0.8001-0.6751 0.4288 0.4230 -0.4260-0.2337 -0.7200 0.6052 0.2466t =4.8121 1.1972 -2.2273-1.00670 1.9202 -3.0485 -1.83810 0.7129 1.9202 0.25660 00 1.3474 U,T=rsf2csf (u,t)U =-0.4916 -0.2756 - 0.441 li 0.213

99、3 + 0.5699i -0.3428-0.4980 -0.1012+ 0.2163i -0.1046 + 0.2093i 0.8001-0.6751 0.1842 + 0.3860i -0.1867 - 0.3808i -0.4260-0.2337 0.2635 - 0.648 li 0.3134 - 0.5448i 0.2466T =4.8121 -0.9697+ 1.0778i -0.5212 + 2.0051 i -1.00670 1.9202 + 1.4742i 2.3355 0.1117 + 1.6547i0 0 1.9202 - L4742i 0.8002 + 0.23 lOi0

100、 00 1.34741.3.6特征值分解函 数 eig格 式 d = eig(A) %求矩阵A 的特征值d , 以向量形式存放dd = eig(A,B)%A、B 为方阵,求广义特征值d , 以向量形式存放d。V,D = eig(A) %计算A 的特征值对角阵D 和特征向量V , 使 AV=VD成立。V,D = eig(A,nobalance) %当矩阵A 中有与截断误差数量级相差不远的值时,该指令可能更精确。nobalance,起误差调节作用。V,D = eig(A,B) % 计算广义特征值向量阵V 和广义特征值阵D , 满足AV=BVD。IV,D = eig(A,B,flag) % 由fla

101、g指定算法计算特征值D 和特征向量V ,flag的可能值为: hhol,表示对B 使用Cholesky分解算法,这里A 为对称Hermitian矩阵,B 为正定阵J q z , 表示使用Q Z算法,这里A、B 为非对称或非Hermitian矩阵。说 明 一 般特征值问题是求解方程: 解的问题。广义特征值问题是求方程: 解的问题。-39-1.3.7奇异值分解函 数 svd格 式 s = svd (X) % 返回矩阵X 的奇异值向量IU,S,V = svd (X) %返回一个与X 同大小的对角矩阵S , 两个酉矩阵U 和 V , 且满足二U*S*Vo若 A 为 m X n阵,则 U 为 m X m

102、 阵,V 为 n X n 阵。奇异值在S 的对角线上,非负且按降序排列。U,S,V = svd (X,0) % 得 到 一 个 “ 有效大小”的分解,只计算出矩阵U 的前n 歹 U,矩阵S 的大小为nX no例 1-73 A=l 2;3 4;5 6;7 8; U,S,V=svd(A)U =-0.1525 -0.8226 -0.3945 -0.3800-0.3499 -0.4214 0.2428 0.8007-0.5474 -0.0201 0.6979 -0.4614-0.7448 0.3812 -0.5462 0.0407S =14.2691 00 0.62680000V =-0.6414 0

103、.7672-0.7672 -0.6414 U,S,V=svd(A,0)U =-0.1525 -0.8226-0.3499 -0.4214-0.5474 -0.0201-0.7448 0.3812S =14,2691 00 0.6268V =-0.6414 0.7672-0.7672 -0.64141.3.8广义奇异值分解函 数 gsvd格 式 U,V,X,C,S = gsvd(A,B)%返回酉矩阵U 和 V、一个普通方阵X、非负对角矩阵C 和S , 满足A = U*C*X B = V*S*X C*C + S*S = 1(1为单位矩阵) ;A 和 B 的列数必须相-40-同,行数可以不同。U,V

104、,X,C,S = gsvd(A,B,O) % 含义与前面相似sigma = gsvd (A,B) %返回广义奇异值sigma例 1-74 A=reshape(l:12,3,4) %产生 3 行 4 列矩阵,元素由 1, 2, , 12 构成。A =1 47 1025 8 113 69 12 B=magic(4) %产生4 阶魔方阵B =1623 135 11 108976 124 14 15 1 U,V,X,C,S=gsvd(A,B)U =0.4082 0.7071 0.5774-0.8165 0.0000 0.57740.4082 -0.7071 0.5774V =0.2607 -0.795

105、0 -0.5000 0.2236-0.4029 0.3710 -0.5000 0.6708-0.5452 -0.0530 -0.5000 -0.67080.6874 0.4770 -0.5000 -0.2236X =0-9.4340-17.0587 3.46411.8962 8.7980 -17.0587 8.66033.7924 8.1620-17.0587 13.8564-5.6885 -7.5260-17.0587 19.0526C =0 0.0000 0 00 0 0.0829 0000 1.0000S =1.00000 0 00 1.0000 0 00 0 0.9966 00 00

106、0.00001.3.9特征值问题的QZ分解函 数 qz-41 -格 式 AA,BB,Q,Z,V=qz(A,B)%A、B 为方阵,产生上三角阵AA和 B B ,正交矩阵Q、Z或其列变换形式,V 为特征向量阵。且满足:Q*A*Z=AA和 Q*B*Z = BB。fAA,BB,Q,Z,V = qz(A,B,flag) %产生由 flag 决定的分解结果,flag 取值为:complex, :表示复数分解( 默认) ,取值为real:表示实数分解。1.3.10海森伯格形式的分解如果矩阵H 的第一子对角线下元素都是0 , 则 H 为海森伯格(Hessenberg)矩阵。如果矩阵是对称矩阵, 则它的海森伯格

107、形式是对角三角阵。 MATLAB可以通过相似变换将矩阵变换成这种形式。函 数 hess格 式 H = hess(A)%返回矩阵A 的海森伯格形式|P,H = hess(A) %P 为酉矩阵, 满足:A = PH P且 PP = eye(size(A)例 1-75A=-149 -50-154;537 180 546;-27 -9 -25;P,H=hess(A)P =1.0000 0 00 -0.9987 0.05020 0.0502 0.9987H =-149.0000 42.2037 -156.3165-537.6783 152.5511 -554.92720 0.0728 2.4489H 的

108、第一子对角元素是H(3,l)=0o1 .4线性方程的组的求解我们将线性方程的求解分为两类:一类是方程组求唯一解或求特解,另一类是方程组求无穷解即通解。可以通过系数矩阵的秩来判断:若系数矩阵的秩厂n (n 为方程组中未知变量的个数) ,则有唯一解;若系数矩阵的秩r X = A B %由于系数矩阵不满秩,该解法可能存在误差。X = 0 0 - 0 . 5 3 3 3 0 . 60 0 0 r (一个特解近似值)。若用r r e f求解,则比较精确: A = l 1 - 3 - l ;3 - l - 3 4 ;1 5 - 9 - 8 ;B = l 4 o r ;-43- C=A,B; %构成增广矩阵

109、 R=rref(C)R =1.0000 0 -1.5000 0.7500 1.25000 1.0000-1.5000 -1.7500 -0.25000 0 0 0 0由此得解向量X= 1.2500 - 0.250000(一个特解)。2 . 利用矩阵的LU、QR和 cholesky分解求方程组的解(1) LU分解:LU分解又称Gauss消去分解,可把任意方阵分解为下三角矩阵的基本变换形式(行交换)和上三角矩阵的乘积。即人= 1, L 为下三角阵,U 为上三角阵。则:A*X=b 变成 L*U*X=b所以X=U(Lb)这样可以大大提高运算速度。命 令 L, U=lu (A)例 1-78求方程组的-

110、一个特解。解:A =4 2-1;3-1 2;11 3 0;B=2 10 8;D=det(A)L,U=lu(A)X=U(LB)显示结果如下:D =0L =0.3636 -0.5000 1.00000.2727 1.0000 01.0000 0 0u =11.0000 3.0000 00-1.8182 2.00000 0 0.0000Warning: Matrix is close to singular or badly scaled.Results may be inaccurate. RCOND = 2.018587e-017. In DMatlabpujunlx0720.m at line

111、 4X =1.0e+016*-0.40531.48621.3511-44-说明结果中的警告是由于系数行列式为零产生的。可以通过A*X验证其正确性。(2) Cholesky 分解若 A 为对称正定矩阵,则 Cholesky分解可将矩阵A 分解成上三角矩阵和其转置的乘积,即: 其中R 为上三角阵。方 程 A*X=b变成所以(3) QR分解对于任何长方矩阵A , 都可以进行Q R分解,其中Q 为正交矩阵,R 为上三角矩阵的初等变换形式,即:A=QR方 程 A*X=b变 形 成 QRX=b所以 X=R(Qb)上 例 中 Q,R=qr(A)X=R(QB)说明这三种分解, 在求解大型方程组时很有用。 其优

112、点是运算速度快、 可以节省磁盘空间、节省内存。1.4.2求线性齐次方程组的通解在 Matlab中,函数null用来求解零空间,即满足A X=0的解空间,实际上是求出解空间的一组基(基础解系)。格 式 z = null % z 的列向量为方程组的正交规范基,满 足 。% z 的列向量是方程AX=0的有理基例 1-79求解方程组的通解:解:A=1 2 2 1;2 1 -2 -2;1 -1 -4 -3;fonnal rat %指定有理式格式输出B=null(A; r,) %求解空间的有理基运行后显示结果如下:B =2 5/3-2 -4/31 00 1或通过行最简行得到基: B=rref(A)B =1

113、.0000 0-2.0000-1.66670 1.0000 2.0000 1.33330 0 0 0即可写出其基础解系(与上面结果一致)。写出通解:syms kl k2X=kl *B(:,l)+k2*B(:,2) %写出方程组的通解-45-pretty(X) %让通解表达式更加精美运行后结果如下:X =2*kl+5/3*k2| -2*kl-4/3*k2klk2%下面是其简化形式f2kl + 5/3k2 |-2kl -4/3k2|kl 1k21.4.3求非齐次线性方程组的通解非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。因此,步骤为:第一步:判断AX=b是否有解,若有解则进行第二

114、步第二步:求 AX=b的一个特解第三步:求 AX=O的通解第四步:AX=b的通解=AX=O的通解+AX=b的一个特解。例 1-80求解方程组解:在 Matlab中建立M 文件如下:A=l -2 3-l;3-l 5-3;2 1 2-2;b=l 2 3,;B=fAb;n=4;R_A=rank(A)R_B=rank(B)format ratifR_A=R_B&R_A=n %判断有唯一解X=Abelseif R_A=R_B&R_An %判断有无穷解X=Ab %求特解C=null(A; r1) % 求 AX=O的基础解系else X=equition no solve, %判断无解end运行后结果显示:

115、R_A =2R_B =-46-3X =equition no solve说明该方程组无解例 1-81求解方程组的通解:解法一:在 Matlab编辑器中建立M 文件如下:A=l 1 -3-l;3-l -3 4;1 5-9 -8;b=l 4 0,;B=Ab;n=4;R_A=rank(A)R_B=rank(B)format ratifR_A=R_B&R_A=nX=Abelseif R_A=R_B&R_A In DMatlabpujunlxO723.m at line 11X =00-8/153/5C =3/2 -3/43/2 7/41 00 1所以原方程组的通解为X=kl +k2 +解法二:用 rr

116、ef求解A=l 1 -3-l;3-l -3 4;1 5 -9 -8;b=l 4 0|;B=Ab;C=rref(B) %求增广矩阵的行最简形,可得最简同解方程组。运行后结果显示为:-47-c =1 0 -3/2 3/4 5/40 1 -3/2 -7/4-1/40 0 0 0 0对应齐次方程组的基础解系为: , 非齐次方程组的特解为: 所以,原方程组的通解为:X=kl +k2 + o1.4.4 线性方程组的LQ解法函 数 symmlq格 式 x = symmlq(A,b) %求线性方程组AX=b的解X。A 必须为n 阶对称方阵,b 为 n 元列向量。A 可以是由afun定义并返回A*X的函数。如果

117、收敛,将显示结果信息;如果收敛失败,将给出警告信息并显示相对残差norm(b-A*x)/norm(b)和计算终止的迭代次数。symmlq(A,b,tol) % 指定误差 to l,默认值是 le-6。symmlq(A,b,tol,maxit) %maxit 指定最大迭代次数symmlq(A,b,tol,maxit,M) % M 为用于对称正定矩阵的预处理因子symmlq(A,b,tol,maxit,M 1,M2) %M=M 1 xM2symmlq(A,b,tol,maxit,M 1 ,M2,xO) %x0 为初始估计值,默认值为 0。x,flag = symmlq(A,b,) %flag的取值

118、为:0 表示在指定迭代次数之内按要求精度收敛;1表示在指定迭代次数内不收敛;2 表示M 为坏条件的预处理因子;3 表示两次连续迭代完全相同;4 表示标量参数太小或太大;5 表示预处理因子不是对称正定的。x,flag,relres = symmlq(A,b,) % relres 表示相对误差 norm(b-A*x)/norm(b)x,flag,relres,iter = symmlq(A,b,) %iter 表示计算 x 的迭代次数xjlag,relres,iter,resvec = symmlq(A,b,) %resvec 表示每次迭代的残差:norm(b-A*xO)x,flag,relres

119、,iter,resvec,resveccg = symmlq(A,b,) %resveccg 表示每次迭代共枕梯度残差的范数1.4.5 双共柜梯度法解方程组函 数 bicg格 式 x = bicg(A,b) %求线性方程组AX=b的解X。 A 必须为n 阶方阵, b 为 n 元列向量。A可以是由afun定义并返回A*X的函数。如果收敛,将显示结果信息;如果收敛失败,将给出警告信息并显示相对残差norm(b-A*x)/norm(b)和计算终止的迭代次数。bicg(A,b,tol)%指定误差 ,默认值是le-6obicg(A,b,tol,maxit) %maxit 指定最大迭代次数bicg(A,b

120、,tol,maxit,M) %M为用于对称正定矩阵的预处理因子bicg(A,b,tol,maxit,M l,M2) %M=M I xM2bicg(A,b,tol,maxit,M I ,M2,xO) %x0 为初始估计值,默认值为 0。x,flag= bicg(A,b ) ilag的取值为:0 表示在指定迭代次数之内按要求精度收敛;1表示在指定迭代次数内不收敛;2 表示M 为坏条件的预处理因子;3 表示两次连续迭代完全相同;4 表示标量参数太小或太大。x,flag,relres = bicg(A,b,) % relres 表示相对误差 norm(b-A*x)/norm(b)x,flag,relr

121、es,iter = bicg(A,b,) %iter 表示计算 x 的迭代次数-48-x,flag,relres,iter,resvec = bicg(A,b,) %resvec 表示每次迭代的残差:norm(b-A*xO)例 1-83 调用 MATLAB6.0 数据文件 west0479o load west0479 A=west0479; %将数据取为系数矩阵A。 b=sum (A,2); % 将 A 的各行求和,构成一列向量。 X=Ab; % 用 求 AX=b 的解。 norm(b-A*X)/norm(b) % 计 算解的相对误差。ans =1.2454e-017 x,flag,relr

122、es,iter,resvec = bicg(A,b) % 用 bicg 函数求解。x = ( 全为0 , 由于太长,不显示出来)flag 二1 %表示在默认迭代次数( 20次) 内不收敛。relres = % 相 对残差 relres = norm(b-A*x)/norm(b) =norm(b)/norm(b) = 1。1iter = % 表明解法不当,使得初始估计值0 向量比后来所有迭代值都好。0resvec =( 略 ) 每次迭代的残差。 semilogy(0:20,resvec/norm(b),-o,) % 作每次迭代的相对残差图形,结果如下图。 xlabel(iteration num

123、ber*) %x 轴为迭代次数。 ylabeKYelative residual*) %y 轴为相对残差。图 1-1双共辄梯度法相对误差图1.4.6稳定双共版梯度方法解方程组函数 bicgstab格式 x =bicgstab(A,b)bicgstab(A,b,tol)bicgstab(A,b,tol,maxit)bicgstab(A,b,tol,maxit,M)bicgstab(A,b,tol,maxit,M I,M2)bicgstab(A,b,tol,maxit,M 1 ,M2,xO)x,flag = bicgstab(A,b,.)x,flag,relres = bicgstab(A,b,.

124、)x,flag,relres,iter = bicgstab(A,b,.)x,flag,relres,iter,resvec = bicgstab(A,b,.)稳定双共甑梯度法解方程组,调用方式和返回的结果形式和命令bicg 一样。例 1-84load west0479;A=westO479;b=sum(A,2);x,flag=bicgstab(A,b)-49-显示结果是X的值全为0, flag=l。表示在默认误差和默认迭代次数( 20 次) 下不收敛。若改为:L1,U1 = luinc(A,le-5);xl,flagl = bicgstab( A,b, 1 e-6,20,L 1 ,U 1)即

125、指定误差,并用A 的不完全LU 分解因子L 和 U 作为预处理因子乂= 1 * 5 其结果是xl的值全为0, flag=2表示预处理因子为坏条件的预处理因子。若改为L2,U2=luinc(A,le-6); %稀疏矩阵的不完全LU 分解。x2,flag2,relres2,iter2,resvec2=bicgstab(A,b,le-15,10,L2,U2)%指定最大迭代次数为10次,预处理因子M=L*U。semilogy(0:0.5:iter2,resvec2/norm(b),-o) %每次迭代的相对残差图形,见图 1-2xlabel(iteration number)ylabel(relativ

126、e residual)结果为x 2 = ( 其值全为1 , 略)flag2 =0 % 表示收敛relres2 =2.8534e016 %收敛时的相对误差iter2 =6 %计算终止时的迭代次数resvec2 = % 每次迭代的残差1.4.7 复共姬梯度平方法解方程组函 数 cgs格式 X = cgs(A,b)cgs(A,b,tol)cgs(A,b,tol,maxit)cgs(A,b,tol,maxit,M)cgs(A,b,tol,maxit,M 1,M2)cgs(A,b,tol,maxit,M 1 ,M2,xO)x,flag = cgs(A,b,.)x,flag,relres = cgs(A,

127、b,.)x,flag,relres,iter = cgs(A,b,.)x,flag,relres,iter,resvec = cgs(A,b,.)调用方式和返回的结果形式与命令bicg 一样。1.4.8 共聊梯度的LSQR方法函 数 Isqr格式 x = lsqr(A,b)lsqr(A,b,tol)-50-lsqr(A,b,tol,maxit)lsqr(A,b,tol,maxit,M)lsqr(A,b,tol,maxit,M 1,M2)lsqr(A,b,tol,maxit,M 1 ,M2,xO)x,flag = lsqr(A,b,.)x,flag,relres = lsqr(A,b,.)x,f

128、lag,relres,iter = lsqr(A,b,.)x,flag,relres,iter,resvec = lsqr(A,b,.)调用方式和返回的结果形式与命令bicg 一样。例 1-85 n = 100; o n = ones(nj); A = spdiags(-2*on 4*on -on,-l:l,n,n); %产生一个对角矩阵 b = sum(A,2); to l = le-8; % 指定精度m axit = 15; %指定最大迭代次数M 1 = spdiags(on/(-2) on,-l:0,n,n);M 2 = spdiags(4*on -on,0:l,n,n); %M1*M2

129、=M , 即产生预处理因子x,flag,relres,iter,resvec = lsqr(A,b,tol,maxit,Ml,M2,)结果显示x 的值全为1flag 二0 % 表示收敛relres =3.5241e-009 %表示相对残差iter =12 %计算终止时的迭代次数1.4.9广义最小残差法函 数 qmres格式 x = gmres(A,b)gmres( A,b,restart)gmres(A,b,restart,tol)gmres(A,b,restart,tol,maxit)gmres(A,b,restart,tol,maxit,M)gmres(A,b,restart,tol,ma

130、xit,M I,M2)gmres(A,b,restart,tol,maxit,M l,M2,xO)x,flag = gmres(A,b,.)x,flag,relres = gmres(A,b,.)x,flag,relres,iter = gmres(A,b,.)x,flag,relres,iter,resvec = gmres(A,b,.)除参数restart ( 缺省时为系数方阵A 的阶数n ) 可以给出外,调用方式和返回的结果形式-51 -与命令bicg 一样。例 1-86load west0479; A = west0479; b = sum(A,2);x,flag = gmres(A,

131、b,5)结果显示flag = l,表示在默认精度和默认迭代次数下不收敛。若最后一行改为L l,U l = luinc(A,le-5);xl,flagl = gmres( A,b,5,1 e-6,5,L 1 ,U 1)结果flagl= 2,说明该方法失败,原因是U I的对角线上有0 元素,构成坏条件的预处理因子。若改为:L2,U2 = luinc(A,le-6);tol = le-15;x4,flag4,relres4,iter4,resvec4 = gmres(A,b,4,tol,5,L2,U2)x6,flag6,relres6,iter6,resvec6 = gmres(A,b,6,tol,

132、3,L2,U2)x8,flag8,relres8,iter8,resvec8 = gmres(A,b,8,tol,3,L2,U2)结果flag4=0, flag6=0, flag8=0表示参数restart分别取为4, 6, 8 时收敛。1.4.10最小残差法解方程组函 数 minres格式 x = minres(A,b)minres(A,b,tol)minres(A,b,tol,maxit)minres(A,b,tol.maxit,M)minres(A,b,tol,maxit,M I,M2)minres(A,b,tol,maxit,M 1 ,M2,xO)x,flag = minres(A,b

133、,.)x,flag,relres = minres(A,b,.)x,flag,relres,iter = mmres(A,b,.)x,flag,relres,iter,resvec = minres(A,b,.)x,flag,relres,iter,resvec,resveccg = minres(A,b,.)这里A 为对称矩阵,这种方法是寻找最小残差来求x。调用方式和返回的结果形式与命令bicg 一样。例 1-87 n = 100; on = ones(n,l); A = spdiags(-2*on 4*on -2*on,-l: l,n,n); b = sum(A,2); to l = le

134、-10;m axit = 50;M 1 = spdiags(4*on,0,n,n); x,flag,relres,iter,resvec,resveccg = minres(A,b,tol,maxit,M1,)-52-结果显示:flag 二0relres =4.6537e-014iter =49resvec 二( 略)resveccg 二( 略)1.4.11 预处理共聊梯度方法函 数 peg格式 x = pcg(A,b)pcg(A,b,tol)pcg(A,b,tol,maxit)pcg(A,b,tol,maxit,M)pcg(A,b,tol,maxit,M 1 ,M2)pcg(A,b,tol,

135、maxit,M 1 ,M2,xO)pcg(A,b,tol,maxit,M l,M2,xO,p l,p2,.)x,flag = pcg( A,b,tol,maxit,M 1 ,M2,xO,p 1 ,p2,.)x,flag,relres = pcg(A,b,tol,maxit,M 1 ,M2,xO,p 1 ,p2,.)x,flag,relres,iter = pcg( A,b,tol,maxit,M 1 ,M2 ,xO,p 1 ,p2,.)x,flag,relres,iter,resvec = pcg(A,b,tol,maxit,M l,M2,xO,p l,p2,.)调用方式和返回的结果形式与命令

136、bieg 一样,这里A 为对称正定矩阵。1.4.12 准最小残差法解方程组函 数 qmr格式 x = qmr(A,b)qmr(A,b,tol)qmr(A,b,tol,maxit)qmr(A,b,tol,maxit,M)qmr(A,b,tol,maxit,M 1 ,M2)qmr(A,b,tol,maxit,M 1 ,M2,xO)qmr(afun,b,tol,maxit,m 1 fun,m2fun,x0,p l,p2,.)x,flag = qmr(A,b,.)x,flag,relres = qmr(A,b,.)x,flag,relres,iter = qmr(A,b,.)x,flag,relres

137、,iter,resvec = qmr(A,b,.)调用方式和返回的结果形式与命令bieg一样,这里A 为方阵。例 1-88load west0479;-53- A = west0479; b = sum(A,2);x,flagl = qmr(A,b)结果显示11ag=l,表示在缺省情况下不收敛若改为L1,U1 = luinc(A,le-5);xl,flagl = qmr( A,b, 1 e-6,20,L 1 ,U 1)结果显示flag=2,表示是坏条件的预处理因子,不收敛。若改为L2,U2 = luinc(A,le-6);x2,flag2,relres2,iter2,resvec2 = qmr

138、(A,b, 1 e-15,10,L2,U2)semilogy(0:iter2,resvec2/norm(b)/-o,) % 每次迭代的相对残差图形xlabel(iteration number1)ylabel(relative residual1)结果为x = ( 全为1 , 略)flag2 =0 % 表示收敛relres2 = %表示相对残差2.8715e-016iter2 = % 计算终止时的迭代次数8resvec2 = % 每次迭代的残差1.0e+005 *7.05577.17733.40321.72200.00000.00000.00000.00000.0000图 1-3准最小残差法相

139、对误差图1.5特征值与二次型工程技术中的一些问题,如振动问题和稳定性问题,常归结为求一个方阵的特征值和特征向量。-54-1.5.1 特征值与特征向量的求法设 A 为 n 阶方阵,如果数“ ”和 n 维列向量x 使得关系式成立,则 称 为 方 阵 A 的特征值,非零向量x 称为A 对应于特征值“ ”的特征向量。详 见 1 3 5 和 1.3.6节:特征值分解问题。例 1-89求矩阵的特征值和特征向量解:A=-2 1 1;0 2 0;-4 1 3;V,D=eig(A)结果显示:V =-0.7071 -0.2425 0.30150 0 0.9045-0.7071 -0.9701 0.3015D =-

140、1 00020002即:特征值-1对应特征向量(-0.7071 0 -0.7071)T特征值 2 对应特征向量(-0.2425 0 -0.9701)T 和(-0.3015 0.9045 -0.3015)T例 1-90求矩阵 的特征值和特征向量。解:A=-1 1 0;-4 3 0;1 0 2;V,Dl=eig(A)结果显示为V =0 0.4082 -0.40820 0.8165 -0.81651.0000 -0.4082 0.4082D =2000 1 000 1说明当特征值为1 ( 二重根) 时,对应特征向量都是k (0.4082 0.8165-0.4082)T, k 为任意常数。1.5.2

141、提高特征值的计算精度函数 balance格 式 T,B= bakmce(A)%求相似变换矩阵T 和平衡矩阵B , 满 足 。B = balance(A) %求平衡矩阵B-55-1.5.3 复对角矩阵转化为实对角矩阵函数 cdf2rdf格 式 V,D = cdf2rdf(v,d)%将复对角阵d 变为实对角阵D ,在对角线上, 用 2 X 2 实数块代替共规复数对。例 1-91 A=l 2 3;0 4 5;0 -5 4J; v,d=eig(A)v 二1.0000 -0.0191 - 0.4002i -0.0191 + 0.4002i0 0 - 0.6479i 0 + 0.6479i0 0.6479

142、 0.6479d =1.0000 0 00 4.0000 + 5.0000i 00 0 4.0000-5.0000i lV,D=cdf2rdf(v,d)V =1.0000 -0.0191 -0.40020 0 -0.64790 0.6479 0D =1.0000 0 00 4.0000 5.00000 -5.0000 4.00001.5.4 正交基命 令 orth格 式 B=orth(A)%将矩阵A 正交规范化,B 的列与A 的列具有相同的空间,B 的列向量是正交向量,且满足:= eye(rank(A)o例 1-92将矩阵正交规范化。解:A =4 0 0; 0 3 1;0 1 3;B=orth

143、(A)则显示结果为P =1.0000 0 00 0.7071 -0.70710 0.7071 0.7071Q 二1.0000 0 0-56-0 1.0000 000 1.00001.5.5二次型例 1-93求一个正交变换 X =PY ,把二次型化成标准形。解:先写出二次型的实对称矩阵在 Matlab编辑器中建立M 文件如下:A=0 1 1 -1;1 0-1 1;1 -1 0 1;-1 1 1 0;P,D=schur(A)syms yl y2 y3 y4y=yl;y2;y3;y4J;X=vpa(P,2)*y %vpa表示可变精度计算,这里取2 位精度f=yl y2 y3 y4*D*y运行后结果显

144、示如下:P =780/989 780/3691 1/2-390/1351780/3691 780/989-1/2 390/1351780/1351 -780/1351 -1/2 390/13510 0 1/2 1170/1351D =1 0000 1000 0-300 00 1x = .79*yl+.21*y2+.50*y3.29*y4 .21*yl+.79*y2-.50*y3+.29*y4 .56*yl.56*y2-.50*y3+.29*y4 .50*y3+.85*y4f =y 1 A2+y2A2-3*y3 A2+y4A2即 f 二1 .6 秩与线性相关性1.6.1 矩阵和向量组的秩以及向量

145、组的线性相关性矩阵A 的秩是矩阵A 中最高阶非零子式的阶数; 向量组的秩通常由该向量组构成的矩阵来-57-计算。函 数 rank格 式 k = rank(A)%返回矩阵A 的行( 或列) 向量中线性无关个数k = rank(A,tol) %u) l 为给定误差例 1-94求 向 量 组 , , , , 的秩,并判断其线性相关性。A=1 -2 2 3;-2 4 -1 3;-1 2 0 3;062 3;2 -6 3 4;k=rank(A)结果为k =3由于秩为3 V 向量个数,因此向量组线性相关。1.6.2求行阶梯矩阵及向量组的基行阶梯使用初等行变换,矩阵的初等行变换有三条:I . 交 换 两 行

146、 ( 第 i、第j 两行交换)2 . 第 i 行的K 倍3 . 第 i 行的K 倍加到第j 行上去通过这三条变换可以将矩阵化成行最简形,从而找出列向量组的一个最大无关组,Matlab将矩阵化成行最简形的命令是rref或 rrefmovie。函数 rref 或 rrefmovie格 式 R = rref(A) %用高斯一约当消元法和行主元法求A 的行最简行矩阵RRJb = rref(A)%jb是一个向量, 其含义为:r = length(jb)为 A 的秩;A(:, jb)为 A 的列向量基;jb 中元素表示基向量所在的列。Rjb = rref(A,tol) %tol 为指定的精度rrefmov

147、ie(A) % 给出每一步化简的过程例 1-95 求向量组 al=(l,-2,2,3), a2=(2,4,-l,3), a3=(-l,2,0,3) a4=(0,6,2,3), a5=(2,6,3,4)的一个最大无关组。 a l= l -2 2 3P;a2=-2 4 -1 31;a3=-l 2 0 3);a4=0 6 2 3;a5=2 -6 3 4;A=al a2 a3 a4 a5A =1-2-102-2426-62-10233 3 3 34R,jb=rref(A)R =1.0000 0 0.3333 0 1.77780 1.0000 0.6667 0-0.11110 00 1.0000 -0.

148、3333-58-0 0 0 0 0jb =1 24 A(:,jb)ans =1 -2 0-2 4 62-12333BP: al a2 a4 为向量组的一个基。1 .7 稀疏矩阵技术1.7.1 稀疏矩阵的创建函 数 sparse格 式 S = sparse(A) %将矩阵A 转化为稀疏矩阵形式,即由A 的非零元素和下标构成稀疏矩阵S。若 A 本身为稀疏矩阵,则返回A 本身。S = sparse(m,n) % 生成一个m X n的所有元素都是0 的稀疏矩阵S = sparse。 ,j,s) %生成一个由长度相同的向量i, j 和 s 定义的稀疏矩阵S , 其中i, j 是整数向量,定义稀疏矩阵的元

149、素位置(i,j), s 是一个标量或与i, j 长度相同的向量,表示在(i,j)位置上的元素。S = sparse(i,j,s,m,n) %生成一个m X n的稀疏矩阵,(ij)对应位置元素为si, m = max且n=max(j)。S = sparse(i,j,s,m,n,nzmax) % 生成一个m X n的含有nzmax个非零元素的稀疏矩阵S, nzmax的值必须大于或者等于向量i 和j 的长度。例 1-96 S=sparse( 1:10,1:10,1:10)S =(1,1)1(2,2) 2(3,3) 3(4,4) 4(5,5) 5(6,6) 6(7,7) 7(8,8) 8(9,9) 9

150、(10,10) 10 S=sparse( 1:10,1:10,5)S =-59-(1,1)5(2,2) 5(3,3) 5(4,4) 5(5,5) 5(6,6) 5(7,7) 5(8,8) 5(9,9) 5(10,10)51.7.2 将稀疏矩阵转化为满矩阵函 数 full格 式 A=fuIKS) % S为稀疏矩阵,A 为满矩阵。例 1-97 S=sparse( 1:5,1:5,4-8)S =(U )4(2,2) 5(3,3) 6(4,4) 7(5,5) 8 A=full(S)A =4 0 0 0 00 5 0 0 00 0 6 0 00 0 0 7 00 0 0 0 81.7.3 稀疏矩阵非零元

151、素的索引函 数 find格 式 k 二flnd(x)%按行检索X 中非零元素的点,若没有非零元素,将返回空矩阵。i,j = find(X) %检索X 中非零元素的行标i 和列标ji,j,v = find(X) %检索X 中非零元素的行标i 和列标j 以及对应的元素值v例 1-98上例中 i,j,v=find(S)则显示为:I= 1 2 345j= 1 2 3 4 5 v=4 5 6 7 8-60-1.7.4外部数据转化为稀疏矩阵函数 spconvert格 式 S=spconvert(D) % D是只有3 列或4 列的矩阵说明:先运用load函数把外部数据(.m at文件或.dat文 件 ) 装

152、 载 于 MATLAB内存空间中的变量T; T 数组的行维为nnz或 nnz+1,列维为3 ( 对实数而言) 或列维为4 ( 对复数而言) ;T 数组的每一行( 以i,j,Sre,Sim形式) 指定一个稀疏矩阵元素。例 1-99 D=l 2 3;2 5 4;3 4 6;3 6 7D =1 23254346367 S=spconvert(D)S =(1,2)3(3,4) 6(2,5)4(3,6) 7 D=l 2 3 4;2 5 40;3 46 9;3 6 7 4J;D =12342 5 4 03 4 6 93 674 S=spconvert(D)S =(1,2) 3.0000+ 4.0000i(

153、3,4) 6.0000 + 9.0000i(2,5) 4.0000(3,6) 7.0000+ 4.0000i1.7.5基本稀疏矩阵i . 带状( 对角) 稀疏矩阵函数 spdiags格 式 B,d = spdiags(A) %从矩阵A 中提取所有非零对角元素,这些元素保存在矩阵B 中,向量d 表示非零元素的对角线位置。B = spdiags(A,d) % 从 A 中提取由d 指定的对角线元素,并存放在B 中。A = spdiags(B,d,A)%用 B 中的列替换A 中由d 指定的对角线元素,输出稀疏矩阵。A 二spdiags(B,d,m,n) %产 生 一个m X n稀疏矩阵A , 其元素是

154、B 中的列元素放在由d 指定的对角线位置上。-61 -例 1100 A = 11 0 13 00 22 0 240 0 33041 0 0 440 52000 0 63000074;B,d = spdiags(A)B =41 11 052 22 063 33 1374 44 24d =-3 %表示B 的 第 1 列元素在A 中主对角线下方第3 条对角线上0 %表示B 的第2 列在A 的主对角线上2 %表示B 的第3 列在A 的主对角线上方第2 条对角线上例 1-101 B=l 2345 6 7 89 10 11 1213 14 15 16; d=-2 0 1 3; A=spdiags(B ,d

155、,4,4); full(A)ans =270 1606 11 01 0 10 150 50 142 . 单位稀疏矩阵函 数 speye格 式 S = speye(m,n) %生成m X n的单位稀疏矩阵S = speye(n) %生成n X n 的单位稀疏矩阵3 . 稀疏均匀分布随机矩阵函 数 sprand格 式 R = sprand(S) %生成与S 具有相同稀疏结构的均匀分布随机矩阵R = sprand(m,n,density) % 生成一个m X n的服从均匀分布的随机稀疏矩阵,非零元素的分布密度是density oR = sprand(m,n,density,rc) %生成一个近似的条

156、件数为1/rc、 大小为m X n的均匀分布的随机稀疏矩阵。4 . 稀疏正态分布随机矩阵函数 sprandn-62-格 式 R = sprandn(S) %生成与S 具有相同稀疏结构的正态分布随机矩阵。R = sprandn(m,n,density) % 生成一个m X n的服从正态分布的随机稀疏矩阵,非零元素的分布密度是densityoR = sprandn(m,n,density,rc) %生成一个近似的条件数为1/rc、大小为m X n的均匀分布的随机稀疏矩阵。5 . 稀疏对称随机矩阵函数 sprandsym格 式 R 二sprandsym(S) %生成稀疏对称随机矩阵, 其下三角和对角

157、线与S 具有相同的结构,其元素服从均值为0、方差为1 的标准正态分布。R 二sprandsym(n,density) %生成n X n 的稀疏对称随机矩阵,矩阵元素服从正态分布,分布密度为densityoR 二sprandsym(n,density,rc) %生成近似条件数为1/rc的稀疏对称随机矩阵R = sprandsym(n,density,rc,kind) %生成一个正定矩阵,参数kind取值为kind=l表示矩阵由一正定对角矩阵经随机Jacobi旋转得到,其条件数正好为1/rc; kind=2表示矩阵为外积的换位和, 其条件数近似等于1/rc; kind=3表示生成一个与矩阵S 结构

158、相同的稀疏随机矩阵,条件数近似为1/rc , density被忽略。1.7.6稀疏矩阵的运算i . 稀疏矩阵非零元素的个数函 数 nnz格 式 n = nnz(X)%返回矩阵X 中非零元素的个数2 . 稀疏矩阵的非零元素函数 nonzeros格 式 s = nonzeros(A) % 返回矩阵A 中非零元素按列顺序构成的列向量例 1-102 A = 2 7 0 1606 11 01 0 10 1505 0 14; s=nonzeros(A)结果为:s=2 1 765 11 10 16 15 143 . 稀疏矩阵非零元素的内存分配函 数 nzmax格 式 n = nzmax(S)%返回非零元素分

159、配的内存总数n4 . 稀疏矩阵的存贮空间函数 spalloc格 式 S = spalloc(m,n,nzmax) % 产生一个m X n阶只有nzmax个非零元素的稀疏矩阵,这样可以有效减少存贮空间和提高运算速度。5 . 稀疏矩阵的非零元素应用函 数 spfun格 式 f = spfun(,function,S) % 用 S 中非零元素对函数function,求值,如果function,不是对稀-63-疏矩阵定义的,同样可以求值。例 1-103 4 阶稀疏矩阵对角矩阵S =(1,1) 1(2,2) 2(3,3) 3(4,4) 4f= spfun(exp,S) %即指数e 的非零元素方暴。结果为

160、f =(1,1)2.7183(2,2) 7.3891(3,3) 20.0855(4,4) 54.59826 . 把稀疏矩阵的非零元素全换为1函 数 spones格 式 R = spones(S) %将稀疏矩阵S 中的非零元素全换为11.7.7 画稀疏矩阵非零元素的分布图形函 数 spy格 式 spy(S) %画出稀疏矩阵S 中非零元素的分布图形。S 也可以是满矩阵。spy(S,markersize) % markersize 为整数,指定点阵大小。spy(S/LineSpec) %LineSpec, 指定绘图标记和颜色spy(S,LineSpec,markersize) % 参数与上面相同例

161、1-104 load west0479 A=west0479; spy(A,W,3)结果如图1-4所示。1.7.8 矩阵变换I . 列近似最小度排序函 数 colamd格 式 p = colamd 返回稀疏矩阵S 的列的近似最小度排序向量p2 . 列最小度排序函 数 colmmd格 式 p 二colmmd(S) %返回稀疏矩阵S 的列的最小度排序向量p ,按 p 排列后的矩阵为S(:,p)例 1-105比较稀疏矩阵S 与排序后的矩阵S(:, p)load west0479; S=west0479;-64- p=colmmd(S); subplot(2,2,1 ),spy(S) subplot(

162、2,2,2),spy(S(:,p) subplot(2,2,3),spy(lu(S) subplot(2,2,4),spy(lu(S(:,p)图 1-5稀疏矩阵的排序图3 . 非零元素的列变换函数 colperm格 式 j = colperm(S) %返回一个稀疏矩阵S 的列变换的向量。 列按非0 元素升序排列。 有时这是LU 分解前有用的变换:LU(S(:,j)o如果S 是一个对称矩阵,对行和列进行排序,有利于 Cholesky 分 解 : chol(S(j,j)4 . Dulmage-Mendelsohn 分解函 数 dmperm格 式 p 二dmperm (A) %返回A 的行排列向量p

163、 , 这样,如果A 满列秩,就使得A(p,是具有非 0 对角线元素的方阵。p,q,r = dmperm(A) %A为方阵, p 为行排列向量, q 为列排列向量, 使得A(p,q)是上三角块形式,I为索引向量。p,q,r,s = dmperm(A) % A不是方阵,p,q,r含义与前面相同,s 也是索引向量。例 1-106 A=ll 0 13 0;41 0 0 44;0 22 0 24;0 0 63 0A =11 0 13041 0 0 440 22 0 240 0 630 p,q,r=dmperm(A)P =32 14q =24 1 3r =1 2345 A(p,q)ans =22 24 0

164、 00 44 41 000 11 13000635 . 整数的随机排列函数 randperm格 式 p = randperm (n) %对正整数1, 2, 3 , ,n 的随机排列,可以用来创建随机变换矩阵。例 1-107-65- p=randperm(6)P =3 4 6 5 1 26 . 稀疏对称近似最小度排列函 数 symamd格 式 p = symamd(S) % S为对称正定矩阵,返回排列向量p。7 . 稀疏逆CuthillMcKee排序函 数 symrcm格 式 r = symrcm 返回S 的对称逆Cuthill-McKee排序r , 使 S 的非0 元素集中在主对角线附近。8

165、. 稀疏对称最小度排列函 数 symmmd格 式 p 二symmmd(S) %返回S 的对称最小度排列向量p, S 为对称正定矩阵。例 1-108 B = bucky+4*speye(60); r = symrcm(B); p = symmmd(B); R = B(r,r); S = B(p,p);subplot(2,2,l), spy(R), title(B(r,r),)subplot(2,2,2), spy(S), title(B(s,s)subplot(2,2,3), spy(chol(R) title(*chol(B(r,r)subplot(2,2,4), spy(chol(S), t

166、itle(chol(B(s,s)图 1-6稀疏对称最小度排列图1.7.9 稀疏矩阵的近似欧几里得范数和条件数命 令 矩 阵 A 条件数的1-范数估计值函数 condest格 式 c = condest(A) %计算方阵A 的 1-范数中条件数的下界值cc,v = condest(A) %方阵A 的 1-范数中条件数的下界值c 和向量v , 使 得 ,即:norm(A*v,l) = norm( A, 1 )*norm(v, 1 )/c o命 令 2- 范数估计值函数 normest格 式 nrm = normest(S) % 返回矩阵S 的 2- 范数的估计值,相对误差为10-6。nrm = n

167、ormest(S,tol) %tol为指定的相对误差,而不用默认误差10-6。nrm,count = normest() %count为给出的计算范数迭代的次数其条件数的计算与前面1 2 1 2 相同。1.7.10 稀疏矩阵的分解命令不完全的LU 分解-66-函 数 luinc格 式 L,U = kiinc(X,O)%X为稀疏方阵;L 为下三角矩阵的置换形式;U 为上三角矩阵;0是一种分解标准。L,U,P = luinc(X,O)%L为下三角阵,其主对角线元素为1; U 为上三角阵,p 为单位矩阵的置换形式。L,U = luinc(X,options) %options取值为: droptol

168、表示指定的舍入误差; milu表示改变分解以便于从上三角分解因子中抽取被去掉的列元素。ugiag为 1 表示用droptol值代替上三角因子中的对角线上的零元素,默认值为0。thresh为中心临界值。L,U = luinc(X,droptol) %drop 表示指定不完全分解的舍入误差L,U,P = luinc(X,options)L,U,P = luinc(X,droptol)例 1-109 S=ll 0 13 0;41 0 0 44;0 22 0 24;0 0 63 0S =11 0 13041 0 0 440 22 0 240 0 630 S=sparse(S)S =(1,1) 11(2

169、,1)41(3,2) 22(1,3) 13(4,3) 63(2,4) 44(3,4) 24luinc(S; 0)ans =(1,1)41.0000(4,1)0.2683(2,2) 22.0000(3,3) 63.0000(4,3) 0.2063(1,4) 44.0000(2,4) 24.0000 L,U,p=luinc(S; 0)L =(1,1) 1.0000(4,1)0.2683(2,2) 1.0000(3,3) 1.0000(4,3) 0.2063(4,4) 1.0000-67-u =(1,1)41(2,2) 22(3,3) 63(1,4) 44(2,4) 24P =(4,1) 1(L2)

170、 1(2,3) 1(3,4) 1命令 稀疏矩阵的不完全Cholesky分解函数 choline格 式 1 = * 曲 ( 101)%稀疏矩阵乂的不完全010院1 table 1First column of the table must be monotonic.这个函数interpl失败,由于y 不是单调的。在本章精通MATLAB工具箱所说明的M 文件例子,消除了单调性的要求。 table=x; y.1; % create column oriented table from data xi=mminterp(table, 2, 1.1)xi =0.5281 1.10000.9580 1.1

171、0001.5825 1.10001.8847 1.1000这里使用了线性插值,函数mminterp估计了 y = l.l处的四个点。由于函数mminterp的一般性质,要插值的数据是由面向列矩阵给出,在上面的例子中称作为表(table)。第二个输入参量是被搜索矩阵table的列,第三个参量是要找的值。这个精通MATLAB工具箱函数的主体由下面给出:function y=mminterp(tab, col, val)% MMINTERP 1-D Table Search by Linear Interpolation.% Y=MMINTERP(TAB,COL,VAL) linearly inte

172、rpolates the table% TAB searching for the scalar value VAL in the column COL.% All crossings are found and TAB(:,COL) need not be monotonic.% Each crossing is returned as a separate row in Y and Y has as% many columns as TAB.Naturally,the column COL of Y contains% the value VAL. If VAL is not found

173、in the table,Y=.% Copyright (c) 1996 by Prentice-Hall,Inc.rt, ct=size(tab);if length(val) 1, error( VAL must be a scalar. *), endif colct|col 1, error( Chosen column outside table width.), endif rt val; % True where VALbelow=tab(: , col) val; % True where length(ib); % True where equals values fitry

174、=length(tmp); % # of rows in result yy=zeros(ry, ct); % poke data into a zero matrixalpha=(val-tab(ib,col)./(tab(ia,col)-tab(ib,col);alpha=alpha(: , ones(l, ct); % duplicate for all columnsy(ieq,: )=alpha.*tab(ia,: )+(1-alpha).*tab(ib,:); % interpolated valuesy(ieq,: )=tab(ie,:); % equal valuesy (:

175、, col)=val*ones(ry, 1); % remove roundoff error正如所见的,mminlerp利用了 find和 sori函数、逻辑数组和数组操作技术。没有For循环和 While循环。 不论用其中哪一种技术来实现将使运行变慢, 尤其对大的表。 注意mminterp与含有大于或等于2 的任意数列的表一起工作,如同函数interpl一样。而且,在这种情况下,插值变量可以是任意的列。例如, z=sin(pi*x); % add more data to table table=x; y; z.*; t=mminterp(table, 2, 1.1) % same int

176、erpolation as earliert =0.5281 1.1000 0.99300.9580 1.1000 0.13141.5825 1.1000 -0.96391.8847 1.1000 -0.3533 t=mminterp(table, 3, -.5) % second third column nowt =1.1669 0.7316-0.50001.8329 1.1377 -0.50003.1671 0.9639 -0.5000-78-3.8331 1.0187 -0.5000这些最后的结果估计了 x 和 y 在 z= .5处的值。尽管逐条地对函数mminteip解释如何工作是很

177、有帮助的, 但这样做要求有更多的篇幅和时间。解释mminterp如何工作最容易的方法是创建一个小表格,然后,在重要的语句末尾删除分号以后,调用函数。这样,中间值将帮助用户理解函数是如何找到与所需值相符的数据值以及如何执行插值。前面已阐述了 im erpl的用法。当用于线性插值时,只要所要求的插值点的个数少,interpl工作很好。在要求许多插值点情况下,由于所用的算法,interpl工作较慢。为了克服这个问题,精通MATLAB工具箱包括了函数m mlable,它的帮助文本是:help tableMMTABLE 1-D Monotonic Table Search by Linear Inter

178、polation.YI=MMTABLE(TAB,COL,VALS) linearly inteipolates the table TABsearching for values VALS in the column COL.TAB(:,COL) must be monotonic, but need NOT be equally spaced.YI has as many rows as VALS and as many columns TABNaNs are returned where VALS are outside the range of TAB(:,COL).YI=MMTABLE

179、(TAB,VALS) interpolates using COL=1 and does not returnTAB(:,1) in Y. This matches die usage of TABLE 1 (TAB,X0).YI=MMTABLE(X,Y,XI) interpolates the vector X to find YI associatedwith XL This match the usage of INTERP1(X,Y,XI)This routine is 10X faster than TABLEI which is called by INTERPLMMTABLE由线

180、性插值实现一维单调表搜索YI=MMTABLE(TAB,COL,VALS)线性地对表TAB进行插值, 在列COL中搜索值为VALSTAB(:,COL)必须是单调的,但不必等价地生成空间。Y I与 VALS有同样的行和与TAB有同样的列。当 VALS超出TAB(:,COL)的范围,返回NaNs.YI=MMTABLE(TAB,VALS)使用COL=1进行插值,不返回在Y 中的TAB(:,1)这和TABLEl(TAB,X0)的用法匹配。YI=MMTABLE(X,Y,XI)为了找出Y I和 X I的关系,对向量X 进行插值。这和INTERP1(X,Y,XI)的用法匹配。这个例程比由INTERP1调用TA

181、BLE 1快 10倍。正如前面描述的,可以用几种方式调用mmtable。此外,要插值的列或向量不需要线性间-79-隔。由于这个原因,mmtable比 ilinear函数更普遍。在 MATLAB版 本 5 中,interpl将用ilinear来实现线性插值。2 .5小结下面的表11.1总结了在MATLAB中所具有的曲线拟合和插值函数。表 11.1曲 线 拟 合 和 插 值 函 数polyfit(x, y, n ) 对描述n 阶多项式y=f(x)的数据进行最小二乘曲线拟合interpl(x, y, xo) 1 维线性插值interpl(x, y, xo,1 spline ) 1 维 3 次样条插值

182、interpl(x, y, xo, cubic ) 1 维 3 次插值interp2(x, y, Z, xi, yi) 2 维线性插值interp2(x, y, Z, xi, yi, cubic ) 2 维 3 次插值interp2(x, y, Z, xi, yi, nearest) 2 维最近邻插值3常用命令常用命令管理命令和函数addpath : 添加目录到MATLAB搜索路径doc : 在Web浏览器上现实HTML文档help : 显示Matlab命令和M 文件的在线帮助helpwinhelpdesk :help 兄弟几个lookfor :在基于Matlab搜索路径的所有M 文件中搜索关

183、键字partialpath:部分路径名8*)path : 所有关于路径名的处理pathtool : 一个不错的窗口路径处理界面rmpath : 删除搜索路径中指定目录type :显示指定文件的内容ver : 版本信息version : 版本号web : 打开web页what: 列出当前目录吓所有的M 文 件 M at文 件 和 M ex文件-80-whatsnew : 显示 readme 文件which : 显示文件位置常用命令- 。管理变量和工作区( 输入输出、内存管理等)clear:从内存中删除disp :显示文本或数组内容length : 数组长度( 最长维数)load : 重新载入变量

184、( 从磁盘上)mlock:锁定文件,防止文件被错误删除munlock : 解锁文件openvar :在数组编辑器中打开变量pack:整理内存空间save:保存变量到文件8*)size : 数组维数whowhos:列出内存变量workspace : 显示工作空间窗口4 语言结构和调试命令语言结构和调试命令程序设计builtin : 从可重载方法中调用内置函数eval: 执行包含可执行表达式的字符串evalc : 计算并返回表达式的值evalin : 执行某个工作空间中的包含表达式的字符串feval : 执行函数( 从函数名或函数句柄)function涵数头global :定义全局变量nargch

185、k : 检查输入参数数目persistent:定义常量script:作为脚本的M 文件-81 -语言结构和调试命令流程控制break :停止执行循环case :case语句, switch语句一部分switch switch_exprcase case_exprstatmentscaseotherwiseendcatch :try-catch语句一部分,捕捉程序else :if条件语句一部分elseif :if条件语句一部分end : 终止 for、while、switch try 和 if 语句error : 显示错误信息for :循环语句一( 确定次数)if: if条件语句other :s

186、witch 语句一部分return:返回到调用函数switch : 开关语句try :try程序块warning:类似于d isp ,但可被禁止while : 循环语句( 次数不确定)语言结构和调试命令交互输入input : 交互输入keyboard : 在M 文件中遇到keyboard时将在命令窗口产生交互直到输入return命令menu : 为用户输入产生一个选择菜单pause : 暂停-82-语言结构和调试命令,面向对象编程class : 创建一个对象或者返回一个对象类double :转换为双精度inferiorto : 亚类关系inline : 创建一个内联函数int8,intl6,i

187、nt32 :转换到符号整数isa:检查是否为所给类的对象loadobj :load函数用户定义扩展saveobj :save函数用户定义扩展single :转换为单精度superiorto : 超类关系uint8,uintl6,uint32:转换到无符号整数语言结构和调试命令程序调试dbclear :断点清除dbcont:重新开始执行dbdown : 改变当前工作空间dbmex : 调试M ex文件dbquit:退出调试模式dbstack:显示函数调用堆栈dbstatus : 列出所有断点dbstep :从断点处执行dbstop : 设置断点dbtype洌出带行号的M 文件内容dbup:改变当

188、前工作空间语言结构和调试命令-lasterr,lastwarnlasterr:返回Matlab中产生的最后一个异常信息。lastwam : 最后的警告信息这两个函数在调试程序时非常有用-83-创建图形用户界面对话框dialog : 创建对话框eirordlg:创建错误对话框helpdig : 创建帮助对话框inputdig:创建输入对话框listdig :创建选择列表对话框msgbox : 创建消息对话框pagedig : 显示页面的版面对话框printdig:显示打印对话框questdig:问题对话框uigetfile:文件检索对话框uiputfile:为写入而显示的检索对话框uisetco

189、lor:从对话框交互式设置对象的ColorSpecuisetfont : 交互设置对象字体特征warndlg : 警告对话框5 创建图形用户界面创建图形用户界面用户界面对象menu : 生成菜单uicontextmenu:创建上下文菜单u icontrol:创建用户界面控制对象uimenu : 创建用户界面菜单6 图象可视化函数图象可视化函数基本绘图和图象函数bar,barh:垂直和水平直方图hist:统计频数直方图hold : 在图象窗口中保留当前图形loglog:双对数刻度曲线图-84-pie : 饼图plot:绘制二维曲线polar :极坐标图semilogxsemilogy:半对数刻度

190、曲线图subplot:创建子图图象可视化函数三维绘图函数bar3,bar3h:三维直方图comet3 : 三维彗星图cylinder :柱面图加 3 :填充的三维多边形plot3 :三维直角坐标曲线图quiver3 :三维向量场图slice :切片图sphere : 生成球面stem3 : 三维火柴杆图waterfall : 瀑布水线图图象可视化函数- ,绘制标注和网络clabel : 为等高线图加数值标记datetick : 使用日期标注标记线grid : 绘制二维和三维图形网格gtext:使用鼠标确定文本在二维视图中的位置legend : 在图形上显示图例plolyy :双 y 轴创建图形

191、title:为当前轴添加标题xlabelylabelzlabel : 标注三轴-85-图象可视化函数体数据可视化coneplot:三维向量场中将速度向量锥形表示contourslice:在三维物体切面上绘制等高线isocaps :计算帽端等表面几何isonormals : 计算等值表面顶点的法向isosurface : 从块体数据中提取等表面数据reducepatch :缩减块体表面的数目reducevolume:缩减块体数据集中元素的数目shrinkfaces : 缩减块体表面的尺寸smooth3 : 使三维数据光滑化stream2: 计算二维流线数据stream3 : 计算三维流线数据st

192、reamline : 画流线surf2patch : 表面数据转换为块数据subvolume : 从体数据中提取子集图象可视化函数表面、网格和轮廓绘制contour : 二维等高线图contourc : 低层等高线图形计算contourf : 填充二维等高线图hidden : 从一个网线图中删除消隐线meshmeshcmeshz : 网线图peaks : 两变量的样本函数surfsurfc:三维阴影表面图surfl : 带有基于色图照明的表面图trimesh : 三角形网线图trisurf:三角形表面图图象可视化函数域生成griddata : 数据网格化meshgrid : 为三维图形生成XY

193、矩阵-86-图象可视化函数- ,专门图形绘制area : 一个二维图形的填充box : 控制轴的边界comet : 二维彗星轨迹图compass : 绘制从原点出发的向量图ezcon tour:简易等高线图绘图ezcontourf:简易填充等高线绘图ezmesh : 简易网线图绘图ezmeshc : 简易网线/ 等高线组合绘图ezplot:简易曲线图绘图ezplol3:简易三维曲线图绘图ezsurf:简易三维着色表面绘图仪ezpolar:简易极坐标曲线图feather :沿水平轴等间距的点发散的向量ezsurfc : 简易带等高线的三维表面图绘图fplot : 在指定区域画出一个函数的图形(i

194、mportant)fill : 填充二维多边形pie3 : 三维饼图pareto areto 图plotmatrix:绘制离散图pcolor :伪色绘图rose : 极坐标直方图quiver :向量场图ribbon : 带图stairs:阶梯曲线图scatter : 二维离散点图scatter3 : 三维散点图stem : 二维火柴图convhull: 凸壳图inpolygon : 检测点是否在多边形内dsearch : 搜索最近点polyarea :多边形的面积voronoi :Vbronoi 图-87-图象可视化函数视觉控制camdolly : 移动相机的位置和坐标camlookat:确定

195、相机位置来观察一个对象或一组对象camorbil:绕照相机的目标旋转照相机campan : 围绕照相机的位置旋转照相机目标campos : 设置或查询照相机的位置camproj :设置或查询投影类型camroll : 绕视轴旋转照相机camtarget:设置或查询相机目标位置camva : 设置或查询照相机视角camup : 设置或查泡照相机方向camzoom : 放大或缩小daspect:设置或查询轴的纵横比pbaspect:设置或查询绘图框的纵横比view : 确定视角viewmtx : 视角变换矩阵xlim,ylim,zlim:设置或查询轴的刻度范围camlight : 在相机系统中生成

196、或移动光源体lightangle : 在球坐标系里创建或定位一个照明对象lighting :选择照明算法material : 控制面和块的反射比属性图象可视化函数颜色操作brighten :控制色图明暗caxis : 色轴刻度colorbar :画色轴colordef:设置默认的属性值来显示不同的颜色方案hsv2rgb :饱和色彩色图HSV向 rgb转换rgbplot : 绘制色图graymon : 为灰度显示器设置默认的图形窗口属性rgb2hsv :rgb 转换为 hsvspinmap : 旋转色图shading : 设置颜色演染属性surfnorm : 计算和显示三维表面法向whitebg

197、 : 改变轴的背景色colorm叩: 设置和获得当前色图-88-图象可视化函数- 。打印函数orient:为打印输出设置纸张的方向print,printopt:创建硬拷贝输出saveas:使用指定的格式保存图形或模型(important)图象可视化函数图形图象处理axes : 生成轴图形对象axis : 坐标轴的比例和外观cla : 清楚当前轴clc : 清除窗口中的命令elf:清除当前窗口close:删除指定的图形copyobj : 复制图形对象及其子对象dragrect : 用鼠标拖动矩形drawnow : 完成等待的绘图figure : 创建一个图形窗口findobj :查找图形对象gc

198、a : 获取当前轴的句柄gebo :返回当前指向正在被调用的对象的句柄gef:获取当前图形句柄geo : 返回当前对象的句柄get:获取对象的属性getframe : 获取图形帧ginput:使用鼠标输入数据image :显示图象对象ishandle : 判断图形对象是否有效lighl:创建一个照明对象line :创建线对象newplot:确定图形对象的位置patch : 创建块图形对象rectangle : 生成二维矩形对象refresh : 重新绘制当前图形reset : 将图形对象重新设置为默认值-89-rotate : 按指定方向旋转对象rotate3d : 使用鼠标旋转轴select

199、moveresize:选择移动调整和复制轴和用户界面控制图形对象set:设置对象属性surface : 创建面对象text : 标注文字uicontextmenu:创建一个上下文按钮zoom : 在二维图形上进行放大和缩小7 双重函数和非线性数值方法dblquad :双重数值积分fminbnd : 指定区间上单变量函数的局部极小值fminsearch:求多变量函数的最小值fzero : 单变量函数求零值ode45, ODE23, ODE113, ODE15S, ODE23S, ODE23T, ODE23TB: 解微分方程odefile : 为ode求解器定义一个微分方程odeget : 获取o

200、ptions结构的属性odeset : 创建或修改ode求解器需要的options结构quad,quad8:积分的数值解vectorize : 向量化表示8 simulink的命令集仿真命令:sim一仿真运行一个simulink模块sidebug 一调试一个 simulink 模块simset 设置仿真参数simgel获取仿真参数-90-线性化和整理命令:linmod- 从连续时间系统中获取线性模型linmod2 - 也是获取线性模型,采用高级方法dinmod- 从离散时间系统中获取线性模型trim - 为一个仿真系统寻找稳定的状态参数构建模型命令:open_system 一打开已有的模型cl

201、ose_system - 关闭打开的模型或模块new_system 创建一个新的空模型窗口load.system - 加载已有的模型并使模型不可见save_system 一 保存一个打开的模型add_block - 添加一个新的模块addine- 添加一条线( 两个模块之间的连线)delete_block -删除一个模块delete_line 一删除一根线find_system -查找一个模块hilite_system . 使一个模块醒目显示replace_block -用一个新模块代替己有的模块set_param - 为模型或模块设置参数get_param -获取模块或模型的参数add_pa

202、ram.为一个模型添加用户自定义的字符串参数delete_param - 从一个模型中删除一个用户自定义的参数bdclose -关闭一个 simulink 窗口bdroot - 根层次下的模块名字gcb - 获取当前模块的名字gcbh-获取当前模块的句柄gcs - 获取当前系统的名字getfullname - 获取一个模块的完全路径名slupdate - 将 1.x的模块升级为3.x的模块addterms -为未连接的端口添加terminators模块boolean -将数值数组转化为布尔值slhelp -simulink的用户向导或者模块帮助封装命令:hasmask - 检查已有模块是否封装

203、hasmaskdlg - 检查已有模块是否有封装的对话框-9 ) -hasmaskicon -检查已有模块是否有封装的图标iconedit-使用gi叩u t函数来设计模块图标maskpopups - 返回并改变封装模块的弹出菜单项movemask - 重建内置封装模块为封装的子模块诊断命令:sllastdiagnostic -上一次诊断信息sUasterror - 上一次错误信息sllastwarning -上一次警告信息sldiagnostics - 为一个模型获取模块的数目和编译状态硬拷贝和打印命令:frameedit - 编辑打印画面print - 将 simulink系统打印成图片,或

204、将图片保存为m 文件printopt -打印机默认设置orient - 设置纸张的方向9数据分析和傅立叶变换数据分析和傅立叶变换滤波和卷积conv:卷积和多项式相乘conv2 :二维卷积deconv : 反卷积filter :滤波filter2: 二维数字滤波数据分析和傅立叶变换相关corrcoef:相关系数-92-cov :协方差矩阵xcorr :互相关系数xcov : 互协方差矩阵xcorr2 :二维互相关数据分析和傅立叶变换有限差分de12 :Laplacian 离散diff:差分和近似微分gradient:数值梯度数据分析和傅立叶变换- ,傅立叶变换abs :绝对值和模angle :相

205、角cplxpair:按复共扼把复数分类fft:一维快速傅立叶变换fft2 : 二维快速傅立叶变换fftshit:将快速傅立叶变换的D C分量移到谱中央ifft:以为逆快速傅立叶变换ifft2 :二维逆快速傅立叶变换ifftn :多维逆快速傅立叶变换ifftshift :逆 fft 平移nextpow2 :最相邻的2 的事unwrap :修正相角数据分析和傅立叶变换向量函数cross :向量叉积intersect:集合交集-93-ismember :是否集合中元素setdiff:集合差集setxor : 集合异或( 不在交集中的元素)union :两个集合的并unique :返回向量作为一个集合

206、所有元素( 去掉相同元素)10 matlab 使用的一点儿体会(for beginner)真正接触matlab 一年左右, 我很喜欢上了 matlab的简单的语法, 易于绘制图形, gui编程也非常容易, 并且功能强大的开放式的toolboxo因此, 尽管我一直没有这方面的应用, 但是我还是对它非常感兴趣。 现将个人的matlab的一点学习体会列在这里, 愿能够对大家( 特别是初学者) 起到一点儿微薄的作用也好。10.1. help:最 有 效 的 命 令 ( 参 阅 了 瀚 海 mathtools的starrynight网友的文章)其实, 可以这样说吧, 如果离开matlab软件, 我想我自

207、己是基本上什么都不会。 一遇到什么问题, 通常我的第一反应是:help , 就先说说自己对help的一些常用方法吧。1)命令窗口直接敲“help,你就可以得到本地机器上matlab的基本的帮助信息。2)对于某些不是很明确的命令, 只知道大体所属范围, 譬如说某个工具箱,直接在命令窗口中敲入help toolboxname, 一帮可以得到本工具箱有关的信息: 版本号, 函数名等。3)知道函数名,直接用help funname就可以得到相应的帮助信息。-94-10.2. see also:不可小瞧的关联在用help命令的时候,可能因为我们开始估计的方向不一定完全正确,在列出的帮助信息中没有直接给出

208、的我们要找的东西,但是我们一定不要忽略了在帮助的最后列出的seealso。譬如:曾经遇到一个画椭球的问题。刚开始我以为这个命令函数应该在gr叩h3d中给出的( 顺带提一句,只用help的时候我们就可以看到matlabgraph3d - Three dimensionalgraphs. o 于是乎, 我又help graph3d,很 遗 憾 , 在 Elementary 3-D plots.中我没有发现画椭球的函数, 但是我发现在see also中有SPECGRAPH.抱着试试的态度, 我又help specgraph,A_A,这次在 Solid modeling 中找到了 ellipsoid

209、- Generate ellipsoido10.3. lookfor: matlab 中的 google当我们很多什么头绪都没有的时候, 我们可以求助于它,往往会收到意想不到的效果。譬如:曾经在gui编程的时候,遇到过这样一个问题:想拖动鼠标时,要出现一个方框,就像你在桌面上拖动鼠标, 会出现虚线框一样。 当初我也刚开始一定都不知道该查找什么东西,后来想起用它了。于是乎,lookforRectangle ( 很不好意思,当时这个矩形我还是在金山词霸中搞定的- - - ) 。果然,在其中就找到这样一条信息:GETRECT Select rectangle with mouse.八 一 八10.4

210、. get,set: GUI object 属性的帮手在 GUI编程中,我们可能有时候想改变某些object的属性,或者想让它安装自己的想法实现, 但是我们又不记得这些object的属性,更别提怎么设置他们的值了。 这时,可 以 用 get(handles)得到此对象的所有的属性及其当前值。用 set (handles)可以得到对象所有可以设置的属性及其可能的取值。找到我们需要的属性名字和可能的取值之后,就意义用get(handles, * propertyname * ) 取得此属性的值, 用 set (handles, propertyname , values)设置此对象此属性的值。10

211、.5. Edit: 查看m源文件的助手在应用matlab过程中,可能我们想看看它的m 源文件,当然用editor定位打开也行,但是我经常采用的式直接在command窗口中用edit funname.m,就省去了定位的麻烦。-95-10.6. 其他常用命令:which, what等which:定位指定的函数和文件,最好带上参数一a l l ,以便显示更加多的信息what: 获得指定目录的m 文件,mex文件以及mat文件名列表10.7. 各个高校bbs的mathtools版谁都不可能什么都懂, 但是永远记住这样一句话: Two heads are better thanone.多向他人请教,多相

212、互讨论,这不只是在于解决matlab的问题上。 我最经常去的bbs有:. 瀚海星云(http:/ mathtools 版. 水木清华(http:/ 的 math tools 版. 饮水思源(http:/ mathtools 版. 紫丁香(http:/ matlab 版10.8. 一些专业网站我所知道的有:1) http:/ mathworks 的官方网站2)可以下载, 不过是国外的, e 文和网络对来说感觉都是很不爽的事情。http:/ Matlab大观园,估计只要在网上搜索过matlab资料的就不会不知道它,园主是东北大学的薛定宇教授,一直从事MATLAB语言及其应用研究。http:/ 文宇

213、工作室5)http:/sh.eom/bbs/5186/ matlab 语言与应用,薛定宇的一个论坛6)http:/ 中国学术交流园地,除了 mallab 专业的文章。10.9. 最后一条,要大胆的去试,哪怕只有一丁点儿可能。譬如,早些时候,有朋友问我:我用什么命令可以查找所建立网络的属性的含义,比如说:我建立网络 net=newff(minmax(p),3 , tansig,purelin,traingda);想看看 net.trainParamlr_inc属性是啥含义用什么命令查看呢?当时,我根本连练习都没有用matlab的神经网络工具箱的东西练习过。我 helpnewff-96-也没有结果

214、,后来实在没有办法,就试着help参数值traingda,没有想到还居然真的就找到答案了。还有,曾经有朋友想把waitbar的默认颜色的红色改掉,我用help没有发现可以改变其填充色的property,后来我看了 waitbar.m,发现其填充色本来就不试一个可变参数,但是既然发现了是什么地方,就可以自己改变的,这都得益于matlab的开放性。这也为我们提供了很大的灵活性( 在他的基础上,我们可以做很少的变换,就还有,曾经有朋友想把waitbar的默认颜色的红色改掉,我用help没有发现可以改变其填充色的property,后来我看了 waitbar.m,发现其填充色本来就不试一个可变参数,但是

215、既然发现了是什么地方,就可以自己改变的,这都得益于matlab的开放性。这也为我们提供了很大的灵活性( 在他的基础上,我们可以做很少的变换,就自己写一个填充色可以以属性输入而改变的wailbar的)最后,matlab只是一个很好的应用工具而已,也不像vc, delphi, vb等开发工具,最多的还是应用于算法的验证,仿真等。我们应该的是尽可能的知道一点儿基础的,然后熟悉本专业的toolbox。( 可惜,我现在一直没有这样的实际应用机会)11 MATLAB代码矢量化问题11.1、 基本技术11.1.1 MATLAB 索弓I 或弓I 用(MATLAB Indexing orReferencing)

216、在 MATLAB中有三种基本方法可以选取一个矩阵的子阵。它们分别是下标法,线性法和逻辑法(subscripted, linear, and logical)。如果你已经熟悉这个内容,请跳过本节1.1)下标法非常简单,看几个例子就好。A = 6:12;A(3,5)ans =8 10A(3:2:end)-97-ans =8 10 12A = ll 14 17;.12 15 18;.13 16 19;A(2:3,2)ans =15161.2)线性法二维矩阵以列优先顺序可以线性展开,可以通过现行展开后的元素序号来访问元素。A = ll 14 17;.12 15 18;.13 16 19;A(6)ans

217、 =16A(3,l,8)ans =13 11 18A(3;l;8)ans =1311181.3)逻辑法用一个和原矩阵具有相同尺寸的o -i矩阵,可以索引元素。在某个位置上为1 表示选取元素,否则不选。得到的结果是一个向量。A = 6:10;A(logical(lO 0 1 0 1)ans =8 10A =l 23 4;B = 1001;-98-A(logical(B)ans =1 411.1.2)数组操作和矩阵操作(Array Operations vs. MatrixOperations)对矩阵的元素一个一个孤立进行的操作称作数组操作;而把矩阵视为一个整体进行的运算则成为矩阵操作。MATLA

218、B运算符* , / , , 人都是矩阵运算,而 相 应 的 数 组 操 作 则 是A=l 0 ;0 1;B=0 1 ;1 0;A *B % 矩阵乘法ans =0 11 0A.*B% A和 B 对应项相乘ans =000011.1.3)布朗数组操作(Boolean Array Operations)对矩阵的比较运算是数组操作,也就是说,是对每个元素孤立进行的。因此其结果就不是一 个 “ 真”或 者 “ 假” ,而是一堆“ 真假” 。这个结果就是布朗数组。D = -0.2 1.0 1.5 3.0-1.0 4.2 3.14;D=0ans =0 1 1 1 0 1 1如果想选出D 中的正元素:D =

219、D(D0)D =1.0000 1.5000 3.0000 4.2000 3.1400除此之外,MATLAB运算中会出现NaN,Inf, Inf。对它们的比较参见下例Inf=Inf返回真Inf用于计算数组的双重for循环。使用的工具:数组乘法优化前:-104-A= magic(lOO);B = pascal(lOO);for j = 1:100for k= 1:100;X(j,k) = sqrt(A(j,k)*(B(j,k)-l);endend优化后:A= magic(lOO);B = pascal(lOO);X = sqrt(A).*(B-l);用一个循环建立一个向量,其元素依赖于前一个元素使

220、用的工具:FILTER, CUMSUM, CUMPROD优化前:A= 1;L= 1000;fori= 1:LA(i+l) = 2*A(i)+l;end优化后:L= 1000;A = filter(l,l -2,ones(l,L+l);如果你的向量构造只使用加法或乘法,你可使用cumsum或 cumprod函数。优化前:n=10000;V_B= 100*ones(l ,n);V_B2= 100*ones(l,n);ScaleFactor=rand( 1 ,n-1);for i = 2:nV_B(i) = V_B(i-1)*(1 +ScaleFactor(i-1);endfor i=2:nV_B2

221、(i) = V_B2(i-l)+3;end优化后:n=10000;V_A= 100*ones(l,n);V_A2 = 100*ones(l,n);ScaleFactor=rand( 1 ,n-1);V_A=cumprod(l 00 1 +ScaleFactor);V_A2=cumsum( 100 3*ones(l,n-l);-105-向量累加,每 5 个元素进行一次:工具:CUM SUM ,向量索引优化前:% Use an arbitrary vector, xx= 1:10000;y = ;for n = 5:5:length(x)y = y sum(x(l:n);end优化后( 使用预分配

222、) :x= 1:10000;ylength = (length(x) - mod(length(x),5)/5;% Avoid using ZEROS command during preallocationy(l:ylength) = 0;for n = 5:5:length(x)y(n/5) = sum(x(l:n);end优化后( 使用矢量化, 不再需要预分配) :x= 1:10000;cums = cumsum(x);y = cums(5:5 :length(x);操作一个向量,当某个元素的后继元素为。时,重复这个元素:工具:FIND, CUMSUM, DIFF任务: 我们要操作一个由

223、非零数值和零组成的向量, 要求把零替换成为它前面的非零数值。例如,我们要转换下面的向量:a=2; b=3; c=5; d=15; e= ll;x = a 0 0 0 b 0 0 c 0 0 0 0 d 0 e 0 0 0 0 0;为:x = a a a a b b b c c c c c d d e e e e e e ;解(diff和 cumsum是反函数) :valind = find(x);x(valind(2:end) = diff(x(valind);x = cumsum(x);将向量的元素累加到特定位置上工具:SPARSE优化前:% The values we are summin

224、g at designated indicesvalues = 20 15 45 50 75 10 15 15 35 40 10;% The indices associated with the values are summed cumulativelyindices = 244 1 342 13 3 1;totals = zeros(max(indices), 1);-106-for n = l:length(indices)totals(indices(n) = totals(indices(n) + values(n);end优化后:indices = 244 1 342 13 31

225、;totals = full(sparse(indices, Lvalues);注意:这一方法开辟了稀疏矩阵的新用途。在使用sparse命令创建稀疏矩阵时,它是对分配到同一个索引的所有值求和,而不是替代已有的数值。这称为“ 向量累加 ,是 MATLAB处理稀疏矩阵的方式。H.3、更多资源11.3.1 矩阵索引和运算下面的MATLAB文摘讨论矩阵索引。它比本技术手册的第1节提供了更加详细的信息MATLAB Digest: Matrix Indexing in MATLABhttp:/ Documentation: Getting Startedhttp:/ Acklam是我们的一个power u

226、 se r,他建立了一个网页提供MATLAB数组处理中的一些技巧。Peter Acklams MATLAB array manipulation tips and trickshttp:/home.online.no/-pjacklam/MATLAB/doc/iTitt/index.html11.3.2 矩阵存储管理(Matrix Memory Management)有关预分配技术如何加快计算速度的更多的信息,参见下面的联机解决方案:26623: How do I pre-allocate memory when using MATLAB?http:/ Technical Support Gu

227、ide to Memory Managementhttp:/www.mathworks.eom/support/tech-notes/l 100/1106.shtml11.3.3 发挥 MATLAB 的最高性能(Maximizing MATLABPerformance)这个技术手册对代码矢量化进行一般的讨论, 而许多时候, 我们的目的是加快代码的速度。因此,本节提供一些附加的资源,它们涉及如何是代码达到最高性能。加速代码的常用技巧:3257: How do I increase the speed or performance of MATLAB?http:/ What are the advantages of using the MATLAB Compiler tocompile my M-files?http:/ 节最后那个例子( 对 sparse函数进行独特利用) 那样。以上的讨论远没有穷尽MATLAB中所有矢量化技术。它仅仅是代码矢量化的思想和理论的一个导引。-108-

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号