Octave で可逆行列を取得したいのですが、整数行列として取得したいので、次のようにします。
x = [9,15;19,2];
inv(x)
ここで私は得る:
[-0.0074906, 0.0561798; 0.0711610, -0.0337079]
[22,17;25,21]
しかし、マトリックスを反転する方法を誰かに知ってもらいたいですか?
各要素の逆は次のとおりです。
x .^ -1
どの結果
0.1111 0.0667
0.0526 0.5000
なぜあなたは手に入れたいの[22,17;25,21]
ですか?どのような数学演算がそのような結果をもたらすでしょうか?
行列の逆行列とは何かについて混乱しています。出力に何が必要かを誰も知らないので、ここにいくつかの手がかりがあります。
単位行列を反転すると、単位行列が得られます。
octave:3> a = [1,0;0,1]
a =
1 0
0 1
octave:4> inv(a)
ans =
1 0
0 1
非正方行列 (m != n である m 行 n 列の行列) には逆行列はありません。
x = [9,15;19,2;5,5];
inv(x)
%error: inverse: argument must be a square matrix
対角にゼロがある行列を反転すると、無限大になります。
octave:5> a = [1,0;0,0]
a =
1 0
0 0
octave:6> inv(a)
warning: inverse: matrix singular to machine precision, rcond = 0
ans =
Inf Inf
Inf Inf
次のように完全な値で行列を反転します。
octave:1> a = [1,2;3,4]
a =
1 2
3 4
octave:2> inv(a)
ans =
-2.00000 1.00000
1.50000 -0.50000
逆関数の内部で何が起こっているかを説明するには:
私はこれに非常に遅れており、質問に効率的に答える方法がわかりませんが、マトリックスのモジュラー逆数、特に mod 26 を見つけようとしているようです。
x = [9,15,19,2];
modulus = 26;
inverse_determinant = mod_inverse(det(x),modulus)
自分で mod_inverse 関数を実装する必要がありますが、アルゴリズムは簡単に見つけられるはずです。これが小さなモジュラス値のみの場合は、線形検索で十分効率的です。
result = mod(det(x)*inv(x)*inverse_determinant,modulus)`