具有给定数值的最小字符串_数值分析学习笔记(八)

具有给定数值的最小字符串_数值分析学习笔记(八)_第1张图片

在这一章中,我们介绍非线性方程组的数值解法。

非线性方程组的数值求解方法一方面可以从函数零点求解方法出发进行推广得到(不动点法,Newton方法)。另一方面,也有一些广泛而又有启发性的新方法的引入。

我们加下来讨论的问题限定于

个未知数
个方程的情况,且假设方程所涉及到的函数有足够好的性质,方程有解。

即具有形式

1、不动点法

我们在求解线性方程的方法一章中将不动点迭代进行了推广得到了Jacobi方法。

其实,不动点迭代方法也能够很容易推广至非线性方程的求解。

为了能够清晰地看出不动点函数,我们先对于方程组进行形式改写。

假设向量函数

使得

并且假设

则非线性方程组可以统一地表示成

我们成功地将非线性方程组写成了函数零点求解的形式。

接下来,很自然地,我们可以进行类似于一元情形的不动点迭代重构非线性方程不动点迭代的求解理论。

不动点
为使得
成立的点(实际是向量)。

类似地,我们将一元的压缩映照定理进行推广。

定理(压缩映照定理的向量函数形式)

的一个区域。假设
上连续函数,将
映射到
。且
(自身映射性质)。则
中的不动点存在。

进一步地,如果

的各个分量
均有连续偏导,且
对于
成立,(偏导有界)则不动点存在唯一。

值得注意的是:压缩映照条件中偏导数的上界不是

而是

那么,自然地,我们对于向量函数的不动点迭代有如下形式。

取定初值

,定义向量列
。则
。(假设收敛)

一元情况下对于不动点迭代收敛情况的讨论也可以为我们所用。

定理(不动点迭代收敛性)

只需要满足压缩映照条件,则对于任意初值,不动点迭代必定收敛到不动点。

我们直接在例子中体会即可。

例:

在区域

上求解。

解:

先构造向量函数(显式地将

分别解出后化为不动点迭代函数)。

容易发现

即为我们所求非线性方程组。

容易验证其满足自身映射性质。即

接着再考虑其各个分量函数关于

的偏导数。

容易验证:

。故满足压缩映射条件。

说明

的不动点在
上存在唯一,且不动点迭代对于任何初值收敛。

若我们取

,则5次迭代后即可收敛到
以下的绝对误差。(向量无穷范数标准下)

到此为止,一些敏锐的读者可能已经发现了:我们可以略施技巧加速不动点迭代的收敛

回忆Gauss-Seidel方法对于Jacobi方法进行的改进:当最新的估计已经可用时,我们使用最新的估计值,而非上一次的估计值。

这里其实是一样的。注意到在估计

时,
已经被求出了。对于
也是同样的。

故在进行这个小小的优化后,估计式为:

额外需要注意的一些地方是:

上不动点存在唯一并
不意味着原方程组在
上解唯一。(一元情况也是类似)且类似Gauss-Seidel方法,利用最新估计并
不总是能保证收敛的加速。

2、Newton方法

在我们推广了不动点迭代后,读者自然地能想到对于Newton法的推广形式。

我们下面将再一次说明:二阶收敛选择了Newton方法

我们的目标是:找到一个函数具有形式

,使得方法具有二阶收敛的性质。

回忆一元情况,二阶收敛的条件是不动点迭代函数在不动点

处的一阶导数为
。在向量函数情况中,二阶收敛的条件变为

不妨假设矩阵

中第
列的元素为

则当

时,

时,

由二阶收敛的条件,当

时,

时,

写成矩阵乘法形式,得到

其中

为Jacobi矩阵,满足

故得到:

这说明了一个简单的事实:在向量函数情况下,Jacobi矩阵代替了导数在Newton方法中的作用。

我们得到了Newton方法的估计式:

在具体实现中,求逆通常用解线性方程组来代替。

牛顿法的优点是非常快的收敛速度,但是其收敛性是初值依赖的,需要初值足够靠近真实解的前提下才能保证收敛。此外,计算Jacobi矩阵中各个元素的值需要利用数值微分,计算代价十分巨大。

为此,一些近似Newton方法被引入。如Broyden方法,可以看作是割线法在向量函数情况下的推广。类似地,其不再需要每次迭代都计算Jacobi矩阵的值,大大减少了计算代价。但是其不再是二阶收敛,而仅仅是超线性收敛,且其失去了对于舍入误差的自修正性。Broyden的具体实现就不在此赘述了。

3、最速下降法

牛顿方法与Broyden方法收敛的前提条件都是:迭代的初值足够靠近方程零点。

那么是否有一种方法能保证在一般情况下的收敛性呢?

最速下降法便具有这样的优良性质,其在一般情况下对于任意迭代初值均能保证收敛。

我们在共轭梯度法处已经提及:梯度方向是函数的值增加得最快的方向。很自然地,我们联想到当在估计一个函数的最小值时,在每一点处均沿着负梯度方向前进一定使得函数值下降得最快。

而对于一个非线性方程组,我们不难将零点求解问题转化为一个辅助函数

的最小值求解问题。

考虑

显然,

取最小值
当且仅当
为非线性方程的零点

现在,我们清晰地知道了最速下降法的原理;我们也知道了在每一步迭代中我们应该向哪个方向前进。剩下的唯一问题便是:在具体实现中,每一步前进的距离长度为多少?

我们总是希望每一步的函数值能够尽可能多得下降。即对于给定的

,我们希望取得的
使得
尽可能地小。

具体做法是:

对于给定的

,先求得
并单位化后得到向量

接下来,取

,取
为使得
的最大的具有
形式的数。(
),取

我们的目的是:求出

使得
取值最小。

由于

的形式通常过于复杂,我们进行大致估算:

利用

三点处的函数值进行插值多项式拟合(得到二次插值多项式),再考虑此二次函数在区间上的最小值点作为
的取值

最速下降法的完整步骤到此为止就介绍完了。

值得注意的是:最速下降法一般而言收敛,但是却未必收敛到理想结果。由于辅助函数

的凸性
无法保证,导致最速下降法可能陷入局部最小值中“无法自拔”,而错失全局最小值。由此,我们得以理解为何通常在方程组求解时取
。这是因为函数
上的凸函数。

另外,最速下降法仅仅是线性收敛的。故其在实际中常常作为为牛顿方法或Broyden方法寻找良好迭代初值的方法

四、同伦延展法

在第一次学习到同伦延展法时,我一直很疑惑:同伦作为拓扑中的概念,要如何与方程组的求解问题联系起来呢?

我们先进行一些简单的定义:

假定

即对于任意一个固定的

都是一个向量函数

这意味着随着

的连续变化,
作为
维向量之间的映射也会相应连续地改变。

假定

表示方程
的解

我们的意图是将非线性方程组的求解问题转化为

随着
连续地变化的过程。

则我们不妨假设

为给定的迭代初值,
则我们的想法就是
构造为原方程
的解
,通过寻找
上连续地变化的规律对于
进行估计。

基于上述意图,我们可以如下地简单地构造出

我们接下来的工作是:寻找到

上连续地变化的规律,从而得到估计
作为原方程组的解。

要得到规律,直接的想法就是对于

等式两边对
求偏导。

得到:

化简得到矩阵形式:

我们惊奇地发现:这是

关于
的ODE初值问题。初值
已经给定

这表示:我们成功地利用同伦的性质将一个方程组求解问题转化为了一个ODE的初值问题。

接下来的步骤中,我们只需要数值地估计常微分方程组即可,Runge-Kutta的推广方法可以被使用来产生出

的估计,即为原方程的解。

同伦延展方法将函数抽象为函数族,以使得曲线能够随参数的连续变化而连续变化,从而将方程组求解问题转化为了连续变化的ODE初值问题。如此一来,各种先前提及的ODE数值方法就可以被应用来产生估计。

值得一提的是:同伦延展法本身可以作为一个完整方法来使用,且对于初值的选取无要求,但是计算代价往往很大

关于非线性方程组求解方法的叙述,到此为止就告一段落了。

事实上,原本我还想阐述一些数值求解特征值的方法,但是后来发现诸如幂法及其推广、Householder变换、Q-R方法、SVD等等均在高代课程中有了比较完备的概述,读者若有兴趣可以自行查找资料学习。

那么,数值分析这个系列的学习笔记就到此为止了。个人感觉,数值分析是一门很应用也很有趣的数学课。学习数值分析,最应该把握的是某种特定方法为何会出现、具有什么优缺点、能够进行哪些改进等等问题,而非一味地追求实践。只有对于各种方法有了宏观层面的把握,才能够对每一个方法的适用场合与实现细节了如指掌。

最后,谢谢各位对于数值分析系列学习笔记的阅读!

另外:

谢谢 @一条大BASS 为我指出了文章的错误!

你可能感兴趣的:(具有给定数值的最小字符串)