解决方形单数系统



我有一个平方单数系统A和向量B,该系统位于A的范围空间中。因为B在A的范围空间,并且A是单数的,因此有很多解决方案。现在我想要的是AX = B的一些解决方案,不一定是最小规范。由于我的系统A很大,我想避免基于SVD的解决方案(查找伪逆)。我正在考虑简单地进行lu分解并将自由变量设置为0,但是当我奇异时,我尝试的所有方法都无法给我解决方案。
我尝试过scipy.linalg.solve,但这需要系统是非单一的。我还尝试了scipy lu_factor和lu_solve,但是在做lu_factor时,它给了我运行时警告,说" 对角数%d完全零。使用b的lu分解为b,在A的范围内,一种方法(使用scipy)在A的范围内找到了对单数系统的解决方案。非常感谢。

尝试scipy.linalg.lu()。它计算矩阵的枢轴lu分解。

    import pprint
    import scipy
    import scipy.linalg   # SciPy Linear Algebra Library
    A = scipy.array([ [7, 3, -1, 2], [3, 8, 1, -4], [-1, 1, 4, -1], [2, -4, -1, 6] ])
    P, L, U = scipy.linalg.lu(A)
    print "A:"
    pprint.pprint(A)
    print "P:"
    pprint.pprint(P)
    print "L:"
    pprint.pprint(L)
    print "U:"
    pprint.pprint(U)

下面给出了代码的输出:

   A:
   array([[ 7,  3, -1,  2],
          [ 3,  8,  1, -4],
          [-1,  1,  4, -1],
          [ 2, -4, -1,  6]])
   P:
   array([[ 1.,  0.,  0.,  0.],
          [ 0.,  1.,  0.,  0.],
          [ 0.,  0.,  1.,  0.],
          [ 0.,  0.,  0.,  1.]])
   L:
   array([[ 1.        ,  0.        ,  0.        ,  0.        ],
          [ 0.42857143,  1.        ,  0.        ,  0.        ],
          [-0.14285714,  0.21276596,  1.        ,  0.        ],
          [ 0.28571429, -0.72340426,  0.08982036,  1.        ]])
   U:
   array([[ 7.        ,  3.        , -1.        ,  2.        ],
          [ 0.        ,  6.71428571,  1.42857143, -4.85714286],
          [ 0.        ,  0.        ,  3.55319149,  0.31914894],
          [ 0.        ,  0.        ,  0.        ,  1.88622754]])

您可以为您的任务尝试所有这些迭代垫圈。由于我不是这些奇异系统的专家,所以我只是提到了一些链接,并显示了一个小例子:

使用LSQR代码(虽然调整为稀疏应用程序):

import numpy as np
from scipy.sparse.linalg import lsqr
A = np.array([[0,0],[0,1]])
b = [1, 2]
x = lsqr(A, b)[0]
print(x)
# [ 0.  2.]
  • 关于该主题的整个论文:
    • 奇特的迭代方法线性方程和最小二乘问题(Sou-cheng(Terrya)choi)
  • 解决不良条件和奇异线性系统:正规化教程
  • 在Math.stackexchange上进行了一些讨论,建议解决:AtAx = Atb

通常我会推荐linalg.lstsq,但它可能是您不想要的基于SVD的解决方案之一,尽管该解决方案已对密集情况进行了高度优化。

相关内容

  • 没有找到相关文章

最新更新