1 基本概念
数值分析是研究如何用有限步计算过程近似求解数学问题的学科。它并不追求象征性表达上的“精确公式”,而是更关注在实际计算条件下,怎样得到足够准确、可重复且运行效率合适的结果。由于计算机只能处理有限精度的数据,数值分析同时涉及算法设计、误差控制和性能评估等方面。
1.1 数值分析的定义
数值分析通常被定义为:对数学问题构造数值算法,并分析其误差、稳定性、收敛性与计算代价的理论与方法体系。它服务于那些难以获得解析解、或解析解虽存在但不便直接使用的问题,例如复杂方程组求解、曲线拟合、微分方程计算等。
1.2 近似计算与精确计算
精确计算强调结果与数学定义完全一致,而近似计算则允许结果在可接受误差范围内逼近真实值。前者多见于符号运算与理论推导,后者则更适合工程和科学计算。数值分析的核心,就是在“足够接近”与“计算可行”之间建立平衡。
1.3 误差来源
数值计算中的误差并非单一原因造成,通常来自问题本身、算法过程以及机器表示等多个环节。不同误差会以不同方式影响最终结果,因此需要分别识别和处理。
1.3.1 截断误差
截断误差来源于将无限过程或连续过程改写为有限过程,例如用有限项级数代替无穷级数,或用离散差分近似导数。它通常与步长、截断层数或离散网格有关。
1.3.2 舍入误差
舍入误差由有限字长表示引起。由于计算机不能存储所有实数,运算结果往往需要四舍五入或截断,这会使每一步都引入微小偏差,累积后可能显著影响结果。
1.3.3 模型误差
模型误差是由数学模型对真实对象的简化而产生的。比如忽略摩擦、把连续介质离散化,或用理想条件替代实际条件,都会让计算结果与现实之间产生偏差。
1.4 算法性质
评价数值算法时,不仅要看是否算得出来,还要看是否“算得稳”“算得快”。因此,收敛性、稳定性与复杂度是最常见的三类指标。
1.4.1 收敛性
收敛性描述算法迭代结果是否会逐渐逼近真实解,以及逼近的速度如何。一个方法可能在理论上收敛,但收敛极慢,在实际中仍不实用。
1.4.2 稳定性
稳定性关注误差在计算过程中的传播情况。若轻微扰动不会导致结果剧烈变化,算法通常被认为较稳定;反之,即使初始数据很精确,也可能在迭代中被放大为较大偏差。
1.4.3 复杂度
复杂度衡量算法所需的时间和存储资源。对于大规模问题,复杂度往往决定方法是否可用。数值分析中常在精度与代价之间作权衡,而非一味追求最高精度。
2 误差分析
误差分析是数值分析的重要基础,用于量化近似结果与真实结果的差别,并研究这种差别如何随运算步骤扩散。
2.1 绝对误差与相对误差
绝对误差是近似值与真值之差的绝对值,反映偏离的实际大小;相对误差则把绝对误差与真值大小联系起来,更能说明误差在比例上的影响。在真值数量级差异较大时,相对误差通常更有比较意义。
2.2 前向误差与后向误差
前向误差指最终计算结果与真实解之间的差距;后向误差则表示应将输入数据扰动多少,才能使算法输出看起来成为精确解。后向误差小,往往说明算法具有较好的数值可靠性。
2.3 误差传播
误差传播研究初始误差、舍入误差或模型误差如何在后续计算中扩散、积累或被放大。某些算法会抑制误差,而某些算法则可能因减法消去等原因导致误差迅速增大。
2.4 条件数
条件数用来刻画问题对输入扰动的敏感程度。条件数越大,说明问题越容易受到微小扰动影响;条件数较小,则表明问题相对“好算”。
2.4.1 问题条件性
问题条件性反映的是数学问题本身的性质,而不是算法优劣。即使使用再好的方法,若问题本身对扰动极其敏感,也难以获得高精度结果。
2.4.2 病态问题
病态问题通常指对输入变化高度敏感的问题。对于这类问题,数据中很小的噪声就可能造成结果显著变化,因此常需要正则化、重新建模或提高数据质量。
2.5 浮点数与机器精度
计算机中的实数一般采用浮点表示,其数值范围和有效位数都有限。机器精度决定了最小可分辨变化量,也影响加减乘除时的舍入行为。了解浮点特性,是避免数值灾难的重要前提。
3 非线性方程求解
非线性方程求解研究如何找到满足方程的根。由于多数非线性方程缺乏显式解,通常依赖迭代法或区间缩小法获得近似根。
3.1 代数方程求根
代数方程求根指寻找多项式或含代数运算方程的零点。实际应用中,常需结合初值估计、区间判断与迭代策略,以提高求解效率和可靠性。
3.2 二分法
二分法是利用连续函数在区间两端异号的性质,通过不断折半区间逼近根的方法。它实现简单、稳定性强,但收敛速度相对较慢。
3.3 牛顿法
牛顿法利用切线近似来迭代逼近方程的根,是最经典的局部迭代方法之一。只要初值足够接近且导数不为零,通常能获得较快收敛。
3.3.1 迭代公式
牛顿法的基本思想是用当前点处的切线与横轴交点作为下一步近似值。其迭代形式依赖函数值与导数值,因此对导数计算质量较为敏感。
3.3.2 收敛速度
在条件合适时,牛顿法常表现为二次收敛,即误差大致按平方速度缩小。若初值不理想或函数性质复杂,收敛可能变慢,甚至失败。
3.4 割线法
割线法用相邻两点确定割线,取其与横轴交点作为新的近似根。它不需要显式求导,计算上比牛顿法更方便,但稳定性和收敛速度通常略弱。
3.5 不动点迭代
不动点迭代把方程改写为 \(x=g(x)\),然后不断代入生成序列。方法的关键在于构造合适的迭代函数,使其在目标点附近具有收敛性。
3.6 多项式根的数值求解
多项式根的数值求解是一个重要专题,既涉及单根搜索,也涉及全部根的整体计算。高次多项式可能出现重根、复根和数值不稳定等现象,因此常结合矩阵方法、伴随矩阵或特征值技术处理。
4 线性代数的数值方法
线性代数计算是数值分析中最基础、也最常见的内容之一。大量科学计算问题最终都会归结为解线性方程组、求特征值或进行矩阵分解。
4.1 线性方程组
线性方程组的数值解法主要分为直接法和迭代法。前者通过有限步得到结果,后者则通过逐步逼近改善近似解。
4.1.1 高斯消元法
高斯消元法通过初等行变换把方程组化为上三角形式,再回代求解。它是最经典的直接解法,但在实际应用中常需配合选主元策略以提高稳定性。
4.1.2 LU分解
LU分解将矩阵分解为下三角矩阵与上三角矩阵的乘积,从而把求解过程拆成两个三角方程组。若同一矩阵需要反复求解不同右端项,这种方法很有优势。
4.1.3 QR分解
QR分解把矩阵表示为正交矩阵与上三角矩阵的乘积,常用于最小二乘问题和特征值计算。由于正交变换较稳定,它在数值上通常较受青睐。
4.2 迭代法
迭代法通过重复更新近似解,逐渐逼近真实解。对于大规模稀疏系统,这类方法往往比直接法更节省资源。
4.2.1 雅可比法
雅可比法在每次迭代中使用上一轮的全部分量更新当前解。它结构简单,便于并行实现,但收敛速度通常不算快。
4.2.2 高斯-赛德尔法
高斯-赛德尔法在更新时立即使用已算出的新分量,因此往往比雅可比法更快收敛。其效果依赖矩阵性质,尤其是对角占优情况。
4.2.3 共轭梯度法
共轭梯度法主要用于对称正定线性系统。它在理想条件下能快速逼近解,特别适合大规模稀疏问题,是现代数值线性代数的重要工具。
4.3 特征值与特征向量
特征值问题广泛出现在振动分析、主成分分析和稳定性研究中。数值计算时,通常需要高效地估计主特征值或全部谱信息。
4.3.1 幂法
幂法通过反复乘以矩阵并归一化,逐步逼近主特征向量及对应特征值。它实现简洁,但只能有效提取占优特征信息。
4.3.2 反幂法
反幂法通过对矩阵求逆后的幂迭代,能够逼近更小或靠近指定位移的特征值。若配合移位技术,应用范围会更广。
4.3.3 QR算法
QR算法是求解矩阵特征值的经典方法之一,常通过连续的正交分解与重组使矩阵逐渐趋于上三角形式。它在理论与实践中都具有重要地位。
4.4 矩阵分解与预处理
矩阵分解用于揭示矩阵结构,预处理则用于改善迭代系统的条件性。合理的预处理可以显著减少迭代次数,是大型计算中常见的加速手段。
5 插值与拟合
插值与拟合研究如何用有限数据构造函数近似,以重建、预测或压缩信息。两者的区别在于:插值要求曲线经过给定点,拟合则允许存在误差以换取整体趋势更平滑。
5.1 多项式插值
多项式插值使用一个多项式通过若干已知点,是最基础的曲线重构方法之一。虽然形式简单,但高阶多项式可能带来振荡问题。
5.1.1 拉格朗日插值
拉格朗日插值通过构造基函数直接写出插值多项式,形式直观,适合理论表达。若节点较多,计算代价会随规模增长而增加。
5.1.2 牛顿插值
牛顿插值使用差商构造多项式,便于逐点追加新数据,具有较好的可扩展性。在实际应用中,它常用于增量式数据插值。
5.1.3 分段插值
分段插值把区间划分为若干小段,在每段上用低阶多项式近似。这样既能保持局部精度,又可减轻高阶全局插值的振荡风险。
5.2 样条插值
样条插值通常用分段低次多项式并要求连接处具有一定光滑性。三次样条尤为常见,既能较好逼近数据,又保持曲线平滑自然。
5.3 最小二乘拟合
最小二乘拟合通过最小化误差平方和,使模型尽可能接近观测数据。它在统计回归、实验数据处理和参数估计中应用广泛。
5.4 曲线与曲面拟合
曲线与曲面拟合扩展了二维插值和回归思想,用于描述复杂几何形状或多变量关系。其关键在于选择合适模型阶数,并避免过拟合或欠拟合。
5.5 插值误差与振荡现象
插值误差反映近似函数与真实函数之间的差异。若节点分布不合理,高阶插值可能出现端点剧烈波动,即所谓振荡现象,这也是实际计算中常见的限制。
6 数值积分与数值微分
数值积分与数值微分分别用于近似计算定积分和导数,属于离散近似连续过程的典型方法。
6.1 矩形公式
矩形公式用区间内若干矩形面积近似积分值,形式最为直接。它适合理解基本思想,但精度通常有限。
6.2 梯形公式
梯形公式用梯形面积代替曲线下方区域,较矩形公式更平滑,误差也往往更小。对光滑函数而言,它是常用的基础求积方法。
6.3 辛普森公式
辛普森公式采用二次多项式逼近被积函数,在相同分段条件下通常比梯形公式更精确。它在函数较平滑时表现良好。
6.4 高斯求积
高斯求积通过优化节点和权重,使有限次函数值计算获得较高精度。它属于高效求积方法,尤其适合对光滑函数进行积分。
6.5 复合求积方法
复合求积方法将整个区间划分为多个小子区间,再在每段上应用基础公式。这样可提高适应性,也便于控制整体误差。
6.6 数值微分
数值微分利用函数值的离散差分近似导数。当直接求导困难或数据仅以离散形式给出时,这类方法十分实用。
6.6.1 差分近似
差分近似以相邻点函数值之差估计导数。它实现简单,但对数据噪声比较敏感。
6.6.2 中心差分
中心差分使用左右两侧数据点进行估计,通常比前向或后向差分更准确,且截断误差较低。
6.6.3 高阶差分公式
高阶差分公式利用更多采样点提高精度,适合对平滑函数进行更细致的导数估计。但它也更容易受到舍入误差与噪声影响。
7 常微分方程的数值解
常微分方程的数值解主要用于初值问题的近似求解,是动力系统、控制和物理建模中的常见工具。
7.1 初值问题
初值问题给定微分方程及初始状态,要求求出随自变量演化的解。数值方法通常将连续演化过程离散化为一系列步进计算。
7.2 欧拉方法
欧拉方法是最基本的显式一步法,根据当前斜率预测下一点。它易于实现,但精度较低,步长选择也较敏感。
7.3 改进欧拉方法
改进欧拉方法通过先预测再修正,提高了欧拉法的精度。它仍保持形式简洁,适合作为入门型数值积分方案。
7.4 龙格-库塔方法
龙格-库塔方法通过在一个步长内多次采样斜率来提高精度,是常微分方程数值解中最常用的方案之一。
7.4.1 四阶龙格-库塔法
四阶龙格-库塔法在精度和计算量之间取得了较好平衡,因此应用非常广泛。许多工程计算程序都默认采用这一方法作为基础求解器。
7.4.2 自适应步长控制
自适应步长控制根据局部误差自动调整步长,在解变化剧烈时缩小步长,在平稳区域增大步长。它能提升效率并改善稳定性。
7.5 多步法
多步法利用多个历史点的信息推进解的计算,常用于提高效率。与一步法相比,它能更充分地利用已有数据。
7.5.1 Adams方法
Adams方法包括显式和隐式形式,适用于不同刚度与精度需求。它通过插值历史导数信息来构造新步值。
7.5.2 预测-校正法
预测-校正法先用显式公式预测,再用隐式或修正公式校正结果,能够兼顾效率与精度,是实际计算中常见的组合策略。
7.6 刚性方程的处理
刚性方程的特点是某些分量变化极快,导致显式方法需要极小步长。处理这类问题时,通常要采用隐式方法、特殊稳定算法或自适应技术。
8 偏微分方程的数值解
偏微分方程的数值解是科学计算的核心内容之一,广泛用于热传导、流体力学、弹性力学和波动问题。
8.1 有限差分法
有限差分法用网格点上的差商近似偏导数,将微分方程转化为代数方程组。它思想直观,编程相对方便,适合规则区域。
8.2 有限元法
有限元法将求解域划分为若干小单元,并在单元内使用局部基函数近似解。它对复杂几何和边界条件具有较强适应性。
8.3 有限体积法
有限体积法以守恒律为核心,对控制体积上的通量进行平衡。该方法在流体计算中应用广泛,尤其重视物理守恒性质。
8.4 谱方法
谱方法使用全局基函数表示解,通常在问题光滑时具有很高精度。它的优点是收敛快,但对边界和几何复杂性较敏感。
8.5 稳定性与收敛性分析
偏微分方程数值解的分析重点在于稳定性、离散一致性与收敛性之间的关系。一个离散格式若不稳定,即使局部误差很小,也难以得到可靠结果。
8.6 边界条件处理
边界条件决定了解在区域边缘的行为,处理是否正确直接影响整体解的准确性。实际计算中,常通过直接赋值、虚点法或弱形式方式施加边界约束。
9 数值优化
数值优化研究如何在给定目标函数和约束条件下寻找最优解。它既关注理论可行性,也强调实际求解效率。
9.1 无约束优化
无约束优化不考虑显式限制条件,主要目标是最小化或最大化目标函数。此类问题常作为更复杂优化模型的基础。
9.1.1 梯度下降法
梯度下降法沿着目标函数下降最快的方向迭代更新参数。它概念清晰,但对步长选择和函数形状比较敏感。
9.1.2 牛顿法与拟牛顿法
牛顿法利用二阶信息加速收敛,拟牛顿法则通过逐步近似 Hessian 矩阵降低计算成本。二者在中等规模优化中都很常见。
9.2 约束优化
约束优化要求解满足等式或不等式条件。此类问题比无约束优化更复杂,通常需要引入辅助变量或变换策略。
9.2.1 拉格朗日乘子法
拉格朗日乘子法通过构造增广目标函数,把约束条件转化为求驻点问题。它在理论分析和工程优化中都占有重要位置。
9.2.2 惩罚函数法
惩罚函数法把约束违反程度加入目标函数,从而把约束优化转化为一系列无约束问题。随着惩罚参数变化,解逐渐逼近可行域。
9.3 线性规划
线性规划研究线性目标函数在多线性约束下的最优解。它是运筹学和资源分配中的基础模型,通常可借助单纯形法或内点法求解。
9.4 非线性规划
非线性规划涉及非线性目标或非线性约束,常见于参数估计、控制设计和工程优化。其求解难度通常高于线性规划。
9.5 全局优化与局部优化
局部优化只保证找到邻域内最优解,而全局优化则追求整个搜索空间中的最优值。对于多峰函数或复杂目标,全局搜索往往更困难,但更具一般性。
10 计算实现与软件工具
数值分析不仅是理论体系,也高度依赖软件实现。算法是否能在真实机器上稳定运行,常常决定其实际价值。
10.1 算法实现原则
实现数值算法时,应优先考虑数据结构、误差累积、边界情况和可维护性。良好的实现通常比“纸面上正确”的公式更重要,因为后者在浮点环境中未必可靠。
10.2 误差控制与数值稳定
误差控制包括设定容差、监测迭代终止条件以及限制舍入误差传播。数值稳定则要求程序在不同输入尺度下仍能保持合理表现,避免出现溢出、消去或灾难性抵消。
10.3 并行计算
并行计算通过多处理器或多线程同时执行任务,以提升大规模计算效率。数值分析中的许多算法,如矩阵运算、网格离散和求积,都具有较好的并行潜力。
10.4 常用数值软件
数值软件为研究者和工程人员提供了现成的算法实现与计算接口,大幅降低了使用门槛。
10.4.1 MATLAB
MATLAB以矩阵运算见长,配套工具丰富,适合教学、原型验证和中小规模数值实验。
10.4.2 Python科学计算生态
Python科学计算生态通常包括 NumPy、SciPy、Matplotlib 等组件,具有语法简洁、社区活跃、扩展性强等特点,适合数据分析与科研开发。
10.4.3 数值库与高性能计算框架
数值库与高性能计算框架提供了更底层、更高效的实现,常用于大型工程模拟、并行求解和高精度计算场景。