本书深入讲解了有关Java的数值计算,并介绍了常见的Java数值方法及计算特性。全书分为4个部分,共16章,首先对Java的数据表示、数据类型及相关标准进行了详细的介绍。然后,作者分析了数值求根、数值求和、插值、估计、数值积分、求解微分方程等常见的数值计算;讨论了矩阵运算软件包,并讲解了各种矩阵运算的方法。最后,本书给出了一些有趣的数学计算实例。全书内容新颖,举例丰富,而且应用了大量生动的交互式图形程序。\r\n\r\n 本书适合于有兴趣学习Java数值方法的程序设计者,同时对于从事数值计算及相关工作的人员也具有很好的参考价值。\r\n
\r\n
第一部分 正确的运算公式却导致出现错误的结果 \r\n\r\n 第1章 浮点数而非实数 \r\n\r\n 1.1 舍入误差 \r\n\r\n 1.2 误差放大 \r\n\r\n 1.3 实数和浮点数的比较 \r\n\r\n 1.4 精度和准确度 \r\n\r\n 1.5 浮点运算不遵守代数定律 \r\n\r\n 1.6 整数运算的情况 \r\n\r\n 参考文献 \r\n\r\n 第2章 整数类型的情况分析 \r\n\r\n 2.1 整数类型及其运算 \r\n\r\n 2.2 带符号量值法与补码的比较 \r\n\r\n 2.3 纯数学中的整数与Java中整数的比较 \r\n\r\n 2.4 封装类 \r\n\r\n 2.5 整数的除法和求余 \r\n\r\n 2.6 整数指数 \r\n\r\n 参考文献 \r\n\r\n 第3章 浮点标准 \r\n\r\n 3.1 浮点格式 \r\n\r\n 3.2 非规范化数 \r\n\r\n 3.3 分解浮点数 \r\n\r\n 3.4 浮点运算 \r\n\r\n 3.5 ±0. ±∞和NaN \r\n\r\n 3.6 无异常 \r\n\r\n 3.7 重新分析舍入误差 \r\n\r\n 3.8 严格或非严格浮点运算 \r\n\r\n 3.9 计算机的最小正数值e \r\n\r\n 3.10 误差分析 \r\n\r\n 参考文献 \r\n\r\n 第二部分 迭 代 计 算 \r\n\r\n 第4章 数列求和 \r\n\r\n 4.1 求和的实质——大小问题 \r\n\r\n 4.2 Kahan 求和算法 \r\n\r\n 4.3 任意顺序的数列求和 \r\n\r\n 4.4 不同符号加数的求和 \r\n\r\n 4.5 计算的内部细节 \r\n\r\n 4.6 求和算法总结 \r\n\r\n 参考文献 \r\n\r\n 第5章 求方程的根 \r\n\r\n 5.1 解析解与计算机解的比较 \r\n\r\n 5.2 函数关系式 \r\n\r\n 5.3 对分算法 \r\n\r\n 5.4 试位算法 \r\n\r\n 5.5 改进的试位算法 \r\n\r\n 5.6 割线算法 \r\n\r\n 5.7 牛顿算法 \r\n\r\n 5.8 不动点迭代 \r\n\r\n 5.9 重根的双重麻烦 \r\n\r\n 5.10 求根算法的比较 \r\n\r\n 参考文献 \r\n\r\n 第6章 插值和逼近 \r\n\r\n 6.1 幂级数和牛顿级数 \r\n\r\n 6.2 多项式插值函数 \r\n\r\n 6.3 差商 \r\n\r\n 6.4 构造插值函数 \r\n\r\n 6.5 最小平方线性逼近 \r\n\r\n 6.6 构造回归线 \r\n\r\n 参考文献 \r\n\r\n 第7章 数值积分 \r\n\r\n 7.1 回到基础知识 \r\n\r\n 7.2 梯形算法 \r\n\r\n 7.3 辛普森算法 \r\n\r\n 参考文献 \r\n\r\n 第8章 微分方程的数值解 \r\n\r\n 8.1 回到基础知识 \r\n\r\n 8.2 微分方程类 \r\n\r\n 8.3 欧拉算法 \r\n\r\n 8.4 预估校正算法 \r\n\r\n 8.5 四阶龙格-库塔算法 \r\n\r\n 参考文献 \r\n\r\n 第三部分 矩阵软件包 \r\n\r\n 第9章 基本的矩阵操作 \r\n\r\n 9.1 矩阵 \r\n\r\n 9.2 方阵 \r\n\r\n 9.3 单位矩阵 \r\n\r\n 9.4 行向量 \r\n\r\n 9.5 列向量 \r\n\r\n 9.6 图形转换矩阵 \r\n\r\n 9.7 三维空间中立方体的旋转 \r\n\r\n 参考文献 \r\n\r\n 第10章 求解线性系统方程 \r\n\r\n 10.1 高斯消元法 \r\n\r\n 10.2 高斯消元法存在的问题 \r\n\r\n 10.3 部分变换 \r\n\r\n 10.4 标定 \r\n\r\n 10.5 LU分解 \r\n\r\n 10.6 迭代的改进 \r\n\r\n 10.7 求解线性系统方程类 \r\n\r\n 10.8 LU分解的测试程序 \r\n\r\n 10.9 多项式回归 \r\n\r\n 参考文献 \r\n\r\n 第11章 矩阵求逆. 行列式和条件数 \r\n\r\n 11.1 矩阵的行列式 \r\n\r\n 11.2 矩阵的逆 \r\n\r\n 11.3 矩阵的范数和条件数 \r\n\r\n 11.4 逆矩阵类 \r\n\r\n 11.5 希尔伯特矩阵 \r\n\r\n 11.6 求解算法的比较 \r\n\r\n 参考文献 \r\n\r\n 第四部分 计算的乐趣 \r\n\r\n 第12章 大数 \r\n\r\n 12.1 大整数 \r\n\r\n 12.2 一个非常大的素数 \r\n\r\n 12.3 大整数和密码技术 \r\n\r\n 12.4 大十进制数 \r\n\r\n 12.5 大十进制函数 \r\n\r\n 参考文献 \r\n\r\n 第13章 计算p \r\n\r\n 13.1 p 值的估计与Ramanujan的公式 \r\n\r\n 13.2 生成 p 的反正切公式 \r\n\r\n 13.3 生成10亿位数 \r\n\r\n 参考文献 \r\n\r\n 第14章 生成随机数 \r\n\r\n 14.1 伪随机数 \r\n\r\n 14.2 均匀分布的随机数 \r\n\r\n 14.3 正态分布的随机数 \r\n\r\n 14.4 指数分布的随机数 \r\n\r\n 14.5 蒙特卡洛. Buffon针算法与 p \r\n\r\n 参考文献 \r\n\r\n 第15章 素数 \r\n\r\n 15.1 Eratosthenes筛选法和因子分解 \r\n\r\n 15.2 同余与模运算 \r\n\r\n 15.3 Lucas测试 \r\n\r\n 15.4 Miller-Rabin测试 \r\n\r\n 15.5 联合素数测试 \r\n\r\n 15.6 素数生成 \r\n\r\n 15.7 素数模式 \r\n\r\n 参考文献 \r\n\r\n 第16章 分形 \r\n\r\n 16.1 不动点迭代和轨迹 \r\n\r\n 16.2 分支与实函数f (x) = x 2 + c \r\n\r\n 16.3 茹利亚集与复变函数f (z) = z2 + c \r\n\r\n 16.4 复平面的牛顿算法 \r\n\r\n 16.5 芒德布罗集 \r\n\r\n 参考文献 \r\n
\r\n
在我们以往所见到的Java编程语言中, 进行数值运算依然使用的是“+”. “-”. “*”. “/”和“%”这样的运算符. 这在今天来说是难以置信的, 现在的Java编程不仅应用于网页. 图形. 娱乐软件, 而且应用于数据库系统. 计算机游戏等.
编写这本书的目的是提醒现在的编程人员, 尤其是Java编程人员, 称为“number crunching”的计算机的确具有强大的数值计算功能. 实际上, 数值计算是大多数程序的基础, 例如大多数的图形应用或者交互式计算机游戏都需要数据的处理, 哪怕只是少量数据的处理. 当然, 有关科学. 数学. 统计和财经的程序则更加偏重于数值计算.
所以, 本书适合于不仅了解标准的API应用——JFC. RMI. JSP. EJB. JDBC, 而且熟悉数值运算的Java编程人员. 我们可能永远不知道什么时候舍入误差将影响计算结果. 有时候, 我们将课本上抄来的“正确”公式编入程序后却得到错误的答案.
撰写这本书的另一个原因是作者喜欢将纯数学和计算机数学分成两部分. 一方面数学是一个严格. 抽象的世界, 在这个世界中, 绝对地证明一个计算的正确性是可能的. 而从另一方面来说, 计算机世界中的计算快速且准确. 因此, 数学家和计算机科学家可以一起设计出更有效的方法, 能够使计算机在绝大多数情况下进行数学运算时得到正确的答案.
这本书是用来介绍数值运算的, 虽然其中介绍了如何将许多重要的数值算法编写到Java程序中, 但本书并不是一本关于数值方法或数值分析的著作. 我们将检验这些算法, 以了解它们是如何工作的以及为什么是有效的. 同时, 书中也给出了许多交互式程序和图形程序的算法. 在讲解了如何避免一些浮点数和整数运算的陷阱之后, 我们将研究求解x方程. 进行插值和积分. 求解微分方程及线性系统方程的程序.
当然, 数值计算不是这本书的全部内容, 作者还用几章介绍了其他一些相关主题, 包括计算 的数千个数位, 使用不同的方法产生随机数, 在素数中寻找模式, 以及生成美丽的分形图像.
本书的所有交互式程序既可以作为applet(小程序)运行, 又可以作为独立程序运行. 作者已经在一些平台上测试了这些程序, 这些平台包括运行在Windows. Linux和Solaris上的Netscape 4.7浏览器, 运行在PC上的Microsoft Internet Explorer 6.0, 以及运行在Macintosh上的Microsoft Internet Explorer 5.1. 作者也已经在Windows 98上利用JDK 1.2. 1.3和1.4测试了相关的程序. 当然, 我们不能保证所有的程序都能工作得很好, 但所有程序的源代码以及编译和运行的说明都是可以下载的.
作者严格地编写了书中的所有程序. 读者可以按照任意方式使用源代码, 但注意这不是经过完全测试的商业质量的代码.
怎样下载源代码
这本书所有程序的源代码以及怎样编译和运行的说明, 都可以从Prentice PTR的网站http://www.phptr.com/mak上下载.
读者也可以从作者的网站http://www.apropos-logic.com/nc/上下载源代码和相关说明, 并且可以运行所有的applet.