线性方程组的最小范数解
上一篇博文介绍了线性方程组的情况之一,即未知数数量小于方程个数的情况,介绍了最小二乘法,在本文中将介绍线性方程组的另一种情况,即方程个数小于未知数数量的情况,此时方程组有无限多的解,但是最接近原点的解,即范数最小的解只有一个,也就是这里将会介绍的线性方程组的最小范数解。
考虑线性方程组\(Ax=b\),其中A∈Rm∗n,m≤n,要寻找其最小范数解,即相当于求解下列最优化问题:
minimize ∣∣x∣∣subject to Ax=b
这个问题属于等式约束的最优化问题,可以利用拉格朗日乘子法求解,在这里我们介绍另外一种方法。
先给出结论,该方程组的最小范数解为x∗=AT(AAT)−1b,下面给出证明:
∣∣x∣∣2=∣∣(x−x∗)+x∗∣∣2=∣∣x−x∗∣∣2+∣∣x∗∣∣2+2x∗T(x−x∗)
令x∗=AT(AAT)−1b代入上式最右边项可以得到2x∗T(x−x∗)=0,于是∣∣x∣∣2=∣∣x−x∗∣∣2+∣∣x∗∣∣2,∣∣x∗∣∣2是一个定值,而当x=x∗时,∣∣x−x∗∣∣2>0恒成立,因此可以得到x=x∗是该优化问题的唯一最小解,即最小范数解。
##Kaczmarz 算法
Kaczmarz 算法是一种迭代求解最小范数解的算法,可以省去求解(AAT)−1的步骤,使计算更为高效,假设A∈Rm∗n,直接给出迭代公式如下:
在前m次迭代中,即k=0,1,...,m−1时,有:
x(k+1)=x(k)+μ(bk+1−ak+1Tx(k))ak+1Tak+1ak+1
对于第(m+1)次迭代,重新使用A的第 1 行以及b的第 1 个元素,即
x(m+1)=x(m)+μ(b1−a1Tx(m))a1Ta1a1
每迭代 m 次便从头循环一次,μ可以视为迭代算法的过程。可以证明得到在 Kaczmarz 算法中,如果x(0)=0,则当k→∞时,x(k)→x∗=AT(AAT)−1b,详细证明过程在这里省略。
后面的文章还会介绍线性方程组的一般解法,伪逆等相关内容