0

ガロア体 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)に変換せずに計算を高速化する方法は?

4

0 に答える 0