高级搜索  |  搜索帮助
最近的浏览历史
购买此书的人还购买过
书  名:数值计算与数据处理编程及实践
  • 作  者: 张正秋
  • 出版时间: 2011-10-01
  • 出 版 社: 清华大学出版社
  • 字  数: 540 千字
  • 印  次: 1-1
  • 印  张: 21.5
  • 开  本: 16开
  • ISBN: 9787302249566
  • 装  帧: 平装
  • 定  价:¥49.00
电子书价:¥34.30 折扣:70折 节省:¥14.70 vip价:¥34.30 电子书大小:16.83M
配套资源下载:
  • 名称
  • 说明
  • 权限
  • 文件大小
  • 点击图标下载
  • 图书样章
  • 所有用户
  • 256K
  • 图书课件
  • 教师
共有商品评论0条 查看评论摘要
内容简介
  编写高效率的数值计算处理程序,可以大大提高科研水平。本书共13章,分别介绍数值计算发展史、数据格式和压缩处理方法、自我描述格式的文件、无微分极值算法、高精度计算程序的设计、等值线制图、在数值计算中对字符串匹配的方法、从程序代码优化方法上对程序质量进行控制、可复用程序的设计方法、MPI程序的编写方法、数值计算的混合编程技术以及UNIX/Linux系统下计算的辅助编程等知识。本书提供了很多有用的、完整的、用于数值处理软件制作的核心代码,如LZSS编码压缩、无微分算法程序、等高线制图等,经过简单的包装,这些程序就可以发展成不同的数值处理软件。
  本书可供科学计算高年级本科生和研究生学习使用,也可以供科学计算科研人员参考使用。
前言
  现代科学计算离不开计算机,编写高效率的数值计算处理程序,可以大大提高科研效率。并且,现代科学计算基本上都是在计算机上完成的,其准确性和速度决定于三个方面:数学模型、计算机及其系统、以及计算程序。也就是说,其中的一个方面出错,都会导致整个计算失败。在这三个方面中,计算程序是数学模型与计算机之间的中介,如何编写计算程序是科学计算中最为关键的一个环节。因此,掌握数值计算处理的编程技术有助于提高科学计算的准确性或正确性。
  随着计算机技术和科学技术的发展,在科学计算中,越来越显示出编程技术的重要性。目前,在科学研究领域,很多数值计算研究是数学上的,如数学物理方法、数值计算方法等,而如何在计算机上实现这些计算,则研究相对较少。同时,对很多科研人员来说,掌握这些技术知识也十分必要。为此,本书试图介绍一些与此相关的内容。
本书介绍了如何编写程序进行数值计算与处理的各种方法,着重于高端科学计算的底层实现技术或技巧。一般工具书只介绍某种软件的使用方法,而本书则着力于介绍数据处理中所使用的核心技术,不仅介绍一般理论,而且提供了大量的编程实例。只有把理论与编程实践结合在一起,才能使编程水平得到提高,为读者学习数值计算处理程序设计提供最佳方法。其中给出了很多实例程序,不仅可以帮助读者了解这些技术,而且可以直接使用,或直接用于数据处理和软件制作中。
  数值计算与处理技术涉及面较广,相应地,本书介绍的内容较多。虽然如此,但通过对每章的学习,读者可以弄通并掌握这些内容的精髓,并由此发挥编写出更为高效率的数值计算处理程序。本书编写出发点是基于启发性、技术性和实用性。
本书提供了很多有用的、完整的、用于数值处理软件制作的核心代码,如LZSS编码压缩、无微分算法程序、等高线制图等,经过简单的包装,这些程序就可以发展成不同的数值处理软件。
本书实例所用的语言
  根据科学计算的特点,本书所提供的实例是以Fortran和C语言编写。这两种语言也是最古老和最基本的,很多计算机高级语言都是从此基础上发展起来的,因此使用它们编写的程序很容易移植成其它语言程序。例如,C语言程序很容易被移植成C++程序。
本书的内容简介
可以把本书内容分成3个部分,分别从数值计算和数据处理方法、程序质量控制以及混合编程等方面,介绍了如何编写数值计算和数据处理程序。
  数值计算与处理方法
第1章介绍了数计算的发展史,包括算具、计算机、计算机系统的、高级语言、数值模式、以及计算方法的发展。并介绍了计算程序的设计对数值计算速度和精度的影响,介绍了减少计算误差和提高计算速度的一些方法,列举出了数值计算中值得注意的几个问题。
第2章介绍了数据格式和压缩处理方法。在使用多个系统的计算中,由于数据存储格式不同,同一数据文件不能被不同系统识别。为了使它们能够在不同系统中通用和节省磁盘空间,以及提高不同系统之间的数据传递,本章介绍数据格式转换和压缩的方法,给出了一个LZSS算法完整实例。
第3章介绍几个自我描述格式的文件。若读者使用GrADS程序绘图,则应该了解一下如何生存一个GrADS软件识别的NetCDF文件。
第4章介绍了几种无微分极值算法。计算机的迭代计算为无微分极值算法提供了基础,由于不需要进行微分计算,极大地方便了非线性计算。在本章中,基于现有的高级算法,作者提出了三种改进算法,即反二次插值试位法算法、改进的Nelder-Mead下山方向设置算法和中点反射法。测试结果表明,它们都具有较高的计算效率。
第5章介绍了高精度计算程序的设计。对于某些高精度计算,若不能在有限数位计算机上进行,则可以使用本章介绍的方法来实现。
第6章对等值线的制图做了全面的剖析。虽然等值线的作图技术在一些图形软件中得到了广泛的应用,但对很多人来说,这种技术的实现方法仍然是个“黑洞”。为了推广这种技术,开发出更多、更好的图形处理软件。本章介绍了方面的内容。
第7章和第8章介绍了在数值计算中处理字符串的方法。第7章介绍如何设计查找字符串匹配程序,有助于数据管理的编程;第8章介绍了如何编写简单的脚本解释程序,为编写灵活多样的数据处理程序提供参考。
? 高质量数值计算与处理程序的设计
本篇介绍了如何编写高质量的数值计算与处理程序的方法。
第9章介绍了从程序代码优化方法上对程序质量进行控制。通过对程序代码的优化,可以提高计算速度和减少程序占用内存。
第10章介绍了可复用程序的设计方法。编写可复用程序,可以提高程序或代码的可移植性,降低计算成本,提高工作效率。
? 数值计算与处理的混合编程
第11章介绍了MPI程序的编写方法,着重介绍MPI程序的基本思想,对主要的MPI函数进行了盘点,并给出了大量的实例,以说明如何使用这些函数。
第12章介绍了数值计算的混合编程技术。目前,有很多的编译器和计算软件,了解这方面的编程技术将使数值工作变得非常轻松。在这一章中,给出了大量的混合编程实例,供读者参考。
第13章介绍了Unix/Linux系统下的计算的辅助编程。编写这一章的主要原因是由于很多大型的科学计算都是在此种系统下完成的。若在该系统下编写一些计算辅助程序,则可以提供计算效率和工作效率。
本书的使用说明
本书的每一章介绍了数值计算某一方面技术,首先介绍此种技术的计算方法和相关基础知识,然后给出完整实例。由于实例的代码太多,书中只列出了重点,完整的源程序代码可以在清华大学出版社网站下载(www.tup.tsinghua.edu.cn)。在每一章的最后给出了一些思考题,也是该章的重点,目的是引起读者对这些问题的注意。这些问题在该章中都可以直接或间接地找到答案。
其它说明
在编写本书过程中,得到了我的家人和朋友的大力支持和鼓励,如果没有他们的关爱和帮助,就不能写出这本书。本书的出版得到了国家自然科学基金重点项目经费的资助。在此一并表示谢意。
由于本人水平有限,错误在所难免,敬请广大读者不吝指正。

张正秋
2011-5-1于北京
目录
第1章 数值计算与计算机 1
1.1 计算机发展史与数值模式 1
1.2 计算机软件与数值模式比较 3
1.2.1 计算机软件和数值模式的
特点 3
1.2.2 计算机软件与数值模式的
发展 4
1.3 程序设计对计算的影响 9
1.3.1 计算方法对计算精度的
影响 9
1.3.2 程序设计对计算精度的
影响 10
1.3.3 程序设计对计算速度的
影响 11
1.4 数值误差与科学预测 12
1.5 数值计算中值得注意的几个问题 13
1.6 本章小结 14
思考题 15
主要参考文献 15
第2章 数据储存格式变换和压缩 16
2.1 计算机中数的表示和运算 16
2.1.1 计算机内数的表示方法 16
2.1.2 原码、反码和补码 18
2.1.3 位运算方法 18
2.1.4 Little-Endian与
Big-Endian 20
2.1.5 不同系统下数据格式变换 20
2.2 几种常见的数据压缩算法 22
2.2.1 行程编码 23
2.2.2 Huffman编码 23
2.2.3 算术编码 23
2.2.4 LZ系列算法 24
2.2.5 整数编码 28
2.3 LZSS压缩实例 29
2.3.1 环形字符串缓冲区 29
2.3.2 二叉查找树的应用 30
2.3.3 LZSS算法的实现方法 30
2.4 本章小结 35
思考题 35
主要参考文献 36
第3章 几种自我描述格式文件 37
3.1 文件概述 37
3.1.1 文件的组织结构 37
3.1.2 文件的存取方式 38
3.1.3 文件的访问方式 38
3.2 GRIB文件及其使用工具 39
3.2.1 GRIB2的格式 39
3.2.2 GRIB2压缩方法 41
3.2.3 GRIB2格式数据访问 42
3.3 HDF文件及其使用工具 44
3.3.1 HDF5文件 44
3.3.2 HDF5工具软件 45
3.3.3 HDF5库简介 46
3.3.4 使用HDF5库的实例 47
3.4 NetCDF文件及其使用工具 50
3.4.1 NetCDF文件 51
3.4.2 NetCDF工具软件 52
3.4.3 NetCDF库简介 52
3.4.4 使用NetCDF库的实例 53
3.5 并行HDF和NetCDF库的
接口简介 57
3.6 本章小结 58
思考题 58
主要参考文献 59
第4章 无微分算法及其应用实例 60
4.1 方程求解算法 60
4.1.1 使用反拉格朗日多项式
求解方程 60
4.1.2 二分法算法 62
4.1.3 试位法算法 62
4.1.4 雷德斯算法 63
4.1.5 反二次插值试位法算法 65
4.2 单元函数的极值搜寻计算 66
4.2.1 黄金分割搜寻 67
4.2.2 斐波那契搜寻 68
4.3 多元函数的极值搜寻计算 70
4.3.1 Nelder-Mead算法 70
4.3.2 多元方向设置算法 78
4.3.3 现代随机优化算法 82
4.4 无微分算法的应用实例 87
4.5 本章小结 88
思考题 89
主要参考文献 89
第5章 高精度计算程序设计 91
5.1 高精度数的基本表示方法 91
5.1.1 高精度数的储存形式 91
5.1.2 高精度整数与小数 92
5.1.3 数字存放顺序 92
5.1.4 数的进制设置 92
5.1.5 数的输入与输出转换 93
5.2 高精度加法和减法 94
5.3 高精度乘法的直接计算 98
5.3.1 高精度乘法计算基础 99
5.3.2 高精度整数乘法 99
5.3.3 高精度浮点数乘法 101
5.4 使用FFT进行高精度乘法的
计算 103
5.4.1 快速傅里叶变换原理 103
5.4.2 使用FFT进行多项式乘法的
计算原理 106
5.4.3 FFT程序设计 107
5.4.4 使用FFT进行长整数乘法
计算的实例 109
5.5 高精度除法 110
5.5.1 直接进行高精度除法
计算 110
5.5.2 高精度除法快速计算 111
5.6 高精度乘方和开方 112
5.7 本章小结 113
思考题 113
主要参考文献 113
第6章 等值线图制作技术及程序设计 115
6.1 等值线标注字体和连线 115
6.1.1 点阵字体和矢量字体 115
6.1.2 作图连线方法 116
6.1.3 数字的矢量表示法 117
6.1.4 小数点和负号的表示法 119
6.2 等值线插值 119
6.2.1 插值点的判别 119
6.2.2 插值计算方法 119
6.2.3 插值过程和顺序 120
6.3 等值线生成法 121
6.3.1 追踪法 121
6.3.2 拼图法 123
6.4 等值线图绘制的基本设计 124
6.4.1 图形数据与图形显示 124
6.4.2 等值线标注 124
6.4.3 等值线生成控制 125
6.4.4 等值线平滑 126
6.4.5 等值线显示设计 128
6.5 等值线图填充 129
6.5.1 一般的图形填充方法 129
6.5.2 等值线图的填充方法 132
6.6 等值线作图的实例 134
6.7 等值线作图的应用 139
6.7.1 等值线科学应用 139
6.7.2 等值面积和体积的计算 140
6.7.3 等值线剖面图的绘制 140
6.8 本章小结 140
思考题 141
主要参考文献 141
第7章 字符串表达式匹配的程序设计 143
7.1 字符及转义 143
7.1.1 普通字符及其转义 143
7.1.2 特殊字符及其转义 144
7.2 正则表达式 145
7.2.1 单元符 145
7.2.2 定位符 146
7.2.3 限定符 146
7.3 通配符 147
7.3.1 常见的通配符 147
7.3.2 通配符与正则表达式的
区别 148
7.4 字符串匹配过程中的问题 148
7.5 字符串匹配程序的设计方法 149
7.6 正则表达式匹配的编程实例 150
7.6.1 正则表达式字符串的
解释 151
7.6.2 一个简单的正则表达式
匹配程序 154
7.7 通配符匹配的编程实例 156
7.8 本章小结 159
思考题 160
主要参考文献 160
第8章 简单脚本运行程序的设计 161
8.1 解释程序的工作原理 161
8.1.1 解释程序的运行过程 161
8.1.2 解释程序工作环境的
设计 162
8.2 解释程序设计的技术基础 163
8.2.1 脚本语言的关键字 164
8.2.2 控制语句分类 164
8.2.3 对脚本解释的方法 165
8.2.4 对单语句的规定 166
8.2.5 对程序块的处理方法 167
8.3 解释程序运行过程的初步设计 169
8.3.1 脚本的装载 169
8.3.2 脚本关键字的确定和关键字
查寻表 170
8.3.3 脚本程序的主函数 171
8.3.4 脚本打印语句的解释方法 172
8.3.5 脚本函数的解释方法 173
8.4 利用递归原理设计解释程序 175
8.4.1 递归式解释的主控函数 175
8.4.2 递归式解释的用户
自定义函数 176
8.4.3 递归式解释的循环控制 177
8.4.4 递归式解释的条件控制 179
8.5 利用堆栈原理设计解释程序 180
8.6 一个对脚本文件解释的实例 185
8.7 本章小结 187
思考题 188
主要参考文献 188
第9章 计算程序代码的优化设计 189
9.1 程序优化概述 189
9.1.1 程序优化层次 189
9.1.2 程序优化分类 190
9.2 程序可维护性的优化设计 190
9.3 程序代码优化的基本方法 191
9.3.1 删除冗余代码 191
9.3.2 提出公用子表达式 192
9.3.3 简化运算步骤 193
9.3.4 减小计算强度 194
9.4 程序代码结构的优化 196
9.4.1 变量的优化 197
9.4.2 表达式的优化 198
9.4.3 一般函数结构的优化 198
9.4.4 减小程序复杂度 200
9.4.5 降低数组维数 201
9.5 程序控制结构的优化 201
9.5.1 顺序结构的优化 201
9.5.2 选择结构的优化 202
9.5.3 循环结构的优化 208
9.6 内存使用的优化 213
9.7 与编译器或处理器相关的优化 215
9.7.1 使用修饰符 215
9.7.2 对字节对齐优化 217
9.7.3 数组下标排列及其优化 218
9.7.4 使用2的乘方数 221
9.7.5 合理分配寄存器 221
9.8 递归函数的优化 222
9.9 本章小结 225
思考题 226
主要参考文献 226
第10章 可复用计算程序的设计 227
10.1 可复用程序的设计概述 227
10.1.1 复用程序与设计可复用
程序 227
10.1.2 影响程序可复用性的
因素 228
10.1.3 通用程序与可复用程序 228
10.1.4 可复用程序的“手性”
特点 229
10.2 “手掌型”可复用程序的设计 230
10.2.1 程序的封装 230
10.2.2 使用模板 231
10.2.3 使用共享环境 234
10.2.4 使用泛型 236
10.3 “掌指关节型”可复用程序的
设计 237
10.3.1 代码替换 237
10.3.2 变量替换 240
10.3.3 函数调用接口覆盖 241
10.3.4 使用类型转换共享函数
调用接口 245
10.3.5 共享I/O接口 247
10.4 “手指型”可复用程序的设计 249
10.4.1 “手指型”与“手掌型”
可复用程序设计的比较 249
10.4.2 使用相对性对象 249
10.4.3 使用情景函数 250
10.5 C++程序的复用机制 250
10.6 本章小结 252
思考题 253
主要参考文献 253
第11章 并行计算MPI程序设计基础 254
11.1 并行程序的设计基础 254
11.1.1 线程与进程 254
11.1.2 并行程序设计模型 255
11.1.3 并行计算的通信 257
11.1.4 并行程序的工作任务
分解 257
11.1.5 并行计算的工作原理 258
11.2 MPI并行程序设计入门 259
11.3 MPI的基本通信操作 261
11.3.1 点对点通信(P2P) 261
11.3.2 集合通信 262
11.3.3 通信阻塞与同步 267
11.4 MPI进程组和通信子 268
11.4.1 进程组管理 268
11.4.2 通信集管理 270
11.4.3 通信分组应用实例 271
11.5 进程拓扑结构 272
11.5.1 笛卡儿拓扑结构 272
11.5.2 图拓扑结构 276
11.5.3 进程拓扑应用实例 277
11.6 派生数据类型 279
11.6.1 数据类型查询函数 279
11.6.2 新类型的构建 280
11.6.3 提交和释放 282
11.6.4 派生数据类型应用实例 282
11.7 本章小结 284
思考题 284
主要参考文献 285
第12章 数值计算的混合编程 286
12.1 混合编程的实现方法 286
12.1.1 结合式的连接方法 286
12.1.2 调用式连接的方法 287
12.1.3 中介式连接的方法 288
12.2 Fortran与C/C++语言的混合
编程 289
12.2.1 Fortran与C/C++比较 290
12.2.2 Fortran与C/C++混合
编程的简单实例 291
12.2.3 Fortran与C/C++程序
之间的参数传递方法 296
12.2.4 通过库文件进行Fortran
与C/C++的混合编程 300
12.3 低版本与高版本语言的混合
编程 303
12.3.1 C与C++间的混合编程 303
12.3.2 F77与F90/95间的
混合编程 305
12.4 脚本与计算程序的混合编程 306
12.4.1 计算作业自动提交脚本的
设计 306
12.4.2 绘图程序与计算程序的
混合编程 308
12.5 本章小结 311
思考题 312
主要参考文献 312
第13章 UNIX/Linux系统下计算的
辅助编程 313
13.1 文件和目录管理操作 313
13.1.1 system()函数 313
13.1.2 文件和目录管理函数 314
13.1.3 文件的遍历查找 319
13.2 编写一个在Xnix系统下运行的
服务程序 320
13.3 在Xnix系统下建立回收站 326
13.4 SSH自动登录 328
13.4.1 公钥与私钥的设置方法 328
13.4.2 使用expect的方法 330
13.5 本章小结 330
思考题 331
主要参考文献 331

Copyright(C)清华大学出版社有限公司,All Rights Reserved 京ICP备10035462号 联系我们