线性方程组迭代解法
迭代法概念
对于线性方程组
Ax=b
将其转化为等式
x=Bx+f
得到向量序列
x(n)=Bx(n−1)+b
如果迭代收敛, 则存在极限
i→∞limx(i)=x
其中 B,f 可在满足原式的条件下任取, x0 通常取 0
迭代构建
- 构建
A=M−N
得到分裂矩阵 M, 通常 M 为非奇异矩阵, 并且易于求逆, 如对角矩阵 2. 方程转化为
Mxx=Nx+b=M−1Nx+M−1b
- 得到迭代矩阵
B=I−M−1A
- 得到
f=M−1b
迭代法编程
def iter_meth(xk, eps, fun, test):
while True:
xk1 = fun(xk)
if test(xk1, xk) < eps:
break
xk = xk1
return xk1
对于向量序列, 取误差测试函数为范数运算
test(x(k+1),x(k))=x(k+1)−x(k)v=1,∞
雅可比迭代法
将 A 的对角取出作为分裂矩阵 M 对于矩阵 A 与元素 aij, 定义
M=D=a11a22⋱ann
L=0−a21⋮−an10⋮−an2⋱…0
U=0−a120……⋱−a1n−a2n⋮0
A=D−L−U
得到向量序列
AxDxx=b=(L+U)x+b=D−1(L+U)x+D−1b
因此
B=D−1(L+U)
f=D−1b
高斯-赛德尔迭代法
将 A 的下半部分取出作为分裂矩阵 M 对于矩阵 A 与元素 aij, 定义
M=D−L
B=G=I−(D−L)−1A=(D−L)−1U
- 得到向量序列
Dx(k+1)=Lx(k+1)+Ux(k)+b
- 对于向量序列中的向量 x(k+1) 中的元素 xi(k+1)
aiixi(k+1)=bi−j=1∑i−1aijxj(k+1)−j=i+1∑naijxj(k)
可以发现迭代式具有以下特点:
- 由于 L,U 是 A 三角部分元素取负, 因此具体公式中要取负号
- xi(k+1) 的值与 xj(k+1)(j≤i−1) 和 xj(k)(j≥i+1) 有关, 因此仅需要一个数组保存 x(k+1) 的 j≤i−1 部分与 x(k) 的 j≥i+1 部分
- 不需要具体计算矩阵 B
迭代法的收敛性
向量序列的收敛性
对于向量数列的极限 x∗, 定义序列误差 ε(k+1)=x(k+1)−x∗ 因此
ε(k+1)+x∗=B(ε(k)+x∗)+fε(k+1)=Bε(k)=Bk+1ε(0)
可得向量序列收敛的条件为
k→∞limε(k)=0→k→∞limBkx=0
范数与特征值
由特征值定理可得
λx=Ax
取范数运算后, 根据柯西不等式有
∣λ∣x=λx=Ax≤Ax
因此
λ≤ρ(A)≤A
向量序列收敛的条件
根据向量序列收敛的基本条件与特征值的性质可以推导出
k→∞limBkx=0→ρ(A)≤1→∃v,Bv≤1
为了便于计算, 通常采用 v=1,∞
向量序列的迭代速度
雅可比迭代法与高斯-赛德尔迭代法的收敛性
除了判断 B, 对于特定的迭代法, 还可以从 A 直接判断收敛性
对角占优矩阵
对于矩阵 A 与元素 aij, 定义
- 严格对角占优矩阵
∣aii∣>j=i,j=1∑n∣aij∣
- 弱对角占优矩阵
∣aii∣≥j=i,j=1∑n∣aij∣
要求不等式至少严格成立一次
当 A 满足以下条件时, 雅可比迭代法与高斯-赛德尔迭代法均收敛
- A 为严格对角占优矩阵
- A 为弱对角占优矩阵, 且非奇异
- A 为对称正定矩阵
- 对于不满足条件的线性方程组可通过变形 (交换, 加减) 得到符合条件的矩阵
超松弛迭代法
选取分裂矩阵为
M=ω1(D−ωL)
类似高斯-赛德尔迭代法, 可得到向量序列
Dx(k+1)=ω(Lx(k+1)+Ux(k)+b)+(1−ω)Dx(k)
类似的有
aiixi(k+1)=ω(bi−j=1∑i−1aijxj(k+1)−j=i+1∑naijxj(k))+(1−ω)aiixi(k)
当 ω=1 即高斯-赛德尔迭代法, 一般取 ω∈(1,1.6), 合适的 ω 可以加快收敛速度
超松弛迭代法的收敛条件
收敛条件与高斯-赛德尔迭代法相同, 此外还要求
ω∈(0,2)