Dans ce défi, je vous demanderai de trouver une décomposition QR d'une matrice carrée. La décomposition QR de la matrice A est deux matrices Q et R telles que A = QR . En particulier, nous recherchons Q pour être une matrice orthogonale (c'est-à-dire Q T Q = QQ T = I où I est l'identité multiplicative et T est la transposée) et R pour être une matrice triangulaire supérieure (chaque valeur en dessous de sa diagonale doit être zéro).
Vous écrirez du code qui prend une matrice carrée par n'importe quelle méthode raisonnable et génère une décomposition QR par n'importe quelle méthode. De nombreuses matrices ont plusieurs décompositions QR, mais vous n'avez besoin que d'une seule sortie.
Les éléments de vos matrices résultantes doivent se trouver à deux décimales près d'une réponse réelle pour chaque entrée de la matrice.
Il s'agit d'une compétition de code-golf donc les réponses seront notées en octets avec moins d'octets étant un meilleur score.
Cas de test
Ce ne sont que des sorties possibles, vos sorties n'ont pas besoin de correspondre à toutes celles-ci tant qu'elles sont valides.
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
Réponses:
Julia, 2 octets
La fonction
qr
accepte une matrice carrée et renvoie uneTuple
des matrices: Q et R .Essayez-le en ligne!
la source
Octave , 19 octets
Essayez-le en ligne!
Ma première réponse Octave \ o /
Octave
qr
a plusieurs alternatives dans d'autres langages qui retournent à la fois Q et R :QRDecomposition
(Mathematica),matqr
(PARI / GP),128!:0
- si je me souviens bien - (J),qr
(R) ...la source
128!:0
fonctionne pas sur une matrice entièrement nulle?Wolfram Language (Mathematica) , 15 octets
Essayez-le en ligne!
Je veux dire ... que puis-je dire?
la source
R ,
3837 octetsEssayez-le en ligne!
la source
pryr::f(list(qr.R(q<-qr(m)),qr.R(q)))
SageMath , 27 octets
la source
Python 2,
329324 octetsNous devons utiliser des fractions pour assurer une sortie correcte, voir https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process#Numerical_stability
Indentation utilisée:
la source
;
des lignes séparées. Vous pouvez également souvent renoncer à la rupture de ligne après:
. Je suggérerais de jouer avec ceux-ci car je peux voir quelques endroits où cette réponse peut être plus courte en utilisant cette technique.Python avec numpy, 28 octets
la source