Matryca kofaktora jest transpozycją macierzy adiuwatu . Elementy tej matrycy są kofaktorami oryginalnej matrycy.
Kofaktor (tj. Element macierzy kofaktora w rzędzie i i kolumnie j) jest wyznacznikiem submatrix utworzonej przez usunięcie i-tego rzędu i j-tej kolumny z oryginalnej macierzy, pomnożonej przez (-1) ^ (i + j).
Na przykład dla matrycy
Element macierzy kofaktora w wierszu 1 i kolumnie 2 to:
Informacje na temat wyznacznika macierzy i sposobu ich obliczania można znaleźć tutaj .
Wyzwanie
Twoim celem jest wyprowadzenie macierzy kofaktora macierzy wejściowej.
Uwaga : Dozwolone są wbudowane, które oceniają matryce kofaktorów lub macierze przyległe, wyznaczniki lub cokolwiek podobnego .
Wejście
Macierz może być wprowadzona jako argument wiersza poleceń, jako parametr funkcji, STDIN
w dowolny sposób lub w sposób najbardziej odpowiedni dla używanego języka.
Macierz zostanie sformatowana jako lista list, a każda lista podrzędna odpowiada jednemu wierszowi, który zawiera czynniki uporządkowane od lewej do prawej. Rzędy są uporządkowane od góry do dołu na liście.
Na przykład macierz
a b
c d
będzie reprezentowany przez [[a,b],[c,d]]
.
Możesz zamienić nawiasy kwadratowe i przecinki na coś innego, jeśli pasuje do twojego języka i jest sensowny (np. ((a;b);(c;d))
)
Macierze będą zawierać tylko liczby całkowite (które mogą być ujemne) .
Macierze zawsze będą kwadratowe (tj. Ta sama liczba wierszy i kolumn).
Możesz założyć, że dane wejściowe zawsze będą poprawne (tj. Nie będzie problemu z formatowaniem, nic poza liczbami całkowitymi, brak pustej macierzy).
Wynik
Otrzymana macierz kofaktora może zostać wyprowadzona STDOUT
, zwrócona z funkcji, zapisana do pliku lub w dowolny podobny sposób, który naturalnie pasuje do używanego języka.
Macierz kofaktora należy sformatować dokładnie w taki sam sposób, jak podane są macierze wejściowe, np [[d,-c],[-b,a]]
. Jeśli czytasz ciąg, musisz zwrócić / wyprowadzić ciąg, w którym macierz jest sformatowana dokładnie tak, jak na wejściu. Jeśli używasz czegoś takiego jak np. Lista list jako danych wejściowych, musisz również zwrócić listę list.
Przypadki testowe
- Wejście:
[[1]]
Wynik: [[1]]
- Wejście:
[[1,2],[3,4]]
Wynik: [[4,-3],[-2,1]]
- Wejście:
[[-3,2,-5],[-1,0,-2],[3,-4,1]]
Wynik: [[-8,-5,4],[18,12,-6],[-4,-1,2]]
- Wejście:
[[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]]
Wynik:
[[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]]
Punktacja
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach.
źródło
Odpowiedzi:
J, 29 bajtów
Ta sama sztuczka epsilon / inverse / determinant. Z prawej do lewej:
1e_9+
dodaje epsilon,(-/ .**%.)
jest wyznacznikiem (-/ .*
) razy inverse (%.
),|:
transponuje,<.0.5+
rundy.źródło
Matlab,
4233 bajtyKorzystanie z anonimowej funkcji:
Dane wejściowe i wyjściowe są macierzami (tablice numeryczne 2D).
eps
jest dodawany w przypadku, gdy macierz jest pojedyncza. Jest „usuwany” za pomocąround
(z pewnością prawdziwy wynik jest liczbą całkowitą).Przykład:
Przykład z macierzą pojedynczą:
Lub wypróbuj online w Octave.
źródło
[1,0 ; 0,0]
daje błąd, kiedy powinien zostać wyświetlony[0,0 ; 0,1]
mat2str
: „wynikowa macierz kofaktora może być… zwrócona z funkcji”mat2str
eps
wynosi około 1e-16. To sprawia, że matryca nie jest pojedyncza (ale bardzo źle uwarunkowana). Wynik nie jest dokładnie liczbą całkowitą; więcfix
(zaokrąglenie do zera) naprawia to. Działa to pod warunkiem, że błąd nie przekracza.5
. Obawiam się, że nie ma żadnych gwarancji. W przypadku bardzo dużych liczb całkowitych może się nie powieść. Powiedziałem, że to brudna sztuczka :-Pmat2str
jest tu potrzebna? Wydaje mi się, że skoro jest to funkcja, to tak naprawdę dane wejściowe to niesformatowana macierz. Na przykład, jeśli spróbujeszf=...
,f(f(...))
to nie zadziała, ale usunięciemat2str
powoduje, że działa dobrze.Mathematica,
2735 bajtówźródło
[[1,0],[0,0]]
?R,
12194 bajtówJest to absurdalnie długa funkcja, która przyjmuje obiekt klasy
matrix
i zwraca inny taki obiekt. Aby go wywołać, przypisz go do zmiennej.Nie golfowany:
źródło
mapply
zamiastouter
iVectorize
GAP , 246 bajtów
Możesz powiedzieć, że jest to dobre kodowanie dzięki potrójnie zagnieżdżonym pętlom for.
To całkiem proste. GAP nie ma tak naprawdę takich samych narzędzi do radzenia sobie z macierzami, jakie mają inne języki zorientowane na matematykę. Jedyne, co tak naprawdę tutaj zastosowano, to wbudowany operator wyznacznika.
bez golfa:
źródło
Verbosity v2 , 196 bajtów
Wypróbuj online!
Uwaga: obecnie nie działa w TIO, oczekuje na ściągnięcie. Powinien działać w trybie offline
Pobiera dane wejściowe w formularzu
((a b)(c d))
do przedstawieniaPomimo posiadania wbudowanej funkcji dla jednostki zależnej, gadatliwość wciąż ją osłabia. Dość podstawowe, jak to działa, po prostu transponuje odpowiednik wejścia.
źródło