《MATLAB向量化编程基础精讲》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:马良,祁彬彬编著
  • 出 版 社:北京:北京航空航天大学出版社
  • 出版年份:2017
  • ISBN:9787512422094
  • 页数:424 页
图书介绍:本书属于MATLAB软件基础编程知识,遴选一系列有趣的编程小问题,通过不同思路实现一题多解,求解过程突出MATLAB矢量化寻址思维培养,以MATLAB程序设计的基本思想为出发点强调问题解决思路的拓展。主题内容包括数组、字符串、正则表达式以及匿名函数等的基本组合使用方法。适合于需要使用MATLAB软件进行数值计算的大学生、研究生,对具备一定MATLAB编程基础的读者而言也有一定启发性。

第1章 数组操作初步 1

1.1 数组基础训练:算盘里的学问 1

1.1.1 逐列循环结合正反向搜索 3

1.1.2 利用累积乘积函数cumprod 6

1.1.3 构造特殊的乘积因子 7

1.2 数组基础训练:非零元素赋值为1 8

1.2.1 循环+判断 8

1.2.2 利用逻辑判断+矢量索引 9

1.2.3 利用abs和sign 9

1.2.4 min函数更改nanflag设置参数 10

1.3 数组基础训练:将指定元素换成0 11

1.3.1 循环+判断 12

1.3.2 高低维索引转换后赋值 13

1.3.3 利用bsxfun单一维扩展构造逻辑判断条件 15

1.3.4 利用sparse函数对全零稀疏矩阵相关元素赋值 16

1.3.5 利用累积方式构造向量的accumarray函数 17

1.4 数组基础训练:正反对角线互换 19

1.4.1 寻找元素行列索引关系循环赋值 20

1.4.2 利用低维索引查找正反对角元素关系赋值 20

1.4.3 结合逻辑数组或点乘构造对角线元素 21

1.4.4 利用逻辑“或”操作 26

1.5 数组基础训练:寻找真约数 28

1.5.1 函数factor和组合命令nchoosek 28

1.5.2 最大公约数命令 29

1.5.3 含求余函数mod和rem的逻辑判断 30

1.6 数组基础训练:康威的《生命游戏》 31

1.6.1 枚举 32

1.6.2 循环 34

1.6.3 叠加与卷积 35

1.7 数组基础训练:寻找最大尺码的“空盒子” 40

1.7.1 循环 41

1.7.2 利用conv2函数 42

1.8 数组基础训练:寻找对角线上的最多连续质数 47

1.8.1 卷积命令 48

1.8.2 灵活的max+diff+find函数组合 53

1.9 数组基础训练:扫雷棋盘模拟 59

1.9.1 循环遍历元素+判断 60

1.9.2 构造三对角矩阵的连乘方案 62

1.9.3 利用卷积命令conv2 62

1.10 数组基础训练:移除向量中的NaN及其后两个数字 65

1.10.1 循环 66

1.10.2 矢量化索引操作 67

1.11 数组基础训练:把NaN用左边相邻数字替代 70

1.11.1 循环+判断 70

1.11.2 利用cumsum构造符合要求的索引 72

1.12 数组基础训练:涉及类型转换的数据替代 75

1.12.1 利用循环判断 76

1.12.2 cellfun赋值符合条件的索引位元素 77

1.12.3 利用原逻辑索引在cell数组中引用赋值 77

1.12.4 统一逻辑索引以多输出方式赋值 77

1.13 数组基础训练:递归中的输入输出变量交互 79

1.14 小结 81

第2章 字符串操作初步 82

2.1 字符串基础训练:字符取反的七种武器 82

2.1.1 利用循环+判断的传统方式 84

2.1.2 矢量化索引与不同函数组合的替换取反 85

2.1.3 函数sprintf+逻辑索引构造 85

2.1.4 函数char+逻辑数组+四则运算符的多种字符串构造方式 87

2.1.5 冒号操作做字符格式归并+ASCII码值运算转换 88

2.1.6 函数num2str及其灵活的设定参数 90

2.1.7 构造字符向量以输入做逻辑索引取反 91

2.2 字符串基础训练:星号排布 92

2.2.1 循环 93

2.2.2 矢量化构造方式 95

2.3 字符串基础训练:“开心”的2013 95

2.3.1 循环+利用函数unique判断 96

2.3.2 循环+num2str转化年份为字符串分离数字 96

2.3.3 num2str分离数字+排序做差 97

2.4 字符串基础训练:寻找“轮转”的子字符串 99

2.4.1 几种不同的循环方式 100

2.4.2 利用卷积命令conv2+测试矩阵 105

2.4.3 利用cellfun+strfind+测试矩阵gallery 105

2.5 字符串基础训练:猜测密码 106

2.5.1 循环+判断 107

2.5.2 矢量化索引方式 108

2.6 字符串基础训练:用指定数量填充字符 108

2.6.1 循环判断及repmat扩展序列 109

2.6.2 利用索引构造扩展 110

2.6.3 try流程省略判断+函数strjoin拼接向量 110

2.6.4 利用2015a版本中的新函数repelem 112

2.7 字符串基础训练:带判断条件的字符串替代 112

2.7.1 循环+判断 113

2.7.2 矢量化索引构造 114

2.8 字符串基础训练:抽取指定位数数字组成向量并排序 116

2.8.1 floor+log10+mod组合 117

2.8.2 转换为字符串提取单字符 118

2.9 字符串基础训练:二进制字符中查找最长的“1”序列 122

2.9.1 查找逻辑索引做差 123

2.9.2 字符匹配方式处理字符串 124

2.9.3 查找字符替换为空格 125

2.10 字符串基础训练:剔除指定数字的序列求和 126

2.10.1 利用log10或mod等函数的数值处理 126

2.10.2 利用进制转换函数dec2base 128

2.10.3 利用数值转字符函数num2str构造逻辑索引 129

2.11 字符串基础训练:元胞数组内字符串的合成 129

2.11.1 函数sprintf 130

2.11.2 利用向量的列排布变维 131

2.11.3 函数strjoin 132

2.12 小结 133

第3章 数组操作进阶:扩维与构造 134

3.1 关于矩阵维数扩充的预备知识 135

3.1.1 repmat函数 135

3.1.2 索引构造 135

3.1.3 kron函数扩维 136

3.1.4 meshgrid和ndgrid函数扩维 137

3.1.5 矩阵外积 139

3.1.6 bsxfun函数矩阵扩维 139

3.1.7 其他思路 145

3.1.8 扩维思路的总结 145

3.2 数组训练进阶:向量数值为长度的扩维 146

3.2.1 循环 147

3.2.2 利用arrayfun扩维 148

3.2.3 利用repmat扩维 148

3.2.4 利用meshgrid和ndgrid扩展矩阵索引 149

3.2.5 利用bsxfun扩维 150

3.3 数组训练进阶:求和与构造 151

3.3.1 直接索引法 151

3.3.2 加法中的减法 152

3.3.3 中部元素置零 153

3.3.4 测试矩阵构造 153

3.3.5 卷积和滤波命令 157

3.4 数组训练进阶:“行程长度编码”序列构造 160

3.4.1 利用循环拼接repmat扩展矩阵 161

3.4.2 索引扩维、arrayfun扩展和cell2mat拼接 161

3.4.3 按reshape变维向量循环处理 161

3.4.4 递归 162

3.4.5 直接调用函数repelem 163

3.5 数组训练进阶:“行程长度编码”的反问题 163

3.5.1 循环拼接向量 164

3.5.2 利用矢量化多次寻址构造序列 165

3.6 数组训练进阶:孤岛测距 166

3.6.1 序列1,0元素索引位相减取最小值 166

3.6.2 直接处理每段“安全”区域 167

3.6.3 利用相邻项数值的构造和比较 168

3.6.4 利用滤波函数filter2 168

3.7 数组训练进阶:生成索引数自扩展序列 170

3.7.1 循环拼接 171

3.7.2 利用测试矩阵hankel 172

3.7.3 利用上三角矩阵函数triu+meshgrid构造 172

3.8 数组训练进阶:指定子向量长度求均值 173

3.8.1 循环逐段求均值 174

3.8.2 利用频数累加函数accumarray 174

3.8.3 利用测试矩阵hankel 176

3.8.4 利用卷积系列命令 177

3.9 数组训练进阶:统计群组数量 177

3.9.1 循环拼接向量 178

3.9.2 涉及排重命令unique的几种解法 179

3.9.3 利用累积求和函数cumsum与diff 181

3.10 数组训练进阶:对角矩阵构造 181

3.10.1 矩阵叠加 182

3.10.2 借助特殊矩阵构造 185

3.10.3 循环处理构造思路 187

3.11 数组训练进阶:在时间序列中插入0元素 187

3.11.1 指定位置赋值 187

3.11.2 增加0元素用reshape变维 189

3.11.3 循环 190

3.11.4 利用kron函数扩展矩阵 190

3.11.5 正则替换 191

3.12 数组训练进阶:Bullseye矩阵构造 191

3.12.1 工具箱特殊函数 192

3.12.2 利用特殊矩阵构造 194

3.12.3 基本数列构造并矢量化扩维 195

3.12.4 递归、判断与循环 199

3.13 数组训练进阶:Bullseye矩阵构造扩展之一 200

3.13.1 利用求余命令mod或rem获得矩阵数值 200

3.13.2 利用循环逐元素赋值 203

3.14 数组训练进阶:Bullseye矩阵构造扩展之二 204

3.14.1 ndgrid对“基”序列扩维 204

3.14.2 利用测试矩阵spiral试凑 204

3.15 数组训练进阶:Bullseye矩阵构造扩展之三 205

3.15.1 构造“基”序列扩维 206

3.15.2 特殊矩阵构造 209

3.15.3 递归与循环 209

3.16 数组训练进阶:Bullseye矩阵构造扩展之四 210

3.16.1 循环 211

3.16.2 向量组合+meshgrid函数构造 212

3.16.3 bsxfun扩维 214

3.16.4 测试矩阵spiral试凑 214

3.17 数组基础训练:最小值替换为行均值 215

3.17.1 循环与矢量化函数二者的结合 216

3.17.2 利用高低维索引转换函数sub2ind 217

3.17.3 利用稀疏矩阵构造指定位置索引 217

3.17.4 bsxfun单一维扩展构造索引 217

3.17.5 累积最值函数cummin 218

3.18 数组训练进阶:矩阵元素分隔——“内向”的矩阵 219

3.18.1 循环+判断 220

3.18.2 利用函数kron扩维 221

3.18.3 利用索引构造变换对新矩阵赋值 223

3.18.4 利用稀疏矩阵命令sparse构造 225

3.18.5 利用累积求和命令accumarray 226

3.19 数组训练进阶:矩阵分块均值——“外向”的矩阵 227

3.19.1 循环逐个元素查找相邻索引号 227

3.19.2 利用circshift函数换序叠加 228

3.19.3 利用二维卷积和滤波函数 229

3.20 小结 229

第4章 字符操作进阶:正则表达式 231

4.1 闲话正则 231

4.2 灵活的正则语法 232

4.2.1 元字符 232

4.2.2 转义字符 234

4.2.3 匹配次数 234

4.2.4 模式 236

4.2.5 分组运算 237

4.2.6 关于锚点 239

4.2.7 左顾右盼 239

4.2.8 逻辑与条件运算 240

4.2.9 标记操作 241

4.2.10 动态正则表达式 243

4.2.11 注释与搜索标识 246

4.3 正则表达式基础:元音字母计数 248

4.3.1 其他解法 249

4.3.2 正则解法 251

4.4 正则表达式基础:所有的字母都是大写吗? 252

4.4.1 其他解法 252

4.4.2 正则解法 254

4.5 正则表达式基础:移除字符串中的辅音字母 255

4.5.1 其他解法 255

4.5.2 正则解法 258

4.6 正则表达式基础:首尾元音字母字符串的查找 260

4.6.1 其他解法 261

4.6.2 正则解法 262

4.7 正则表达式基础:提取文本数字求和 263

4.7.1 其他解法 263

4.7.2 正则解法 265

4.8 正则表达式基础:钱数统计 267

4.8.1 其他解法 268

4.8.2 正则解法 271

4.9 正则表达式基础:文本数据的“开关式”查找替换 274

4.9.1 其他解法 275

4.9.2 正则解法 275

4.10 正则表达式基础:剔除且只剔除首尾指定空格 279

4.10.1 其他解法 280

4.10.2 正则解法 283

4.11 正则表达式基础:电话区号查询 284

4.11.1 其他解法 284

4.11.2 正则解法 287

4.12 正则表达式基础:字母出现频数统计 288

4.12.1 其他解法 289

4.12.2 正则解法 292

4.13 正则表达式基础:翻转单词(不是字母)次序 294

4.13.1 其他解法 294

4.13.2 正则解法 296

4.14 正则表达式基础:寻找最长的“回文”字符 298

4.14.1 其他解法 298

4.14.2 正则解法 299

4.15 正则表达式基础:求解“字符型”算术题 301

4.15.1 其他解法 301

4.15.2 正则解法 304

4.16 本书前三章中一些问题的正则解法 308

4.16.1 正则表达式重解例1.12 308

4.16.2 正则表达式重解例2.1 309

4.16.3 正则表达式重解例2.5 310

4.16.4 正则表达式重解例2.6 310

4.16.5 正则表达式重解例2.8 312

4.16.6 正则表达式重解例2.9 313

4.16.7 正则表达式重解例2.10 314

4.16.8 正则表达式重解例3.5 315

4.16.9 正则表达式重解例3.6 315

4.16.10 正则表达式重解例3.7 319

4.17 小结 319

第5章 多维数组漫谈 320

5.1 多维数组基础 321

5.2 多维数组问题1:扩维 328

5.2.1 利用kron和reshape函数 330

5.2.2 利用cat函数 332

5.2.3 利用bsxfun和shiftdim函数 337

5.2.4 利用convn和shiftdim函数 340

5.3 多维数组问题2:“乘”操作 340

5.3.1 循环和分情况判断的基本方法 341

5.3.2 点积单独构造维数向量与循环的组合 343

5.3.3 利用高、低维索引变换 343

5.3.4 cell数组结构与repmat函数组合 346

5.3.5 cell数组结构+扩维 349

5.4 多维数组问题3:高维数组的矢量化索引寻址 352

5.4.1 permute做源数据维度变换的不同方式 354

5.4.2 索引分组 360

5.5 小结 361

第6章 匿名函数专题 362

6.1 匿名函数探析 362

6.1.1 基本应用 362

6.1.2 匿名函数嵌套构造函数在程序编写中的应用 364

6.1.3 匿名函数与参数传递 367

6.1.4 匿名函数进阶 376

6.2 匿名函数应用:函数迭代器 381

6.2.1 循环求解的多个变体 381

6.2.2 递归思路及引申 382

6.3 匿名函数应用:返回多输出 385

6.3.1 利用匿名函数创建多输出句柄 385

6.3.2 利用匿名函数构造更灵活的任意数量输出 390

6.4 匿名函数应用:复合句柄 393

6.4.1 利用子函数 394

6.4.2 利用匿名函数构造 395

6.5 匿名函数应用:斐波那契数列求值 400

6.5.1 几种不用匿名函数定义句柄的解法 401

6.5.2 使用匿名函数构造序列的相关算法 404

6.6 匿名函数应用:斐波那契数列构造 406

6.6.1 不使用匿名函数的几种求解思路 407

6.6.2 使用匿名函数构造受控句柄的几种解法 409

6.7 匿名函数应用:函数执行计数器中的匿名函数传参机理 410

6.7.1 save+load存储调用变量 412

6.7.2 图形句柄 413

6.7.3 随机数控制器rng 414

6.7.4 全局变量定义“global” 416

6.7.5 匿名函数句柄传递计数结果 417

6.8 小结 423

参考文献 424