जॉर्डन अपघटन


18

महत्वपूर्ण नोट : क्योंकि यह चुनौती केवल वर्ग मैट्रिक्स पर लागू होती है, किसी भी समय मैं "मैट्रिक्स" शब्द का उपयोग करता हूं, यह माना जाता है कि मैं एक वर्ग मैट्रिक्स का उल्लेख कर रहा हूं। मैं संक्षिप्तता के लिए "वर्ग" वर्णन छोड़ रहा हूं।

पृष्ठभूमि

मैट्रिक्स से संबंधित कई ऑपरेशन, जैसे कि निर्धारक की गणना, एक रेखीय प्रणाली को हल करना, या स्केलर-मूल्यवान कार्यों को मैट्रिसेस तक विस्तारित करना एक विकर्ण मैट्रिक्स का उपयोग करके आसान बनाया जाता है (जिनके तत्व मुख्य विकर्ण पर नहीं हैं 0) मूल मैट्रिक्स (अर्थ, इनपुट मैट्रिक्स Aऔर विकर्ण मैट्रिक्स के लिए D, वहाँ कुछ औंधा मैट्रिक्स मौजूद है, Pजैसे कि D = P^(-1) * A * P; भी, मुख्य विकर्ण पर eigenvalues ​​के साथ एक मैट्रिक्स है, औरD औरA कुछ महत्वपूर्ण गुणों को साझा करते हैं, जैसे कि आइगेनवेल्स, निर्धारक और ट्रेस)। अलग-अलग ईजेंवल्यूज़ (मैट्रिक्स की विशेषता बहुपद की जड़ें, के det(A-λI) = 0लिए हल करके λ, जहां Iपहचान मैट्रिक्स के समान है A) के साथ मैट्रिसेस के लिए , विकर्ण सरल है:DP उन eigenvalues ​​(उसी क्रम में) के अनुरूप eigenvectors से गठित एक मैट्रिक्स है। इस प्रक्रिया को इगेंडेकम्पोजीशन कहा जाता है ।

हालाँकि, दोहराया eigenvalues ​​के साथ मेट्रिसेस को इस तरह से विकर्ण नहीं किया जा सकता है। सौभाग्य से, किसी भी मैट्रिक्स के जॉर्डन सामान्य रूप को आसानी से गणना की जा सकती है, और एक नियमित विकर्ण मैट्रिक्स की तुलना में काम करने के लिए बहुत कठिन नहीं है। इसकी अच्छी संपत्ति भी है कि, यदि प्रतिध्वनि अद्वितीय है, तो जॉर्डन अपघटन eigendecomposition के समान है।

जॉर्डन अपघटन समझाया

एक वर्ग मैट्रिक्स के लिए, Aजिनके आइजनवालों में सभी की ज्यामितीय बहुलता 1 है, जॉर्डन अपघटन की प्रक्रिया इस तरह हो सकती है:

  1. आज्ञा देना λ = {λ_1, λ_2, ... λ_n}के eigenvalues ​​की सूची A, बहुलता के साथ, दोहराया eigenvalues ​​लगातार दिखाई दे रहे हैं।
  2. एक विकर्ण मैट्रिक्स बनाएं Jजिनके तत्व λएक ही क्रम में हैं।
  3. 1 से अधिक गुणन वाले प्रत्येक ईजेंवल्यू 1के लिए J, अंतिम को छोड़कर, मुख्य विकर्ण में आइगेनवेल्यू के प्रत्येक पुनरावृत्ति के दाईं ओर रखें ।

परिणामी मैट्रिक्स Jएक जॉर्डन सामान्य रूप है A(किसी दिए गए मैट्रिक्स के लिए कई जॉर्डन सामान्य रूप हो सकते हैं, जो आइगेनवल के आदेश पर निर्भर करता है)।

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

Aनिम्न मैट्रिक्स होने दें :

एक मैट्रिक्स

Aगुणन के साथ, के eigenvalues हैं λ = {1, 2, 4, 4}। इन्हें विकर्ण मैट्रिक्स में रखकर, हमें यह परिणाम मिलता है:

चरण 2

इसके बाद, हम 1सभी पुनर्जागारों में से प्रत्येक के दाईं ओर लेकिन प्रत्येक के एक स्थान पर रखते हैं। चूंकि 4एकमात्र दोहराया गया स्वदेशी है, हम 1पहले 4 के बगल में एक ही जगह रखते हैं :

जोर्डन रूप

यह एक जॉर्डन सामान्य रूप है A(एक एकल मैट्रिक्स में संभावित रूप से कई वैध जॉर्डन सामान्य रूप हो सकते हैं, लेकिन मैं स्पष्टीकरण के उद्देश्य से उस विवरण पर चमक रहा हूं)।

काम

Aइनपुट के रूप में एक वर्ग मैट्रिक्स को देखते हुए , एक वैध जॉर्डन सामान्य रूप का उत्पादन करता है A

  • इनपुट और आउटपुट किसी भी उचित प्रारूप में हो सकता है (2D सरणी / सूची / जो भी हो, सूची / सरणी / स्तंभ या पंक्ति वेक्टर्स में से कोई भी, एक बिल्ट मैट्रिक्स डेटा प्रकार, आदि)।
  • Aवसीयत के तत्व और आइजनवेल्यू हमेशा सीमा में पूर्णांक होंगे [-200, 200]
  • सादगी की खातिर, सभी eigenvalues ​​में 1 की ज्यामितीय बहुलता होगी (और इस प्रकार उपरोक्त प्रक्रिया)।
  • A अधिकतम 10x10 मैट्रिक्स और कम से कम 2x2 मैट्रिक्स होगा।
  • ईजेनवेल्यूज और / या ईजीनवेक्टर्स की गणना करने वाले या ईगेंडेकोम्पोजिशन, जॉर्डन अपघटन या किसी अन्य प्रकार के अपघटन / विकर्णीकरण की गणना करने वाले बिल्डरों की अनुमति नहीं है। मैट्रिक्स अंकगणित, मैट्रिक्स उलटा, और अन्य मैट्रिक्स बिल्डिंस की अनुमति है।

परीक्षण के मामलों

[[1, 0], [0, 1]] -> [[1, 1], [0, 1]]
[[3, 0], [0, 3]] -> [[1, 1], [0, 1]]
[[4, 2, 2], [1, 2, 2],[0, 3, 3]] -> [[6, 0, 0], [0, 3, 0], [0, 0, 0]]
[[42, 48, 40, 64, 64], [41, 47, 31, 58, 42], [-55, -47, -27, -74, -46], [-46, -58, -46, -70, -68], [30, 20, 12, 34, 18]] -> [[10, 0, 0, 0, 0], [0, -18, 0, 0, 0], [0, 0, 6, 1, 0], [0, 0, 0, 6, 1], [0, 0, 0, 0, 6]]

जवाबों:


4

गणितज्ञ, 140 139 105 बाइट्स

Total[DiagonalMatrix@@@{{#},{1-Sign[Differences@#^2],1}}]&@(x/.Solve[#~CharacteristicPolynomial~x==0,x])&

मुझे बस बिल्टिन मिला, DiagonalMatrixजो सुपरिडगनल के साथ 0s और 1s को रखने के लिए एक आसान तरीका की अनुमति देता है।

प्रयोग

उदाहरण


किस बारे में Last@JordanDecomposition@#&? या यह धोखा है?
रुस्लान

@ रोलन हां, नियमों में से एक यह है कि जॉर्डन अपघटन करने वाले बिल्डरों को अनुमति नहीं है। हालांकि धन्यवाद।
मील

2

ऋषि, 79 बाइट्स

lambda A:block_diagonal_matrix([jordan_block(*r)for r in A.charpoly().roots()])

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

चूंकि कोई और समाधान पोस्ट नहीं कर रहा है, इसलिए मैं आगे बढ़कर एक पोस्ट कर सकता हूं।

A.charpoly.roots()A(aka eigenvalues ​​और गुणक) की विशेषता बहुपद की जड़ों (और बीजगणितीय गुणन) की गणना करता है । jordan_blockदिए गए मूल और बहुलता से एक जॉर्डन ब्लॉक का निर्माण करता है। block_diagonal_matrixविकर्ण पर जॉर्डन ब्लॉकों के साथ एक मैट्रिक्स बनाता है, जो वास्तव में एक जॉर्डन सामान्य रूप की परिभाषा है।


2

जे , 78 71 बाइट्स

1(#\.|."_1#{."1],.2=/\,&_)@>@{[:p.@>[:-&.>/ .(+//.@(*/)&.>)],&.>[:-@=#\

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

इस कार्य के दो चुनौतीपूर्ण भाग, आइगेनवैल्यूज़ प्राप्त करना और विकर्ण का प्रदर्शन करना, दोनों को एक ही संख्या में बाइट्स के लिए समाप्त करते हैं। इन्हें नियमों द्वारा अस्वीकृत कर दिया गया था, लेकिन किसी भी मामले में जिज्ञासु होने पर, J ने क्यूआर अपघटन ( 128!:0) के साथ-साथ LAPACK एडऑन के लिए बिल्डरों का निर्माण किया है, जिनका उपयोग eigenvalues ​​खोजने के लिए किया जा सकता है।

स्पष्टीकरण (रेखांकित)

इस क्रिया के दो प्रमुख भाग हैं: स्वदेशी का पता लगाना और विकर्ण का प्रदर्शन करना। सबसे पहले, eigenvalues ​​को खोजने के लिए, इनपुट मैट्रिक्स के लिए विशेषता बहुपद की जड़ों को ढूंढना होगा। उदाहरण से उसी इनपुट मैट्रिक्स का उपयोग करना,

   ] m =: _4 ]\ 5 4 2 1 0 1 _1 _1 _1 _1 3 0 1  1 _1 2
 5  4  2  1
 0  1 _1 _1
_1 _1  3  0
 1  1 _1  2

एक मैट्रिक्स एम के लिए विशेषता बहुपद का उपयोग कर पाया जा सकता है | एम - λI | = 0 जहां मैं एम के रूप में एक ही आयाम के साथ पहचान मैट्रिक्स है । अभिव्यक्ति एम - λI जम्मू में तैयार किया जा सकता में प्रत्येक तत्व मुक्केबाजी द्वारा एम के साथ एक -1 अगर यह किसी और विकर्ण पर है अन्यथा एक 0. प्रत्येक बॉक्स गुणांक के रूप में एक बहुपद प्रतिनिधित्व करता है।

   (],&.>[:-@=#\) m
┌────┬────┬────┬────┐
│5 _1│4 0 │2 0 │1 0 │
├────┼────┼────┼────┤
│0 0 │1 _1│_1 0│_1 0│
├────┼────┼────┼────┤
│_1 0│_1 0│3 _1│0 0 │
├────┼────┼────┼────┤
│1 0 │1 0 │_1 0│2 _1│
└────┴────┴────┴────┘

J में निर्धारक -/ .*हालांकि, संख्याओं पर काम करता है, न कि बॉक्सेड बहुपद। गुणन के बजाय, बहुपद उत्पाद की आवश्यकता होती है जिसे दृढ़ संकल्प ( [:+//.*/) का उपयोग करके पाया जा सकता है । मुड़ा हुआ घटाव अभी भी उपयोग किया जाता है, और इन दोनों क्रियाओं को बक्से के भीतर संचालित करने की आवश्यकता होती है इसलिए ( &.) अनबॉक्स ( >) का उपयोग किया जाता है।

   ([:-&.>/ .(+//.@(*/)&.>)],&.>[:-@=#\) m0
┌───────────────┐
│32 _64 42 _11 1│
└───────────────┘

ये विशेषता बहुपद के गुणांक हैं। जड़ों का उपयोग करके पाया जा सकता है p.जो गुणांक और जड़ों के रूप के बीच एक बहुपद के प्रतिनिधित्व को परिवर्तित करता है।

   ([:p.@>[:-&.>/ .(+//.@(*/)&.>)],&.>[:-@=#\) m0
┌─┬───────┐
│1│4 4 2 1│
└─┴───────┘

जड़ें हैं [4, 4, 2, 1]और उन एम के eigenvalues ​​हैं ।

दूसरा, विकर्ण प्रदर्शन किया जाना चाहिए। मूल्यों की प्रत्येक निरंतर जोड़ी को समानता के लिए परीक्षण किया जाता है।

   (2=/\]) 4 4 2 1
1 0 0

एक शून्य को जोड़ दिया जाता है और उन मूल्यों को एक-दूसरे के साथ जोड़ दिया जाता है।

   (],.0,~2=/\]) 4 4 2 1
4 1
4 0
2 0
1 0

फिर प्रत्येक पंक्ति को एक समान लंबाई में पैडल किया जाता है क्योंकि एक वर्ग मैट्रिक्स बनाने के लिए eigenvalues ​​की संख्या।

   (#{."1],.0,~2=/\]) 4 4 2 1
4 1 0 0
4 0 0 0
2 0 0 0
1 0 0 0

अंत में प्रत्येक पंक्ति को दाईं ओर स्थानांतरित किया जाता है और दाईं ओर गिरने वाले मानों को बाईं ओर धकेला जाता है। पहली पंक्ति को शून्य बार, दूसरी बार, तीसरी बार और इसी तरह स्थानांतरित किया जाता है।

   (-@i.@#|.!.0"_1#{."1],.0,~2=/\]) 4 4 2 1
4 1 0 0
0 4 0 0
0 0 2 0
0 0 0 1

उत्पादन एम के जॉर्डन अपघटन है ।



1

MATL , 29 बाइट्स, गैर-प्रतिस्पर्धात्मक

1$Yn1$ZQYotdUZS~0hXdF1hYSwXd+

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

यह मेरा पहला MATL सबमिशन है इसलिए इसमें सुधार होना तय है। मैंने इसे सीखने में कुछ समय बिताया और केवल अंत में मुझे याद आया कि 7 मई, 2016 से MATL का उपयोग करने पर यह काम नहीं कर सकता है। निश्चित रूप से, मैंने पर्याप्त प्रतिबद्धताओं की जाँच की उस दिन के लिए और यह नहीं चला।

मैं उपयोग करना पसंद करूंगा diagलेकिन ऐसा लगता है कि MATL केवल एकल तर्क संस्करण का समर्थन करता है। दूसरे तर्क को सुपरडाइनल (या विभिन्न समस्याओं के लिए किसी अन्य विकर्ण) के साथ मान रखने की आवश्यकता होगी।

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