2017-07-18 9 views
6

एक सममित घने मैट्रिक्स (2000 * 2000) के विपरीत के विकर्ण की गणना करने का सबसे अच्छा तरीका क्या है? वर्तमान में मैं पहले solve(x) का उपयोग कर उलटा गणना और फिर निकालने विकर्ण (diag(y))। भले ही यह काम करता है लेकिन मैं सोच रहा हूं कि ऐसा करने का एक बेहतर तरीका है ताकि कोड तेजी से चलता है। मैंने chol2inv() की कोशिश की लेकिन यह काम नहीं किया क्योंकि मेरा मैट्रिक्स सकारात्मक-निश्चित नहीं है।एक मैट्रिक्स के विपरीत के विकर्ण की गणना करने के लिए कुशल तरीका

अद्यतन: रुचि रखने वाले किसी भी व्यक्ति के लिए, मैं एक अनुकूलित गणित लाइब्रेरी इंटेल एमकेएल का उपयोग करके मैट्रिक्स उलटा गति को गति देने में सक्षम था। मेरी मशीन पर 2000 * 2000 मैट्रिक्स को उलटा करने में 3 सेकंड लगते हैं। इंटेल एमकेएल माइक्रोसॉफ्ट आर ओपन के साथ उपलब्ध है।

+0

छोटी Google खोज में मैंने एल्गोरिदम और इस समस्या से संबंधित अन्य कार्यान्वयन के लिए कुछ लिंक पाया। क्या आपको स्पष्ट रूप से विकर्ण के प्रत्येक तत्व की आवश्यकता है या क्या आप इसे किसी अन्य गणना में उपयोग करना चाहते हैं? यदि आप इसे आगे की गणना में उपयोग करना चाहते हैं, तो यह ज्ञान निष्पादन को तेज करने के लिए महत्वपूर्ण होगा। – Vandenman

+0

मैं अन्य गणनाओं में विकर्ण का उपयोग करता हूं। विशेष रूप से, मैं प्रत्येक तत्व को किसी अन्य वेक्टर में उलटा मैट्रिक्स के विकर्ण के प्रत्येक तत्व से विभाजित करता हूं और उन्हें जोड़ता हूं। – Katherine

+0

आप कैसे जानते हैं कि उलटा विकर्ण के प्रत्येक तत्व शून्य नहीं है? क्या मैट्रिक्स में कुछ संपत्ति है जो इसकी गारंटी देती है? – dmuir

उत्तर

0

अपने मैट्रिक्स सममित, विकर्ण, या सकारात्मक-निश्चित किया जा रहा है की तरह कोई अच्छा गुण है, तो अपने एकमात्र विकल्प उदासी करना है sum(diag(solve(x)))

कितना समय है कि आपके मैट्रिक्स पर चलाने के लिए ले करता है?

+0

यह सममित है लेकिन दुर्भाग्य से सकारात्मक-निश्चित नहीं है। Chol2inv बहुत तेज होगा। इसे चलाने में लगभग 15 सेकंड लग गए। रनटाइम भयानक नहीं है लेकिन यह तेजी से बढ़ता है क्योंकि मेरे पास पुनरावृत्ति प्रक्रिया है इसलिए मैट्रिक्स प्रक्रिया में हर बार उलटा होता है। – Katherine

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

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