W tym wyzwaniu poproszę Cię o znalezienie rozkładu QR macierzy kwadratowej. Rozkład macierzy A na QR to dwie macierze Q i R takie, że A = QR . W szczególności szukamy Q jako macierzy ortogonalnej (to znaczy Q T Q = QQ T = I, gdzie I to tożsamość multiplikatywna, a T to transpozycja), a R to górna macierz trójkątna (każda wartość poniżej jej przekątnej musi zero).
Napisz kod, który przyjmuje macierz kwadratową dowolną rozsądną metodą i generuje rozkład QR dowolną metodą. Wiele macierzy ma wiele rozkładów QR, jednak zawsze potrzebujesz tylko jednego wyjściowego.
Elementy macierzy wynikowych powinny znajdować się w obrębie dwóch miejsc po przecinku rzeczywistej odpowiedzi dla każdego wpisu w macierzy.
Jest to konkurs golfowy , więc odpowiedzi będą oceniane w bajtach, przy czym mniej bajtów oznacza lepszy wynik.
Przypadki testowe
Są to tylko możliwe dane wyjściowe, twoje dane wyjściowe nie muszą pasować do nich wszystkich, o ile są prawidłowe.
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
Odpowiedzi:
Julia, 2 bajty
Funkcja
qr
przyjmuje macierzy kwadratowej i zwracaTuple
macierzy: Q i R .Wypróbuj online!
źródło
Oktawa , 19 bajtów
Wypróbuj online!
Moja pierwsza odpowiedź Octave \ o /
Octave
qr
ma całkiem sporo alternatyw w innych językach, które zwracają zarówno Q, jak i R :QRDecomposition
(Mathematica),matqr
(PARI / GP),128!:0
- jeśli dobrze pamiętam - (J),qr
(R) ...źródło
128!:0
działa na matrycy zera zero‽Wolfram Language (Mathematica) , 15 bajtów
Wypróbuj online!
Mam na myśli ... co mogę powiedzieć?
źródło
R ,
3837 bajtówWypróbuj online!
źródło
pryr::f(list(qr.R(q<-qr(m)),qr.R(q)))
SageMath , 27 bajtów
źródło
Python 2,
329324 bajtyMusimy używać ułamków, aby zapewnić poprawną wydajność, patrz https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process#Numerical_stability
Zastosowane wcięcie:
źródło
;
do oddzielania linii. Często możesz też zrezygnować z podziału linii:
. Proponuję bawić się nimi, ponieważ widzę kilka miejsc, w których ta odpowiedź może być krótsza przy użyciu tej techniki.Python z numpy, 28 bajtów
źródło