ガロア体 2 ( GF(2) )で行列 A のべき乗を計算する高速な方法を探しています。A
は double 行列であり、そのべき乗は でx
表されます
A^x = A * A * A * ... * A (x times)
A
簡単な方法は、 GF(2)に変換し (与えられた行列A
が double 行列であるため)、累乗演算を実行することです。Matlab コード
A1 = gf(A, 2) % // convert to galois field
A_pow_x_first = A1^x; % // Perform A^x
A
ただし、この方法では行列を GF(2)に変換するのに時間がかかります。GF(2) 変換なしで高速な方法を探しています。つまり、mod操作を使用しています
A_pow_x_second = mod(A^x, 2)
ただし、問題は、最初の方法と 2 番目の方法の結果が似ていないことです。問題は、数のオーバーフローです。一部のメンバーは、行列A
を int64 に変換することを提案してくれました。しかし、私の問題を処理するのは良い方法ではないと思います。matlabでそれを行うための迅速な方法を私に提案してもらえますか? 前もって感謝します
これは簡単な例です
>> A = [1 0 1
0 1 1
1 1 1]
最初の方法は、
>> A_pow_x_first = gf(A, 2)^50
結果:
0 1 0
1 0 0
0 0 1
第二の方法
>> A_pow_x_second = mod(A^50, 2)
A_pow_x_second =
0 0 0
0 0 0
0 0 0
A^x
最初の方法で同様の結果が得られるGF(2)に変換せずに計算を高速化する方法は?