Dalam tantangan ini saya akan meminta Anda untuk menemukan dekomposisi QR dari matriks persegi. Dekomposisi QR dari matriks A adalah dua Matriks Q dan R sehingga A = QR . Secara khusus kami sedang mencari Q menjadi matriks ortogonal (yaitu Q T Q = QQ T = I di mana saya adalah identitas perkalian dan T adalah transpose) dan R menjadi matriks segitiga atas (setiap nilai di bawah keharusan diagonalnya menjadi nol).
Anda akan menulis kode yang mengambil matriks persegi dengan metode apa pun yang masuk akal dan mengeluarkan dekomposisi QR dengan metode apa pun. Banyak matriks memiliki beberapa dekomposisi QR tetapi Anda hanya perlu satu keluaran.
Elemen dari matriks hasil Anda harus berada dalam dua tempat desimal dari jawaban aktual untuk setiap entri dalam matriks.
Ini adalah kompetisi kode-golf sehingga jawaban akan dinilai dalam byte dengan lebih sedikit byte menjadi skor yang lebih baik.
Uji Kasus
Ini hanya output yang mungkin, output Anda tidak perlu cocok dengan semua ini selama mereka valid.
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
Jawaban:
Julia, 2 byte
Fungsi
qr
menerima matriks persegi dan mengembalikanTuple
matriks: Q dan R .Cobalah online!
sumber
Oktaf , 19 byte
Cobalah online!
Jawaban Oktaf pertama saya \ o /
Octave's
qr
memiliki beberapa alternatif dalam bahasa lain yang mengembalikan Q dan R :QRDecomposition
(Mathematica),matqr
(PARI / GP),128!:0
- jika saya ingat dengan benar - (J),qr
(R) ...sumber
128!:0
bekerja pada matriks semua nol‽Bahasa Wolfram (Mathematica) , 15 byte
Cobalah online!
Maksud saya ... apa yang bisa saya katakan?
sumber
R ,
3837 byteCobalah online!
sumber
pryr::f(list(qr.R(q<-qr(m)),qr.R(q)))
SageMath , 27 byte
sumber
Python 2,
329324 byteKita harus menggunakan pecahan untuk memastikan hasil yang benar, lihat https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process#Numerical_stability
Lekukan yang digunakan:
sumber
;
untuk memisahkan baris. Anda juga dapat sering mengabaikan jeda baris setelah:
. Saya akan menyarankan bermain-main dengan ini karena saya dapat melihat beberapa tempat jawaban ini bisa lebih pendek menggunakan teknik ini.Python dengan numpy, 28 byte
sumber