(inspiriert von dieser Frage über Mathe)
Die Definitionen
Gegeben eine n x n
quadratische Matrix A , können wir es nennen , invertible
wenn es etwas gibt n x n
quadratische Matrix B , so dass AB = BA = I n , mit I n die Identitätsmatrix der Größe zu sein n x n
(die Matrix mit den Hauptdiagonalen 1
s und alles andere 0
) und AB und BA repräsentieren die übliche Matrixmultiplikation (ich werde hier nicht darauf eingehen - nehmen Sie eine lineare Algebra-Klasse).
Daher können wir eine m x n
Matrix C nennen, totally invertible
wenn jede k x k
(unten definierte) Submatrix von C für alle invertierbar k > 1
ist k <= (smaller of m,n)
.
Eine Submatrix wird als die resultierende Matrix definiert, nachdem eine beliebige Anzahl von Zeilen und / oder Spalten aus der ursprünglichen Matrix gelöscht wurde. Beispielsweise kann die folgende 3x3
Matrix C in eine 2x2
Untermatrix C 'umgewandelt werden, indem die erste Zeile 1 2 3
und die mittlere Spalte 2 5 8
wie folgt entfernt werden:
C = [[1 2 3]
[4 5 6] --> C' = [[4 6]
[7 8 9]] [7 9]]
Beachten Sie, dass es viele verschiedene Submatrix-Möglichkeiten gibt. Die obigen sind nur ein Beispiel. Diese Herausforderung betrifft nur diejenigen, bei denen die resultierende Untermatrix eine k x k
quadratische Matrix ist .
Die Herausforderung
Bestimmen Sie anhand einer Eingabematrix, ob diese vollständig invertierbar ist oder nicht.
Die Eingabe
- Eine einzelne Größenmatrix
m x n
in jedem geeigneten Format . - Ohne Verlust der Allgemeinheit können Sie davon ausgehen
m <= n
m >= n
Einschränkung oder , was für Ihren Code besser geeignet ist, und die Eingabe auf diese Weise vornehmen (dh Sie erhalten eine kostenlose Transponierungsoperation, wenn Sie dies wünschen). - Die Größe der Eingabematrix ist nicht kleiner als
3 x 3
und nicht größer als Ihre Sprache. - Die Eingabematrix besteht nur aus numerischen Werten von Z + (den positiven ganzen Zahlen ).
Die Ausgabe
- Ein wahrer / falscher Wert, der angibt , ob die Eingabematrix vollständig invertierbar ist.
Die Regeln
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Die Beispiele
Truthy
[[1 2 3]
[2 3 1]
[3 1 2]]
[[2 6 3]
[1 12 2]
[5 3 1]]
[[1 2 3 4]
[2 3 4 1]
[3 4 1 2]]
[[2 3 5 7 11]
[13 17 19 23 29]
[31 37 41 43 47]]
Falsey
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 6 2 55 3]
[4 5 5 5 6]
[9 3 7 10 4]
[7 1 8 23 9]]
[[2 3 6]
[1 2 12]
[1 1 6]]
[[8 2 12 13 2]
[12 7 13 12 13]
[8 1 12 13 5]]
6
Ecke sein, nicht eine 7
. Unbeholfene Tippfehler.
2 6 3; 1 12 2; 5 3 1
?