第1章 绪论
本章重点介绍数值计算方法的基础知识, 包括误差的概念与估计、有效数字与机器数系的基本理论、数值计算过程中误差形成、传播的机制及算法设计要注意的问题等.
1.1 计算方法概述
1.1.1 科学计算与计算方法
计算数学是一门随着计算机的发展而形成的新兴学科, 是数学、计算机科学与其他学科交叉的产物. 它是专门研究如何利用计算机有效地求解科学研究和工程设计中各类计算问题的有关方法和理论的一门学科, 也称这门学科为科学计算. 在计算机产生以前, 人类主要基于理论分析和实验研究两种手段进行科学研究. 随着计算机的诞生以及计算机技术的快速发展, 科学计算已经成为人类从事科学活动和解决科学问题不可缺少的手段. 科学计算与实验、理论分析并驾齐驱, 已成为当今科学活动的三种主要方式.
科学计算作为数学与计算机有机结合的结果, 表现出了强大的生命力, 成为计算机仿真的基石. 一方面, 计算机具有强大的运算能力, 它能帮助我们在可接受的时间内完成大量的数据计算. 对于一个科学问题, 在短时间内得到结果与在较长时间后才能得到结果, 有着完全不同的实践意义: 我们研究的范围会因此而改变. 例如, 数值天气预报需要用到地面与空中、陆面与海洋、卫星、雷达、飞机、探空气球等各种观测数据, 只有在几分钟或几小时内模拟出一天或几天的天气情况时, 这项研究才具有实际意义. 这就需要强大的计算能力. 另一方面, 在科学研究中, 有些现象不能或需要巨大代价做真实实验, 而科学计算可以替代或者极大地降低实验代价. 例如, 火箭的发射与飞行控制、卫星或载人空间站的运行控制, 在其设计过程中需要研究所设计的飞行器在各种条件下的负载和安全情况, 如果对于所有情况都进行实验, 显然人力和财力都难以承受. 科研人员可以通过科学计算对飞行器在各种条件下的负载情况进行计算, 这样可以极大地节省飞行器研制过程中所需的人力、物力, 并大大加快研发进度. 再如, 2021 年建成的国之重器——我国地球系统数值模拟装置 “寰”, 把地球装进了实验室, 通过数值模拟构建了一个理论上的地球. 在其中做模拟实验, 来了解天气和气候是怎样发生的, 未来会如何变化以及会有什么样的影响. 也可以通过其中的实验来模拟温室气体排放对人类生存环境的影响, 以及极端天气气候过程对人类生活的影响等, 从而得以用较低代价模拟物理地球并取得科学研究结果, 进而探索地球运动变化规律、人与地球的关系等.
利用计算机解决具体科学问题一般有以下三个环节:
**, 适当简化实际问题, 建立数学模型; 第二, 根据数学模型选择或设计数值计算方法, 再通过编程计算, 给出数值结果; 第三, 将数值结果与理论分析和实验结果相结合给出实际问题的答案, 或对模型提出修正方案.
上述第二个环节是科学计算的核心, 也是计算方法课程的主要内容.
计算方法 (又称数值计算方法、数值分析) 是数学的一个分支, 研究用计算机解决科学与工程问题的数值方法及其理论. 从国防尖端科技, 到日常生活生产, 计算方法的应用极为广泛. 例如, 数值天气预报、气候诊断与分析、地震监测预报、火箭和卫星的设计与控制、飞机与汽车的优化设计、尖端数控机床、地质勘探与油气开发、人工智能、图像处理、网络搜索等方面, 都有计算方法的应用.
1.1.2 计算方法的研究对象与特点
不同的学科, 不同的工程应用会提出不同的问题, 其中多数可归结为若干典型的数学模型. 给出这些典型问题的数值计算方法, 就为多数实际问题的解决提供了手段. 为此, 本课程着重介绍几类典型问题的数值计算方法. 主要包括误差理论、线性与非线性方程 (组) 的数值解、矩阵的特征值与特征向量计算、*线拟合与函数逼近、插值方法、数值积分与数值微分、常微分方程与偏微分方程数值解等.
计算方法是一门与计算机使用密切结合的实用性很强的数学课程, 它既有纯数学的高度抽象性与严密科学性的特点, 又有应用广泛性与实际试验的高度技术性的特点. 它把所需求解的数学模型简化成由一系列算术运算和逻辑运算构成的算法, 以便在计算机上求出问题的解, 并对算法的收敛性、稳定性和误差进行分析、计算.
选定合适的算法是整个数值计算中非常重要的一环. 例如, 用克拉默 (Cramer) 法则求解一个20阶的线性方程组, 需要约9.7×1020 次乘除运算, 即使用每秒运算 1 万亿次的超级计算机计算也要30年. 而用高斯 (Gauss) 消元法求解, 只需要 3060次乘除运算. 可见算法选择的重要性. 然而, 很多算法不可能事先确知其计算量, 故对数值方法除理论分析外, 还必须通过数值试验检验其复杂性. 另外, 求解这类方程还应根据方程的特点, 研究适合计算机使用的满足精度要求的, 计算时间少的有效算法及其相关理论. 在算法编程实现时往往还要根据计算机容量、字长、速度等指标, 研究具体求解步骤和程序设计技巧. 有的方法在理论上虽不够严密, 但通过实际计算、对比分析等手段, 证明是行之有效的方法, 也应该采用.
这些都是数值计算方法应有的特点, 概括起来有四点:
**, 面向计算机, 要根据计算机特点提供实际可行的有效算法, 即算法只能包括算术运算 (加、减、乘、除运算) 和逻辑运算, 是计算机可以直接处理的.
第二, 有可靠的理论分析, 能任意逼近并达到精度要求. 对近似算法不仅要对误差进行分析, 而且要保证收敛性和数值稳定性.
第三, 要有可接受的计算复杂性. 时间复杂性与空间复杂性也是设计数值计算的算法要考虑的问题, 它直接关系到算法是否有效, 能否在计算机上实现.
第四, 要有数值试验, 即任何一个算法除了要满足上述三点外, 还要通过数值试验验证其有效性.
根据上述特点, 在学习计算方法时应注意以下三点. *先, 要掌握设计算法的原理、思想, 理解所给出的数值方法为什么能够收敛到问题的解, 并能够分析算法的误差, 给出精度估计; 其次, 注重算法的效率和适用范围, 针对不同情况学会选择和设计优秀的算法; *后, 要重视实践, 只有动手将算法在计算机上进行实现, 才能真正理解算法, 进而针对具体问题设计出更优秀的算法.
1.2 误差的基本理论
1.2.1 浮点数与机器数系
根据 IEEE 的标准, 一个β进制的规格化浮点数可以表示为
其中, β称为数 x 的基, 对于二进制、八进制、十六进制和十进制数而言, β 分别取值为 2, 8, 16 和 10; J 称为阶或阶码, 是一个整数, 取正整数、负整数或零; 称为尾数, αi 为整数, 数字t 称为字长.
若一个计算机中能够表示的所有浮点数的集合加上机器零称为机器数系, 记为 F:
集合F可以用四个元素的数组 (β, t, L,U) 来刻画. 不同的计算机系统, 这四个值不一定相同. 对于一个特定的计算机系统, 尾数的位数 t 是固定的, 也称其精度有t 个 β 进位数. 阶码 J(L . J . U) 的取值范围 L 和 U 决定着 x 的绝对值大小.
易见, 机器数系 F 是一个分布不均匀的、不连续的有限数集. 事实上, 集合 F
包含 个实数, 这些数分布在区间 [m,M], [.M,.m]和 {0} 中, 其中
这些数在 [m,M], [.M,.m] 中的分布是不等距的, 阶码 J 越小的地方表示的数越稠密, 阶码 J 越大的地方表示的数越稀疏, 示意如图 1.1.
图1.1 机器数系中实数在数轴上的分布示意图
F 既然是个有限集, 它就不可能将 [m,M] 和 [.M,.m] 中的任意实数表示出来. 这就决定了计算机中的浮点运算是无法精确进行的.
当一个数的值大于数M或者小于-M时, 则称为上溢. 当有上溢现象产生时, 计算机通常会报错或在输出结果中输出一个明确的错误提示. 当一个非零浮点数的数值介于 .m 与 m之间时, 则产生下溢. 当下溢发生后, 该浮点数将被计算机当作数值 0 来处理, 如果该数在计算中作为分母出现, 则发生上溢. 上溢和下溢统称为溢出, 利用计算机进行数值计算, 防止运算量的数值产生溢出是一项异常艰巨而又不得不执行的任务.
1.2.2 误差的来源及分类
误差是描述数值计算中近似值精确度的一个基本概念, 在计算方法中十分重要. 通常, 按误差的来源可分为观测误差、模型误差、截断误差和舍入误差四类.
观测误差 数学模型中的一些物理参数通常是通过观测、测量、实验得到的,
往往受到设备精度等条件影响, 它与实际值之间的误差称为观测误差.
模型误差 对实际问题进行数学建模时, 一般总是依据主要因素, 忽略次要因素, 简化后建立问题的数学描述, 即数学模型. 这种简化必然会有误差, 称为模型误差.
截断误差 求解数学模型所用的数值方法通常是一种近似计算方法, 这种因方法产生的误差称为截断误差或方法误差.
舍入误差 用计算机求解问题时必然涉及数值在计算机上的表示, 实数用机器数表示也会存在误差, 称为舍入误差.
展开