5

特定のタイプの乱数行列が有限体、特に F_2 で可逆かどうかをテストしたいと思います。次の簡単なコードを使用して、行列が実数上で可逆かどうかをテストできます。

import random
from scipy.linalg import toeplitz
import numpy as np
n=10
column = [random.choice([0,1]) for x in xrange(n)]
row = [column[0]]+[random.choice([0,1]) for x in xrange(n-1)]
matrix = toeplitz(column, row)
if (np.linalg.matrix_rank(matrix) < n):
    print "Not invertible!"

F_2以上で同じことを達成する方法はありますか?

4

2 に答える 2

1

残念ながら、SymPy は行列の有限体をまだ処理できませんが、サポートは予定されています。

ただし、一部のコメンターが指摘したように、整数の行列式を確認するだけです。1 (mod 2) の場合、行列は可逆です。実際に逆数を見つけるには、整数に対して通常の逆数を取り、行列式を掛けて (分数がないように)、各要素を 2 で mod します。効率的すぎるとは思えません。また、数値ライブラリ (最も近い整数への丸め) であっても、おそらく任意の行列ライブラリを使用できます。SymPy は、これらの各ステップも実行できます。

一般的な巡回有限体では、「行列式による乗算」の部分は、逆 mod p を掛けることによって元に戻す必要があることを指摘しておく必要があります (mod 2 は不要です。なぜなら、可能性は 1 しかないからです)。

于 2013-04-28T20:01:16.187 に答える