我正在编写Java,并使用colt作为我的矩阵库,并希望在矩阵的内核中找到一个(任意)向量。我可以在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)使用渐近性,我可以调用空空间来得到整个空空间,或者使用rref来获得在减少到行级形式时使用的枢轴,并从中自己在空空间中找到一个向量。我在Colt中找不到一个函数来计算空空间,而且trapezoidalLower不返回枢轴。
是让我自己写rref呢,还是有人知道用Colt实现这一目标的更高层次的方法?
发布于 2014-05-08 00:57:29
答案是,无论你做什么,都不要在java中使用RREF。转换为减少的梯队形式,结果是有很多比较0。如果值为0,我们只做一件事。如果值非常接近于0,但不是完全为0,我们就会做完全不同的事情(例如,除以值)。这意味着一种不稳定的算法。
相反,我们可以使用QR Decomposition,它恰好是用colt实现的。
https://stackoverflow.com/questions/23438983
复制相似问题