我正在编写 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 实现这一目标的更高层次的方法?