求解线性方程组(2)

线性方程组的最小范数解

上一篇博文介绍了线性方程组的情况之一,即未知数数量小于方程个数的情况,介绍了最小二乘法,在本文中将介绍线性方程组的另一种情况,即方程个数小于未知数数量的情况,此时方程组有无限多的解,但是最接近原点的解,即范数最小的解只有一个,也就是这里将会介绍的线性方程组的最小范数解

考虑线性方程组\(Ax=b\),其中ARmn,mnA\in R^{m*n},m\le n,要寻找其最小范数解,即相当于求解下列最优化问题:

minimize xsubject to Ax=b\begin{align*} minimize\ ||x|| \\ subject\ to\ Ax=b \end{align*}

这个问题属于等式约束的最优化问题,可以利用拉格朗日乘子法求解,在这里我们介绍另外一种方法。

先给出结论,该方程组的最小范数解为x=AT(AAT)1bx^{*}=A^{T}(AA^{T})^{-1}b,下面给出证明:

x2=(xx)+x2=xx2+x2+2xT(xx)||x||^{2}=||(x-x^{*})+x^{*}||^{2}\\ =||x-x^{*}||^{2}+||x^{*}||^{2}+2x^{*T}(x-x^{*})

x=AT(AAT)1bx^{*}=A^{T}(AA^{T})^{-1}b代入上式最右边项可以得到2xT(xx)=02x^{*T}(x-x^{*})=0,于是x2=xx2+x2||x||^{2}=||x-x^{*}||^{2}+||x^{*}||^{2}x2||x^{*}||^{2}是一个定值,而当xxx\neq x^{*}时,xx2>0||x-x^{*}||^{2}>0恒成立,因此可以得到x=xx=x^{*}是该优化问题的唯一最小解,即最小范数解。 ##Kaczmarz算法 Kaczmarz算法是一种迭代求解最小范数解的算法,可以省去求解(AAT)1(AA^{T})^{-1}的步骤,使计算更为高效,假设ARmnA\in R^{m*n},直接给出迭代公式如下: 在前mm次迭代中,即k=0,1,...,m1k=0,1,...,m-1时,有:

x(k+1)=x(k)+μ(bk+1ak+1Tx(k))ak+1ak+1Tak+1x^{(k+1)}=x^{(k)}+\mu(b_{k+1}-a_{k+1}^{T}x^{(k)})\frac{a_{k+1}}{a_{k+1}^{T}a_{k+1}}

对于第(m+1)(m+1)次迭代,重新使用AA的第1行以及bb的第1个元素,即

x(m+1)=x(m)+μ(b1a1Tx(m))a1a1Ta1x^{(m+1)}=x^{(m)}+\mu(b_{1}-a_{1}^{T}x^{(m)})\frac{a_{1}}{a_{1}^{T}a_{1}}

每迭代m次便从头循环一次,μ\mu可以视为迭代算法的过程。可以证明得到在Kaczmarz算法中,如果x(0)=0x^{(0)}=0,则当kk\to \infty时,x(k)x=AT(AAT)1bx^{(k)}\to x^{*}=A^{T}(AA^{T})^{-1}b,详细证明过程在这里省略。

后面的文章还会介绍线性方程组的一般解法,伪逆等相关内容,To be continue…