Матрица кофактора - это транспонированная матрица адъютатов . Элементы этой матрицы являются кофакторами исходной матрицы.
Кофактор (т.е. элемент матрицы кофактора в строке i и столбце j) является определителем подматрицы, образованной удалением i-й строки и j-го столбца из исходной матрицы, умноженной на (-1) ^ (i + j).
Например, для матрицы
Элемент матрицы кофактора в строке 1 и столбце 2:
Вы можете найти информацию о том, что определитель матрицы и как их рассчитать, здесь .
Вызов
Ваша цель - вывести матрицу кофактора входной матрицы.
Примечание : Встроенные модули, оценки матриц кофактора или adjugate матрицы, или детерминанты или что - нибудь подобное будут разрешены .
вход
Матрица может быть введена как аргумент командной строки, как параметр функции, STDIN
или любым другим способом, наиболее подходящим для используемого вами языка.
Матрица будет отформатирована как список списков, каждый подсписок соответствует одной строке, которая содержит факторы, упорядоченные слева направо. Строки упорядочены сверху вниз в списке.
Например, матрица
a b
c d
будут представлены [[a,b],[c,d]]
.
Вы можете заменить квадратные скобки и запятые чем-то еще, если это соответствует вашему языку и разумно (например ((a;b);(c;d))
)
Матрицы будут содержать только целые числа (которые могут быть отрицательными) .
Матрицы всегда будут квадратными (т.е. одинаковое количество строк и столбцов).
Вы можете предположить, что входные данные всегда будут правильными (т.е. нет проблем с форматированием, нет ничего, кроме целых чисел, нет пустой матрицы).
Выход
Полученная матрица кофактора может быть выведена в STDOUT
, возвращена из функции, записана в файл или что-либо подобное, что естественно подходит для используемого вами языка.
Матрица кофактора должна быть отформатирована точно так же, как заданы входные матрицы, например [[d,-c],[-b,a]]
. Если вы читаете строку, то вы должны вернуть / вывести строку, в которой матрица отформатирована точно так же, как во входных данных. Если вы используете что-то вроде, например, списка списков в качестве входных данных, вы должны также вернуть список списков.
Контрольные примеры
- Входные данные:
[[1]]
Выход: [[1]]
- Входные данные:
[[1,2],[3,4]]
Выход: [[4,-3],[-2,1]]
- Входные данные:
[[-3,2,-5],[-1,0,-2],[3,-4,1]]
Выход: [[-8,-5,4],[18,12,-6],[-4,-1,2]]
- Входные данные:
[[3,-2,7,5,0],[1,-1,42,12,-10],[7,7,7,7,7],[1,2,3,4,5],[-3,14,-1,5,-9]]
Выход:
[[9044,-13580,-9709,23982,-9737],[-1981,1330,3689,-3444,406],[14727,7113,2715,-9792,414],[-28448,-2674,-707,16989,14840],[-2149,2569,-2380,5649,-3689]]
счет
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах.
источник
Ответы:
J, 29 байт
Тот же эпсилон / обратный / детерминантный трюк. Справа налево:
1e_9+
добавляет эпсилон,(-/ .**%.)
является определяющим (-/ .*
) раз обратный (%.
),|:
транспонированные,<.0.5+
раунды.источник
Matlab,
4233 байтаИспользование анонимной функции:
Вход и выход - матрицы (двумерные числовые массивы).
eps
добавляется в случае, если матрица является единственной. «Удаляется» с помощьюround
(истинный результат гарантированно будет целым числом).Пример:
Пример с единственной матрицей:
Или попробуйте онлайн в Octave.
источник
[1,0 ; 0,0]
дает ошибку, когда он должен выводить[0,0 ; 0,1]
mat2str
: «полученная матрица кофактора может быть ... возвращена из функции»mat2str
eps
составляет около 1e-16. Так что это делает матрицу неособой (но очень плохо обусловленной). Результат не совсем целое число; такfix
(вокруг нуля) исправляет это. Это работает, если ошибка не превышает.5
. Боюсь, нет никаких гарантий. Для очень больших целых чисел это может потерпеть неудачу. Я сказал , что это был грязный трюк :-Pmat2str
нужно ли здесь? Мне кажется, что поскольку это функция, входные данные на самом деле являются неформатированной матрицей. Например, если вы попробуете,f=...
тоf(f(...))
это не сработает, но удалениеmat2str
делает это нормально.Mathematica,
2735 байтисточник
[[1,0],[0,0]]
?R,
12194 байтаЭто нелепо длинная функция, которая принимает объект класса
matrix
и возвращает другой такой объект. Чтобы вызвать его, присвойте его переменной.Ungolfed:
источник
mapply
вместоouter
иVectorize
GAP , 246 байт
Вы можете сказать, что это хорошее кодирование с помощью тройных вложенных циклов for.
Это довольно просто. GAP на самом деле не обладает теми же инструментами для работы с матрицами, как другие математически ориентированные языки. Единственное, что здесь действительно используется, это встроенный оператор определителя.
ungolfed:
источник
Многословие v2 , 196 байт
Попробуйте онлайн!
NB: в настоящее время не работает на TIO, ожидая тяги. Должен работать в автономном режиме
Принимает ввод в форме
((a b)(c d))
для представленияНесмотря на наличие встроенного для адъюгата, многословие многословия все еще наносит вред его. Довольно просто, как это работает, просто транспонирует адъюгат ввода.
источник