线性方程组与矩阵的基本概念
线性方程组形如下面的样子:
⎩⎨⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋯am1x1+am2x2+⋯+amnxn=bm
或矩阵形式:
Ax=b
- 若m>n,称为超定方程组,一般无解,可以考虑最小二乘解
- 若m<n,一般有无穷多解,可以考虑约束优化问题
现在讨论的情况均假定m=n,即要求
A∈Rn×n
b∈Rn
基础矩阵概念复习
- 对称矩阵:AT=A
- 对称正定矩阵:AT=A且∀x=0, xTAx>0
- 正交矩阵:AT=A−1
- 顺序主子阵:左上角的方块;其行列式称为顺序主子式
向量的范数
定义(一般的范数)
对线性空间V,若一个映射∣∣⋅∣∣: V→R满足:
- 正定性:∀x∈V, ∣∣x∣∣≥0,当且仅当x=0时取等
- 正齐次性:∣∣αx∣∣=∣α∣⋅∣∣x∣∣
- 三角不等式:∀x,y∈V, ∣∣x+y∣∣≤∣∣x∣∣+∣∣y∣∣
则称该映射是一个范数,此空间是一个赋范线性空间
常用的向量范数包括:
- p-范数:∣∣x∣∣p=(i=1∑n∣xi∣p)1/p
- 内积范数:对一个内积⟨⋅,⋅⟩,∣∣x∣∣=⟨x,x⟩
- 对常用内积⟨x,y⟩=xTy而言,这等价于2-范数
定义(范数的等价性)
若对两种范数∣∣⋅∣∣s和∣∣⋅∣∣t,有
∃c1,c2>0, ∀x∈V, c1∣∣x∣∣s≤∣∣x∣∣t≤c2∣∣x∣∣s
则称两种范数等价
注 范数等价意味着用这两种范数定义的极限、连续等等概念都相同
定理 Rn上的一切范数等价
注 这让我们证明一些极限问题时可以任意选择一种范数
矩阵的范数
定义(矩阵范数)
矩阵范数需要满足向量范数的正定、正齐次、三角不等式三条性质,同时增加乘法限制:
∀A,B∈Rn×n, ∣∣AB∣∣≤∣∣A∣∣ ∣∣B∣∣
∀A∈Rn×n, x∈Rn, ∣∣Ax∣∣≤∣∣A∣∣ ∣∣x∣∣
注 上述第二条称为相容性条件,它建立了矩阵范数和向量范数的联系
矩阵的默认范数为算子范数,它根据某种向量范数∣∣⋅∣∣v来定义:
∣∣A∣∣v=v=0max∣∣v∣∣v∣∣Av∣∣v
算子范数的含义是矩阵作为一种作用于向量上的算子,对向量的最大拉伸倍数
向量范数使用2-范数时,∣∣A∣∣v表示椭圆xTA−TA−1x=1的半长轴长度
根据算子范数的定义,很容易证明算子范数是一种合要求的矩阵范数
常用矩阵范数:
- 1-范数:∣∣A∣∣1=jmaxi=1∑n∣aij∣
- ∞-范数:∣∣A∣∣∞=imaxj=1∑n∣aij∣
- 2-范数:矩阵ATA的最大特征值的算术平方根
- Frobenius范数:∣∣A∣∣F=i∑j∑aij2=tr(ATA)
上述除了Frobenius范数以外都是算子范数,矩阵的p-范数表示利用向量p-范数得到的算子范数。证明如下:
矩阵的1-范数
∣∣A∣∣1=v=0max∣∣v∣∣1j∑vjaj1
由于
∣∣v∣∣1j∑vjaj1≤∣v1∣+⋯+∣vn∣∣v1∣ ∣∣a1∣∣1+⋯+∣vn∣ ∣∣an∣∣1≤jmax∣∣aj∣∣1
且此不等式在v=ejm,其中jm=argmaxj(∣∣aj∣∣1)时取等,于是
∣∣A∣∣1=v=0max∣∣v∣∣1j∑vjaj1=jmax∣∣aj∣∣1
矩阵的∞-范数
∣∣A∣∣∞=v=0maxjmax∣vj∣imaxj∑aijvj
考虑当i固定,v可变时,下式的最大值:
jmax∣vj∣j∑aijvj
显然,当所有vj取绝对值相同,且符号使分子的各和项同号时取最大,最大值为
j∑∣aij∣
于是
∣∣A∣∣∞=imaxj∑∣aij∣
矩阵的2-范数
取∣∣v∣∣2∣∣Av∣∣2的最大值等价于取
∣vTv∣∣vTATAv∣
的最大值
由于ATA实对称,可以用其特征向量构成一组标准正交基{x1,⋯,xn},在此基上分解v,得到
v=v1x1+⋯+vnxn
于是
ATAv=λ1v1x1+⋯+λnvnxn
由于
xiTxj={0,1,i=ji=j
因此
∣vTv∣∣vTATAv∣=∣v12+⋯+vn2∣∣λ1v12+⋯+λnvn2∣
由于ATA半正定
∣vTv∣∣vTATAv∣=∣v12+⋯+vn2∣∣λ1v12+⋯+λnvn2∣=v12+⋯+vn2λ1v12+⋯+λnvn2≤λmax
当v是λmax对应的特征向量时取等
线性方程组求解问题的敏感性
考虑以下问题:
Ax=b
当右端发生扰动时:
A(x+Δx)=b+Δb
根据线性性:
AΔx=Δb
于是问题的条件数
cond=∣∣Δb∣∣/∣∣b∣∣∣∣Δx∣∣/∣∣x∣∣≤∣∣A∣∣ A−1
定义矩阵的条件数为
cond(A)=∣∣A∣∣ A−1
条件数较大的矩阵对应着很病态的求解问题,称之为病态矩阵
定理
cond(A)=v=0min∣∣v∣∣∣∣Av∣∣v=0max∣∣v∣∣∣∣Av∣∣
证明是容易的
注 定理说明条件数表示矩阵对单位圆的扭曲程度,它的值为比矩阵作用在单位圆上得到的椭圆的半长轴与半短轴之比
定义奇异矩阵的条件数为+∞
定理(矩阵条件数的性质)
- cond(A)≥1
- cond(A−1)=cond(A)
- cond(cA)=cond(A), c=0
- 单位阵条件数为1
- 对角阵条件数为对角元的最大绝对值与最小绝对值之比
- 2-范数下条件数是ATA的最大特征值与最小特征值之比的算术平方根
- 2-范数下乘正交矩阵不改变条件数
高斯消去法
消去过程:将增广矩阵的系数矩阵部分变为上三角
回代过程:解上三角方程组
在第k步消去前的主元akk不能为0,否则无法消去
消去过程可以使用原地工作,不消耗额外的存储空间
计算复杂度为O(n3)
LU分解
以下过程为矩阵的LU分解:
A=LU
其中L为单位下三角矩阵,U为上三角矩阵
LU分解可以通过在高斯消去法的同时记录消去的过程而得到,这种方法在线性代数课程中已经有过充分介绍,这里不再赘述
定理(LU分解的条件) 对方阵A∈Rn×n,其存在唯一的LU分解当且仅当执行高斯消去过程中第k步消去前的主元akk(k)=0, ∀k=1,⋯,n−1
直接LU分解算法
如果我们不通过高斯消去的思路来进行LU分解,而是直接列出逐元素的表达式(这里以3阶为例):
1l21l311l321u11u12u22u13u23u33=a11a21a31a12a22a32a13a23a33
可以列出如下方程:
u1j=a1j, j=1,2,3
li1u11=ai1, i=2,3
l21u1j+u2j=a2j, j=2,3
l31u12+l32u22=a32
l31u13+l32u23+u33=a33
于是可以循着
u1j→li1→u2j→li2→u3j→li3→⋯→li(n−1)→unn
的顺序来解出所有L和U的元素,每个元素的求解过程类似于简单的回代法
特别地,注意到在上面的方程中,形如
aij−likukj
的形状会频繁出现在方程右端,因此可以使用循环更新A的方式来减少重复计算,具体地,对:
A=224012201246233−1
首先解出U的第一行,它就是A的第一行:
L=1⋅⋅⋅1⋅⋅1⋅1U=21⋅1⋅⋅2⋅⋅⋅A=224012201246233−1
之后计算L的第一列,它由A的第一列除以u11=a11得到:
L=11201⋅⋅1⋅1U=21⋅1⋅⋅2⋅⋅⋅A=224012201246233−1
此时,我们希望迭代地用上述方法计算A右下角块的LU分解,但实际上A的右下角块中包含已经被解出的第一行和第一列的成分,因此需要把对应的成分减去,即:在A的右下角块中减去L第一列和U第一行对应位置的乘积
L=11201⋅⋅1⋅1U=21⋅1⋅⋅2⋅⋅⋅A(1)=22401100112621−1−1
此后,可以直接进行递归求解,求出U第二行:
L=11201⋅⋅1⋅1U=21111⋅21⋅⋅A(1)=20001100112621−1−1
求出L第二列:
L=11201001⋅1U=21111⋅21⋅⋅A(1)=20001100112621−1−1
减掉A中第二行和第二列带来的影响(实际上这里没有影响,因此不变);然后求出U第三行:
L=11201001⋅1U=21111221−1⋅A(2)=20001100112621−1−1
求出L第三列:
L=1120100131U=21111221−1⋅A(2)=20001100112621−1−1
更新A:
L=1120100131U=21111221−1⋅A(3)=20001100112021−12
于是
L=1120100131U=21111221−12
注意到循环更新A的过程其实就是将A化为U的形式,与高斯消去法在理论上完全一致,但可以直接采取同时消去A右下角整个块的方式,人工计算更加迅速。计算机计算时两种方法对稠密矩阵表现相近,稀疏矩阵会有差别
LU分解的用途
尽管LU分解的复杂度仍为O(n3),但如果已经完成LU分解,再进行解方程(即解Ly=b和Ux=y两个方程)的复杂度只有O(n2),因此,对同一个矩阵多个右端项的问题,只需进行一次LU分解,就可以对p个右端项达到O(n3+pn2)的复杂度
选主元技术
在LU分解过程中可能会出现遇到零主元使LU分解无法继续的情况,然而这种情况其实可以通过调换原方程组的方程顺序解决,下面讨论这种技术
定理(零主元出现的条件) 对A∈Rn×n,高斯消去过程中不出现零主元当且仅当A的前n−1个顺序主子式均不为零
事实上,在进行方程组求解的时候,交换两个方程的顺序并不会影响方程组求解,尽管这会改变方程组的矩阵。因此,对于以求解方程组为目标的LU分解,我们可以适当交换矩阵两行的顺序
注意到在LU分解进行了k−1步时,第k,⋯,n行在消去状态上是完全等价的,因此如果此时发现akk(k)=0,但ajk(k)=0,j>k,则可以交换第j行与第k行而不影响方程求解
这被称为选主元技术
事实上,主元较大时,数值误差的传播会减小,因此我们可以强制选择绝对值较大的主元,来增强算法稳定性
但为了保证方程求解的顺利进行,我们需要记录下来发生交换的行。对于单一右端项的情况,我们可以同时交换右端项的元素顺序而不做这样的记录,但这对多右端项的问题不适用,因此较好的办法是用一个置换矩阵P来记录,形成PLU分解
设PLU分解过程中第k步的交换矩阵为Pk,消去矩阵为Mk,则有
Mn−1Pn−1⋯M2P2M1P1A=U
于是
Pn−1⋯M2P2M1P1A=M(n−1)−1U
由于交换矩阵满足
Pk2=I
由于Mk起消去第k列的作用,只在第k列有非对角元素,而Pk交换第k行和某一个第k行下方的行,于是
PjMkPj=Mˉk
仍然是消去第k列的消去阵
因此可以作如下变形
(Pn−1Mn−2Pn−1)(Pn−1Pn−2Mn−3Pn−2Pn−1)⋯(Pn−1⋯P3P2M1P2P3⋯Pn−1)(Pn−1⋯P2P1)A=M(n−1)−1U
左端记为
Mˉn−2Mˉn−3⋯Mˉ1PA=Mn−1−1U
于是,将左侧所有带横线的矩阵逆到右边,可以得到以下形状:
PA=LU
这就得到了一个PLU分解
实际计算时,我们只需要在计算过程中加入行交换,并使用向量p来记录行置换矩阵P(P极其稀疏,只需要记录n个整数即可),具体地,我们仍然以上一节的例子进行计算(这次我们省略U的中间表示):
p=[1,2,3,4]L=1⋅⋅⋅1⋅⋅1⋅1A=224012201246233−1
交换第1、3行:
p=[3,2,1,4]L=1⋅⋅⋅1⋅⋅1⋅1A=422022104216332−1
消去第1行、第1列:
p=[3,2,1,4]L=11/21/201⋅⋅1⋅1A(1)=4000210040−1633/21/2−1
第2行、第2列已经消除完毕:
p=[3,2,1,4]L=11/21/201001⋅1A(2)=4000210040−1633/21/2−1
交换第3行、第4行(注意此时要同时在L中重排):
p=[3,2,4,1]L=11/201/21001⋅1A(2)=40002100406−133/2−11/2
消去第3行、第3列:
p=[3,2,4,1]L=11/201/21001−1/61A(3)=40002100406033/2−11/3
得到最终结果:
P=1111L=11/201/21001−1/61U=42140633/2−11/3
在实际计算中,由于L的对角元素不需要存储,可以直接将其下三角元素存储在A的已经消去的下三角元素的位置;同时,为了避免大量数据交换,不会真的对矩阵进行重排,而是通过向量p维护下标映射,进行“懒重排”
上述算法称为部分选主元技术,因为其主元选取只选择待消去列中绝对值最大的元素,实际上可以有更加稳定的全选主元技术,同时进行行、列交换使得整个待消去的右下角子阵中绝对值最大的元素作为主元。这样的技术稳定性更好,但开销也响应更大,得到的分解形如PAQ=LU
LU分解的稳定性与其增长因子有关,定义为
ρ=i,jmax∣aij∣i,jmax∣uij∣
对解方程的过程作向后误差分析,即使(A+ΔA)x^=b的ΔA满足
∣∣A∣∣∞∣∣ΔA∣∣∞≤nρεmach
对部分选主元技术,可以证明ρ≤2n−1,而一般情况下ρ<10;如果不选主元则ρ不受控制
注 ρ=2n−1的一个例子:
A=1−1−1−1−0.50.750.250.250−0.50.750.251111
此矩阵无需置换即可达到部分选主元,但其分解结果为
L=1−1−1−11−1−11−11
U=1−0.50.250−0.50.251248
每次消去时,最后一列的元素都恰好翻一倍。可以证明这也是它能够变大的最大倍数
对称正定矩阵的Cholesky分解
对称正定矩阵一定可以进行LU分解,且其LU分解可以写成更好的对称形式:
A=LDLT
其中D为对角阵
如果令D的所有对角元素取算术平方根得到的矩阵为D1/2,则
A=(LD1/2)(LD1/2)T
令
L~=LD1/2
则
A=L~L~T
定理(Cholesky分解) 对称正定矩阵的A=LLT形式分解存在且唯一
下面我们仿照之前的思路进行Cholesky分解,注意由于矩阵对陈,我们只需要记录其一半的元素即可
4×××210××489×21519
处理第一行和第一列(先对对角元求平方根,然后对其它元素等比例缩小)
2110××289×11519
更新右下角(用右下角的原始矩阵减去第一列乘第一行的对应位置)
219××265×10318
处理第二行和第二列
213225×10318
更新右下角
213221×10318
处理第三行和第三列
21322110318
更新右下角
2132211039
处理右下角元素(开平方即可)
2132211033
完成计算,得到的分解为
L=2121320133LT=2132211033
Cholesky分解算法非常稳定,其增长因子ρ≤1,存储量与计算量与一般LU分解在渐进阶上一致,但常数约为一半
带状矩阵
对角阵→三对角阵→带状阵
定义(带状矩阵) 对A∈Rn×n,若∀i,j:∣i−j∣>β都有aij=0且∃k,ak,k−β,ak,k+β至少一个非零,则称A为半带宽为β的带状矩阵
带状矩阵的LU分解结果仍然是不超过原始带宽的带状矩阵
特别地,对三对角矩阵,可以只考虑三对角的元素,用线性向量存储,同时计算LU分解也只计算三对角元素,复杂度降低为线性
对一般的带状矩阵,在不选主元的情况下,时间复杂度O(β2n),空间复杂度O(βn)
然而带状矩阵的逆是稠密的,因此计算逆矩阵永远是不好的选择
不选主元也有稳定LU分解的矩阵:
定义(按行对角占优矩阵) ∀i, ∣aii∣≥j=1,j=i∑n∣aij∣,且至少一个大于号成立
类似可以定义按列对角占优和按行/列严格对角占优
对于带状矩阵,即使选主元,L和U的带宽也不会超过原始矩阵带宽的两倍
稀疏矩阵
稀疏矩阵要求使用非常规的数据结构存储,以达到在计算和存储时优化掉零元素带来的大量浪费的目的
常见的数据结构有:
- COO格式:包含N(非零元个数)个三元组
(row,column,value)
- 压缩稀疏行(CSR)格式:包含N个按行顺序存储的二元组
(column,value)
和一个n长度数组prow
,后者记载了每一行在前者中的起始点;相比COO格式节省了N−n个整数
- 压缩稀疏列(CSC)
- 若干个一维数组(例如带状矩阵)
- 分块CSR
非线性方程组求解
这实际上是非线性方程求解的多维拓展,下面介绍之前的几种方法的拓展
不动点迭代法
对f(x)=0,其中x∈Rn,f:Rn→Rn,构造一个g使g(x)=x⇔f(x)=0,则仍然可以进行不动点迭代
回忆:一元不动点迭代的局部收敛准则为∣g′(x∗)∣<1
一元函数的导数对应多元函数的Jacobi矩阵:
Jg(x):Jg,ij(x)=∂xj∂gi(x)
则局部收敛准则变为Jg(x∗)的所有特征值都满足∣λ∣<1
牛顿法
回忆一元牛顿法的迭代公式:
xk+1=xk−f′(xk)f(xk)
类似得到多元牛顿法:
xk+1=xk−[Jf(xk)]−1f(xk)