कतार हमारे अपघटन


16

इस चुनौती में मैं आपको एक वर्ग मैट्रिक्स का क्यूआर अपघटन खोजने के लिए कहूंगा। मैट्रिक्स A का क्यूआर अपघटन दो मैट्रिक्स क्यू और आर ऐसा है कि ए = क्यूआर । विशेष रूप से हम Q को एक ऑर्थोगोनल मैट्रिक्स के रूप में देख रहे हैं (जो कि Q T Q = QQ T = I है जहाँ मैं गुणक पहचान है और T का स्थानान्तरण है) और R एक ऊपरी त्रिकोणीय मैट्रिक्स है (प्रत्येक विकर्ण के नीचे प्रत्येक मान होना चाहिए) शून्य हो)।

आप ऐसा कोड लिखेंगे जो किसी भी उचित विधि द्वारा एक वर्ग मैट्रिक्स लेता है और किसी भी विधि द्वारा एक 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

टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
डेनिस

जवाबों:


5

जूलिया, 2 बाइट्स

qr

फ़ंक्शन qrएक वर्ग मैट्रिक्स को स्वीकार करता है और मैट्रिक्स की एक वापसी करता Tupleहै: क्यू और आर

इसे ऑनलाइन आज़माएं!


4
तुम्हें देखकर अच्छा लगा! यह इस से कहीं भी छोटा नहीं है :-)
लुइस मेंडू

मुझे पता था कि आप शीघ्र ही वापस आएंगे। वापसी पर स्वागत है! बिल्ट-इन BTW क्या है ...
एरिक आउटोलॉफ़र

5

ऑक्टेव , 19 बाइट्स

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

इसे ऑनलाइन आज़माएं!

मेरा पहला ऑक्टेव उत्तर \ o /

ऑक्टेव की qrअन्य भाषाओं में काफी कुछ विकल्प हैं जो Q और R : QRDecomposition(Mathematica), matqr(PARI / GP) दोनों को लौटाते हैं , 128!:0- अगर मुझे सही याद है - (J), qr(R) ...


तो ... क्या आप उस J समाधान या I को पोस्ट करेंगे?
आदम डे

@ Adám मैं नहीं करूंगा। आगे बढ़ें और चाहें तो पोस्ट कर दें।
श्री एक्सकोडर

128!:0सभी शून्य-मैट्रिक्स पर काम क्यों नहीं करता है
Adám


@LuisMendo फिक्स के लिए बहुत बहुत धन्यवाद!
श्री एक्सकोडर


3

आर , 38 37 बाइट्स

pryr::f(list(qr.R(q<-qr(m)),qr.Q(q)))

इसे ऑनलाइन आज़माएं!


1
आपको उस स्थान की आवश्यकता नहीं है ...? pryr::f(list(qr.R(q<-qr(m)),qr.R(q)))
मिस्टर एक्सकोडर


@ Mr.Xcoder धन्यवाद!
rturnbull

@ Adám धन्यवाद, मैंने एक बेवकूफ टाइपो बनाया था। अभी तय किया है।
rturnbull


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
जब इंडेंट आप ;अलग लाइनों का उपयोग करके बाइट्स बचा सकता है । आप अक्सर लाइन ब्रेक के बाद भी पीछे हट सकते हैं :। मैं इनके साथ खेलने का सुझाव दूंगा क्योंकि मैं कुछ स्थानों को देख सकता हूं कि यह उत्तर इस तकनीक का उपयोग करके छोटा हो सकता है।
रॉक गार्फ हंटर

@WheatWizard धन्यवाद :)
टायरो

1
दुर्भाग्य से, यह अशक्त पंक्तियों वाले मेट्रिक्स के लिए काम नहीं करेगा।
डेनिस

0

सुन्न के साथ अजगर, 28 बाइट्स

import numpy
numpy.linalg.qr
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.