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