私は 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 で nullspace を計算する関数を見つけることができず、trapezoidalLower はピボットを返しません。
私は自分の rref を書くことを余儀なくされていますか、それとも Colt でこれを達成するためのより高いレベルの方法を誰かが知っていますか?