Как инвертировать матрицу и целочисленный результат в октаве?

Я хотел бы получить обратимую матрицу в Octave, но в виде матрицы целых чисел, так:

x = [9,15;19,2];
inv(x)

Здесь я получаю:

[-0.0074906, 0.0561798; 0.0711610, -0.0337079]

но я бы хотел получить [22,17;25,21]кто-нибудь знает, как инвертировать матрицу?

2 ответа

Решение

Инверсия каждого элемента:

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

Обращение матрицы с нулем на диагонали приводит к бесконечности

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

Для описания того, что происходит под капотом обратной функции:

https://www.khanacademy.org/math/precalculus/precalc-matrices/inverting_matrices/v/inverse-of-a-2x2-matrix

Я очень опоздал с этим и не знаю, как эффективно ответить на вопрос, но похоже, что вы хотите найти модульную обратную матрицу, в частности мод 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)`
Другие вопросы по тегам