3 मैट्रिक्स द्वारा 3 का विलोम ज्ञात करें


22

चुनौती

नौ संख्याओं को देखते हुए a, b, c, d, e, f, g, h, i, इनपुट के रूप में जो वर्ग मैट्रिक्स के अनुरूप है:

M=(abcdefghi)

मैट्रिक्स, का व्युत्क्रम ज्ञात करें M1और इसके घटकों का उत्पादन करें।

उलटा मैट्रिक्स

मैट्रिक्स 3 का व्युत्क्रम 3 निम्न समीकरण का पालन करता है:

MM1=M1M=I=(100010001)

और गणना की जा सकती है:

M1=1det(M)CT

जहां C cofactors का मैट्रिक्स है:

C=(eifhfgdidhegchbiaicgbgahbfcecdafaebd)

और CT की पक्षांतरित है C :

CT=(eifhchbibfcefgdiaicgcdafdhegbgahaebd)

और का निर्धारक है :एमdet(M)M

det(M)=a(eifh)b(difg)+c(dheg)

काम किया उदाहरण

उदाहरण के लिए, मान लें कि इनपुट है 0, -3, -2, 1, -4, -2, -3, 4, 1। यह मैट्रिक्स से मेल खाती है:

M=(032142341)

सबसे पहले, आइए गणना करें कि उपर्युक्त सूत्र का उपयोग करने वाले निर्धारक के रूप में क्या जाना जाता है:

det(M)=0(4×1(2)×4)(3)(1×1(2)×3)+(2)(1×4(4)×3)=1

अगले चलो cofactors के मैट्रिक्स की गणना करें:

C=(4×1(2)×4(1×1(2)×3)1×4(4)×3(3×1(2)×4)0×1(2)×3(0×4(3)×3)3×2(2)×4(0×2(2)×1)0×4(3)×1)

=(458569223)

हम तो पक्षांतरित करने की जरूरत है प्राप्त करने के लिए (पंक्तियों और स्तंभों फ्लिप) :सी टीCCT

CT=(452562893)

अंत में, हम व्युत्क्रम ज्ञात कर सकते हैं:

M1=1det(M)CT=11(452562893)=(452562893)

तो आउटपुट होगा 4, -5, -2, 5, -6, -2, -8, 9, 3

नियम

  • दिए गए मैट्रिक्स में हमेशा एक व्युत्क्रम (यानी गैर-एकवचन) होगा। मैट्रिक्स स्व-उलटा हो सकता है

  • दिए गए मैट्रिक्स हमेशा 9 पूर्णांक के साथ 3 बाय 3 मैट्रिक्स होंगे

  • इनपुट में नंबर हमेशा की सीमा में पूर्णांक होंगे1000n1000

  • मैट्रिक्स के गैर-पूर्णांक घटकों को दशमलव या अंश के रूप में दिया जा सकता है

उदाहरण

Input > Output
1, 0, 0, 0, 1, 0, 0, 0, 1 > 1, 0, 0, 0, 1, 0, 0, 0, 1
0, -3, -2, 1, -4, -2, -3, 4, 1 > 4, -5, -2, 5, -6, -2, -8, 9, 3
1, 2, 3, 3, 1, 2, 2, 1, 3 > -1/6, 1/2, -1/6, 5/6, 1/2, -7/6, -1/6, -1/2, 5/6
7, 9, 4, 2, 7, 9, 3, 4, 5 > -1/94, -29/94, 53/94, 17/94, 23/94, -55/94, -13/94, -1/94, 31/94

जीतना

बाइट्स में सबसे छोटा कोड जीतता है।

जवाबों:


18

MATL , 54 बाइट्स

th3LZ)t,3:q&XdpswP]w-lw/GtY*tXdsGXdsUw-IXy*2/+GtXds*-*

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

बस इसे दिलचस्प बनाए रखने के लिए, इनबिल्ट मैट्रिक्स डिवीजन या इसे करने के लिए निर्धारक कार्यों का उपयोग नहीं करता है।

इसके बजाय, सारस के नियम का उपयोग करके निर्धारक की गणना की जाती है

सररस प्रदर्शन का नियम

और केजली -हैमिल्टन फार्मूले का उपयोग करते हुए adjugate (ट्रांसपोज़्ड कॉफ़ेक्टर मैट्रिक्स) ।

adj()=12((टीआर)2-टीआर2)मैं3-टीआर+2

टिप्पणी कोड:

% Finding determinant
th    % concatenate the matrix to itself sideways
3LZ)  % chop off the last column (since the Rule of Sarrus doesn't need it)
t     % duplicate this matrix (say S)
,     % do this twice:
  3:q&Xd  % get the first three diagonals of S
  ps      % multiply each diagonal's values and add the results
  wP      % switch and flip the matrix (to get the popposing diagonals next time)
]w    % close loop, switch to have correct order of sums
-     % subtract - we now have the determinant
lw/   % invert that

% Finding adjugate using Cayley–Hamilton formula
GtY*  % A^2 term (last term of the formula)
tXds  % trace(A^2) for term 1 of formula
GXdsU % (trace(A))^2 for term1 of formula
w-    % (trace(A))^2 - trace(A^2)
IXy*  % multiply that by the identity matrix
2/    % divide that by 2 - term 1 complete
+
GtXds* % A*trA for term 2 of formula
-      % subtract to get adj(A)

*      % multiply by the inverse of determinant we found earlier
       % implicit output

हम लिए किए गए मैट्रिक्स गुणन को प्रतिस्थापित करके और भी अधिक पागल हो सकते हैं , जैसे कुछ ( MATL ऑनलाइन पर प्रयास करें )।GtY*23:"Gt!@qYS*!s] 3$v t&v 3:K-&Xd

अधिक प्रत्यक्ष और स्पष्ट तरीका:

4 निवाले

-1Y^

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

(-1 बाईट मेन्डो के लिए धन्यवाद।)

-1 - शाब्दिक धक्का -1

Y^ - उस पावर पर इनपुट बढ़ाएँ (निहित इनपुट, निहित आउटपुट)


दिलचस्प है, मुझे कभी नहीं पता था कि इसे "नियम का सारस" कहा जाता है। मेरे शिक्षक ने हमें यह सिखाया है, लेकिन उन्होंने खुद को uni में रहते हुए बनाया था।
बीटा डेके

@LuisMendo धन्यवाद, छोटे संस्करण को बदल दिया (पिछले संस्करण tbh केवल MATL मैनुअल के व्युत्क्रम के सुझाव के लिए एक अंधा कार्यान्वयन था, कोई वास्तविक सोच उस एक में नहीं गई :))। लंबे संस्करण के लिए, मुझे लगता है कि इसे छोड़ने के लिए एक छोटा सा स्पष्ट है, जैसे कि 1 बाइट हिट लेने के लिए पर्याप्त है।
सूंदर -

1
@ सूंदर हेह, मुझे वह सुझाव भी याद नहीं था। मैं मैट्रिक्स पावर के सुझाव को भी जोड़ दूंगा
लुइस मेंडो


9

आर, 51 35 27 8 5 बाइट्स

solve

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

पहले इन गोल्फ चुनौतियों में से एक पर जाएं। क्षमा करें यदि मेरा प्रारूपण गलत है!

Giuseppe के लिए कुल अतिरिक्त 11 बाइट्स को सहेजा गया! JAD की बदौलत अतिरिक्त 19 बाइट्स बचाए!


5
PPCG में आपका स्वागत है!
बीटा डेके

मैट्रिक्स फ़ंक्शन से पैरामीटर चर नामों को हटा दिया जो 16 बाइट्स घटाया!
रॉबर्ट एस।

1
अच्छा! आप बाइट्स को बचाने के लिए अधिकांश चरों को हटा सकते हैं क्योंकि आप वास्तव में बस एक साथ संचालन का काम कर रहे हैं: इसे ऑनलाइन आज़माएं!
Giuseppe

1
यदि आप उपयोग करने जा रहे हैं solve, तो समाधान बस है solve, क्योंकि यह प्रश्न की सभी आवश्यकताओं को पूरा करता है। यह मैट्रिक्स को इनपुट के रूप में लेता है और मैट्रिक्स को लौटाता है।
JAD


4

जेली , 3 बाइट्स

æ*-

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

यह मानते हुए कि हम इनपुट ले सकते हैं और पूर्णांक की 2 डी सूची के रूप में प्रदान कर सकते हैं। यदि पूर्णांकों की एक फ्लैट सूची वास्तव में इनपुट और आउटपुट दोनों के लिए आवश्यक है, तो यह 6 बाइट्स के लिए काम करता है।


æ*--1--1

12
जरूरी नहीं कि टिप्पणियां लंबे समय तक जीवित रहें। यदि आप टिप्पणियों में स्पष्टीकरण शामिल कर रहे हैं, तो आपको इसे उत्तर में स्थानांतरित करना चाहिए।
जोक

4

जावास्क्रिप्ट (ईएस 6), 123 बाइट्स

सहेजे गए 2 बाइट्स @ Mr.Xcoder
के लिए धन्यवाद 1 बाइट @ETHproductions के लिए धन्यवाद बचे

9 अलग-अलग मानों के रूप में इनपुट लेता है।

(a,b,c,d,e,f,g,h,i)=>[x=e*i-h*f,c*h-b*i,b*f-c*e,y=f*g-d*i,a*i-c*g,d*c-a*f,z=d*h-g*e,g*b-a*h,a*e-d*b].map(v=>v/=a*x+b*y+c*z)

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


अरे, मुझे अंतर्निहित मैट्रिक्स फ़ंक्शंस की अनुमति दी गई है। यही है, अगर जेएस में कोई भी है
बीटा

@ BetaDecay JS में कोई नहीं है। :-)
अरनौल्ड

क्या उन कोष्ठकों की वास्तव में आवश्यकता है?
मिस्टर एक्सकोडर




1

पायथन 3, 77 बाइट्स

import numpy
lambda l:(numpy.matrix(l).reshape(-1,3)**-1).ravel().tolist()[0]

एक फ्लैट सूची के रूप में इनपुट लेता है।

यदि इनपुट को 2D सरणी के रूप में लिया जाता है तो यह 63 बाइट्स है:

import numpy
lambda l:(numpy.matrix(l)**-1).ravel().tolist()[0]






0

क्लोजर, 165 बाइट्स

(fn[a b c d e f g h i](let[M map C(M -(M *[e f d c a b b c a][i g h h i g f d e])(M *[f d e b c a c a b][h i g i g h e f d]))](for[i C](/ i(apply +(M *[a b c]C))))))

मुझे खेद है कि यह सी ट्रांसपोजिशन में सी है, और मैं इस समय इसे ठीक करने के लिए उन लंबे चरित्र दृश्यों को फिर से करने के लिए आलसी महसूस कर रहा हूं।


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