SOL标志

系统优化实验室

斯坦福大学
管理科学与工程部(MS&E)

黄工程中心

美国加利福尼亚州斯坦福市,邮编94305-4121

LSMR:稀疏方程和最小二乘法

  • 作者:方玉山,桑德斯.
  • 贡献者:多米尼克·奥尔班,奥斯汀·本森(Austin Benson)、维克托·明登(Victor Minden)、马蒂厄·戈麦斯(Matthieu Gomez)、尼克·古尔德(Nick Gould)、詹妮弗·斯科特(Jennifer Scott)。
  • 内容:共轭梯度类型方法的实现用于求解稀疏线性方程和稀疏最小二乘问题:\开始{align*}\text{求解}&Ax=b\\\text{或最小化}&\|Ax-b\|^2\\\text{或最小化}&\|Ax-b\|^2+\lambda^2\|x\|^2\结束{align*}其中矩阵(A)可以是正方形或矩形(过度确定或确定不足),并且可以具有任何级别。它由计算(Av)和(a^T u)的例程表示对于给定向量\(v)和\(u)。

    标量\(\lambda\)是一个阻尼参数。如果\(\lambda>0\),则解是“正则化的”,即唯一解总是存在的,并且(x)是有界的。

    该方法基于Golub-Kahan双对角化过程。它在代数上等价于应用MINRES到正规方程\((A^T A+\lambda^2 I)x=A^T b,\)但具有更好的数值特性,特别是如果\(A\)处于故障状态。


    如果\(A\)是对称的,使用SYMMLQ公司,分钟,明尼苏达州.


    如果\(A\)有低列秩和\(\lambda=0\),则该解决方案不是唯一的。LSMR返回最小长度的解。因此,对于欠定系统,它解决了这个问题\(\min\|x\|\text{subject to}Ax=b\)。更一般地说,它解决了问题\(\min\|x\|\text{subject to}A^T Ax=A^T b\),其中\(A\)可以有任何形状或等级。


    对于\(\min\|x\|\text{subject to}Ax=b\),考虑使用CRAIG公司.


    特殊功能:\(\ | r \ | \)和\(\ |A^T r \ |,其中,\(r=b-Ax\)是当前残差。对于LSQR公司,只有\(\|r\|\)是单调的。LSQR被推荐用于兼容系统\(Ax=b\),但对于具有松散止动公差的最小二乘问题,LSMR可能会比LSQR提前终止。


    特殊应用:要找到奇异(正方形或矩形)矩阵的零向量\(a\),将LSMR应用于系统\(\min\|A^T x-b\|\)任何非零向量(b\)(例如随机向量(b~))。在最小值处,剩余向量(r=b-a^T x)将满足(Ar=0)。有关示例,请参见[1]。


    预处理:如果\(A\)是显式稀疏矩阵,则可以直接缩放其列所以每列都有单位2范数。这叫做对角线预处理并应尽可能做到这一点。它可能会显著减少LSMR迭代次数不影响每次迭代的时间。LSMR解决了这个问题\(\min\|ADy-b\|\),然后(x=Dy\)解决原始问题,其中,(D)的第对角线是2范数的倒数(A)的第(j)列。

    如果\(A\)是一个运算符,对角线预处理并不简单,除非用户可以准确估计\(A\)的列规范。

    一般预条件依赖于用户对\(A\)的了解。对于某些正方形非奇异矩阵(B),用户询问LSMR来解决问题^{-1}年-b\|\),然后恢复通过求解(Bx=y\)得到最终解。用户现在需要编码形式为\(AB)的矩阵向量积^{-1}v\)和\(B^{-T}甲^T u \)通过求解包含前后(B)和(B^T)的线性系统分别带有\(A\)和\(A^T\)的产品。

    \如果(AB^{-1})比(A\)条件要好得多。理想的预条件是(B=R\),其中(R\)是非奇异三角形矩阵来自\(A\)的QR因子。因此不完全QR因子of \(A\)可能会给出一个好的预条件。

    反向通信:一个f90版本(lsmrReverse)为产品\(Av\)和\(A^T u\)。每次LSMR需要产品时,它都会返回控件。这允许用户实现自己的停止规则,也许还有他们自己的预条件。理想情况下停车规则应该适用于原始问题,而不是预处理的问题问题。

  • 参考文献:
    [1] S.-C.T.Choi(2006)。奇异线性方程组和最小二乘问题的迭代方法,斯坦福大学ICME博士论文。

    [2] D.C.-L.Fong和M.A.Saunders,LSMR:稀疏最小二乘问题的迭代算法,SIAM J.科学。计算。33:5, 2950-2971,2011年10月27日以电子方式发布。

  • 发布:
    2010年4月14日:Matlab实施。
    2010年6月3日:Python实现。
    2010年7月17日:f90实施(Beta)。
    2010年9月7日:f90局部重新定向修复。
    2012年10月26日:f90测试程序更新。
    2013年8月5日:添加了复杂f90版本。
    2014年5月2日:LS解决方案的退出消息已更正。
    2015年9月30日:Julia版本中添加了链接。
    2015年11月27日:添加了f90 lsmrReverse(反向通信)。
    2016年7月5日:添加了C++实现链接(Tom Vercauteren)。

下载: