【问题标题】:Sample Nullspace Using Colt使用 Colt 对 Nullspace 进行采样
【发布时间】:2014-06-19 18:40:21
【问题描述】:

我正在编写 Java 并使用 colt 作为我的矩阵库,并希望在矩阵的内核中找到一个(任何)向量。我可以使用 sympy 在 python 中执行此操作,如下所示:

def kernel(A, n):
    if A.rows == 0:
        return Matrix([1]*n)

    R, pivots = A.rref()
    Ap = A.extract(range(A.rows), pivots)
    bp = Matrix([0]*Ap.rows)

    free = list(set(range(n)) - set(pivots))
    for i in free:
        bp -= A[:, i]

    xp = Ap.LUsolve(bp)
    x = [1]*n

    for i in range(len(pivots)):
        x[pivots[i]] = xp[i]

    return Matrix(x)

使用 sympy 我可以调用 nullspace 来获取整个 nullspace,或者使用 rref 来获取在减少到行梯形形式时使用的枢轴,然后我自己在 nullspace 中找到一个向量。我在 Colt 中找不到计算零空间的函数,并且 trapezoidalLower 不返回枢轴。

我是要自己写 rref 还是有人知道用 Colt 实现这一目标的更高层次的方法?

【问题讨论】:

    标签: java python linear-algebra sympy colt


    【解决方案1】:

    答案是无论你做什么,都不要在 java 中使用 RREF。转换为简化的梯队形式结果与 0 有很多比较。如果值为 0,我们做一件事。如果该值非常接近 0,但又不完全为 0,我们会做一些完全不同的事情(例如除以该值)。这意味着一种不稳定的算法。

    相反,我们可以使用QR Decomposition,它恰好在 colt 中实现。

    【讨论】:

      猜你喜欢
      • 2011-05-25
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多