आर में मैट्रिक्स का उलटा


90

मैं सोच रहा था कि मैट्रिक्स के व्युत्क्रम की गणना करने के लिए आपका अनुशंसित तरीका क्या है?

मेरे द्वारा किए गए तरीके संतोषजनक नहीं हैं। उदाहरण के लिए,

> c=rbind(c(1, -1/4), c(-1/4, 1))  
> c  
      [,1]  [,2]  
[1,]  1.00 -0.25  
[2,] -0.25  1.00  
> inv(c)  
Error: could not find function "inv"  
> solve(c)    
          [,1]      [,2]  
[1,] 1.0666667 0.2666667  
[2,] 0.2666667 1.0666667  
> solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  
> qr.solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  

धन्यवाद!


9
एक सामान्य सलाह: वस्तुओं को देने से बचें (जैसे मैट्रिस) एक नाम जो पहले से ही उपयोग किया गया है (यहां c)।
Qaswed

जवाबों:


152

solve(c)सही उलटा देता है। आपके कोड के साथ समस्या यह है कि आप मैट्रिक्स गुणा के लिए गलत ऑपरेटर का उपयोग कर रहे हैं। आपको solve(c) %*% cआर में मैट्रिक्स गुणन को लागू करने के लिए उपयोग करना चाहिए ।

जब आप आह्वान करते हैं तो तत्व गुणन द्वारा तत्व का प्रदर्शन करता है solve(c) * c


22

आप MASS पैकेज में फ़ंक्शन ginv () (मूर-पेनरोज़ सामान्यीकृत उलटा) का उपयोग कर सकते हैं


@xeon यकीन नहीं है कि आप इसे कैसे याद कर सकते हैं - पी देखें। पैकेज के लिए मैनुअल के 60 से ऊपर मेरे उत्तर में निर्दिष्ट है
डग

आपके उत्तर के लिए धन्यवाद। फिशरमे पैकेज से फंक्शन महिला () को चलाते समय मुझे यह त्रुटि मिली। रनिंग मावेरिक्स मैक ओएस एक्स।
व्लादिस्लाव डोभालगस

9

ध्यान दें कि यदि आप गति की परवाह करते हैं और विलक्षणताओं के बारे में चिंता करने की आवश्यकता नहीं है, solve()तो इसे प्राथमिकता दी जानी चाहिए ginv()क्योंकि यह बहुत तेज़ है, जितना आप कर सकते हैं:

require(MASS)
mat <- matrix(rnorm(1e6),nrow=1e3,ncol=1e3)

t0 <- proc.time()
inv0 <- ginv(mat)
proc.time() - t0 

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