2009-07-25 14 views
6

में मैट्रिक्स विकर्ण है या नहीं, मेरे पास एक मैट्रिक्स है और मैं जानना चाहता हूं कि यह विकर्ण है या नहीं। मैं आर प्रोग्रामिंग भाषा में यह कैसे करूँ?यह निर्धारित करना कि आर प्रोग्रामिंग भाषा

+0

कृपया अपने प्रश्न को प्रासंगिक गणित मंच पर पूछें ... –

+0

यह ठीक है, उनकी उम्मीद है। http://blog.stackoverflow.com/2009/07/stack-overflow-flash-mobs/ – LachlanG

+7

@ मिच: यह एक प्रोग्रामिंग प्रश्न है। आर एक प्रोग्रामिंग भाषा है। – jalf

उत्तर

7

यदि आपके पास दिया गया मैट्रिक्स है, तो, एक तरीका यह है कि ईजिन वैक्टरों को मूल मैट्रिक्स के विपरीत ईजिन मूल्यों के विकर्ण का समय लगता है। यह हमें मूल मैट्रिक्स वापस देना चाहिए। आर में ऐसा दिखता है जैसे:

m <- matrix(c(1:16), nrow = 4) 
p <- eigen(m)$vectors 
d <- diag(eigen(m)$values) 
p %*% d %*% solve(p) 
m 
ताकि उदाहरण में

[पी% % d%% का समाधान (पी)] मीटर के समान होना चाहिए

और हाँ, मैं पूरी तरह चुरा लिया कि से R Wiki

+0

यह एक अच्छा मुद्दा है। मूल प्रश्न का उत्तर देने के लिए (मैट्रिक्स एम की विकर्णता की जांच करने के लिए): 1) eigenvector matrix p = eigen (m) $ vectors 2 की गणना करें) जांचें कि eigenvector matrix p उलटा है (यानी, हल (पी) करता है परिणामस्वरूप त्रुटि नहीं है)।यदि हां, तो यह विकर्ण है, और एकतापूर्ण कार्रवाई पी है। यदि नहीं, तो यह विकर्ण नहीं है। क्यों? क्योंकि अवांछितता का अर्थ है कि ईगेंसस्पेस के प्रत्यक्ष उत्पाद का आयाम मूल मैट्रिक्स के आयाम के समान है, और यह स्थिति आवश्यक है और विकर्णता के लिए पर्याप्त है। – gappy

+0

नोट करें कि मैट्रिक्स सममित है तो हमें (पी) को हल करने की आवश्यकता नहीं है क्योंकि सममित मैट्रिक्स के ईजेनवेक्टर ऑर्थोगोनल हैं और ऑर्थोगोनल मैट्रिक्स का स्थानांतरण इसके विपरीत है। तो हम पी% *% डी% *% टी (पी) लिख सकते हैं। मामले के लिए बस एक संभावित अनुकूलन जब एम = टी (एम) – user236215

4

आप पूर्ण एल्गोरिदम लागू कर सकते हैं यह जांचने के लिए कि क्या मैट्रिक्स जॉर्डन रूप या विकर्ण एक को कम करता है (उदाहरण के लिए, this document)। या आप त्वरित और गंदे तरीके ले सकते हैं: एक एन-आयामी वर्ग मैट्रिक्स के लिए, ईजिन (एम) $ मानों का उपयोग करें और जांचें कि वे अलग-अलग मान हैं। यादृच्छिक matrices के लिए, यह हमेशा पर्याप्त है: degeneracy prob.0 है।

पीएस .: नीचे जेडी लांग द्वारा एक साधारण अवलोकन के आधार पर, मुझे याद आया कि विकर्णता के लिए एक आवश्यक और पर्याप्त स्थिति यह है कि eigenvectors मूल स्थान फैलता है। इसे जांचने के लिए, बस देखें कि eigenvector मैट्रिक्स में पूर्ण रैंक है (कोई शून्य eigenvalue)।

diagflag = function(m,tol=1e-10){ 
    x = eigen(m)$vectors 
    y = min(abs(eigen(x)$values)) 
    return(y>tol) 
} 
# nondiagonalizable matrix 
m1 = matrix(c(1,1,0,1),nrow=2) 
# diagonalizable matrix 
m2 = matrix(c(-1,1,0,1),nrow=2) 

> m1 
    [,1] [,2] 
[1,] 1 0 
[2,] 1 1 

> diagflag(m1) 
[1] FALSE 

> m2 
    [,1] [,2] 
[1,] -1 0 
[2,] 1 1 

> diagflag(m2) 
[1] TRUE 
+0

फ़्लोटिंग पॉइंट गणित के साथ गणना के दौरान आपको बिल्कुल अलग-अलग साधनों के बारे में चिंता करने की आवश्यकता नहीं है? – hadley

+0

हां, और यही वह जगह है जहां समस्या संरचना का ज्ञान मदद करता है। यदि मैट्रिक्स में कुछ यादृच्छिक संरचनाएं हैं, उदा। गाऊशियन आईआईडी, कोई ईजीनवे के कुछ वितरण गुणों (आमतौर पर, यूनिट सर्कल पर वर्दी) का दावा कर सकता है, और उसके बाद शून्य अनुमानों के लिए सरल परीक्षण लागू करता है जो कि ईगेंवल समान हैं। यह पेपर मूल रूप से यादृच्छिक मैट्रिक्स के बारे में जानता है: http://tinyurl.com/eigenvalues। यदि मैट्रिक्स के बारे में कुछ भी नहीं पता है, तो मैं कुछ और ह्यूरिस्टिक्स का प्रयास करूंगा .. पीएस .: मुझे ggplot2 पसंद है! – gappy

+0

मुझे जो कुछ पता था उसे लेने और इसे एक बेहतर उत्तर में खींचने के लिए धन्यवाद! बहुत बढ़िया। यही कारण है कि मुझे स्टैक ओवरफ्लो पसंद है; अच्छी चीजें एक शुद्ध थ्रेडेड चर्चा के मुकाबले सबसे ज्यादा स्पष्ट रूप से तैरती हैं। (ggplot करता है, वास्तव में, चट्टान!) –

2

आप में कुछ बुनियादी चर्चा और कोड लिए this page की जांच करना चाह सकते हैं: तो यहाँ कोड है। आपको "विकर्ण" की खोज करने की आवश्यकता होगी, जहां प्रासंगिक भाग शुरू होता है।

संबंधित मुद्दे