Geben Sie bei einer quadratischen Ganzzahlmatrix als Eingabe die Determinante der Matrix aus.
Regeln
- Sie können davon ausgehen, dass alle Elemente in der Matrix, die Determinante der Matrix und die Gesamtzahl der Elemente in der Matrix innerhalb des für Ihre Sprache darstellbaren Bereichs von Ganzzahlen liegen.
- Die Ausgabe eines Dezimal- / Gleitkommawerts mit einem Bruchteil von 0 ist zulässig (z . B.
42.0
anstelle von42
). - Integrierte Funktionen sind zulässig, Sie werden jedoch aufgefordert, eine Lösung einzuschließen, die keine integrierten Funktionen verwendet.
Testfälle
[[42]] -> 42
[[2, 3], [1, 4]] -> 5
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] -> 0
[[13, 17, 24], [19, 1, 3], [-5, 4, 0]] -> 1533
[[372, -152, 244], [-97, -191, 185], [-53, -397, -126]] -> 46548380
[[100, -200, 58, 4], [1, -90, -55, -165], [-67, -83, 239, 182], [238, -283, 384, 392]] -> 571026450
[[432, 45, 330, 284, 276], [-492, 497, 133, -289, -28], [-443, -400, 56, 150, -316], [-344, 316, 92, 205, 104], [277, 307, -464, 244, -422]] -> -51446016699154
[[416, 66, 340, 250, -436, -146], [-464, 68, 104, 471, -335, -442], [159, -407, 310, -489, -248, 370], [62, 277, 446, -325, 47, -193], [460, 460, -418, -28, 234, -374], [249, 375, 489, 172, -423, 125]] -> 39153009069988024
[[-246, -142, 378, -156, -373, 444], [186, 186, -23, 50, 349, -413], [216, 1, -418, 38, 47, -192], [109, 345, -356, -296, -47, -498], [-283, 91, 258, 66, -127, 79], [218, 465, -420, -326, -445, 19]] -> -925012040475554
[[-192, 141, -349, 447, -403, -21, 34], [260, -307, -333, -373, -324, 144, -190], [301, 277, 25, 8, -177, 180, 405], [-406, -9, -318, 337, -118, 44, -123], [-207, 33, -189, -229, -196, 58, -491], [-426, 48, -24, 72, -250, 160, 359], [-208, 120, -385, 251, 322, -349, -448]] -> -4248003140052269106
[[80, 159, 362, -30, -24, -493, 410, 249, -11, -109], [-110, -123, -461, -34, -266, 199, -437, 445, 498, 96], [175, -405, 432, -7, 157, 169, 336, -276, 337, -200], [-106, -379, -157, -199, 123, -172, 141, 329, 158, 309], [-316, -239, 327, -29, -482, 294, -86, -326, 490, -295], [64, -201, -155, 238, 131, 182, -487, -462, -312, 196], [-297, -75, -206, 471, -94, -46, -378, 334, 407, -97], [-140, -137, 297, -372, 228, 318, 251, -93, 117, 286], [-95, -300, -419, 41, -140, -205, 29, -481, -372, -49], [-140, -281, -88, -13, -128, -264, 165, 261, -469, -62]] -> 297434936630444226910432057
You may assume that all elements in the matrix, the determinant of the matrix, and the total number of elements in the matrix are within the representable range of integers for your language.
Antworten:
Gelee , 15 Bytes
Probieren Sie es online!
Wie es funktioniert
Warum es funktioniert - Mathy-Version
Der Operator det nimmt eine Matrix und gibt einen Skalar zurück. Eine n- by- n- Matrix kann als Sammlung von n Vektoren der Länge n betrachtet werden. Det ist also eine Funktion, die n Vektoren von ℤ n nimmt und einen Skalar zurückgibt.
Daher schreibe ich det ( v 1 , v 2 , v 3 , ..., v n ) für det [ v 1 v 2 v 3 ... v n ].
Beachten Sie, dass det in jedem Argument linear ist, dh det ( v 1 + λ w 1 , v 2 , v 3 , ..., v n ) = det ( v 1 , v 2 , v 3 , ..., v n ) + λ det ( w 1 , v 2 , v 3 , ..., v n ). Daher ist es eine lineare Abbildung von (ℤ n ) ⊗ n zu ℤ.
Es reicht aus, das Bild der Basis unter der linearen Karte zu bestimmen. Die Basis von (ℤ n ) ⊗ n besteht aus n- fachen Tensorprodukten der Basiselemente von ℤ n , dh e 5 ⊗ e 3 ⊗ e 1 ⊗ e 5 ⊗ e 1 . Tensorprodukte, die identische Tensoren enthalten, müssen zu Null gesendet werden, da die Determinante einer Matrix, in der zwei Spalten identisch sind, Null ist. Es bleibt zu prüfen, wohin die Tensorprodukte verschiedener Basiselemente geschickt werden. Die Indizes der Vektoren im Tensorprodukt bilden eine Bijektion, dh eine Permutation, bei der gerade Permutationen zu 1 und ungerade Permutationen zu -1 gesendet werden.
Um zum Beispiel die Determinante von [[1, 2], [3, 4]] zu finden: Beachten Sie, dass die Spalten [1, 3] und [2, 4] sind. Wir zerlegen [1, 3] zu (1 e 1 + 3 e 2 ) und (2 e 1 + 4 e 2 ). Das entsprechende Element im Tensorprodukt ist (1 e 1 ⊗ 2 e 1 + 1 e 1 ⊗ 4 e 2 + 3 e 2 ⊗ 2 e 1 + 3 e 2 ⊗ 4 e 2 ), was wir zu (2 e 1 vereinfachen ⊗ e 1 + 4 e 1 ⊗ e 2 + 6 e 2 ⊗ e 1 + 12 e 2 ⊗ e 2). Deshalb:
det [[1, 2], [3, 4]]
= det (1 e 1 + 3 e 2 , 2 e 1 + 4 e 2 )
= det (2 e 1 ⊗ e 1 + 4 e 1 ⊗ e 2 + 6 e 2 ≤ e 1 + 12 e 2 ≤ e 2 )
= det (2 e 1 ≤ e 1 ) + det (4 e 1 ≤ e 2 ) + det (6 e 2 ≤ e 1 ) + det (12 e2 ≤ e 2 )
= 2 det (e 1 ≤ e 1 ) + 4 det (e 1 ≤ e 2 ) + 6 det (e 2 ≤ e 1 ) + 12 det (e 2 ≤ e 2 )
= 2 (0) + 4 (1) + 6 (-1) + 12 (0)
= 4 - 6
= -2
Nun bleibt zu beweisen, dass die Formel zur Ermittlung der Parität der Permutation gültig ist. Mein Code ermittelt im Wesentlichen die Anzahl der Inversionen, dh die Stellen, an denen ein Element auf der linken Seite größer ist als ein Element auf der rechten Seite (nicht unbedingt nacheinander).
Beispielsweise gibt es in der Permutation 3614572 9 Inversionen (31, 32, 61, 64, 65, 62, 42, 52, 72), so dass die Permutation ungerade ist.
Die Begründung ist, dass jede Transposition (Vertauschen von zwei Elementen) entweder eine Inversion hinzufügt oder eine Inversion entfernt, wobei die Parität der Anzahl der Inversionen vertauscht wird, und die Parität der Permutation die Parität der Anzahl der Transpositionen ist, die zum Erreichen der Permutation erforderlich sind.
Abschließend lautet unsere Formel also:
Warum es funktioniert - Nicht-Mathy-Version
wobei σ eine Permutation von 𝕊 n ist, die Gruppe aller Permutationen auf n Buchstaben, und sgn das Vorzeichen der Permutation ist, AKA (-1) auf die Parität der Permutation angehoben ist und a ij der ( ij ) -te Eintrag in ist die Matrix ( i runter, j rüber).
quelle
R , 3 Bytes
Triviale Lösung
Probieren Sie es online!
R ,
9492 Bytesneu implementierte Lösung
von Jarko Dubbeldam überfordert
Probieren Sie es online!
Verwendet rekursiv die Erweiterung durch Minderjährige in der ersten Spalte der Matrix.
quelle
Jelly ,
16151210 BytesVerwendet die Laplace-Erweiterung . Vielen Dank an @miles für das Abschlagen von
3 bis5 Bytes!Probieren Sie es online!
Wie es funktioniert
quelle
Wolfram Language (Mathematica) , zwischen 14 und 42 Byte
Wir hatten eine 3-Byte- Lösung und eine 53-Byte-Lösung , die keine eingebauten Elemente enthält. Hier sind also einige seltsamere Lösungen, die irgendwo dazwischen liegen.
Die Wolfram-Sprache hat viele sehr intensive Funktionen zum Zerlegen von Matrizen in Produkte anderer Matrizen mit einfacherer Struktur. Eine der einfacheren ist die Jordan-Zersetzung. Jede Matrix ähnelt einer (möglicherweise komplexwertigen) oberen Dreiecksmatrix aus diagonalen Blöcken mit einer bestimmten Struktur, der Jordan-Zerlegung dieser Matrix. Ähnlichkeit bewahrt Determinanten, und die Determinante einer Dreiecksmatrix ist das Produkt der diagonalen Elemente, sodass wir die Determinante mit den folgenden 42 Bytes berechnen können :
Die Determinante ist auch gleich dem Produkt der Eigenwerte einer Matrix mit Multiplizität. Glücklicherweise verfolgt Wolframs Eigenwertfunktion die Multiplizität (auch für nicht diagonalisierbare Matrizen), sodass wir die folgende 20-Byte- Lösung erhalten:
Die nächste Lösung ist Betrug und ich bin mir nicht sicher, warum es funktioniert. Der Wronskian einer Liste von n Funktionen ist die Determinante der Matrix der ersten n- 1-Ableitungen der Funktionen. Wenn wir der
Wronskian
Funktion eine Ganzzahlmatrix geben und sagen, dass die Differenzierungsvariable 1 ist, spuckt sie irgendwie die Determinante der Matrix aus. Es ist komisch, aber es beinhaltet nicht die Buchstaben "Det
" und es sind nur 14 Bytes ...(Die Casoratian Determinante funktioniert auch, für 1 weitere Byte:
#~Casoratian~1&
)Im Bereich der abstrakten Algebra, die Determinante eines n x n - Matrix (gedacht als die Karte k → k dh Multiplikation mit dem Faktor) ist die n - te äußerte Macht der Matrix (nach einem Isomorphismus Kommissionierung k → ⋀ n k n ). In der Wolfram-Sprache können wir dies mit den folgenden 26 Bytes tun :
Und hier ist eine Lösung, die nur für positive Determinanten funktioniert. Wenn wir einen n- dimensionalen Einheitshyperwürfel nehmen und auf ihn eine lineare Transformation anwenden, ist das n- dimensionale "Volumen" der resultierenden Region der absolute Wert der Determinante der Transformation. Das Anwenden einer linearen Transformation auf einen Würfel ergibt ein Parallelepiped, und wir können sein Volumen mit den folgenden 39 Byte Code annehmen :
quelle
Exp@*Tr@*MatrixLog
, aber leider funktioniert dies nicht für einzelne Matrizen.Check[E^Tr@MatrixLog@#,0]&
.Check
.Haskell , 71 Bytes
-3 Bytes dank Lynn. Ein weiteres Mal ist es Craig Roy zu verdanken, dass es den Staub aufwirbelt.
Probieren Sie es online! Flag für Optimierungszwecke hinzugefügt
-O
. Es ist nicht notwendig.Erklärung (veraltet)
f
Implementiert rekursiv die Cofaktor-Erweiterung.Diese Linie deckt den Basisfall einer 1 × 1- Matrix ab, in welchem Fall die Determinante ist
mat[0, 0]
.Dies verwendet Haskells Mustervergleich , um die Matrix in einen Kopf (die erste Reihe) und einen Schwanz (den Rest der Matrix) aufzuteilen.
Zählen Sie den Kopf der Matrix auf (indem Sie die unendliche Liste der ganzen Zahlen und den Kopf zippen) und iterieren Sie darüber.
Negieren Sie das Ergebnis basierend darauf, ob sein Index gerade ist, da die Berechnung der Determinante eine abwechselnde Addition und Subtraktion umfasst.
Dies entfernt im Wesentlichen die i-te Spalte des Schwanzes, indem i- Elemente genommen und mit der Zeile verkettet werden, in der für jede Zeile im Schwanz das erste (i + 1) -te Element abgelegt wird.
Berechnen Sie die Determinante des obigen Ergebnisses und multiplizieren Sie sie mit dem Ergebnis von
(-1)*i*v
.Summieren Sie das Ergebnis der obigen Liste und geben Sie es zurück.
quelle
sum[(-1)^i*...
durchfoldr(-)0[...
Proton , 99 Bytes
Probieren Sie es online!
-3 Bytes dank Mr. Xcoder
-3 Bytes dank Erik the Outgolfer
Expansion über die erste Reihe
quelle
((~i%2)*2-1)
->((-i%2)|1)
j!=i
mitj-i
oderi-j
.Oktave , 28 Bytes
Probieren Sie es online!
Dies verwendet die QR - Zerlegung einer Matrix X in eine orthgonal Matrix Q und eine obere Dreiecksmatrix R . Die Determinante X ist das Produkt von denen von Q und R . Eine orthogonale Matrix hat eine Einheitsdeterminante, und für eine dreieckige Matrix ist die Determinante das Produkt ihrer diagonalen Einträge. Octave -
qr
Funktion mit einem einzigen Ausgang genannt gibt R .Das Ergebnis wird auf die nächste ganze Zahl gerundet. Bei großen Eingangsmatrizen können Gleitkommaungenauigkeiten einen Fehler von mehr als
0.5
und damit ein falsches Ergebnis erzeugen.quelle
det
eingebauten System auszuweichen . ;)Haskell , 59 Bytes
Probieren Sie es online!
quelle
C,
176 bis125 BytesVielen Dank an @ceilingcat für das Golfen mit 42 Bytes und an @Lynn und @Jonathan Frech für das Speichern von jeweils einem Byte!
Berechnet die Determinante anhand der Laplace-Erweiterung in der ersten Zeile.
Probieren Sie es online!
Abgerollt:
quelle
(i%2*-2+1)
→(1-i%2*2)
speichert ein weiteres Byte.n+1+c
kann seinn-~c
.i=s
stattdessenreturn s
Jelly , 43 Bytes
Endlich habe ich meine nicht eingebaute Lösung in einer Golfsprache geschrieben!
Vielen Dank an HyperNeutrino für das Speichern eines Bytes!
Probieren Sie es online! (Der Klarheit halber mit einem Code versehen)
Der furchtbar lange Weg, n-te Elemente aus einer Liste zu entfernen, wird sich später verbessern
Diese Antwort war von den Antworten von HyperNeutrino, Dennis und Leaky Nun übertroffen worden. Jelly ist als Golfsprache sehr beliebt.
Schnelle Erklärung:
quelle
Gelee , 24 Bytes
Probieren Sie es online!
Erläuterung
-2 Bytes dank der Lösung von user202729
quelle
MATL , 3 Bytes / 5 Bytes
Mit eingebauter Funktion
Probieren Sie es online!
Ohne eingebaut
Vielen Dank an Mischa Lawrow für den Hinweis auf einen jetzt korrigierten Fehler
Probieren Sie es online!
Dies berechnet die Determinante als Produkt der Eigenwerte, auf die nächste ganze Zahl gerundet, um Gleitkommaungenauigkeiten zu vermeiden.
quelle
R , 32 Bytes
Verwendet den Algorithmus von Not a Tree, bei dem die Eigenwerte der Matrix und der Realteil ihres Produkts genommen werden.
Probieren Sie es online!
quelle
Oktave , 30 Bytes
Probieren Sie es online!
oder die langweilige 4-Byte-Lösung (6 Bytes gespart dank Luis Mendo (die Regeln bezüglich der eingebauten Funktionen wurden vergessen)):
Erläuterung:
Komm auf! :)
quelle
TI-Basic, 2 Bytes
Ah, gut.
Bitte stimmen Sie nicht mit trivialen Antworten überein.
Als Gymnasiast (der gezwungen ist, einen dieser Taschenrechner zu besitzen) ist diese Funktion ...
quelle
Haskell, 62 Bytes
Probieren Sie es online! (Fußzeile mit Testfällen aus der Lösung von @ totallyhuman.)
d
berechnet die Determinante unter Verwendung einer Laplace-Erweiterung entlang der ersten Spalte. Benötigt drei Bytes mehr als die permanente .quelle
Python 2 , 95 Bytes
-12 Bytes dank Lynn.
Port meiner Haskell-Antwort .
Probieren Sie es online!
quelle
[]
als Basisfall verwenden:f=lambda m:sum((-1)**i*v*f([j[:i]+j[i+1:]for j in m[1:]])for i,v in enumerate(m[0]))if m else 1
für 95 Bytes!m==[]or sum(...)
gibt 92 Bytes.Wolfram Language (Mathematica) ,
5352 BytesProbieren Sie es online!
Leider wird für die Berechnung der Determinante einer n × n- Matrix auf diese Weise der O ( n n ) -Speicher verwendet, wodurch große Testfälle außer Reichweite geraten.
Wie es funktioniert
Der erste Teil
1##&@@@(t=Tuples)@#
berechnet alle möglichen Produkte eines Terms aus jeder Zeile der gegebenen Matrix.t[Range@Tr[1^#]&/@#]
gibt eine Liste mit der gleichen Länge an, deren Elemente Dinge wie{3,2,1}
oder{2,2,3}
sagen, welchen Eintrag jeder Zeile wir für das entsprechende Produkt ausgewählt haben.Wir wenden
Signature
die zweite Liste an, die gerade Permutationen1
, ungerade Permutationen-1
und Nicht-Permutationen zuordnet0
. Dies ist genau der Koeffizient, mit dem das entsprechende Produkt in der Determinante erscheint.Schließlich nehmen wir das Skalarprodukt der beiden Listen.
Wenn gerade
Signature
zu viel von einem eingebauten ist, können wir bei 73 Bytes nehmenErsetzen durch
1##&@@Order@@@#~Subsets~{2}&
. Dies berechnetSignature
eine mögliche Permutation, indem das Produkt vonOrder
auf alle Paare von Elementen der Permutation angewendet wird.Order
gibt an,1
ob das Paar in aufsteigender Reihenfolge ist,-1
ob es in absteigender Reihenfolge ist und0
ob sie gleich sind.-1 Byte danke an @ user202729
quelle
Python 3 ,
238 Bytes,227 Bytes,224 Bytes, 216 BytesProbieren Sie es online!
Meine Lösung verwendet die Definition einer Determinante für Berechnungen. Leider ist die Komplexität dieses Algorithmus
n!
und ich kann den Durchgang des letzten Tests nicht zeigen, aber theoretisch ist dies möglich.quelle
CJam (
5045 Bytes)Dies ist ein anonymer Block (Funktion), der ein 2D-Array auf dem Stapel aufnimmt und eine Ganzzahl auf dem Stapel hinterlässt.
Online-Testsuite
Präparation
Dies implementiert den Faddeev-LeVerrier-Algorithmus , und ich denke, es ist die erste Antwort, die diesen Ansatz wählt.
quelle
Wolfram Language (Mathematica) , 3 Bytes
Probieren Sie es online!
Pro dem Meta - Konsens , vor allem nicht - triviale Lösungen upvote die Mühe zu schreiben nehmen.
quelle
Python 2 , 75 Bytes
Probieren Sie es online!
quelle
SageMath , verschiedene
Hier sind eine Reihe von Methoden zur Berechnung der Determinante, die ich interessant fand, alle in SageMath programmiert. Sie können alle ausprobiert werden werden .
Eingebaut, 3 Bytes
Dieser ist nicht so interessant. Sage bietet Aliasnamen auf globaler Ebene für viele gängige Operationen, die normalerweise Objektmethoden sind. Dies ist also kürzer als
lambda m:m.det()
.Realteil des Produkts von Eigenwerten, 36 Bytes
Leider
eigenvalues
ist keiner dieser Aliase auf globaler Ebene. Zusammen mit der Tatsache, dass Sage keine gute Möglichkeit hat, Funktionen zu komponieren, bedeutet dies, dass wir mit hohen Kosten konfrontiert sindlambda
. Diese Funktion symbolisiert Werte, die beim Drucken automatisch in numerische Werte konvertiert werden, sodass bei einigen Ausgaben möglicherweise eine gewisse Gleitkommaungenauigkeit vorliegt.Produkt der Diagonale in Jordanischer Normalform, 60 Bytes
In der jordanischen Normalform wird eine NxN-Matrix als Blockmatrix mit N Blöcken auf der Diagonale dargestellt. Jeder Block besteht entweder aus einem einzelnen Eigenwert oder einer MxM-Matrix mit einem wiederholten Eigenwert auf der Diagonale und
1
s in der (der Diagonale über und rechts von der "Haupt" -Diagonale). Dies führt zu einer Matrix mit allen Eigenwerten (mit Multiplizität) auf der Hauptdiagonale und einigen1
s auf der Superdiagonale, die wiederholten Eigenwerten entsprechen. Dies gibt das Produkt der Diagonale der jordanischen Normalform zurück, die das Produkt der Eigenwerte (mit Multiplikation) ist. Dies ist also ein umständlicherer Weg, die gleiche Berechnung wie bei der vorherigen Lösung durchzuführen.Da Sage möchte, dass sich die jordanische Normalform über dem gleichen Ring befindet wie die ursprüngliche Matrix, funktioniert dies nur, wenn alle Eigenwerte rational sind. Komplexe Eigenwerte führen zu einem Fehler (es sei denn, die ursprüngliche Matrix befindet sich über dem Ring
CDF
(komplexe doppelte Gleitkommazahlen) oderSR
). Dies bedeutet jedoch, dass im Vergleich zu der oben genannten Lösung keine Realteilnahme erforderlich ist.Produkt von Diagonal in Smith Decomposition
Im Gegensatz zur jordanischen Normalform liegt die Smith-Normalform garantiert über dem gleichen Feld wie die ursprüngliche Matrix. Anstatt die Eigenwerte zu berechnen und sie mit einer Blockdiagonalmatrix darzustellen, berechnet die Smith-Zerlegung die Elementarteiler der Matrix (was für diesen Beitrag ein etwas zu kompliziertes Thema ist), fügt sie in eine Diagonalmatrix ein
D
und berechnet zwei Matrizen mit Einheit DeterminanteU
undV
so, dassD = U*A*V
(woA
ist die ursprüngliche Matrix). Da die Determinante des Matrizenprodukts gleich dem Produkt der Determinanten der Matrizen (det(A*B*...) = det(A)*det(B)*...
) ist undU
alsV
Einheitsdeterminanten definiert sind,det(D) = det(A)
. Die Determinante einer Diagonalmatrix ist einfach das Produkt der Elemente auf der Diagonale.Laplace-Erweiterung, 109 Byte
Dadurch wird die Laplace-Erweiterung in der ersten Zeile mithilfe eines rekursiven Ansatzes ausgeführt.
det([[a]]) = a
wird für den Basisfall verwendet. Es sollte kürzer sein, um esdet([[]]) = 1
für den Basisfall zu verwenden, aber mein Versuch , diese Implementierung durchzuführen, hatte einen Fehler, den ich noch nicht aufspüren konnte.Leibnizsche Formel, 100 Bytes
Damit wird die Leibniz-Formel direkt umgesetzt. Für eine viel bessere Erklärung der Formel und warum es funktioniert, als ich möglicherweise schreiben könnte, sehen Sie diese ausgezeichnete Antwort .
Realteil von
e^(Tr(ln(M)))
48 BytesDiese Funktion gibt symbolische Ausdrücke zurück. Um eine numerische Annäherung zu erhalten, rufen Sie
n(result)
vor dem Drucken auf.Dies ist ein Ansatz, den ich noch niemanden verwenden gesehen habe. Ich werde eine längere, detailliertere Erklärung für diese geben.
Sei
A
eine quadratische Matrix über den Reals. Per Definition ist die Determinante vonA
gleich dem Produkt der Eigenwerte vonA
. Die Spur vonA
ist gleich der Summe derA
Eigenwerte von. Für reelle Zahlenr_1
undr_2
,exp(r_1) * exp(r_2) = exp(r_1 + r_2)
. Da die Matrixexponentialfunktion analog zur skalaren Exponentialfunktion definiert ist (insbesondere in der vorherigen Identität), kann die Matrixexponentialfunktion berechnet werden, indem die Matrix diagonalisiert und die skalare Exponentialfunktion auf die Eigenwerte auf der Diagonale angewendet wirddet(exp(A)) = exp(trace(A))
(Das Produkt von istexp(λ)
für jeden Eigenwertλ
vonA
gleich der Summe der Eigenwerte von , die wir berechnen können .exp(A)
). Also, wenn wir eineL
solche Matrix finden könnenexp(L) = A
det(A) = exp(trace(L))
Wir können eine solche Matrix
L
durch Rechnen findenlog(A)
. Der Matrixlogarithmus kann auf die gleiche Weise berechnet werden wie das Matrixexponential: Bilden Sie eine quadratische Diagonalmatrix, indem Sie die skalare Logarithmusfunktion auf jeden Eigenwert von anwendenA
(aus diesem Grund beschränken wir unsA
auf die Realwerte ). Da wir uns nur um die Spur von kümmernL
, können wir die Konstruktion überspringen und die Exponentiale der Eigenwerte direkt summieren. Die Eigenwerte können komplex sein, auch wenn die Matrix nicht über dem komplexen Ring liegt. Wir nehmen also den Realteil der Summe.quelle
real(prod(m.eigenvalues()))
ungolfed.Java 8,
266261259258 BytesSchau Mama, keine Einbauten ... weil Java keine hat ...>.>
-7 Bytes dank @ceilingcat .
Erläuterung:
Probieren Sie es hier aus. (Nur der letzte Testfall ist zu groß, um in eine
long
Größe von 2 63 -1 zu passen .)quelle
JavaScript (ES6), 91
Rekursives Laplace
Weniger golfen
Prüfung
quelle
Python 2 + Anzahl , 29 Bytes
Probieren Sie es online!
quelle
Julia , 3 Bytes
Probieren Sie es online!
quelle
Pari / GP , 6 Bytes
Probieren Sie es online!
quelle
Java (OpenJDK 8) ,
195 192177 BytesProbieren Sie es online!
Wie bei vielen anderen Antworten wird auch hier die Laplace-Formel verwendet. Eine etwas weniger golfene Version:
quelle
J , 5 Bytes
Probieren Sie es online!
quelle