排队我们的分解


16

在这个挑战中,我将要求您找到方矩阵的QR分解。矩阵A的QR分解是两个矩阵QR,因此A = QR。特别地,我们正在寻找Q为正交矩阵(即Q T Q = QQ T = I,其中I为乘法恒等式,T为转置),R为上三角矩阵(每个值小于其对角线必须为零)。

您将编写通过任何合理方法采用方矩阵并通过任何方法输出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

评论不作进一步讨论;此对话已转移至聊天
丹尼斯

Answers:



5

八度,19字节

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

在线尝试!

我的第一个八度音阶答案\ o /

八度(Octave)qr在其他语言中有相当多的选择都返回QRQRDecomposition(Mathematica),matqr(PARI / GP),128!:0-如果我没记错的话-(J),qr(R)...


所以……您会发布该J解决方案还是应该发布?
亚当

@Adám我不会。如果需要,请继续发布。
Xcoder先生17年

为什么不能128!:0在全零矩阵上工作‽
Adám17年


@LuisMendo非常感谢您的修复!
Xcoder先生17年




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
缩进后,您可以使用;分隔行来保存字节。您也可以经常放弃换行符:。我建议您使用这些技巧,因为使用这种技术,我可以看到一些答案可以缩短的地方。
发布Rock Garf Hunter'Dec 27'17

@WheatWizard谢谢:)
Tyilo

1
不幸的是,这不适用于具有空行的矩阵。
丹尼斯,

0

带有numpy的Python,28个字节

import numpy
numpy.linalg.qr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.