登录论坛

查看完整版本 : [MATLAB基础] MATLAB应用大全 书连载


lili123
2012-05-21, 11:11
程序员典藏大系

MATLAB应用大全

赵海滨 等编著

















清 华 大 学 出 版 社
北 京
内 容 简 介
本书由浅入深,全面、系统地介绍了MATLAB编程和开发的方方面面。书中的每章都提供了大量有针对性的实例,供读者实战演练。另外,为了帮助读者更高效、直观地学习,本书每章重点内容都专门录制了对应的教学视频。这些视频和本书所有的实例文件一起收录于配书DVD光盘中。
全书共23章,分为7篇。基础篇介绍了MATLAB基础、数组和矩阵分析、字符串分析;科学运算篇介绍了MATLAB数据分析、积分和微分运算、概率和数理统计、符号计算;数据可视化篇介绍了二维和三维数据的可视化;编程篇介绍了MATLAB基本编程、程序调试和编程技巧;仿真篇介绍了Simulink基本知识、Simulink建模和S-函数;高级应用篇介绍了GUI编程开发、GUIDE工具建立GUI界面、文件夹管理和文件I/O操作、MATLAB编译器;工具箱与接口编程篇介绍了信号处理、小波分析、图像处理、神经网络4个工具箱,最后还介绍了MATLAB与Word和Excel的接口技术。
无论是对于MATLAB的初学者,还是有一定基础的高级用户,本书都是一本难得的参考书。本书非常适合使用MATLAB进行编程和开发的本科生、研究生及教师,也适合广大科研和工程技术人员研读。

本书封面贴有清华大学出版社防伪标签,无标签者不得销售。
版权所有,侵权必究。侵权举报电话:010-62782989 13701121933


图书在版编目(CIP)数据

MATLAB应用大全 / 赵海滨等编著. —北京:清华大学出版社,2012.3
ISBN 978-7-302-27616-6

Ⅰ. ①M… Ⅱ. ①赵… Ⅲ. ①Matlab软件 Ⅳ. ①TP317

中国版本图书馆CIP数据核字(2011)第271712号

责任编辑:夏兆彦
责任校对:徐俊伟
责任印制:

出版发行:清华大学出版社
网 址:http://www.tup.com.cn, http://www.wqbook.com
地 址:北京清华大学学研大厦A座 邮 编:100084
社 总 机:010-62770175 邮 购:010-62786544
投稿与读者服务:010-62776969,[email protected]
质量反馈:010-62772015,[email protected]
印 刷 者:
装 订 者:肖 米
经 销:全国新华书店
开 本:185mm×260mm 印 张:46.75 字 数:1170千字
(附光盘1张)
版 次:2012年3月第1版 印 次:2012年3月第1次印刷
印 数:1~5000
定 价:25.00元
产品编号:043740-01

当当地址:http://product.dangdang.com/product.aspx?product_id=22704305

lili123
2012-05-21, 11:12
目 录
第1篇 MATLAB基础
第1章 MATLAB概述( 教学视频:15分钟) 2
1.1 MATLAB简介 2
1.2 MATLAB的特点 2
1.2.1 界面友好,容易使用 2
1.2.2 强大的科学计算和数据处理能力 3
1.2.3 强大的图形处理功能 3
1.2.4 应用广泛的专业领域工具箱 3
1.2.5 实用的程序接口 3
1.3 MATLAB 2010a的新功能和特点 4
1.4 MATLAB的安装、退出及卸载 4
1.4.1 MATLAB的安装 4
1.4.2 MATLAB的启动和退出 8
1.4.3 MATLAB的卸载 9
1.5 MATLAB的目录结构 10
1.6 MATLAB的工作环境 11
1.7 MATLAB的通用命令简介 16
1.8 MATLAB的工具箱简介 17
1.9 MATLAB的帮助系统 18
1.9.1 命令行窗口查询帮助 18
1.9.2 MATLAB 2010a联机帮助系统 20
1.10 本章小结 21
第2章 MATLAB基础( 教学视频:78分钟) 22
2.1 数据类型 22
2.1.1 数值类型 23
2.1.2 逻辑类型 31
2.1.3 字符和字符串 32
2.1.4 函数句柄 33
2.1.5 单元数组类型 35
2.1.6 结构体类型 39
2.2 运算符 46
2.2.1 算术运算符 46
2.2.2 关系运算符 47
2.2.3 逻辑运算符 48
2.2.4 运算优先级 52
2.3 日期和时间 53
2.3.1 日期和时间的表示形式 53
2.3.2 日期和时间的格式转换 55
2.3.3 计时函数及其应用 58
2.4 MATLAB中的常量和变量 60
2.5 本章小结 60
第3章 数组和矩阵分析( 教学视频:160分钟) 61
3.1 数组及其函数 61
3.1.1 数组的建立和操作 61
3.1.2 数组的算术运算 65
3.1.3 数组的关系运算 68
3.1.4 数组的逻辑运算 70
3.1.5 数组信息的获取 71
3.2 矩阵的创建 75
3.3 矩阵的基本操作 79
3.3.1 矩阵的扩展 79
3.3.2 矩阵的块操作 80
3.3.3 矩阵中元素的删除 82
3.3.4 矩阵的转置 82
3.3.5 矩阵的旋转 83
3.3.6 矩阵的翻转 84
3.3.7 矩阵尺寸的改变 85
3.4 矩阵的基本数值运算 85
3.4.1 矩阵的加减运算 85
3.4.2 矩阵的乘法 86
3.4.3 矩阵的除法 87
3.4.4 矩阵元素的查找 89
3.4.5 矩阵元素的排序 89
3.4.6 矩阵元素的求和 90
3.4.7 矩阵元素的求积 91
3.4.8 矩阵元素的差分 92
3.5 特殊矩阵的生成 93
3.5.1 全零矩阵 93
3.5.2 全1矩阵 94
3.5.3 单位矩阵 94
3.5.4 0~1间均匀分布的随机矩阵 95
3.5.5 标准正态分布随机矩阵 95
3.5.6 魔方矩阵 96
3.5.7 范得蒙矩阵 96
3.5.8 希尔伯特矩阵 97
3.5.9 托普利兹矩阵 98
3.5.10 伴随矩阵 98
3.5.11 帕斯卡矩阵 99
3.6 矩阵的特征和线性代数 100
3.6.1 方阵的行列式 100
3.6.2 特征值、特征向量和特征多项式 100
3.6.3 对角阵 102
3.6.4 上三角阵和下三角阵 102
3.6.5 矩阵的逆和伪逆 103
3.6.6 矩阵的秩 104
3.6.7 矩阵的迹 105
3.6.8 矩阵的范数 105
3.6.9 矩阵的条件数 106
3.6.10 矩阵的标准正交基 107
3.6.11 矩阵的超越函数 108
3.7 稀疏矩阵 111
3.7.1 矩阵存储方式 111
3.7.2 产生稀疏矩阵 111
3.7.3 特殊稀疏矩阵 115
3.8 矩阵的分解 117
3.8.1 Cholesky分解 117
3.8.2 LU分解 118
3.8.3 QR分解 119
3.8.4 SVD分解 120
3.8.5 Schur分解 121
3.8.6 Hessenberg分解 122
3.9 本章小结 123
第4章 字符串分析( 教学视频:19分钟) 124
4.1 字符串处理函数 124
4.1.1 字符串基本属性 124
4.1.2 字符串的构造 125
4.1.3 字符串的比较 127
4.1.4 字符串的查找和替换 128
4.1.5 字符串的转换 130
4.2 字符串的其他操作 131
4.2.1 字符的分类 131

lili123
2012-05-21, 11:13
4.2.2 字符串的执行 132
4.2.3 其他操作 134
4.3 本章小结 136
第2篇 MATLAB科学运算
第5章 MATLAB数据分析( 教学视频:33分钟) 138
5.1 多项式及其函数 138
5.1.1 多项式的建立 138
5.1.2 多项式的求值与求根 139
5.1.3 多项式乘法和除法 141
5.1.4 多项式的导数和积分 142
5.1.5 多项式展开 143
5.1.6 多项式拟合 145
5.1.7 曲线拟合图形用户接口 145
5.2 插值 147
5.2.1 一维插值 147
5.2.2 二维插值 150
5.2.3 样条插值 151
5.2.4 高维插值 152
5.3 函数的极限 153
5.3.1 极限的概念 153
5.3.2 求极限的函数 155
5.4 本章小结 157
第6章 积分和微分运算( 教学视频:27分钟) 158
6.1 数值积分 158
6.1.1 定积分概念 158
6.1.2 利用梯形求面积 159
6.1.3 利用矩形求面积 161
6.1.4 单变量数值积分求解 162
6.1.5 双重积分求解 164
6.1.6 三重定积分求解 165
6.2 常微分方程 166
6.2.1 常微分方程符号解 166
6.2.2 常微分方程数值解 168
6.3 函数的极小值和零点 171
6.3.1 一元函数的最小值 171
6.3.2 多元函数的最小值 172
6.3.3 一元函数的零点 173
6.4 本章小结 174
第7章 概率和数理统计( 教学视频:94分钟) 175
7.1 随机数的产生 175
7.1.1 二项分布随机数据的产生 175
7.1.2 泊松分布 176
7.1.3 指数分布随机数据的产生 176
7.1.4 均匀分布随机数据的产生 177
7.1.5 正态分布随机数据的产生 178
7.1.6 其他常见分布随机数据的产生 179
7.2 概率密度函数 179
7.2.1 常见离散分布的概率密度函数 179
7.2.2 常见连续分布的概率密度函数 182
7.2.3 三大抽样分布的概率密度函数 185
7.3 随机变量的数字特征 187
7.3.1 平均值和中位数 187
7.3.2 数据的排序 192
7.3.3 期望和方差 195
7.3.4 常见分布的期望和方差 198
7.3.5 协方差和相关系数 203
7.3.6 偏斜度和峰度 205
7.4 参数估计 207
7.4.1 点估计 207
7.4.2 区间估计 207
7.5 假设检验 212
7.5.1 方差已知时正态总体均值的假设检验 212
7.5.2 方差未知时正态总体均值的假设检验 213
7.5.3 两个正态分布均值差的检验 214
7.5.4 两个分布一致性检验 215
7.6 方差分析 216
7.6.1 单因素方差分析 216
7.6.2 双因素方差分析 218
7.7 统计图绘制 221
7.7.1 正整数的频率表 221
7.7.2 样本数据的盒图 222
7.7.3 最小二乘拟合直线 222
7.7.4 正态分布概率图 223
7.7.5 经验累积分布函数图 224
7.7.6 威布尔概率图 225
7.7.7 分位数-分位数图 226
7.7.8 给当前图形加一条参考线 227
7.7.9 给当前图形加多项式曲线 228
7.7.10 样本的概率图形 229
7.7.11 带有正态密度曲线的直方图 230
7.7.12 在指定区间绘制正态密度曲线 230
7.8 本章小结 231
第8章 MATLAB符号计算( 教学视频:124分钟) 232
8.1 符号运算入门 232
8.1.1 符号变量的创建 232
8.1.2 符号变量 235
8.1.3 符号函数和符号方程 236
8.2 简单实例分析 237
8.2.1 求解一元二次方程的根 237
8.2.2 求导数 237
8.2.3 计算不定积分 238
8.2.4 计算定积分 238
8.2.5 求解一阶微分方程 238
8.3 符号运算精度 239
8.4 符号表达式的操作 240
8.4.1 符号表达式的基本运算 240
8.4.2 符号表达式的常用操作 241
8.4.3 符号表达式的化简 245
8.4.4 符号表达式的替换 247
8.4.5 反函数运算 249
8.4.6 复合函数运算 250
8.5 符号矩阵的计算 251
8.5.1 符号矩阵的生成 251
8.5.2 符号矩阵的四则运算 253
8.5.3 符号矩阵的线性代数运算 254
8.6 符号微积分 260
8.6.1 符号表达式的微分运算 260
8.6.2 符号表达式的极限 262
8.6.3 符号表达式的积分 262
8.6.4 级数的求和 264
8.6.5 泰勒级数 264
8.7 符号表达式积分变换 265
8.7.1 Fourier变换及其反变换 265
8.7.2 Laplace变换及其反变换 267
8.7.3 Z变换及其反变换 268
8.8 符号方程求解 270
8.8.1 符号代数方程组的求解 270
8.8.2 微分方程的求解 273
8.9 符号函数的图形绘制 275
8.9.1 符号函数曲线的绘制 275

lili123
2012-05-21, 11:14
8.9.2 符号函数的三维网格图 280
8.9.3 符号函数的等值线图 283
8.9.4 符号函数的三维彩色曲面图 284
8.10 图形化符号函数计算器 286
8.10.1 单变量符号函数计算器 287
8.10.2 泰勒级数逼近计算器 288
8.11 Maple接口 289
8.11.1 利用sym函数调用Maple函数 290
8.11.2 利用maple函数调用Maple函数 290
8.12 本章小结 291
第3篇 数据可视化
第9章 二维数据可视化( 教学视频:112分钟) 294
9.1 MATLAB绘图 294
9.1.1 基本绘图函数 294
9.1.3 子图绘制 300
9.1.4 叠加图绘制 301
9.1.5 设置坐标轴 302
9.1.6 网格线和边框 303
9.1.7 坐标轴的缩放 304
9.1.8 图形的拖曳 306
9.1.9 数据光标 306
9.1.10 绘制直线 307
9.1.11 极坐标绘图 307
9.1.12 对数和半对数坐标系绘图 309
9.1.13 双纵轴绘图 311
9.2 图形的窗口和标注 312
9.2.1 图形窗口 313
9.2.2 图形标注概述 314
9.2.3 图形标题 315
9.2.4 坐标轴标题 318
9.2.5 图例 319
9.2.6 颜色条 321
9.2.7 文本框标注 322
9.2.8 获取和标记数据点 323
9.3 特殊图形的绘制 324
9.3.1 函数绘图 325
9.3.2 柱状图 328
9.3.3 饼状图 330
9.3.4 直方图 331
9.3.5 面积图 331
9.3.6 散点图 332
9.3.7 等高线绘图 333
9.3.8 误差图 335
9.3.9 填充图 335
9.3.10 火柴杆图 336
9.3.11 阶梯图 336
9.3.12 罗盘图 337
9.3.13 羽毛图 337
9.3.14 向量场图 338
9.3.15 彗星图 338
9.3.16 伪彩色绘图 339
9.4 图形句柄 339
9.4.1 图形句柄 339
9.4.2 坐标轴句柄 342
9.5 本章小结 346
第10章 三维数据可视化( 教学视频:75分钟) 347
10.1 创建三维图形 347
10.1.1 三维图形概述 347
10.1.2 三维曲线图 348
10.1.3 三维曲面图 348
10.1.4 特殊三维绘图 354
10.1.5 非网格数据绘图 362
10.1.6 创建三维片块模型 363
10.2 三维隐函数绘图 364
10.3 三维图形显示 367
10.3.1 设置视角 367
10.3.2 色彩控制 369
10.3.3 光照效果 377
10.3.4 Camera控制 381
10.3.5 图形绘制实例 382
10.4 图形的输出 385
10.5 本章小结 386
第4篇 MATLAB编程
第11章 MATLAB基本编程( 教学视频:77分钟) 388
11.1 MATLAB编程概述 388
11.1.1 M文件的创建 388
11.1.2 脚本M文件 388
11.1.3 函数M文件 390
11.1.4 函数的参数传递 393
11.2 流程控制 397
11.2.1 变量 397
11.2.2 顺序结构 399
11.2.3 分支结构 399
11.2.4 循环结构 401
11.2.5 try…catch语句 404
11.2.6 人机交互函数 405
11.3 函数类型 408
11.3.1 主函数 409
11.3.2 子函数 409
11.3.3 嵌套函数 410
11.3.4 私有函数 411
11.3.5 重载函数 412
11.3.6 匿名函数 414
11.3.7 函数句柄 419
11.4 P码文件和ASV文件 420
11.4.1 P码文件 420
11.4.2 ASV文件 422
11.5 本章小结 423
第12章 程序调试和编程技巧( 教学视频:33分钟) 424
12.1 M文件调试 424
12.1.1 出错信息 424
12.1.2 直接调试法 424
12.1.3 工具调试法 425
12.1.4 错误处理 430
12.2 M文件性能分析 434
12.2.1 Code Analyzer工具 434
12.2.2 Profiler分析工具 436
12.3 编程技巧 438
12.3.1 程序执行时间 438
12.3.2 编程技巧 438
12.3.3 小技巧 442
12.4 本章小结 443
第5篇 MATLAB仿真
第13章 Simulink基本知识( 教学视频:61分钟) 446
13.1 Simulink概述 446

lili123
2012-05-21, 11:14
13.1.1 Simulink的概念 446
13.1.2 Simulink的应用和特点 446
13.2 Simulink的基本操作 447
13.2.1 启动Simulink 447
13.2.2 选择模块 448
13.2.3 模块的连接 449
13.2.4 模块的基本操作 449
13.2.5 模块参数设置 450
13.2.6 仿真器设置 450
13.2.7 运行仿真 451
13.3 常用的模块库 452
13.3.1 Simulink常用模块子集 452
13.3.2 连续时间模块子集 453
13.3.3 非连续时间模块子集 454
13.3.4 离散时间模块子集 455
13.3.5 逻辑和位操作模块子集 456
13.3.6 查表模块子集 457
13.3.7 数学运算模块子集 459
13.3.8 端口和子系统模块子集 459
13.3.9 信号特征模块子集 460
13.3.10 信号路径模块子集 462
13.3.11 Sinks模块子集 463
13.3.12 信号源模块子集 464
13.3.13 用户定义模块子集 465
13.4 子系统及其封装 466
13.4.1 子系统 466
13.4.2 子系统的封装 467
13.5 Simulink模型工作空间 469
13.6 本章小结 470
第14章 Simulink建模和S-函数( 教学视频:32分钟) 471
14.1 回调函数 471
14.1.1 模型回调函数 471
14.1.2 模块回调函数 472
14.2 运行仿真 474
14.2.1 仿真参数的设置 474
14.2.2 仿真的出错信息 476
14.2.3 使用MATLAB命令运行仿真 476
14.3 模型的调试 478
14.3.1 Simulink调试器 478
14.3.2 命令行调试 479
14.4 S-函数建模 479
14.4.1 S-函数介绍 480
14.4.2 S-函数工作原理 480
14.4.3 M文件的S-函数 480
14.4.4 S-函数实例分析 481
14.5 本章小结 484
第6篇 MATLAB高级应用
第15章 GUI编程开发( 教学视频:70分钟) 486
15.1 图形句柄 486
15.1.1 MATLAB图形系统 486
15.1.2 图形句柄 487
15.1.3 图形对象的属性 487
15.2 图形对象 487
15.2.1 创建图形对象 487
15.2.2 获取对象的属性 488
15.2.3 设置对象的属性 489
15.2.4 对象的基本操作 491
15.2.5 root根对象 494
15.2.6 figure对象 495
15.2.7 axes坐标轴对象 495
15.2.8 核心图形对象 496
15.3 用户接口对象 499
15.3.1 uicontrol对象 499
15.3.2 uimenu对象 500
15.3.3 uicontextmenu对象 502
15.3.4 uitoolbar对象 503
15.3.5 uibuttongroup对象 506
15.3.6 uipanel对象 506
15.3.7 uitable对象 506
15.4 常用的对话框 507
15.4.1 消息对话框 508
15.4.2 错误对话框 508
15.4.3 警告对话框 509
15.4.4 帮助对话框 509
15.4.5 输入对话框 510
15.4.6 列表对话框 511
15.4.7 问题对话框 512
15.4.8 进度条设置对话框 513
15.4.9 路径选择对话框 514
15.4.10 文件打开对话框 515
15.4.11 文件保存对话框 516
15.4.12 页面设置对话框 518
15.4.13 打印预览对话框 518
15.4.14 打印对话框 519
15.4.15 颜色设置对话框 520
15.4.16 字体设置对话框 520
15.5 本章小结 521
第16章 GUIDE工具建立GUI界面( 教学视频:79分钟) 522
16.1 采用GUIDE建立GUI 522
16.1.1 图形用户界面概述 522
16.1.2 GUIDE启动 522
16.1.3 GUI对象的常用属性 526
16.1.4 GUI的M文件 528
16.1.5 数据传递 529
16.2 简单实例分析 529
16.2.1 简单的按钮 530
16.2.2 简单的滑动条 530
16.2.3 弹出式菜单 531
16.2.4 列表框 531
16.2.5 加法运算 532
16.2.6 坐标轴 533
16.2.7 菜单 534
16.2.8 快捷菜单 535
16.3 综合实例分析 536
16.3.1 声音的显示和播放 536
16.3.2 语音实时采集和显示 538
16.4 本章小结 540
第17章 文件夹管理和文件I/O操作( 教学视频:89分钟) 541
17.1 文件夹管理 541
17.1.1 当前文件夹 541
17.1.2 文件夹管理 542
17.2 低级文件I/O 546
17.2.1 打开和关闭文件 546
17.2.2 读取和写入二进制文件 547
17.2.3 逐行读取文本文件 549
17.2.4 格式化读取和写入文件 549
17.2.5 文件内部的位置控制 552
17.3 高级文件I/O 553
17.3.1 使用向导导入数据 553

lili123
2012-05-21, 11:15
17.3.2 带有分隔符的数据文件 555
17.3.3 带有文本内容的数据文件 556
17.3.4 利用函数importdata()导入数据 558
17.3.5 利用函数diary()导出数据 559
17.3.6 其他函数 559
17.4 音频文件 560
17.4.1 读取音频文件 560
17.4.2 播放和录音 563
17.4.3 写入音频文件 564
17.5 图像文件 566
17.5.1 读取和显示图像 566
17.5.2 获取文件信息 567
17.5.3 写入图片文件 568
17.5.4 通过函数image()显示图像 569
17.6 视频文件 570
17.6.1 读取视频文件 570
17.6.2 获取文件信息 572
17.6.3 写入视频文件 572
17.7 表单文件 573
17.7.1 读取表单文件 574
17.7.2 获取表单文件信息 575
17.7.3 写入表单文件 575
17.7.4 Lotus 123表单文件 576
17.8 本章小结 576
第18章 MATLAB编译器( 教学视频:28分钟) 577
18.1 编译器概述 577
18.2 编译器的安装和配置 577
18.2.1 查看系统信息 577
18.2.2 对编译器进行配置 578
18.3 编译器的使用 578
18.3.1 编译过程 578
18.3.2 deploytool工具 581
18.3.3 MCR的安装 583
18.4 本章小结 584
第7篇 工具箱与接口编程
第19章 信号处理工具箱( 教学视频:75分钟) 586
19.1 数字信号处理理论 586
19.1.1 信号处理工具箱 586
19.1.2 离散信号 586
19.1.3 波形发生器 592
19.2 改变信号的采样率 600
19.2.1 改变信号的采样率 600
19.2.2 降低信号的采样率 601
19.2.3 提高信号的采样率 603
19.3 FIR数字滤波器 604
19.3.1 FIR滤波器介绍 604
19.3.2 常用的窗函数 604
19.3.3 基于窗函数的FIR滤波器 607
19.3.4 基于频率采样的FIR滤波器 609
19.3.5 FIR滤波器实例分析 610
19.4 IIR数字滤波器 611
19.4.1 IIR数字滤波器介绍 611
19.4.2 IIR数字滤波器 612
19.4.3 IIR数字滤波器阶数的选择 616
19.4.4 IIR滤波器实例分析 617
19.5 非参数法功率谱估计 618
19.5.1 周期图法功率谱估计 618
19.5.2 Welch法功率谱估计 619
19.6 参数模型法功率谱估计 620
19.6.1 AR模型功率谱估计 620
19.6.2 Yule-Walker法功率谱估计 621
19.6.3 Burg法功率谱估计 622
19.6.4 协方差法功率谱估计 622
19.7 子空间法功率谱估计 623
19.7.1 特征向量法功率谱估计 623
19.7.2 MUSIC算法功率谱估计 624
19.8 本章小结 624
第20章 小波分析工具箱( 教学视频:54分钟) 625
20.1 小波分析 625
20.1.1 小波分析简介 625
20.1.2 连续小波变换 626
20.1.3 离散小波变换 626
20.1.4 多分辨分析 627
20.1.5 小波包分解 628
20.1.6 常用的小波 629
20.2 一维小波分解和重构 631
20.2.1 一维连续小波分解 631
20.2.2 一维离散小波分解和重构 631
20.3 二维小波分解和重构 634
20.3.1 二维小波的单层分解和重构 635
20.3.2 二维小波的多层分解和重构 635
20.4 小波包分析 638
20.4.1 一维小波包的分解和重构 638
20.4.2 二维小波包的分解和重构 642
20.4.3 小波能量和小波熵 643
20.5 小波工具箱的GUI工具 645
20.5.1 小波工具箱介绍 645
20.5.2 小波和小波包的显示工具 646
20.5.3 一维小波分析工具 647
20.5.4 二维小波分析工具 648
20.6 本章小结 649
第21章 图像处理工具箱( 教学视频:78分钟) 650
21.1 图像处理基础 650
21.1.1 数字图像处理 650
21.1.2 图像处理工具箱介绍 651
21.1.3 MATLAB中图像类型 651
21.1.4 MATLAB图像类型转换 656
21.1.5 图像的读写和显示 661
21.1.6 图像浏览器 666
21.2 图像的常用操作 667
21.2.1 图像基本运算 667
21.2.2 图像的直方图和直方图均衡化 670
21.2.3 图像的对比度增强 672
21.2.4 图像的插值 673
21.2.5 图像中添加噪声 675
21.2.6 图像剪切 675
21.3 图像的变换技术 677
21.3.1 图像的傅里叶变换 677
21.3.2 图像的离散余弦变换 678
21.4 图像增强技术 679
21.4.1 像素值 679
21.4.2 图像的滤波 680
21.5 图像的边缘检测 683
21.6 数字图像的采集 684
21.6.1 USB摄像头设置 684
21.6.2 图像和视频的采集 685
21.6.3 imaqtool工具 688
21.7 本章小结 689
第22章 神经网络工具箱( 教学视频:31分钟) 690
22.1 人工神经网络概述 690
22.1.1 人工神经网络介绍 690
22.1.2 人工神经元 691
22.1.3 MATLAB神经网络工具箱 692
22.2 感知器神经网络 693
22.2.1 感知器神经网络 693
22.2.2 设计实例分析 694
22.3 线性神经网络 696
22.3.1 线性神经网络 696
22.3.2 设计实例分析 697
22.4 BP网络 698
22.4.1 BP网络介绍 698
22.4.2 BP网络的创建 699
22.4.3 BP网络实例分析 700
22.5 径向基神经网络 702
22.5.1 径向基神经网络 702
22.5.2 广义回归神经网络 703
22.5.3 概率神经网络 704
22.6 神经网络GUI工具 706
22.6.1 nntool工具 706
22.6.2 nprtool工具 709
22.7 本章小结 712
第23章 MATLAB与Word和Excel的接口( 教学视频:33分钟) 713
23.1 MATLAB与Word混合使用 713
23.1.1 Notebook的安装 713
23.1.2 Notebook的使用环境 714
23.1.3 Notebook实例分析 718
23.2 MATLAB与Excel混合使用 719
23.2.1 Excel link的安装 720
23.2.2 设置启动方式 721
23.2.3 启动和终止Excel link 722
23.2.4 Excel link工具栏 722
23.2.5 实例分析 723
23.3 本章小结 726

lili123
2012-05-21, 11:16
前 言
MATLAB软件是由美国Mathworks公司发布的主要面向科学计算、数据可视化、系统仿真及交互式程序设计的高科技计算环境。由于MATLAB功能强大,简单易学,并且对问题的描述和求解符合人们的思维方式和数学表达习惯,所以它已经成为高校教师、科研人员和工程技术人员的必学软件。使用MATLAB,可极大地提高人们的工作效率和质量。
MATLAB软件代表了当今国际科学计算软件的先进水平,应用领域非常广泛。很多人都希望将MATLAB强大的数值计算和分析功能应用于自己的项目和实践中,从而可以直观、方便地进行分析、计算和设计工作。编写这本书的目的,就是为了向读者全方位介绍MATLAB编程和开发技术。
本书由浅入深,全面、系统地介绍了MATLAB基础、科学计算、数据可视化、编程、Simulink仿真技术、高级应用及常用的工具箱等内容。书中的每一章都提供了大量的实例程序,以方便读者进行练习和学习,每个例程都经过精挑细选,具有很强的针对性,适合各个阶段的读者学习。本书既注重基础知识,又非常注重实践,读者可以快速上手并迅速提高。通过本书的学习,读者不仅可以全面掌握MATLAB编程和开发技术,还可以提高快速分析和解决实际问题的能力,从而能够在最短的时间内,以最好的效果解决实际的工程和科学问题,提升工作效率。
本书的特点
1.每章都提供对应的教学视频,学习高效、直观
为了便于读者高效、直观地学习本书中的内容,作者对每章的重点内容都特意制作了教学视频,这些视频和本书的实例文件一起收录于配书DVD光盘中。
2.结构合理,内容全面、系统
本书详细介绍了MATLAB编程、数据分析和处理、数据可视化、Simulin仿真、GUI编程开发及常用的工具箱,将实际项目开发经验贯穿于全书,思想和内容都非常丰富。在内容的安排上,则根据读者的学习习惯和内容的梯度合理安排,更加适合读者学习。
3.叙述详实,例程丰富
本书有详细的例程,每个例子都经过作者的精挑细选,有很强的针对性。书中的程序都有完整的代码,而且代码非常简洁和高效,便于读者学习和调试。读者也可以直接重用这些代码来解决自己的问题。
4.结合实际,编程技巧贯穿其中
MATLAB编程非常灵活,所以本书写作时特意给出了大量的实用编程技巧,这些技巧的灵活使用,将会让你事半功倍。
5.语言通俗,图文并茂
对于程序的运行结果,本书给出了大量的图片。本书不仅注重基础知识,而且非常注重实践,让读者快速上手,迅速掌握MATALB知识。
本书内容体系
本书共23章,分为7篇,各篇对应的章节和具体内容介绍如下。
第1篇包括第1~4章,主要介绍MATLAB的基础知识,讲解MATLAB 2010a的安装和基本操作,MATLAB的数据类型和运算符,数组和矩阵及字符串等操作。
第2篇包括第5~8章,主要介绍利用MATLAB进行科学计算,包括多项式、插值、极限等基本数据分析,微积分运算、概率论和数理统计,以及MATLAB的符号计算功能。
第3篇包括第9章和第10章,主要介绍MATLAB的数据可视化,包括二维数据可视化和三维数据可视化,同时讲解了图形的标注、特殊图形的绘制,以及三维图形的视角、色彩和光照效果等。
第4篇包括第11章和第12章,主要介绍MATLAB编程,包括脚本M文件和函数M文件,以及程序的流程控制,最后介绍了程序的调试、程序的性能分析和常用的编程技巧等。
第5篇包括第13章和第14章,主要介绍利用Simulink进行系统的仿真,包括Simulink建模的原理、常用操作、基本模块库、子系统的封装技术、Simulink调试器和S-函数等。
第6篇包括第15~18章,主要介绍MATLAB的一些高级应用,例如图形句柄、利用GUIDE建立图形用户界面、文件I/O操作及MATLAB的编译器等。
第7篇包括第19~23章,主要介绍MATLAB的常用工具箱和与Word和Excel的接口,包括信号处理工具箱、小波分析工具箱、图像处理工具箱、神经网络工具箱。
本书读者对象
 MATLAB初学者;
 想全面、系统地学习MATLAB的人员;
 MATLAB技术爱好者;
 利用MATLAB进行编程和开发的技术人员;
 大中专院校的学生和老师;
 相关培训学校的学员。
本书作者
本书由东北大学机械电子工程研究所的赵海滨主笔编写。其他参与编写的人员有武冬、郅晓娜、孙美芹、卫丽行、尹翠翠、蔡继文、陈晓宇、迟剑、邓薇、郭利魁、金贞姬、李敬才、李萍、刘敬、陈慧、刘艳飞、吕博、全哲、佘勇、宋学江、王浩、王康、王楠、杨宗芳、张严虎、周玉、张平、张靖波、周芳、杨罡、于海滨、张晶杰、张利峰、杨景凤、陈锴、郑剑锋、叶佩思、张涛、赵东彪、王双。在此表示感谢!
在此感谢我的父母、家人、研究所的老师,以及所有帮助过我的人。由于时间仓促,笔者水平有限,书中难免存在遗漏和不足之处,恳请广大读者提出宝贵意见。

编著者

lili123
2012-05-21, 11:17
第5章 MATLAB数据分析
针对数据分析和处理,MATLAB提供了大量的函数,非常方便和灵活。本章将详细介绍如何利用MATLAB进行一些基本的数据分析,主要包括多项式及其函数,插值,以及函数的极限。MATLAB能够很好地解决多项式运算问题,这些函数用于多项式的建立、多项式求值、多项式乘法和除法、多项式求导和多项式展开和拟合等。插值函数,主要包括一维插值、二维插值、样条插值和高维插值等内容。MATLAB提供了非常强大的函数,可以非常方便和灵活地求得函数的极限。
5.1 多项式及其函数
MATLAB提供了一些处理多项式的专用函数,用户可以很方便地进行多项式的建立、多项式求值、乘法和除法运算,以及求多项式的导数和微分、多项式的根、多项式的展开和拟合等。
5.1.1 多项式的建立
MATLAB语言中,对于多项式 ,用多项式的系数按照降幂次序存放在向量 中。顺序必须是从高到低进行排列。例如,多项式 可以用系数向量 来表示。对多项式的操作就转换为对多项式系数向量的操作问题, 次多项式用一个 维的行向量表示,在多项式中缺少的幂次要用“0”来补齐。在MATLAB中,可以采用直接输入多项式系数建立多项式,也可以采用多项式的根来建立多项式,下面分别进行介绍。
1.直接输入多项式系数法
MATLAB中多项式是以向量的形式存储的,输入向量后,MATLAB将按照降幂顺序自动把向量的元素分配给多项式各项的系数。该向量可以是行向量,也可以是列向量。
【例5-1】 使用向量来创建多项式 ,并进行显示。
首先创建系数向量,然后使用函数poly2sym()将该向量转换为多项式,直接进行输出,也可以采用函数disp()进行多项式的显示,代码如下:

>> clear all;
p1=[4 3 2 1];
y=poly2sym(p1) %由向量创建多项式
disp(y) %显示多项式

运行程序,输出结果如下:

y =
4*x^3+3*x^2+2*x+1
4*x^3+3*x^2+2*x+1

在MATLAB中,多项式的输出采用降幂形式。如果多项式的系数为0,则在输出的时候不显示,可采用函数disp()来显示多项式。
2.由多项式的根来建立多项式
如果多项式的根已知,可以采用函数poly()建立多项式。其调用格式为p=poly(r),其中r为由多项式的根组成的向量,p为输出的多项式的系数向量。
【例5-2】 已知某多项式的根为2、3、4,求该多项式。代码如下:

>> r=[2 3 4];
p=poly(r); %由多项式的根创建多项式
y=poly2sym(p) %显示多项式

运行程序后,输出结果如下:

y =
x^3-9*x^2+26*x-24

在程序中,函数poly()通过多项式的根创建多项式,多项式的根向量为r。通过函数poly2sym()对创建的多项式进行显示。

lili123
2012-05-21, 11:17
5.1.2 多项式的求值与求根
在MATLAB中,通过函数polyval()和polyvalm()可以对多项式进行求值,两者的区别为前者是代数多项式求值,后者是矩阵多项式求值。通过函数roots()对多项式进行求根,如果已经知道多项式的根,也可以通过函数poly()建立相对应的多项式。下面分别进行 介绍。
1.多项式求值
在MATLAB中,提供了两个函数对多项式进行求值,函数polyval()和polyvalm()。函数polyval()以数组或矩阵中的元素为计算单位,函数polyvalm()以矩阵为计算单位。
函数polyval()的调用方式为y=polyval(p, x),其中参数p为行向量形式的多项式,参数x为带入多项式的值。参数x可以是标量,也可以是向量和矩阵。如果参数x为向量或矩阵,则该函数对向量或矩阵中的每一个元素计算多项式的值,其返回值y也分别为向量或矩阵。
【例5-3】 求多项式 在点2、3、4、5的值。代码如下:

>> clear all;
p=[1 -1 -6]; %多项式的系数向量
x=2:5;
y=polyval(p,x) %求多项式在x处的值

运行程序后输出结果如下:

y =
-4 0 6 14

函数polyvalm()的调用方式为y=polyvalm(p, x),其中参数p为行向量形式的多项式,参数x必须为方阵,输出结果仍然为方阵。
【例5-4】 求 时,多项式 的值。
利用函数polyvalm()时,输出结果计算公式为 ,常数值变为常数乘以相同阶次的单位矩阵。如果采用函数polyval(),计算矩阵中每个元素对应的多项式的值。下面分别采用函数polyvalm()和polyval()对该矩阵进行计算,代码如下:

>> x=[1 2 ;3 4];
p=[2 3 4];
y1=polyvalm(p,x) %采用polyvalm()函数,以矩阵为计算单位
x=[1 2 ;3 4];
p=[2 3 4];
y2=polyval(p,x) %采用polyval()函数,以矩阵的元素为计算单位

运行程序后,输出结果如下:

y1 =
21 26
39 60
y2 =
9 18
31 48

当采用函数polyval()时,虽然输入参数是矩阵,但在计算时将矩阵的每个元素分别输入多项式,计算对应的输出。
2.多项式求根
在MATLAB中,利用roots()函数来求多项式的根,其调用格式为x=roots(p),其中参数p为多项式系数,输出参数x为多项式的根。对于n次多项式具有n个根,这些根可能是实根,也可能是共轭复根。在MATLAB中,如果已经知道多项式的根,可以利用函数poly()求多项式的系数,其调用格式为y=poly(x),输入参数x为根,输出参数y为得到的多项式系数向量。
【例5-5】 求多项式 的根,以及以4和5为根的多项式。代码如下:

>> clear all;
p=[1 0 0 -1 -6];
x1=roots(p) %对多项式p求根
x2=[4 5];
y=poly(x2); %求以x2为根的多项式
y=poly2sym(y)

运行程序后,输出结果如下:

x1 =
1.6638
-0.1021 + 1.5684i
-0.1021 - 1.5684i
-1.4597
y =
x^2 - 9*x + 20

利用函数roots()计算多项式的根,非常方便,函数的返回值x是一个向量,其长度等于多项式的根的个数。

lili123
2012-05-21, 11:18
5.1.3 多项式乘法和除法
在MATLAB中,使用函数conv()对多项式进行乘法运算。其调用格式为c=conv(a, b),a和b为多项式的系数向量,该函数实现向量a和b的卷积,在代数上相当于多项式a乘以多项式b,其中c为相乘所产生的多项式的系数向量。
【例5-6】 求多项式 和 的乘积。采用函数conv()实现,其MATLAB程序如下:

p1=[4 2 0 5]; %缺少的幂次用0补齐
p2=[5 8 1];
y1=poly2sym(p1)
y2=poly2sym(p2)
p3=conv(p1,p2); %多项式相乘
y=poly2sym(p3)

运行程序后,输出结果如下:

y1 =
4*x^3+2*x^2+5
y2 =
5*x^2+8*x+1
y =
20*x^5+42*x^4+20*x^3+27*x^2+40*x+5

在MATLAB中,采用poly2sym()函数将向量作为多项式的系数进行输出,和其相对应的函数是sym2poly(),该函数将输入多项式的系数提取出来,作为向量进行输出。对于例5-6程序也可以用poly2sym()函数实现(和例5-6的计算结果相同),其MATLAB程序如下:

>> syms x
p1=sym2poly(4*x^3+2*x^2+5)
p2=sym2poly(5*x^2+8*x+1)
p3=conv(p1,p2); %多项式相乘
y=poly2sym(p3)

运行程序后,输出结果如下:

p1 =
4 2 0 5
p2 =
5 8 1
y =
20*x^5+42*x^4+20*x^3+27*x^2+40*x+5

在MATLAB中,使用函数deconv()对多项式进行除法运算。其调用格式为[q, r] = deconv(a, b),实现解卷积运算。其中a和b为多项式的系数向量,在代数上相当于多项式a除以b,得到的商为q和余多项式r,它们之间的关系为a = conv(b, q) + r。
【例5-7】 求多项式 除以多项式 的商和余数,代码如下:

>> p1=[4 3 8 1 4];
p2=[2 3 1];
[q,r]=deconv(p1,p2); %多项式p1除以p2
y1=poly2sym(q) %商
y2=poly2sym(r) %余数

运行程序后,输出结果如下:

y1 =
2*x^2-3/2*x+21/4
y2 =
-53/4*x-5/4

5.1.4 多项式的导数和积分
在MATLAB中,通过函数polyder()和polyint()分别对多项式进行求导和积分。求导和积分互为逆运算,如果先对多项式进行积分,然后再求导,结果仍然为原来的多项式。下面对多项式的求导和积分分别进行讲解。
1.多项式的导数
在MATLAB中,采用函数polyder()进行多项式的求导,调用方式如下。
 y=polyder(p):对以向量p为系数的多项式求导。
 y=polyder(a, b):对以a和b为系数的多项式乘积进行求导。
 [q,d]=polyder(b, a):返回以b为系数的多项式除以以a为系数的多项式的商的导数,并以q/d格式表示。
【例5-8】 对多项式求导,其MATLAB程序如下:

>> p1=[4 3 2];
p2=[2 2 1];
y1=polyder(p1); %对多项式p1求导
y1=poly2sym(y1)
y2=polyder(p1,p2); %对多项式p1和p2的乘积求导
y2=poly2sym(y2)
[q,d]=polyder(p1,p2); %对多项式p1除以p2的商求导
q=poly2sym(q)
d=poly2sym(d)

运行程序后,输出结果如下:

y1 =
8*x + 3
y2 =
32*x^3 + 42*x^2 + 28*x + 7
q =
2*x^2 - 1
d =
4*x^4 + 8*x^3 + 8*x^2 + 4*x + 1

在MATLAB中,通过函数polyder()对多项式进行求导,通过对输入参数和输出参数个数的不同,对相对应的多项式进行求导计算。对于函数[q,d]=polyder(b, a),相当于对多项式 求导,结果为 。
2.多项式的积分
在MATLAB中,使用函数polyint()对多项式进行积分运算,其调用方式如下。
 polyint(p, k):返回以向量p为系数的多项式的积分,积分的常数项为k。
 polyint(p):返回以向量p为系数的多项式的积分,积分的常数项为默认值0。
【例5-9】 对多项式 进行积分运算,其常数项分别为3和0,其实现的MATLAB程序代码如下:

p1=[3 2 2];
y1=polyint(p1,3); %对多项式p1进行积分,常数项为3
y1=poly2sym(y1)
y2=polyint(p1); %对多项式p1进行积分,常数项为0
y2=poly2sym(y2)

运行程序后,输出结果如下:

y1 =
x^3 + x^2 + 2*x + 3
y2 =
x^3 + x^2 + 2*x

通过polyint()函数对多项式进行积分运算,积分的常数项通过参数k进行设置。如果不对参数k进行设置,则k取默认值0。

lili123
2012-05-21, 11:20
5.1.5 多项式展开
在MATLAB中,有理多项式用它们的分子多项式和分母多项式进行表示,函数residue()可以将多项式之比用部分分式展开,也可以将一个部分分式用多项式之比进行表示。函数residue()的调用方式如下。
 [r, p, k]=residue(b, a):求多项式之比b/a的部分分式展开,函数的返回值r是余数,p是部分分式的极点,k是常数项。如果多项式a没有重根,部分分式展开的形式如下:

其中向量r、p的长度和向量a、b的长度有如下关系:

当向量b的长度小于a时,向量k中没有元素,否则应满足:

 [b, a]=residue(r, p, k):通过部分分式得到多项式,该多项式的形式为b/a。
【例5-10】 将多项式 和 展开成几个简单多项式的和。其实现的MATLAB代码如下:

>> clear all;
clear all;
b=[1 -1 -7 -1]; %分子多项式
a=poly([1;5;6]); %分母多项式
[r,p,k]=residue(b,a) %进行多项式b/a展开
[b1,a1]=residue(r,p,k); %通过余数、极点和常数项来求多项式b1/a1
b1=poly2sym(b1)
a1=poly2sym(a1)
b=[1 -1 -7 -1]; %多项式a有三重根
a=poly([1;1;1]); %分母多项式
[r,p,k]=residue(b,a) %展开多项式b/a

运行程序后,输出结果如下:

r =
27.4000
-16.0000
-0.4000
p =
6.0000
5.0000
1.0000
k =
1
b1 =
x^3 - x^2 - 7*x - 1
a1 =
x^3 - 12*x^2 + 41*x - 30
r =
2.0000
-6.0000
-8.0000
p =
1.0000
1.0000
1.0000
k =
1

利用函数[r, p, k]=residue(b, a)将多项式b/a进行展开,结果为余数、极点和常数项。对该多项式进行展开后的结果如下:
http://www.tu265.com/di-8f84d0dbb363599c41a82ebe3f1a9499.png

将余数、极点和常数项带入函数[b, a]=residue(r, p, k)中,可以求得对应的多项式,并通过b/a的形式给出。
当多项式a有三重根1时,对多项式进行展开后的结果如下:
http://www.tu265.com/di-70338cf27190bed5e8a36a2d6ec8477c.png

lili123
2012-05-21, 11:22
5.1.6 多项式拟合
在MATLAB中,函数polyfit()采用最小二乘法对给定的数据进行多项式拟合,得到该多项式的系数。该函数的调用方式为p = polyfit(x, y, n),采用n次多项式来拟合数据x和y,得到以p为系数的多项式。该函数使得p(x)与y最小均方误差最小。
【例5-11】 某数据的横坐标为x=[0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8],纵坐标为y=[1 2 3 5 6 7 6 5 4 1],对该数据进行多项式拟合,代码如下:

clear all;
x=[0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8];
y=[1 2 3 5 6 7 6 5 4 1];
p5=polyfit(x,y,5); %5阶多项式拟合
y5=polyval(p5,x);
p5=vpa(poly2sym(p5),5) %显示5阶多项式
p9=polyfit(x,y,9); %9阶多项式拟合
y9=polyval(p9,x);
figure; %画图显示
plot(x,y,'bo');
hold on;
plot(x,y5,'r:');
plot(x,y9,'g--');
legend('原始数据','5阶多项式拟合','9阶多项式拟合');
xlabel('x');
ylabel('y');

运行程序后,得到的5阶多项式如下:

p5 =
- 10.041*x^5 + 58.244*x^4 - 124.54*x^3 + 110.79*x^2 - 31.838*x + 4.0393

运行程序后,得到的输出结果如图5.1所示。由图5.1可以看出,使用5次多项式拟合时,得到的结果比较差。当采用9次多项式拟合时,得到的结果与原始数据符合的比较好。当使用函数polyfit()进行拟合时,多项式的阶次最大不超过length(x)-1。
http://www.tu265.com/di-e73892daf12b43aada4b6b59b88b3999.png

lili123
2012-05-21, 11:23
5.1.7 曲线拟合图形用户接口
为了方便用户的使用,在MATLAB中提供了曲线拟合的图形用户接口。它位于MATLAB图形窗口Tools菜单下的Basic Fitting菜单中。在使用该工具时,首先将需要拟合的数据采用函数plot()画图,其MATLAB代码如下:

>> clear all;
x=[0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8];
y=[1 2 3 5 6 7 6 5 4 1];
figure;
plot(x,y,'bo');

该程序运行后,得到Figure窗口,如图5.2所示。然后选择Tools | Basic Fitting命令,弹出Basic Fitting对话框。单击该窗口右下角的 按钮,将会全部展开Basic Fitting对话框,如图5.3所示。
http://www.tu265.com/di-bca944d8974d45d29704042c47dac6b5.png

lili123
2012-05-21, 11:25
在Basic Fitting对话框的Plot fits选项区域中,勾选5th degree polynomial复选框;在Numerical results选项区域中,会自动列出曲线拟合的多项式系数和残留误差,如图5.4所示。同时,在Figure窗口中会把拟合曲线绘制出来,如图5.5所示。
http://www.tu265.com/di-b9fb401c3a09f83689d46cd4a5eee7bd.png

lili123
2012-05-21, 11:26
5.2 插 值
在数字信号处理和图像处理中,插值是极其常用的方法。MATLAB提供了大量的插值函数。在MATLAB中,插值函数保存在MATLAB工具箱的polyfun子目录下。下面对一维插值、二维插值、样条插值和高维插值分别进行介绍。
5.2.1 一维插值
一维插值是进行数据分析的重要方法,在MATLAB中,一维插值有基于多项式的插值和基于快速傅立叶的插值两种类型。一维插值就是对一维函数 进行插值。
1.一维多项式插值
在MATLAB中,一维多项式插值采用函数interp1()进行实现。函数interp1()使用多项式技术,用多项式函数通过提供的数据点来计算目标插值点上的插值函数值,其调用格式如下。
 yi = interp1(x, y, xi):其中x必须为向量,y可以是向量也可以是矩阵。如果y是向量,必须与x具有相同的长度,这时xi可以是标量、向量或矩阵,yi与xi具有相同的大小。如果y是矩阵,则其大小必须是 ,n为向量x的长度,函数对 组y值都进行插值。
 yi = interp1(y, xi):其中xi默认为1:n,n为向量y的长度length(y)。
 yi = interp1(x, y, xi, method):其中输入变量method用于指定插值的方法,默认方法为线性插值('linear')。
 yi = interp1(x, y, xi, method,'extrap'):对超出数据范围的插值数据指定外推方法'extrap'。
 yi = interp1(x, y, xi, method, extrapval):对超出数据范围的插值数据返回extrapval值,一般设置为NaN或0。
一维插值可以采用的方法如下。
 临近点插值(Nearest neighbor interpolation):设置method ='nearest',这种插值方法在已知数据的最邻近点设置插值点,对插值点的数采用四舍五入的方法。对超出范围的点将返回一个NaN(Not a Number)。
 线性插值(Linear interpolation):设置method = 'linear',该方法采用直线连接相邻的两点,为MATLAB系统中采用的默认方法。对超出范围的点将返回NaN。
 三次样条插值(Cubic spline interpolation):设置method = 'spline',该方法采用三次样条函数来获得插值点。
 分段三次Hermite插值(Piecewise cubic Hermite interpolation):设置method ='pchip'。
 三次多项式插值:设置method ='cubic',与分段三次Hermite插值相同。
 MATLAB5中使用的三次多项式插值:设置method = 'v5cubic',该方法使用一个三次多项式函数对已知数据进行拟合。
【例5-12】 已知当x=0:0.2:2时,函数 的值,对xi=0:0.03:2采用不同的方法进行插值。其实现的MATLAB代码如下:

>> clear all;
x=0:0.2:2;
y=(x.^2-3*x+5).*exp(-3*x).*sin(x);
xi=0:0.03:2; %要插值的数据
yi_nearest=interp1(x,y,xi,'nearest'); %临近点插值
yi_linear=interp1(x,y,xi); %默认为线性插值
yi_spine=interp1(x,y,xi,'spine'); %三次样条插值
yi_pchip=interp1(x,y,xi,'pchip'); %分段三次Hermite插值
yi_v5cubic=interp1(x,y,xi,'v5cubic'); %MATLAB5中三次多项式插值
figure; %画图显示
hold on;
subplot(231);
plot(x,y,'ro'); %绘制数据点
title('已知数据点');
subplot(232);
plot(x,y,'ro',xi,yi_nearest,'b-'); %绘制临近点插值的结果
title('临近点插值');
subplot(233);
plot(x,y,'ro',xi,yi_linear,'b-'); %绘制线性插值的结果
title('线性插值');
subplot(234);
plot(x,y,'ro',xi,yi_spine,'b-'); %绘制三次样条插值的结果
title('三次样条插值');
subplot(235);
plot(x,y,'ro',xi,yi_pchip,'b-'); %绘制分段三次Hermite插值的结果
title('分段三次Hermite插值');
subplot(236);
plot(x,y,'ro',xi,yi_v5cubic,'b-'); %绘制MATLAB5中三次多项式插值的结果
title('MATLAB5中三次多项式插值');

运行程序后,对数据采用不同的插值方法,输出结果如图5.6所示。由图5.6可以看出,采用临近点插值时,数据的平滑性最差,得到的数据不连续。
http://www.tu265.com/di-24023e37e4ebc90a752e196825d803a5.png

lili123
2012-05-21, 11:29
选择插值方法时主要考虑的因素有运算时间、占用计算机内存和插值的光滑程度。下面对临近点插值、线性插值、三次样条插值和分段三次Hermite插值进行比较,如表5.1所示。临近点插值的速度最快,但是得到的数据不连续,其他方法得到的数据都连续。三次样条插值的速度最慢,可以得到最光滑的结果,是最常用的插值方法。
http://www.tu265.com/di-642aaad075a8632b19c3b3db5cd58288.png

lili123
2012-05-21, 11:30
2.一维快速傅立叶插值
在MATLAB中,一维快速傅立叶插值通过函数interpft()来实现,该函数利用傅立叶变换将输入数据变换到频域,然后用更多点的傅立叶逆变换,变换回时域,其结果是对数据进行增采样。调用格式如下。
 y=interpft(x, n):对x进行傅立叶变换,然后采用n点傅立叶反变换,变回到时域。如果x是一个向量,数据x的长度为m,采样间隔为dx,则数据y的采样间隔是dx×m/n,其中n必须大于m。如果x是矩阵,该函数对矩阵x的列进行操作,其返回的结果y与x具有相同的列,行数为n。
 y=interpft(x, n, dim):在dim指定的维度上进行操作。
【例5-13】 利用一维快速傅立叶插值实现数据增采样,其实现的MATLAB代码如下:

clear all;
x=0:1.1:8;
y=sin(x);
n=2*length(x); %增采样1倍
yi=interpft(y,n); %采用一维快速傅立叶插值
xi=0:0.55:8.3; %要插值的数据
figure; %画图显示
hold on;
plot(x,y,'ro',xi,yi,'b-');
legend('原始数据','插值后结果');

运行程序后,输出的结果如图5.7所示。
http://www.tu265.com/di-6c862881cfd92f0fba67a80b239a3cf5.png

lili123
2012-05-21, 11:32
5.2.2 二维插值
二维插值主要用于图像处理和数据的可视化,其基本思想与一维插值相同,对函数 进行插值。在MATLAB中,采用函数interp2()进行二维插值,其调用格式如下。
 zi=interp2(x, y, z, xi, yi):通过初始数据x、y和z产生插值函数y = f(x, y),返回值zi是(xi, yi)在函数f(x, y)上的值。
 zi=interp2(x, y, z, xi, yi, method):其中method为可疑采用的插值方法。二维插值采用的方法有4种,分别是'nearest'、'linear'、'spline'和'cubic',其中线性插值为默认的插值方法。
 zi=interp2(x, y, z, xi, yi, method, extrapval):当数据超过原始数据范围时,用extraval进行替代的一种外推方法。
【例5-14】 二维插值函数实例分析,分别采用'nearest'、'linear'、'spline'和'cubic'进行二维插值,并绘制三维表面图。其实现的MATLAB代码如下:

>> clear all;
[x,y]=meshgrid(-4:0.8:4); %原始数据
z=peaks(x,y);
[xi,yi]=meshgrid(-4:0.2:4); %插值数据
zi_nearest=interp2(x,y,z,xi,yi,'nearest'); %临近点插值
zi_linear=interp2(x,y,z,xi,yi); %系统默认为线性插值
zi_spline=interp2(x,y,z,xi,yi,'spline'); %三次样条插值
zi_cubic=interp2(x,y,z,xi,yi,'cubic'); %三次多项式插值
figure; %数据显示
hold on;
subplot(321);
surf(x,y,z); %绘制原始数据点
title('原始数据');
subplot(322);
surf(xi,yi,zi_nearest); %绘制临近点插值的结果
title('临近点插值');
subplot(323);
surf(xi,yi,zi_linear); %绘制线性插值的结果
title('线性插值');
subplot(324);
surf(xi,yi,zi_spline); %绘制三次样条插值的结果
title('三次样条插值');
subplot(325);
surf(xi,yi,zi_cubic); %绘制三次多项式插值的结果
title('三次多项式插值');

运行程序后,输出的结果如图5.8所示,分别采用临近点插值、线性插值、三次样条插值和三次多项式插值。在二维插值中已知数据(x, y)必须是栅格格式,一般采用函数meshgrid()产生,例如本程序中采用[x, y] = meshgrid(-4:0.8:4)来产生数据(x, y)。另外,函数interp2()要求数据(x, y)必须是严格单调的,即单调增加或单调减少。如果数据(x, y)在平面上分布不是等间距时,函数interp2()会通过变换将其转换为等间距;如果数据(x, y)已经是等间距的,可以在method参数的前面加星号'*',例如参数'cubic'变为'*cubic',来提高插值的速度。
http://www.tu265.com/di-536473152acd20cb2698cff3985c3def.png

lili123
2012-05-21, 11:34
5.2.3 样条插值
在MATLAB中,三次样条插值可以采用函数spline(),该函数的调用格式如下。
 yi=spline(x, y, xi):通过初始数据 产生插值函数 ,然后对数据xi进 行插值,返回值 。采用这种调用方式时,其相当于yi=interp1(x, y, xi, 'spline')。
 pp=spline(x, y):该函数通过对初始数据x和y产生插值函数,并进行返回。然后利用函数ppval()对数据xi进行插值计算,其调用方式为yi=ppval(pp, xi),其中pp为插值函数。
【例5-15】 对正弦函数 进行三次样条插值,代码如下:

clear all;
x=0:10; %原始数据
y=sin(x);
xi=0:.25:10; %插值数据
yi=spline(x,y,xi); %三次样条插值
pp=spline(x,y) %产生插值函数
y1=ppval(pp,xi); %结果相同y1=yi
y2=interp1(x,y,xi,'spline'); %结果相同y2=yi
figure; %画图显示
plot(x,y,'o',xi,yi);
legend('原始数据','三次样条插值');

运行程序后,得到的三次样条函数如下:

pp =
form: 'pp'
breaks: [0 1 2 3 4 5 6 7 8 9 10]
coefs: [10x4 double]
pieces: 10
order: 4
dim: 1

原始数据和三次样条插值后的结果,如图5.9所示。在该程序中,分别采用3种方法进行三次样条插值,输出结果分别是yi、y1和y2,其输出结果都相等。
http://www.tu265.com/di-d5c6d9c3236877273715ebd3923d52cb.png

lili123
2012-05-21, 12:23
5.2.4 高维插值
在MATLAB中,采用函数interp3()进行三维插值,该函数的调用格式如下。
 vi=interp3(x, y, z, v, xi, yi, zi):该函数通过初始数据 产生插值函数 ,然后对数据 进行插值,返回值为vi。
 vi=interp3(x, y, z, v, xi, yi, zi, method):该函数中method为可以采用的插值方法,共有4种,分别是'nearest'、'linear'、'spline'和'cubic',其中线性插值为默认的插值方法。
【例5-16】 利用函数interp3()进行三维插值,代码如下:

clear all;
[x,y,z,v]=flow(10);
[xi,yi,zi]=meshgrid(.1:.25:10,-3:.25:3,-3:.25:3); %创建网格数据
vi = interp3(x,y,z,v,xi,yi,zi); % vi为25*40*25
slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2]);
shading flat
程序运行后,输出结果如图5.10所示。在程序中,利用函数flow()产生数据 、 和 ,均为 的三维矩阵。利用函数meshgrid()产生网格数据, 、 和 均为 的三维矩阵。利用函数interp3()进行三维数据插值,采用系统默认的线性插值方法。
http://www.tu265.com/di-687fd8a68ac4df1774c2d87d875bfe14.png
在MATLAB中,进行高维插值的函数还有interpn(),可以进行 维插值,可以采用的插值方法,共有4种,分别是'nearest'、'linear'、'spline'和'cubic',其中线性插值为默认的插值方法。此外,在进行 维插值时,需要利用函数ndgrid()产生 维空间上的网格。

lili123
2012-05-21, 12:24
5.3 函数的极限
极限理论是微积分学的理论基础。在MATLAB中,采用函数limit()计算数列或函数的极限,可以非常方便地进行极限运算。下面首先介绍极限的基本概念,然后介绍利用函数limit()求函数的极限。
5.3.1 极限的概念
数列的极限定义为:设 是数列, 是常数,若对于任意给定的正数 (无论它多么小),总存在正整数 ,使得当 时,都有

则称数列 以 为极限,记作 。有极限的数列称为收敛数列。
【例5-17】 对于数列 ,当 时的变化趋势,代码如下:

clear all;
n=1:300;
x=n./(n+2); %数列
figure;
plot(n,x); %显示数列

运行程序后,输出结果如图5.11所示。由图5.11可知,随着 的增大,数列 与1非常接近。因此,可以得到结论:

【例5-18】 求当 时,函数 的变化趋势和极限,代码如下:

clear all;
x=linspace(-pi,pi,40);
y=sin(x)./x; %数列
figure;
plot(x,y,'r--') %显示数列

运行程序后,输出的结果如图5.12所示。由图5.12可知,当 时,函数 与1无限接近。由此可知:

http://www.tu265.com/di-22e605164f6c40cbe307a36ec6669ec3.png

lili123
2012-05-21, 12:26
【例5-19】 求当 时,函数 的变化趋势和极限,代码如下:

clear all;
x=1:200;
y=(1+1./x).^x; %创建数列
figure;
plot(x,y) %显示数列

运行程序后,输出的结果如图5.13所示。由图5.13可知,当 时,函数 无限接近于常数 e( e=2.71828)。
http://www.tu265.com/di-fac613204ce34b8426fa3a431a6b3380.png

lili123
2012-05-21, 12:39
5.3.2 求极限的函数
当 时,函数 以 为极限,称为函数 当 时以 为左极限,记作 。当 时,函数 以 为极限,称为函数 当 时以 为右极限,记作 。左极限和右极限统称为单侧极限。极限 存在且等于 的充分必要条件是左极限 与右极限 都存在且相等。
在MATLAB中,采用函数limit()求某个函数的极限,该函数的调用格式为:
 y=limit(f):当 时,该函数对函数 求极限,返回值为求得的极限。系统默认设置为 。
 y=limit(f, x, a)或y=limit(f, a):当 趋近于常数 时,即 ,该函数对函数 求极限,返回值为求得的极限。
 y=limit(f, x, a, 'left'):当 从左侧趋近于常数 时,即 ,该函数对函数 求极限,返回值为求得的左极限。
 y=limit(f, x, a, 'right'):当 右侧趋近于常数 时,即 ,该函数对函数 求极限,返回值为求得的右极限。
利用函数limit()求极限时,不同的调用方式对应的数学运算如表5.2所示。
http://www.tu265.com/di-085979d3f597e07793a9749db1e42f8c.png
【例5-20】 求极限http://www.tu265.com/di-df67f840b0b97e6a9c2621fea3ddb92e.png ,代码如下:

clear all;
syms x;
f=(3*x^2-1)/(3*x^2-2*x+3); %函数
y=limit(f,x,1) %x趋近于1时的极限

运行程序后,输出结果如下:

y =
1/2

程序运行后,该函数在 时,极限为1/2。
【例5-21】 求极限http://www.tu265.com/di-e71c23a11709db510126a8850f41ab41.png ,代码如下:

clear all;
syms x;
f=x/(x-1)-2/(x^2-1); %函数
y=limit(f,x,1) %x趋近于1时的极限

运行程序后,输出结果如下:

y =
3/2

程序运行后,该函数在 时,其极限为3/2。
【例5-22】 求极限http://www.tu265.com/di-a4183ee0103332fbccff45c521cbc9a1.png ,代码如下:

clear all;
syms x;
f=sin(sin(x))/x; %函数
y=limit(f,x,0) %x趋近于0时的极限

运行程序后,输出结果如下:

y =
1

程序运行后,该函数在 时,其极限为1。

lili123
2012-05-21, 12:43
5.4 本 章 小 结
本章对一些基本的数据分析进行了详细的介绍,主要包括多项式、插值和函数的极限。多项式的操作方法,主要包括多项式的建立、多项式求值、多项式乘法和除法、多项式求导、多项式展开和拟合等。插值函数,主要包括一维插值、二维插值、样条插值和高维插值等内容。利用MATLAB进行数据分析非常灵活,需要读者熟练掌握。