0%

数值分析学习笔记(一) 绪论

数值分析是一门偏工程的数学分支学科,其基本思想是“近似”,就是说当原问题无法精确求解或者精确求解代价太高时,可以使用近似的方法在低开销的情况下获得尽可能精确的解。这样的解称之为数值解,得到这样的解的方法称之为数值解法。

一般来说,一个好的数值解法应当符合如下评价标准:

  • 运算次数少
  • 运算过程具有规律性,便于编写程序
  • 需要记录的中间结果少
  • 能够控制误差的传播和积累,从而保证精度

简而言之,好的数值解法应当既“快”又“准”,而在具体的应用场景下对于二者的要求标准不同,需要加以权衡。

如何衡量“快”:计算复杂性与收敛速度

算法大致可以分为两类:一类是直接法,指在没有误差的情况下可以在有限步内得到精确解的算法;另一类是迭代法,指采取逐次逼近的方法来逼近问题的精确解,而任意有限步内都得不到精确解的算法。

对于直接法来说,运算量是衡量算法快慢的标志,而算法的计算复杂性则能够很好地估计算法的运算量。

对于迭代法来说,除了要估计每一次迭代的运算量,还要估计迭代多少次才能将数值解逼近到足够的精度内,这就需要对其收敛速度进行分析。假设某一迭代法产生的序列$\{x_k\}$收敛于$x$,且存在某个正数$r \in [1,\infty)$,使得

存在,则称算法是$r$阶收敛的。

  • 当$r=1$时,称为线性收敛,此时必有$0 < c_r < 1$
  • 当$r=2$时,称为平方收敛
  • 当$r=3$时,称为立方收敛

特别地,如果$lim_{k\rightarrow\infty}\frac{||x_k-x||}{||x_{k-1}-x||}=0$,称为超线性收敛,如果$r>1$,则$r$阶收敛一定是超线性收敛。

如何衡量“准”:敏度分析与误差分析

在使用算法得到数值解后,需要评估其与精确解之间的差值有多少,要回答这一问题,需要进行敏度分析与误差分析。

敏度分析研究的是计算问题的固有属性对数值解精确度的影响,简单来说就是原始数据的微小变化会引起计算问题的数值解的多大变化。理想情况下,应当找到关系$g(\cdot)$,使得$f(x+\delta x) - f(x) = g(\delta x)$,然而找到这样的$g(\cdot)$是很困难的,通常的做法是:对于一个特定的$x$,在$\frac{|\delta x|}{|x|}$很小的情况下,找到一个尽可能小的正数$c(x)$使得

这样$c(x)$的大小就在一定程度上反映了微小扰动在$x$点处对$f(\cdot)$的影响程度,$c(x)$称为$f(\cdot )$在$x$点处的条件数;可以看出,当$f(\cdot )$在$x$点处可微时,$c(x) \approx \frac{|f^{\prime}(x)||x|}{|f(x)|}$。当$c(x)$很大时,称$f(\cdot )$在$x$点处是病态的;当$c(x)$较小时,称$f(\cdot )$在$x$点处是良态的。需要注意的是,计算问题$f(\cdot )$是否病态是计算问题$f(\cdot )$的固有属性,与算法无关。

误差分析研究的是计算方法对数值解精确度的影响,具体来说,计算方法引起的数值解误差来源于以下四个方面。

  • 模型误差:从实际问题中提炼出的数学模型往往忽略许多次要因素,因此即使数学模型能够求出精确解,也与实际问题的真解不同,二者之差称为模型误差。模型误差常常是四类误差中的最大者。
  • 观测误差:原始数据是由观测、实验并记录获得的,由于各种实际因素的影响,原始数据本身带有一定误差,称之为观测误差。
  • 截断误差:理论上的精确值需要无限次运算才能获得,实际计算时使用有限次的运算结果来近似,这样的误差称为截断误差。
  • 舍入误差:计算机只能对有限位数字进行存储和运算,这样引起的误差称为舍入误差。

对于这些误差,可以使用前向误差分析和后向误差分析两种误差分析方法进行处理。前向误差分析是指对于数值解$\hat{y}$和精确解$y$,估计误差$\delta y = \hat{y} - y$的过程;后向误差分析是指对于数值解$\hat{y}$,认为$\hat{y} = f(x + \delta x)$,估计$\delta x$如$|\delta x| \leq |x|\varepsilon$的过程。

这样,通过对计算问题进行敏度分析以及对计算方法进行误差分析,可以对计算结果的精度进行如下估计。

由此可见,只有使用数值稳定的计算方法($\varepsilon$较小)来求解良态的计算问题($c(x)$较小),才能得到可靠的计算结果。