Neste desafio, pedirei que você encontre uma decomposição QR de uma matriz quadrada. A decomposição QR da matriz A é duas matrizes Q e R, de modo que A = QR . Em particular, estamos procurando Q ser uma matriz ortogonal (ou seja, Q T Q = QQ T = I, onde I é a identidade multiplicativa e T é a transposição) e R uma matriz triangular superior (todos os valores abaixo de sua diagonal devem seja zero).
Você escreverá um código que utiliza uma matriz quadrada por qualquer método razoável e gera uma decomposição QR por qualquer método. Muitas matrizes têm várias decomposições QR, no entanto, você só precisa da saída uma.
Os elementos das matrizes resultantes devem estar dentro de duas casas decimais de uma resposta real para cada entrada na matriz.
Esta é uma competição de código-golfe , portanto as respostas serão pontuadas em bytes, com menos bytes sendo uma pontuação melhor.
Casos de teste
Essas são apenas saídas possíveis; suas saídas não precisam corresponder a todas, desde que válidas.
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
Respostas:
Julia, 2 bytes
A função
qr
aceita uma matriz quadrada e retorna umaTuple
das matrizes: Q e R .Experimente online!
fonte
Oitava , 19 bytes
Experimente online!
Minha primeira resposta do Oitava \ o /
O Octave's
qr
tem muitas alternativas em outros idiomas que retornam Q e R :QRDecomposition
(Mathematica),matqr
(PARI / GP),128!:0
- se bem me lembro - (J),qr
(R) ...fonte
128!:0
funciona em uma matriz de zero‽Wolfram Language (Mathematica) , 15 bytes
Experimente online!
Quero dizer ... o que posso dizer?
fonte
R ,
38bytes 37Experimente online!
fonte
pryr::f(list(qr.R(q<-qr(m)),qr.R(q)))
SageMath , 27 bytes
fonte
Python 2,
329324 bytesDevemos usar frações para garantir a saída correta, consulte https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process#Numerical_stability
Recuo usado:
fonte
;
para separar linhas. Você também pode frequentemente renunciar à quebra de linha depois:
. Eu sugeriria brincar com eles, porque eu posso ver alguns lugares em que essa resposta pode ser mais curta usando essa técnica.Python com numpy, 28 bytes
fonte