In dieser Aufgabe werde ich Sie bitten, eine QR-Zerlegung einer quadratischen Matrix zu finden. Die QR-Zerlegung der Matrix A ist zwei Matrizen Q und R, so dass A = QR ist . Insbesondere suchen wir, dass Q eine orthogonale Matrix ist ( dh Q T Q = Q Q T = I, wobei I die multiplikative Identität und T die Transponierte ist) und R eine obere Dreiecksmatrix ist (jeder Wert unter seiner Diagonale muss sein) Null sein).
Sie werden Code schreiben, der mit jeder vernünftigen Methode eine quadratische Matrix annimmt und mit jeder Methode eine QR-Zerlegung ausgibt. Viele Matrizen haben mehrere QR-Zerlegungen, Sie müssen jedoch immer nur eine ausgeben.
Elemente Ihrer resultierenden Matrizen sollten bei jedem Eintrag in der Matrix innerhalb von zwei Dezimalstellen von einer tatsächlichen Antwort entfernt sein.
Dies ist ein Code-Golf- Wettbewerb, bei dem die Antworten in Bytes gewertet werden, wobei weniger Bytes eine bessere Punktzahl sind.
Testfälle
Dies sind nur mögliche Ausgaben, Ihre Ausgaben müssen nicht mit allen übereinstimmen, solange sie gültig sind.
0 0 0 1 0 0 0 0 0
0 0 0 -> 0 1 0 0 0 0
0 0 0 0 0 1 , 0 0 0
1 0 0 1 0 0 1 0 0
0 1 0 -> 0 1 0 0 1 0
0 0 1 0 0 1 , 0 0 1
1 2 3 1 0 0 1 2 3
0 3 1 -> 0 1 0 0 3 1
0 0 8 0 0 1 , 0 0 8
0 0 1 0 0 1 1 1 1
0 1 0 -> 0 1 0 0 1 0
1 1 1 1 0 0 , 0 0 1
0 0 0 0 1 0 0 0 0 1 1 0 0 0 1
0 0 0 1 0 0 0 0 1 0 0 1 1 1 0
0 0 1 0 0 -> 0 0 1 0 0 0 0 1 0 0
0 1 1 1 0 0 1 0 0 0 0 0 0 1 0
1 0 0 0 1 1 0 0 0 0 , 0 0 0 0 1
Antworten:
Julia, 2 Bytes
Die Funktion
qr
nimmt eine quadratische Matrix und gibt eineTuple
der Matrizen: Q und R .Probieren Sie es online!
quelle
Oktave , 19 Bytes
Probieren Sie es online!
Meine erste Oktavantwort \ o /
Octave
qr
hat eine ganze Reihe von Alternativen in anderen Sprachen, die sowohl Q als auch R zurückgeben :QRDecomposition
(Mathematica),matqr
(PARI / GP),128!:0
- wenn ich mich recht entsinne - (J),qr
(R) ...quelle
128!:0
mit einer Nullmatrix?Wolfram Language (Mathematica) , 15 Byte
Probieren Sie es online!
Ich meine ... was soll ich sagen?
quelle
R ,
3837 BytesProbieren Sie es online!
quelle
pryr::f(list(qr.R(q<-qr(m)),qr.R(q)))
SageMath , 27 Bytes
quelle
Python 2,
329324 BytesWir müssen Brüche verwenden, um eine korrekte Ausgabe sicherzustellen. Siehe https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process#Numerical_stability
Einrückung verwendet:
quelle
;
Zeilen trennen. Sie können auch oft auf den Zeilenumbruch verzichten:
. Ich würde vorschlagen, mit diesen zu spielen, da ich einige Stellen sehen kann, an denen diese Antwort mit dieser Technik kürzer sein kann.Python mit Numpy, 28 Bytes
quelle