Einführung
Heute kümmern wir uns um den Fluch der Linearalgebra-Studenten im ersten Jahr: Matrix-Bestimmtheit! Anscheinend hat dies noch keine Herausforderung. Also los geht's:
Eingang
- A symmetrische Matrix in jedem geeigneten Format (Sie können natürlich auch nur den oberen oder unteren Teil der Matrix nehmen) A
- Optional: die Größe der Matrix
Was ist zu tun?
Die Herausforderung ist einfach: Bei einer reellen Matrix entscheidet die Matrix, ob sie positiv und definitiv ist, indem sie einen Wahrheitswert ausgibt, wenn ja, und einen Falschwert, wenn nicht.
Sie können davon ausgehen, dass Ihre eingebauten Funktionen tatsächlich präzise funktionieren, und müssen daher keine numerischen Probleme berücksichtigen, die zu einem falschen Verhalten führen könnten, wenn die Strategie / der Code "nachweislich" das richtige Ergebnis liefern sollte.
Wer gewinnt?
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes (pro Sprache)!
Was ist überhaupt eine positiv-definite Matrix?
Es gibt anscheinend 6 äquivalente Formulierungen, wenn eine symmetrische Matrix positiv definit ist. Ich werde die drei einfacheren reproduzieren und Sie für die komplexeren auf Wikipedia verweisen .
- Wenn dann ist positiv-definit. Dies kann wie folgt : Wenn für jeden Nicht-Null-Vektor das (Standard-) Punktprodukt von und positiv ist, dann ist positiv bestimmt.
- Sei die Eigenwerte von , wenn jetzt (das ist alles Eigenwerte sind positiv) dann ist positiv-definit. Wenn Sie nicht wissen, um welche Eigenwerte es sich handelt, sollten Sie dies mit Ihrer bevorzugten Suchmaschine herausfinden, da die Erklärung (und die erforderlichen Berechnungsstrategien) zu lang ist, um in diesem Beitrag enthalten zu sein.A ∀ i ∈ { 1 , … , n } : λ i > 0 A
- Wenn die Cholesky-Zerlegung von existiert, dh es existiert eine untere Dreiecksmatrix , so daß , dann ist positiv definit. Beachten Sie, dass dies einer vorzeitigen Rückgabe von "false" entspricht, wenn die Berechnung der Wurzel während des Algorithmus an einem beliebigen Punkt aufgrund eines negativen Arguments fehlschlägt.
Beispiele
Für wahrheitsgemäße Ausgabe
Für Falschgeldausgabe
(mindestens ein Eigenwert ist 0 / positives Semi-Definit)
(Eigenwerte haben unterschiedliche Vorzeichen / unbestimmt)
(alle Eigenwerte kleiner als 0 / negativ definitiv)
(alle Eigenwerte kleiner als 0 / negativ definitiv)
(alle Eigenwerte kleiner als 0 / negativ definitiv)
(drei positive, ein negativer Eigenwert / unbestimmt)
Antworten:
C 108 Bytes
-1 Byte dank Logern
-3 Byte dank ceilingcat
Probieren Sie es online!
Führt eine Gaußsche Eliminierung durch und prüft, ob alle diagonalen Elemente positiv sind (Sylvester-Kriterium). Argument
n
ist die Größe der Matrix minus eins.quelle
i=0
in die for-Schleife fallen, den rekursiven Aufruff(M,n-1,0)
und den ersten Aufruf mit 0 als drittem Argument ausführen.MATLAB / Octave ,
191712 BytesProbieren Sie es online!
Die Funktion eig liefert die Eigenwerte in aufsteigender Reihenfolge. Wenn also der erste Eigenwert größer als Null ist, sind es auch die anderen.
quelle
f=
am Anfang löschen - anonyme Funktionen werden in der Regel als Antworten akzeptiert.8.9219e-17
als 0 ausgegeben.Jelly ,
11 bis10 BytesVerwendet das Kriterium von Sylvester .
Probieren Sie es online!
Wie es funktioniert
quelle
R 29 Bytes
Probieren Sie es online!
Alternative mit Cholesky:
R ,
3433 BytesProbieren Sie es online!
-1 Byte dank @Giuseppe
quelle
Haskell , 56 Bytes
Probieren Sie es online!
Grundsätzlich ein Hafen von Nwellnhofs Antwort . Führt eine Gauß-Eliminierung durch und prüft, ob die Elemente auf der Hauptdiagonale positiv sind.
Schlägt die erste Falsey-Ausgabe aufgrund von Rundungsfehlern fehl, würde aber theoretisch mit unendlicher Präzision funktionieren.Dank des Vorschlags von Curtis Bechtel sind nun alle Ausgaben korrekt.quelle
inputs :: [[[Rational]]]
, um richtige Antworten zu erhaltenWolfram Language (Mathematica) , 20 Byte
Probieren Sie es online!
quelle
MATL , 4 Bytes
Probieren Sie es online!
[3 -2 2; -2 4 0; 2 0 2]
0
quelle
[1 2 3j]
ist FalseyMathematica,
2928 BytesDefinition 2.
quelle
Julia 1.0 , 28 Bytes
Probieren Sie es online!
Julia 0,6 , 8 Bytes
Probieren Sie es online!
quelle
MATL , 6 Bytes
Es ist möglich, noch weniger Bytes zu verwenden, @Mr. Xcoder hat eine 5-Byte-MATL-Antwort gefunden !
Erläuterung
Probieren Sie es online!
quelle
Ahorn , 33 Bytes
(dh meine 2 Cent)
quelle
JavaScript (ES6),
99 9588 ByteProbieren Sie es online!
quelle