우리의 분해 큐


16

이 도전에서 나는 정사각형 행렬의 QR 분해를 찾도록 요청할 것입니다. 행렬의 QR 분해 A는 두 행렬이다 QR 되도록 A = QR . 특히 우리는 찾고있는 Q 이다 (직교 행렬로 Q T Q = QQ T = I를 여기서 I는 곱셈 신원이고 T는 전치 임) 및 R은 상위의 삼각 행렬 (그 대각선 반드시 아래의 모든 값으로 0이어야 함).

합리적인 방법으로 정사각 행렬을 취하고 모든 방법으로 QR 분해를 출력하는 코드를 작성합니다. 많은 행렬에는 여러 개의 QR 분해가 있지만 출력 만 필요합니다.

결과 행렬의 요소는 행렬의 모든 항목에 대한 실제 답의 소수점 이하 두 자리 내에 있어야합니다.

이것은 경쟁이므로 적은 바이트로 더 나은 점수를 얻을 수 있습니다.


테스트 사례

이것들은 가능한 출력 일 뿐이며, 출력이 유효한 한 모든 출력과 일치 할 필요는 없습니다.

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

의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Dennis

답변:



5

옥타브 , 19 바이트

@(x)[[q,r]=qr(x),r]

온라인으로 사용해보십시오!

첫 옥타브 답변 \ o /

옥타브 qrQR을 모두 반환하는 다른 언어의 대안을 많이 가지고 있습니다 : QRDecomposition(Mathematica), matqr(PARI / GP), 128!:0-내가 올바르게 기억한다면-(J), qr(R) ...


그래서 ... 당신은 그 J 솔루션을 게시 할 것인가, 아니면 내가 할 것인가?
Adám

@ Adám하지 않습니다. 원하는 경우 계속 게시하십시오.
Mr. Xcoder

128!:00이 아닌 행렬에서 작동 하지 않는 이유
Adám


@LuisMendo 수정 해 주셔서 감사합니다!
Mr. Xcoder




1

파이썬 2, 329 324 바이트

import fractions
I=lambda v,w:sum(a*b for a,b in zip(v,w))
def f(A):
 A,U=[map(fractions.Fraction,x)for x in zip(*A)],[]
 for a in A:
    u=a
    for v in U:u=[x-y*I(v,a)/I(v,v)for x,y in zip(u,v)]
    U.append(u)
 Q=[[a/I(u,u)**.5 for a in u]for u in U];return zip(*Q),[[I(e,a)*(i>=j)for i,a in enumerate(A)]for j,e in enumerate(Q)]

올바른 결과를 얻으려면 분수를 사용해야합니다. https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process#Numerical_stability

사용 된 들여 쓰기 :

  1. 1 칸
  2. 1 탭

2
들여 쓰기 할 때 ;줄을 구분 하여 바이트를 절약 할 수 있습니다 . 또한 줄 바꿈을 자주 잊을 수도 있습니다 :. 이 기술을 사용하면이 답변이 더 짧을 수있는 몇 곳을 볼 수 있기 때문에 이것들을 가지고 놀아보십시오.
Ad Hoc Garf Hunter 1

@WheatWizard 감사합니다 :)
Tyilo

1
불행히도 이것은 행이 null 인 행렬에는 작동하지 않습니다.
Dennis

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.