分解をキューに入れる


16

この課題では、正方行列のQR分解を見つけるようにお願いします。行列AのQR分解は、A = QRである2つの行列QRです。特に、Qが直交行列(Q T Q = QQ T = Iで、Iが乗法恒等式、Tが転置)であり、Rが上三角行列(その対角線より下のすべての値がゼロになる)。

適切な方法で正方行列を取り、任意の方法でQR分解を出力するコードを記述します。多くの行列には複数のQR分解がありますが、出力が必要なのは1つだけです。

結果のマトリックスの要素は、マトリックス内のすべてのエントリの実際の回答の小数点以下2桁以内である必要があります。

これはコンペティションなので、回答はバイト単位でスコアリングされ、バイト数が少ないほどスコアが高くなります。


テストケース

これらは可能な出力のみであり、出力が有効である限り、これらすべてに一致する必要はありません。

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

コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
デニス

回答:



5

オクターブ、19バイト

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

オンラインでお試しください!

最初のオクターブ回答\ o /

Octaveにqrは、QRの両方を返す他の言語のかなりの選択肢があります:QRDecomposition(Mathematica)、matqr(PARI / GP)、128!:0-正しく思い出せば-(J)、qr(R)...


だから…あなたはそのJソリューションを投稿しますか?
アダム

@Adámしません。必要に応じて、投稿してください。
ミスターXcoder

なぜしない128!:0すべてゼロmatrix‽に取り組む
アダム


@LuisMendo修正してくれてありがとう!
ミスターXcoder




1

Python 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
インデント;すると、行を区切るために使用してバイトを節約できます。また、後に改行を忘れることがよくあり:ます。このテクニックを使用すると、この答えが短くなる可能性のあるいくつかの場所を見ることができるため、これらを試してみることをお勧めします。
小麦ウィザード

@WheatWizardありがとう:)
Tyilo

1
残念ながら、これは空の行を持つ行列では機能しません。
デニス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.