由于篇幅太长所以将笔记分成了两部分 (上 & 下)
![数值计算下_1731638053834]()
# 数值计算下
# 线性方程组的直接解法
要点
高斯消元法:
- 高斯消元法的思想
- 高斯消元法的一般步骤
- 高斯消元法分析
主元素法:
矩阵三角分解法:
- 直接三角分解法(LU 分解或杜利特尔分解)
- 平方根法(乔列斯基分解)
- 改进的平方根法(分解)
- 追赶法
向量与矩阵的范数
针对具体的线性方程组会用指定的方法求解
常用的数值解法分为直接法和迭代法。
一、直接法
直接法是指不考虑计算过程中的舍入误差,通过有限步运算得到方程精确解的方法。
- 高斯消元法(Gauss elimination):通过逐步消元将线性方程组转化为上三角方程组,然后进行回代求解。
- 平方根法(Cholesky decomposition):主要用于对称正定矩阵的求解,将矩阵分解为特定形式进行求解。
- 主元素法(Pivoting method):通过选择主元素提高计算的稳定性和精度。
- 三角分解法(LU decomposition):将系数矩阵分解为下三角矩阵和上三角矩阵的乘积,然后求解两个三角方程组得到解。
- 追赶法(TDMA):主要用于求解三对角线性方程组。
直接法适用于小型稠密矩阵。
二、迭代法
迭代法采用逐次逼近的方法,从某一个初始解出发,按照某种迭代格式逐步逼近方程组的解,直至满足精度要求。
- 雅可比(Jacobi)迭代法。
- 高斯 - 塞德尔(Gauss-Seidel)迭代法。
- 松弛 SOR 迭代法。
迭代法适用于大型稀疏矩阵。
# 高斯消元法
高斯消元法(Gaussian Elimination)是一种用于求解线性方程组的直接方法。
一、基本思想
- 通过一系列的初等行变换将线性方程组的增广矩阵化为行阶梯形矩阵。
- 再进一步化为行最简形矩阵,从而得到方程组的解。
二、具体步骤
- 首先,对于线性方程组,其中是系数矩阵,是未知数向量,是常数向量。将其写成增广矩阵的形式。
- 然后进行初等行变换:
- 对换两行。
- 以非零数乘某一行。
- 把某一行的若干倍加到另一行上。
- 目标是把增广矩阵化为行阶梯形矩阵:
- 从上往下,逐行进行处理。使得每一行第一个非零元素(称为主元)所在的列,下面的行中该列元素全为零。
- 接着进一步化为行最简形矩阵:
- 使得每一行的主元变为 1,并且主元所在列的其他元素变为零。
- 最后进行回代求解:
消元法全部计算量:S=S1+S2=3n(n2+3n−1)。
高斯消元法的限制:akk(k)=0,k=1,2,⋯,n−1。
定理:方程Ax=b 可以使用高斯消元法求解的充要条件是A 的所有顺序主子式不为 0,即
∣∣∣∣∣∣∣∣a11⋮ai1⋯⋱⋯a1i⋮aii∣∣∣∣∣∣∣∣=0
∀i=1,2,⋯,n。∣A∣=0 可以保证方程组有唯一解,但不能保证高斯消元法可以进行。
当∣akk(k)∣→0 时,舍入误差会被放大,导致计算失败。
原因:
ϵ(x1∗/x2∗)≤∣x2∗∣2∣x1∗∣ϵ(x2∗)+∣x2∗∣ϵ(x1∗)
选取绝对值最大的为主元。
主元素法分析
主元素法分析:
- 若∣A∣=0,则∣akk∣⋯∣ank∣ 一定至少有一非零元。(否则∣A∣=0)。
- 主元素法的适用范围:∣A∣=0。
- 主元素法在一定程度上克服了高斯消元中的不稳定现象。
- 列主元系法增加了∑i=1n−1(n−i) 次比较操作。
- 全主元素法增加了∑i=1n−1[(n−i+1)2−1] 次比较操作。
- 不论哪种方式选出主元,再按上面步骤进行计算,都称为选主元的高斯消元法。
- 计算经验与理论分析均表明:列主元素法与全主元素法具有同样良好的数值稳定性。实际中常采用列主元素法求解中小型稠密方程组。
# 三角分解
# LU 分解
LU 分解(LU Decomposition)是线性代数中一种重要的矩阵分解方法。它将一个方阵A 分解为一个下三角矩阵L 和一个上三角矩阵U 的乘积,即A=LU。
其中,L 是一个下三角矩阵,即矩阵中的所有元素都位于主对角线及其下方,且主对角线元素通常为 1(在一些特殊的 LU 分解形式中,如 Crout 分解,L 的主对角线元素不一定为 1);U 是一个上三角矩阵,即矩阵中的所有元素都位于主对角线及其上方。
并不是所有方阵都可以进行 LU 分解,一个方阵A 可以进行 LU 分解的一个常见的充分条件是它的所有顺序主子式都不为 0。
LU 分解的主要应用包括:
- 求解线性方程组:给定线性方程组Ax=b,可将其转换为两个更简单的方程组Ly=b 和Ux=y,先解下三角方程组得到y,再解上三角方程组得到x。
- 计算矩阵的行列式:由于行列式可以通过对角线元素的乘积来计算,而A 的行列式等于L 和U 的行列式的乘积,对于标准 LU 分解,L 的行列式为 1,所以A 的行列式的值即为U 的对角线元素乘积。
- 求矩阵的逆:利用A−1=U−1L−1,由于L 和U 是三角矩阵,它们的逆相对容易计算。
杜利特尔算法的具体步骤如下:
设矩阵A 为n×n 矩阵,L 和U 的初始值设定如下:
L 为单位下三角矩阵,即L(i,i)=1(主对角线元素为 1),L(i,j)=0(i<j 时,非主对角线元素为 0);
U 初始化为全零矩阵。
对于r 从 1 到n−1 进行以下操作:
计算U 的第r 行元素:
urj=arj−∑k=1r−1lrkukj(j=r,r+1,⋯,n)
计算L 的第r 列元素(r=n):
lir=urrair−∑k=1r−1likukr(i=r+1,r+2,⋯,n)
经过这些步骤,最终得到的L 和U 矩阵即为A 的 LU 分解结果。
通过解方程组Ly=b 和Ux=y,获得最终的结果。
# 平方根法 - 乔列斯基分解法
乔列斯基(Cholesky)分解是对于对称正定矩阵的一种分解方法。
若矩阵
A=⎣⎢⎢⎢⎢⎡a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1na2n⋮ann⎦⎥⎥⎥⎥⎤
则存在下三角矩阵
L=⎣⎢⎢⎢⎢⎡l11l21⋮ln10l22⋮ln2⋯⋯⋱⋯00⋮lnn⎦⎥⎥⎥⎥⎤
使得A=LLT,其中
LT=⎣⎢⎢⎢⎢⎡l110⋮0l21l22⋮0⋯⋯⋱⋯ln1ln2⋮lnn⎦⎥⎥⎥⎥⎤
通过比较法可得计算下三角矩阵L 中元素的公式为:
- 计算主对角线元素ljj:ljj=ajj−∑k=1j−1ljk2,j=1,2,⋯,n.
- 计算非主对角线元素lij(i>j):lij=ljj1(aij−∑k=1j−1likljk).
紧凑法:对角类似 LU 分解步骤,但是需要开发,后续元素类似 LU 分解,要除子方阵的坐上顶角元素
见例题
# 改进的平方根法
LDLT
设A 为对称正定阵,则A 可唯一分解为A=LDLT,其中L 为单位下三角阵,D 为对角阵。即:
A=⎣⎢⎢⎢⎢⎡1l21⋮ln101⋮ln2⋯⋯⋱⋯00⋮1⎦⎥⎥⎥⎥⎤⎣⎢⎢⎢⎡d1d2⋱dn⎦⎥⎥⎥⎤⎣⎢⎢⎢⎢⎡10⋮0l211⋮0⋯⋯⋱⋯ln1ln2⋮1⎦⎥⎥⎥⎥⎤
LDLT
分解过程
借助 LU 分解可得:
A=⎣⎢⎢⎢⎢⎡1l21⋮ln101⋮ln2⋯⋯⋱⋯00⋮1⎦⎥⎥⎥⎥⎤⎣⎢⎢⎢⎡d1d2⋱dn⎦⎥⎥⎥⎤⎣⎢⎢⎢⎢⎡10⋮0l211⋮0⋯⋯⋱⋯ln1ln2⋮1⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡1l21⋮ln101⋮ln2⋯⋯⋱⋯00⋮1⎦⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎡d10⋮0d1l21d2⋮0⋯⋯⋱⋯d1ln1d2ln2⋮dn⎦⎥⎥⎥⎥⎤
其分解过程为:
di=aii−∑k=1i−1lik2dk.
lij=dj1(aij−∑k=1j−1likljkdk).
# 平方根与改进的平方根法小结
一、平方根法
- 对于对称正定阵A 完成乔列斯基分解后,可转化为方程组求解:
- Ly=b;
- L⊤x=y.
二、改进的平方根法
- 对于对称正定阵A 完成LDLT 分解后,可转化为:
- Ly=b;
- DL⊤x=y,进一步可写成L⊤x=D−1y.
三、共同点与优势
- 二者都只适用于对称正定阵。
- 引入辅助量后,计算量差不多。
- 改进的平方根法不需要开方运算,计算量约为高斯消元法的一半Ω(6n3),且不必选主元,数值稳定性良好。
# 追赶法
追赶法与三对角矩阵分解定理
一、三对角矩阵
一个 n×n 的三对角矩阵 A 具有如下形式:
A=⎣⎢⎢⎢⎢⎢⎢⎡b1a20⋮0c1b2a3⋮00c2b3⋮0⋯⋯⋯⋱⋯000⋮bn⎦⎥⎥⎥⎥⎥⎥⎤
其中 ai、bi、ci 为已知系数。
二、三对角矩阵分解定理
对于三对角矩阵
A=⎣⎢⎢⎢⎢⎢⎢⎢⎡b1a2c1b2a3c2b3⋱an−1c3⋱bn−1an⋱cn−1bn⎦⎥⎥⎥⎥⎥⎥⎥⎤
若满足
⎩⎪⎪⎨⎪⎪⎧∣b1∣>∣c1∣>0∣bi∣>∣ai∣+∣ci∣,aici=0,i=2,⋯,n−1∣bn∣>∣an∣
则它可以分解为
A=LU=⎣⎢⎢⎢⎢⎢⎡α1r2α2r3α3⋱⋱rnαn⎦⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎡1β11β2⋱⋱1βn−11⎦⎥⎥⎥⎥⎥⎤
三对角阵的分解实质是 LU 分解的应用,其系数可由以下公式确定:
- α1=b1。
- β1=c1/b1。
- βi=ci/(bi−aiβi−1),i=2,⋯,n−1。
- ri=ai,i=2,⋯,n。
- αi=bi−αiβi−1,i=2,⋯,n。
追赶法是一种高效的求解三对角线性方程组的方法,其计算复杂度为 O(n),远低于一般的高斯消元法的 O(n3)。
# 向量范数与矩阵范数
一、向量的范数
向量的范数是衡量向量大小的一种度量方式。
常见的向量范数有以下几种:
- l1 范数:也称为曼哈顿范数,对于向量x=(x1,x2,⋯,xn),其l1 范数定义为∣∣x∣∣1=∑i=1n∣xi∣。
- l2 范数:也称为欧几里得范数,对于向量x=(x1,x2,⋯,xn),其l2 范数定义为∣∣x∣∣2=∑i=1nxi2。
- l∞ 范数:也称为最大范数,对于向量x=(x1,x2,⋯,xn),其l∞ 范数定义为∣∣x∣∣∞=max1≤i≤n∣xi∣。
向量范数的性质:
- 非负性:对于任意向量x,∣∣x∣∣≥0,当且仅当x=0 时,∣∣x∣∣=0。
- 齐次性:对于任意向量x 和标量α,∣∣αx∣∣=∣α∣∣∣x∣∣。
- 三角不等式:对于任意向量x 和y,∣∣x+y∣∣≤∣∣x∣∣+∣∣y∣∣。
二、矩阵的范数
矩阵的范数也是一种度量矩阵大小的方式。
常见的矩阵范数有以下几种:
- 矩阵的l1 范数:对于矩阵A=(aij)m×n,其l1 范数定义为∣∣A∣∣1=max1≤j≤n∑i=1m∣aij∣,即矩阵每一列元素绝对值之和的最大值。
- 矩阵的l2 范数:也称为谱范数,对于矩阵A,其l2 范数定义为∣∣A∣∣2=λmax(ATA),其中λmax(ATA) 表示矩阵ATA 的最大特征值。
- 矩阵的l∞ 范数:对于矩阵A=(aij)m×n,其l∞ 范数定义为∣∣A∣∣∞=max1≤i≤m∑j=1n∣aij∣,即矩阵每一行元素绝对值之和的最大值。
- 弗罗贝尼乌斯范数(Frobenius norm):对于矩阵A=(aij)m×n,其弗罗贝尼乌斯范数定义为∣∣A∣∣F=∑i=1m∑j=1n∣aij∣2。
矩阵范数的性质:
- 非负性:对于任意矩阵A,∣∣A∣∣≥0,当且仅当A=0 时,∣∣A∣∣=0。
- 齐次性:对于任意矩阵A 和标量α,∣∣αA∣∣=∣α∣∣∣A∣∣。
- 三角不等式:对于任意矩阵A 和B,∣∣A+B∣∣≤∣∣A∣∣+∣∣B∣∣。
- 相容性:对于任意矩阵A 和B,∣∣AB∣∣≤∣∣A∣∣∣∣B∣∣。
向量的范数和矩阵的范数在数值分析、线性代数、优化问题等领域中都有广泛的应用。
# 线性方程组的迭代解法
都是基于不动点,或者说序列收敛的原理进行迭代,所以迭代的前提是递推序列能够收敛。
# 雅可比(Jacobi)迭代法
一、基本原理
对于方程组∑j=1naijxj=bi (i=1,2,⋯,n),记作Ax=b,其中A 为非奇异阵且aii=0 (i=1,2,⋯,n)。
将矩阵A 分裂为A=D−L−U,其中:
D=⎝⎜⎜⎜⎛a11a22⋱ann⎠⎟⎟⎟⎞
是对角矩阵。
L=−⎝⎜⎜⎜⎜⎜⎜⎛0a21a31⋮an10a32⋮an20⋱⋯⋱an,n−10⎠⎟⎟⎟⎟⎟⎟⎞
是下三角矩阵(不包括对角元素)。
U=−⎝⎜⎜⎜⎜⎜⎜⎛0a120a13a23⋱⋯⋯⋮0a1na2nan−1,n0⎠⎟⎟⎟⎟⎟⎟⎞
是上三角矩阵(不包括对角元素)。
将方程组的第i 个方程用aii 去除再移项,得到等价方程组
xi=aii1⎝⎜⎜⎛bi−j=1j=i∑naijxj⎠⎟⎟⎞ (i=1,2,⋯,n)
二、迭代公式
从初始向量x(0)=(x1(0),x2(0),⋯,xn(0))T 开始,根据迭代公式
xi(k+1)=aii1(bi−∑j=1j=inaijxj(k))
进行迭代,其中x(k)=(x1(k),x2(k),⋯,xn(k))T 为第k 次迭代向量。
迭代公式的矩阵形式为
{x(0)x(k+1)=B0x(k)+f(初始向量)
其中B0=I−D−1A=D−1(L+U) 称为雅可比方法迭代矩阵,f=D−1b。
三、特点
- 公式简单,每迭代一次只需计算一次矩阵和向量乘法。
- 在用计算机计算时,需要两组工作单元,以存储x(k) 及x(k+1)。
雅可比迭代法适用于一些系数矩阵具有特定结构的线性方程组求解,但其收敛速度可能较慢,且收敛性取决于系数矩阵的性质。
# 高斯 - 塞得尔 (Gauss-Seidel) 迭代法
高斯 - 塞德尔(Gauss-Seidel)迭代法也是一种求解线性方程组的迭代方法。
一、基本原理
对于线性方程组Ax=b,其中A 是n×n 的非奇异矩阵,x 是n 维未知向量,b 是n 维已知向量。
同样将矩阵A 分解为A=D−L−U,其中:
- D 是对角矩阵,由A 的对角元素组成。
- L 是下三角矩阵(不包括对角元素)。
- U 是上三角矩阵(不包括对角元素)。
将线性方程组Ax=b 改写为(D−L)x=Ux+b,进一步得到x=(D−L)−1Ux+(D−L)−1b.
确切的说是(D−L)x(k+1)=Ux(k)+b, 进一步得到 x(k+1)=(D−L)−1Ux(k)+(D−L)−1b
于是 Gauss-Seidel 迭代公式的矩阵形式为
x(k+1)=Gx(k)+fG=(D−L)−1U,f=(D−L)−1b.
二、迭代公式
从一个初始向量x(0)=(x1(0),x2(0),⋯,xn(0))T 开始,进行迭代。
xi(k+1)=aii1(bi−∑j=1i−1aijxj(k+1)−∑j=i+1naijxj(k)) (i=1,2,⋯,n)。
迭代公式的矩阵形式为
{x(0)x(k+1)=(D−L)−1Ux(k)+(D−L)−1b(初始向量).
三、特点
- 与雅可比迭代法相比,高斯 - 塞德尔迭代法在计算xi(k+1) 时,使用了已经更新的x1(k+1),⋯,xi−1(k+1) 的值,而雅可比迭代法在计算xi(k+1) 时只使用上一次迭代的x(k) 的值。
- 通常情况下,高斯 - 塞德尔迭代法的收敛速度比雅可比迭代法快。
- 但收敛性仍然取决于系数矩阵A 的性质。如果矩阵A 是严格对角占优矩阵或对称正定矩阵等,高斯 - 塞德尔迭代法通常是收敛的。
# 迭代法基本定理
对于一阶定常迭代法x(k+1)=Bx(k)+f,迭代法收敛的充要条件是谱半径ρ(B)<1.
对于一个方阵A,其谱半径ρ(A) 定义为A 的特征值的模的最大值。
首先求出矩阵A 的特征值。
- 求解特征方程∣A−λI∣=0,其中I 是单位矩阵,λ 为待求的特征值。
- 对于n×n 的矩阵,这个特征方程是一个n 次多项式方程,求解这个方程可以得到n 个特征值λ1,λ2,⋯,λn。
然后计算特征值的模∣λi∣。
最后确定谱半径ρ(A)=max{∣λ1∣,∣λ2∣,⋯,∣λn∣},即特征值的模的最大值。
若A 为严格对角占优矩阵则雅可比和高斯 - 赛德尔迭代法均收敛
优点:充分利用已经获得的最新数据
缺点:更新过程顺序执行,不适合并行
# 超松弛(SOR)迭代法
一、常见的线性方程组求解方法除了高斯 - 塞德尔迭代法还有:
- 直接法:如高斯消元法等,通过有限步运算直接求得方程组的精确解。适用于系数矩阵规模较小或结构特殊的情况。
- 雅可比迭代法:将系数矩阵分裂为对角矩阵、下三角矩阵和上三角矩阵之和,通过迭代逐步逼近方程组的解。
- 共轭梯度法:一种适用于求解对称正定线性方程组的迭代方法,具有收敛速度快的特点。
二、超松弛(SOR)迭代法
基本思想:
SOR 迭代法是对高斯 - 塞德尔迭代法的一种修正,旨在通过引入一个控制因子(松弛因子)ω 来更好地控制收敛速度。
记Δx(k)=x(k+1)−x(k) 为迭代格式的修正量,将迭代格式看成是前一步值加上一个修正量得到的。在修正量Δx(k) 上乘以一个控制因子 ω。
当 ω>1 时为超松弛迭代;当 ω<1 时为低松弛迭代。
公式推导:
若x(k+1) 为雅可比迭代格式,则有:
x(k+1)=(1−ω)x(k)+ω((I−D−1A)x(k)+D−1b)=(I−ωD−1A)x(k)+ωD−1b,称为阻尼雅可比法。
若x(k+1) 为高斯 - 塞德尔迭代格式,则有:
x(k+1)=(1−ω)x(k)+ω(D−1(Lx(k+1)+Dx(k)−1))=(D−ωL)−1((1−ω)D+ωU)x(k)+ω(D−ωL)−1,称为逐次超松弛迭代法(SOR)
B=L_{\omega}=(D-\omega L)^{-1}((1-\omega)D+\omega U),\quad f=\omega(D-\omega L)^
迭代过程:
- 首先用高斯 - 塞德尔迭代法定义辅助量x~i(k+1)=(bi−∑j=1i−1aijxj(k+1)−∑j=i+1naijxj(k))/aii。
- 再由x(k) 与x~(k+1) 的加权平均定义x(k+1),即:xi(k+1)=xi(k)+ω(x~i(k+1)−xi(k))=(1−ω)xi(k)+ωx~i(k+1)=xi(k)+ω(bi−∑j=1i−1aijxj(k+1)−∑j=inaijxj(k))/aii.
笔算直接用公式就行了,写代码用矩阵分解
收敛条件:
- SOR 迭代法收敛的必要条件是0<ω<2。
- 若Ax=b,且A 为对称正定阵,0<ω<2,则 SOR 迭代法收敛。
- 若Ax=b,且A 为严格对角占优矩阵,0<ω≤1,则 SOR 迭代法收敛。
# 非线性方程与方程组的数值解法
# 二分法
非线性方程二分法求根是一种用于求解方程f(x)=0 的数值方法,主要适用于求解在给定区间[a,b] 上连续且f(a) 与f(b) 异号的情况。
一、基本原理
- 由于函数f(x) 在区间[a,b] 上连续且f(a) 与f(b) 异号,根据零点定理可知,在区间[a,b] 内至少存在一个根。
- 取区间的中点c=(a+b)/2.
- 然后判断f(c) 的值:
- 如果f(c)=0,那么c 就是方程的根。
- 如果f(c) 与f(a) 异号,则说明根在区间[a,c] 内,此时令b=c.
- 如果f(c) 与f(b) 异号,则说明根在区间[c,b] 内,此时令a=c.
- 重复上述步骤,不断缩小根所在的区间,直到达到所需的精度。
二、精度分析
- 每次迭代后,区间长度变为原来的一半。
- 经过k 次迭代后,区间长度为(b−a)/2k.
- 此时,根的近似值xk 与精确值x∗ 之间的误差满足∣x∗−xk∣≤(b−a)/2k+1.
- 给定精度ϵ,只需使(b−a)/2k+1≤ϵ,可求得k 值。即有k≥log2ϵb−a−1.
三、优点和缺点
优点:
- 二分法是一种可靠的方法,只要满足条件,一定能收敛到方程的根。
- 算法简单,容易实现。
缺点:
- 收敛速度相对较慢,是线性收敛。
- 要求函数在区间上连续且两端点函数值异号,条件较为严格。
# 不动点迭代及其收敛性
一、不动点迭代的概念
对于方程f(x)=0,通过变换将其转化为等价形式x=φ(x)。若所求的x 满足f(x∗)=0,则x∗=φ(x∗),此时x∗ 为函数φ(x) 的一个不动点。构造迭代方程xk+1=φ(xk),若对任何x∈[a,b],序列{xk} 有极限k→∞limxk=x∗,则称该迭代方程收敛,这种迭代法称为不动点迭代法.
二、收敛性分析
- 压缩映象原理:
- 设φ(x)∈C[a,b] 满足以下条件:
- 对任意x∈[a,b],有a≤φ(x)≤b。
- 存在常数0<L<1,对任意x,y∈[a,b] 有∣φ(x)−φ(y)∣≤L∣x−y∣。
- 则φ(x) 在[a,b] 存在唯一不动点x∗,且对任意x0∈[a,b],由xk+1=φ(xk) 得到的序列{xk} 有k→∞limxk=x∗,并有误差估计∣xk−x∗∣≤1−LLk∣x1−x0∣。
- 条件∣φ(x)−φ(y)∣≤L∣x−y∣:
- 设φ(x)∈C1[a,b] 且对任意x∈[a,b] 都有∣φ′(x)∣≤L<1。
- 根据拉格朗日中值定理,对任意x,y∈[a,b],有∣φ(x)−φ(y)∣=∣φ′(ξ)(x−y)∣≤L∣x−y∣,其中ξ∈(a,b)。
- 故上述定理中的条件常被表述成∣φ′(x)∣<1。
三、总结
不动点迭代法是一种通过不断迭代函数φ(x) 来逼近方程f(x)=0 的根的方法。其收敛性取决于函数φ(x) 的性质,特别是满足一定的压缩条件时,迭代序列能够收敛到唯一的不动点。在实际应用中,需要根据具体问题选择合适的变换函数φ(x),并分析其收敛性,以确保迭代法的有效性。
# 不动点加速迭代
斯特芬森(Steffensen)迭代法是一种加速迭代收敛的方法。
一、基本原理
对于方程f(x)=0,将其转化为等价形式x=φ(x),构造迭代公式xn+1=φ(xn)。斯特芬森迭代法是在这个基础上进行改进。
设yn=φ(xn),zn=φ(yn),则斯特芬森迭代公式为:
xn+1=xn−zn−2yn+xn(yn−xn)2
# 牛顿迭代法
# 牛顿迭代法原理
- 基本思路:
- 牛顿法的核心是将非线性方程f(x)=0 线性化。
- 推导过程:
- 假设方程f(x)=0 有根xk,将f(x) 在xk 处展开,得到f(x)≈f(xk)+f′(xk)(x−xk)。
- 由于f(x)=0,所以可以近似表示为f(xk)+f′(xk)(x−xk)=0。
- 化简这个等式得到x=xk−f′(xk)f(xk)。
- 迭代公式:
- 根据上述化简结果,牛顿法的迭代公式为xk+1=xk−f′(xk)f(xk),其中k=0,1,⋯。
牛顿法通过不断迭代这个公式来逼近非线性方程的根。每次迭代都基于当前的近似根xk,利用函数值f(xk) 和导数值f′(xk) 来计算下一个更接近真实根的近似值xk+1.![image-20241114215749648]()
牛顿迭代法的收敛性:牛顿迭代格式在x∗ 附件至少平凡收敛。
# 简化牛顿法
简化牛顿法又称平行弦法
定义
简化牛顿法是将牛顿迭代公式φ(x)=x−f′(x)f(x) 中的f′(x) 用常数C 代替,得到新的迭代公式。
收敛性
为了在x∗(根的真实值)附近有更好的收敛性,令∣φ′(x∗)∣=∣∣∣∣1−Cf′(x∗)∣∣∣∣=0,由此得到C=f′(x∗)。然而在实际应用中,很难得到x∗ 的值,所以通常取C=f′(x0),其中x0 是初始值。
<img src="数值计算下.assets/image-20241114221700148.png" alt="image-20241114221700148" style="zoom:50%;" />
引例 Sigmod
题目内容如下:
用牛顿迭代求解函数f(x)=sig(x)−0.5 的根,其中sig(x)=1+exex 被称为 sigmoid 函数。
解答
- 由图像知,x=0 是f(x) 的根。
- 牛顿迭代格式为:
xk+1=xk−f′(xk)f(xk)=xk−exk(1+exk1−(1+exk)2exk)1+exkexk−0.5=xk−exk((1+exk)21+exk−exk)1+exkexk−0.5=xk−(1+exk)2exk1+exkexk−0.5=xk−(2exke2xk−1)
选不同初值迭代结果如下:初值x0/k | 0 | 1 | 2 | 3 | 4 |
---|
x0=1.5 | 1.500 000 | -0.629 280 | 0.042 362 | -0.000 013 | 0.000 000 |
x0=2.5 | 2.500 000 | -3.550 205 | 13.845 65 | -515287.6 | inf |
<img src="数值计算下.assets/image-20241114221906890.png" alt="image-20241114221906890" style="zoom:33%;" />
- 平行弦法
选择常数C
- 一般取C=f′(x0),这里我们需要分别对x0=1.5 和x0=2.5 进行计算。
- 当x0=1.5 时:
- f′(1.5)=(1+e1.5)2e1.5≈0.22(保留两位小数)
- 迭代公式为x_{k + 1}=x_{k}-\frac{\frac{e^{x_{k}}}{1 + e^{x_{k}}}-0.5}
- 当x0=2.5 时:
- f′(2.5)=(1+e2.5)2e2.5≈0.08(保留两位小数)
- 迭代公式为x_{k + 1}=x_{k}-\frac{\frac{e^{x_{k}}}{1 + e^{x_{k}}}-0.5}
迭代计算(以x0=1.5 为例)
- k=0 时,x0=1.5
- k=1 时:
- x1=x0−0.221+ex0ex0−0.5=1.5−0.221+e1.5e1.5−0.5≈1.5−0.220.31−0.5≈1.5+0.86=2.36
- k=2 时:
- x_{2}=x_{1}-\frac{\frac{e^{x_{1}}}{1 + e^{x_{1}}}-0.5}{0.22}=2.36-\frac{\frac{e^{2.36}}{1 + e^{2.36}}-0.5}
- 继续计算下去,直到满足收敛条件。
迭代计算(以x0=2.5 为例)
- k=0 时,x0=2.5
- k=1 时:
- x1=x0−0.081+ex0ex0−0.5=2.5−0.081+e2.5e2.5−0.5≈2.5−0.080.92−0.5≈2.5−5.25=−2.75
- k=2 时:
- x_{2}=x_{1}-\frac{\frac{e^{x_{1}}}{1 + e^{x_{1}}}-0.5}{0.08}=-2.75-\frac{\frac{e^{- 2.75}}{1 + e^{- 2.75}}-0.5}
- 继续计算下去,直到满足收敛条件.
通过不断迭代,可以逐步逼近方程f(x)=sig(x)−0.5=0 的根.
# 牛顿下山法
图片内容介绍了一种改进的牛顿法,即在下山法保证函数值稳定下降的前提下,用牛顿法加快收敛速度,具体如下:
基本原理
先使用牛顿法计算xˉk+1:
x~k+1=xk−f′(xk)f(xk)
再对xk 和xˉk+1 加权平均得到新的x_
xk+1=λx~k+1+(1−λ)xk,0<λ⩽1
xk+1=xk+1+λf′(xk)f(xk),0<λ⩽1
并且要满足∣f(xk+1)∣<∣f(xk)∣,这样能保证函数值在迭代过程中是下降的。
参数λ 的确定方法
- 开始时λ=1,如果不满足∣f(xk+1)∣<∣f(xk)∣,则逐次将λ 减半,直到∣f(xk+1)∣<∣f(xk)∣ 成立。
- 每轮都将λ 置1.
这种方法通过引入下山因子λ,对牛顿法的迭代步长进行调整,改善了牛顿法对初值敏感的问题,提高了迭代收敛的可能性。
# 弦截法
图中介绍了弦截法的相关内容:
背景
- 牛顿法在计算 f′(xk) 时需要用到导函数的解析形式,并且计算量大。
- 简化牛顿法的收敛性为线性收敛。
弦截法的原理
- 弦截法使用差商近似 f′(xk).
- 差商公式为:
f[xk−1,xk]=xk−xk−1f(xk)−f(xk−1)
弦截法的迭代公式
- 弦截法的迭代公式为:
xk+1=xk−f[xk−1,xk]f(xk)=xk−f(xk)f(xk)−f(xk−1)xk−xk−1
弦截法通过差商近似导函数,避免了计算导函数的解析形式,从而减少了计算量。
# 非线性方程组数值求解
# 非线性方程组的牛顿迭代法
基本原理
- 对于非线性方程组F(x)=0,其中x=(x1,x2,⋯,xn)T 是n 维向量,F=(F1,F2,⋯,Fn)T 是n 维向量函数.
- 牛顿迭代法的基本思想是将非线性方程组在某点附近线性化,然后求解线性方程组来得到下一个迭代点。
- 在点x(k) 处,对F(x) 进行泰勒展开,忽略二阶及以上的高阶项,得到F(x)≈F(x(k))+J(x(k))(x−x(k)).,其中J(x(k)) 是F(x) 在x(k) 处的雅可比矩阵,其元素Jij(x(k))=∂xj∂Fi(x(k))。
- 令F(x)=0,则线性化后的方程为F(x(k))+J(x(k))(x−x(k))=0,由此得到牛顿迭代公式.x(k+1)=x(k)−J−1(x(k))F(x(k)).
变换得:F(x(k))+F′(x(k))Δx(k)=0,F′=J,其中k=0,1,⋯
# 非线性方程组的不动点迭代
非线性方程组的一般形式
- 非线性方程组的一般形式为:
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧f1(x1,x2,⋯,xn)=0f2(x1,x2,⋯,xn)=0⋯fn(x1,x2,⋯,xn)=0
- 可以将其构造为如下的形式结构:
G(X)=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x1=φ1(x1,x2,⋯,xn)x2=φ2(x1,x2,⋯,xn)⋯xn=φn(x1,x2,⋯,xn)
- 其中X=[x1,x2,⋯,xn]T。如果存在X∗,使得X∗=G(X∗),则称X∗ 为上述形式的不动点。
不动点迭代公式
- 可以构造如下的迭代公式:
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x1(k+1)=φ1(x1(k),x2(k),⋯,xn(k))x2(k+1)=φ2(x1(k),x2(k),⋯,xn(k))⋯xn(k+1)=φn(x1(k),x2(k),⋯,xn(k))
不动点迭代法的收敛性判定方法
# 题目
用高斯消元法解线性方程组:
⎩⎪⎪⎨⎪⎪⎧x1+2x2+3x3=82x1+6x2+11x3=253x1+10x2+21x3=44
x1=1,x2=2,x3=1
用 LU 分解法求解方程组:
⎣⎢⎢⎢⎡12352926403124110741549135⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡x1x2x3x4⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡1234⎦⎥⎥⎥⎤
计算y 的值:计算可得y=[1,0,0,−1]T
求解方程组Ux=y:
\begin{bmatrix}1&2&3&4\\0&5&6&7\\0&0&8&9\\0&0&0&10\end{bmatrix}\begin{bmatrix}x_{1}\\x_{2}\\x_{3}\\x_{4}\end{bmatrix}=\begin{bmatrix}1\\0\\0\\-1\end
首先对系数矩阵A=⎣⎢⎢⎢⎡12352926403124110741549135⎦⎥⎥⎥⎤ 进行 LU 分解。
设A=LU,其中L 是单位下三角矩阵,U 是上三角矩阵。
对于i=1,u1j=a1j,lij=u11aij(i>1)。
对于i>1,uij=aij−∑k=1i−1likukj,lij=uii1(aij−∑k=1i−1likukj)(j<i)。
计算可得:
u11=1,u12=2,u13=3,u14=4。
l21=12=2,u22=9−2×2=5,u23=12−2×3=6,u24=15−2×4=7。
l31=13=3,l32=526−3×2=520=4,u33=41−3×3−4×6=8,u34=49−3×4−4×7=9。
l41=15=5,l42=540−5×2=6,l43=8107−5×3−6×6=8107−15−36=856=7,u44=135−5×4−6×7−7×9=10。
所以L=⎣⎢⎢⎢⎡1235014600170001⎦⎥⎥⎥⎤,U=⎣⎢⎢⎢⎡10002500368047910⎦⎥⎥⎥⎤。
然后求解方程组Ly=b,其中b=⎣⎢⎢⎢⎡1234⎦⎥⎥⎥⎤。
y1=1。
y2=2−2y1=2−2×1=0。
y3=3−3y1−4y2=3−3×1−4×0=0。
y4=4−5y1−6y2−7y3=4−5×1−6×0−7×0=−1。
最后求解方程组Ux=y,其中y=⎣⎢⎢⎢⎡100−1⎦⎥⎥⎥⎤。
x4=10−1=−101。
x3=8y3−9x4=80−9×(−101)=8109=809。
x2=5y2−6x3−7x4=50−6×809−7×(−101)=5−4027+107=5−4027+4028=2001。
x1=y1−2x2−3x3−4x4=1−2×2001−3×809−4×(−101)=1−1001−8027+104=800800−8−270+320=400421。
综上,方程组的解为x=⎣⎢⎢⎢⎡8081401809−101⎦⎥⎥⎥⎤。
使用平方根分解矩阵
⎣⎢⎡412−161237−43−16−4398⎦⎥⎤
\begin{bmatrix}2&6&-8\\6&1&5\\-8&5&3\end
首先求左上对角第一个元素l11:
l11=a11=4=2.
接着求第一行的其他元素l12 和l13:
l12=l11a12=212=6.
l13=l11a13=2−16=−8.
根据对称性可得第一列的元素l21 和l31:
由于l21=l12=6.
l31=l13=−8.
然后求第二个对角元素l22:
l22=a22−∑k=11l2k2=37−l212=37−62=37−36=1.
接着求第二行的其他元素l23:
l23=l221(a23−∑k=11l2kl3k)=11(−43−(6×(−8)))=−43+48=5.
根据对称性可得第三列的对应元素l32:
l32=l23=5.
最后求第三个对角元素l33:
l33=a33−∑k=12l3k2=98−l312−l322=98−(−8)2−52=98−64−25=9,所以l33=3.
综上,分解后的下三角矩阵L=⎣⎢⎡26−8015003⎦⎥⎤.
题目:对矩阵A=⎣⎢⎡412−161237−43−16−4398⎦⎥⎤ 进行LDLT 分解。
借助杜利特尔分解,有
\begin{align*} A&=\begin{bmatrix}1&0&0\\l_{21}&1&0\\l_{31}&l_{32}&1\end{bmatrix}\begin{bmatrix}d_{1}&d_{1}l_{21}&d_{1}l_{31}\\0&d_{2}&d_{2}l_{32}\\0&0&d_{3}\end{bmatrix}\\ &=\begin{bmatrix}1&0&0\\3&1&0\\-4&5&1\end{bmatrix}\begin{bmatrix}4&4×3&4×(-4)\\0&d_{2}&d_{2}l_{32}\\0&0&d_{3}\end{bmatrix}\\ &=\begin{bmatrix}1&0&0\\3&1&0\\-4&5&1\end{bmatrix}\begin{bmatrix}4&12&-16\\0&1&1×5\\0&0&9\end{bmatrix}\\ &=\begin{bmatrix}1&0&0\\3&1&0\\-4&5&1\end{bmatrix}\begin{bmatrix}4&12&-16\\0&1&5\\0&0&9\end{bmatrix} \end{align*}
所以有L=⎣⎢⎡13−4015001⎦⎥⎤,D=⎣⎢⎡400010009⎦⎥⎤.
计算下面矩阵的矩阵二范数 (谱范数)
A=[1324].
计算矩阵A 的转置AT=[1234]。
计算ATA=[1234][1324]=[10141420]。
求ATA 的特征值。
特征方程为∣ATA−λI∣=0,即∣∣∣∣∣10−λ141420−λ∣∣∣∣∣=0。
- 展开可得(10−λ)(20−λ)−196=0,即λ2−30λ+200−196=0,λ2−30λ+4=0。
- 求解这个二次方程,根据求根公式λ=230±302−4×4=230±900−16=230±884=15±221。
矩阵A 的二范数∣∣A∣∣2=λmax(ATA)=15+221.
所以,矩阵A=[1324] 的二范数约为15+221。
求解矩阵A 的谱范数。矩阵A=[2112].
求解特征方程∣A−λI∣=0,即∣∣∣∣∣2−λ112−λ∣∣∣∣∣=0.
展开可得(2−λ)2−1=0,即4−4λ+λ2−1=0,λ2−4λ+3=0.
因式分解为(λ−1)(λ−3)=0,解得特征值λ1=1,λ2=3.
特征值的模分别为∣λ1∣=1,∣λ2∣=3.
所以矩阵A 的谱半径ρ(A)=max{1,3}=3.
题目:求方程f(x)=x3−x−1=0 在区间[1.0,1.5] 内的一个实根,要求准确到小数点后第 2 位。
二分法求解过程:(可以通过精度判断确认最大迭代次数)
迭代次数 | 区间[a,b] | 中点c=(a+b)/2 | f(c) | 判断 |
---|
1 | [1.0,1.5] | 1.25 | f(1.25)=1.253−1.25−1≈−0.297 | 根在[1.25,1.5] 内,令a=1.25 |
2 | [1.25,1.5] | 1.375 | f(1.375)=1.3753−1.375−1≈0.225 | 根在[1.25,1.375] 内,令b=1.375 |
3 | [1.25,1.375] | 1.3125 | f(1.3125)=1.31253−1.3125−1≈−0.051 | 根在[1.3125,1.375] 内,令a=1.3125 |
4 | [1.3125,1.375] | 1.34375 | f(1.34375)=1.343753−1.34375−1≈0.083 | 根在[1.3125,1.34375] 内,令b=1.34375 |
5 | [1.3125,1.34375] | 1.328125 | f(1.328125)=1.3281253−1.328125−1≈0.014 | 根在[1.3125,1.328125] 内,令b=1.328125 |
6 | [1.3125,1.328125] | 1.3203125 | f(1.3203125)=1.32031253−1.3203125−1≈−0.019 | 根在[1.3203125,1.328125] 内,令a=1.3203125 |
此时区间长度为1.328125−1.3203125=0.0078125<0.5×10−2,满足精度要求。
所以方程的根约为1.32(精确到小数点后第 2 位)。
题目提取:
为求方程x3−x2−1=0 在x0=1.5 附近的一个根。设将方程改写成下列等价形式,并建立相应的迭代公式:
- x=1+1/x2,迭代公式xk+1=1+1/xk2。
- x3=1+x2,迭代公式xk+1=31+xk2。
- x2=x−11,迭代公式xk+1=1/xk−1。
试分析每种迭代公式的收敛性,并选取一种公式求出具有四位有效数字的近似根。
解答过程:
考虑x0=1.5 的邻域[1.3,1.6]。
对于迭代公式xk+1=1+1/xk2:
- 当x∈[1.3,1.6] 时,φ(x)=1+1/x2∈[1.3,1.6]。
- 计算∣φ′(x)∣=∣−x32∣≤1.322≈0.910=L<1,故该迭代在[1.3,1.6] 上整体收敛。
对于迭代公式xk+1=31+xk2:
- 当x∈[1.3,1.6] 时,φ(x)=31+x2∈[1.3,1.6]。
- 计算∣φ′(x)∣=32∣(1+x2)2/3x∣<32(1+1.32)2/31.6≈0.522=L<1,故该迭代在[1.3,1.6] 上整体收敛。
对于迭代公式xk+1=1/xk−1:
- 当x∈[1.3,1.6] 时,φ(x)=x−11∈[1.29,1.83]⊈[1.3,1.6]。
- 计算∣φ′(x)∣=∣2(x−1)3/2−1∣>2(1.6−1)1>1,故该迭代不一定收敛。
由于迭代公式xk+1=31+xk2 中的L 较小,故取该迭代公式计算。
要具有四位有效数字,只需∣xk−x∗∣≤1−LL∣xk−xk−1∣<0.5×10−3,即∣xk−xk−1∣<L1−L×0.5×10−3<0.5×10−3.
取x0=1.5 计算:
k | \boldsymbol |
---|
1 | 1.481248034 |
2 | 1.472705730 |
3 | 1.468817314 |
4 | 1.467047973 |
5 | 1.466243010 |
6 | 1.465876820 |
由于∣x6−x5∣<0.5×10−3,故可取x∗≈x6=1.466.
斯特芬森迭代法求解方程x3−x−1=0
首先将方程转化为x=3x+1,即φ(x)=3x+1。
取初始值x0=1.5。
进行斯特芬森迭代:
- 先计算yn=φ(xn),zn=φ(yn)。
- 然后根据斯特芬森迭代公式xn+1=xn−zn−2yn+xn(yn−xn)2 进行迭代。
具体计算过程如下:
当n=0 时:
- x0=1.5。
- y0=φ(x0)=31.5+1≈1.35721。
- z0=φ(y0)=31.35721+1≈1.33086。
- x1=x0−z0−2y0+x0(y0−x0)2=1.5−1.33086−2×1.35721+1.5(1.35721−1.5)2≈1.34711。
当n=1 时:
- x1≈1.34711。
- y1=φ(x1)=31.34711+1≈1.32794。
- z1=φ(y1)=31.32794+1≈1.32472。
- x2=x1−z1−2y1+x1(y1−x1)2=1.34711−1.32472−2×1.32794+1.34711(1.32794−1.34711)2≈1.32588。
继续进行迭代,直到满足所需的精度要求。
通过斯特芬森迭代法,可以逐步逼近方程x3−x−1=0 的根。
例: 根据牛顿法写出求解a(a>0)的计算公式,并计算115。
解:
设f(x)=x2−a,求a 即计算f(x) 的根。
根据牛顿迭代公式可得:
xk+1=xk−f′(xk)f(xk)=xk−2xkxk2−a=21(xk+xka)
令a=115,有以下迭代结果:
k | 0 | 1 | 2 | 3 | 4 |
---|
x_ | 10 | 10.750 000 | 10.723 837 | 10.723 805 | 10.723 805 |
题目:用牛顿法求解方程组:
{x12−10x1+x22+8=0x1x22+x1−10x2+8=0
解答
选择初始值x(0)=(0,0)T,解线性方程组F′(x(0))Δx(0)=−F(x(0)),即
[−1010−10][Δx1(0)Δx2(0)]=[−8−8]
解得Δx(0)=(0.8,0.88)T,然后x(1)=x(0)+Δx(0)。
k | x_{1}^ | x_{2}^ |
---|
0 | 0 | 0 |
1 | 0.80 | 0.88 |
2 | 0.9917872 | 0.9917117 |
3 | 0.9999752 | 0.9999685 |
4 | 1.0000000 | 1.0000000 |