1
第四章 数值计算
4.1 引言
本章将花较大的篇幅讨论若干常见数值计算问题:线性分析、一元和多元函数分析、微
积分、数据分析、以及常微分方程(初值和边值问题)求解等。但与一般数值计算教科书不
同,本章的讨论重点是:如何利用现有的世界顶级数值计算资源 MATLAB。至于数学描述,
本章将遵循“最低限度自封闭”的原则处理,以最简明的方式阐述理论数学、数值数学和
MATLAB 计算指令之间的内在联系及区别。
对于那些熟悉其他高级语言(如 FORTRAN,Pascal,C++)的读者来说,通过本章,
MATLAB 卓越的数组处理能力、浩瀚而灵活的 M 函数指令、丰富而友善的图形显示指令将
使他们体验到解题视野的豁然开朗,感受到摆脱烦琐编程后的眉眼舒展。
对于那些经过大学基本数学教程的读者来说,通过本章,MATLAB 精良完善的计算指
令,自然易读的程序将使他们感悟“教程”数学的基础地位和局限性,看到从“理想化”简
单算例通向科学研究和工程设计实际问题的一条途径。
对于那些熟悉 MATLAB 基本指令的读者来说,通过本章,围绕基本数值问题展开的内
容将使他们体会到各别指令的运用场合和内在关系,获得综合运用不同指令解决具体问题的
思路和借鉴。
由于 MATLAB 的基本运算单元是数组,所以本章内容将从矩阵分析、线性代数的数值
计算开始。然后再介绍函数零点、极值的求取,数值微积分,数理统计和分析,拟合和插值,
Fourier 分析,和一般常微分方程初值、边值问题。本章的最后讨论稀疏矩阵的处理,因为
这只有在大型问题中,才须特别处理。
从总体上讲,本章各节之间没有依从关系,即读者没有必要从头到尾系统阅读本章内容。
读者完全可以根据需要阅读有关节次。除特别说明外,每节中的例题指令是独立完整的,因
此读者可以很容易地在自己机器上实践。
MATLAB 从 5.3 版升级到 6.x 版后,本章内容的变化如下:
z MATLAB 从 6.0 版起,其矩阵和特征值计算指令不再以 LINPACK 和 EISPACK 库为基
础,而建筑在计算速度更快、运行更可靠的 LAPACK 和 ARPACK 程序库的新基础上。
因此,虽然各种矩阵计算指令没有变化,但计算结果却可能有某些不同。这尤其突出地
表现在涉及矩阵分解、特征向量、奇异向量等的计算结果上。对此,用户不必诧异,因
为构成空间的基向量时不唯一的,且新版的更可信。本书新版全部算例结果是在 6.x 版
上给出的。
z 在 5.3 版本中,泛函指令对被处理函数的调用是借助函数名字符串进行的。这种调用方
式在 6.x 版中已被宣布为“过渡期内允许使用但即将被淘汰的调用方式”;而新的调用
方式是借助“函数句柄”进行的。因此,关于述泛函指令,本章新版着重讲述如何使用
“函数句柄”,同时兼顾“函数名字符串”调用法。
z MATLAB 从 6.0 版起,提供了一组专门求微分方程“边值问题”数值解的指令。适应
这种变化,本章新增第 4.14.5 节,用 2 个算例阐述求解细节。
z 5.3 版中的积分指令 quad8 已经废止;6.x 版启用新积分指令 quadl ;6.5 版新增三重积分
指令 triplequad。本章新版对此作了相应的改变。
4.2 LU 分解和恰定方程组的解