मैंने यह पहली बार हाल ही में किया, मैथ्स के सुझावों का उपयोग करते हुए।
एसवीडी की सिफारिश सबसे अधिक मुझे लगता है, लेकिन मैंने चोल्स्की की सादगी का विकल्प चुना था:
यदि मैट्रिक्स , तो मैं को Cholesky का उपयोग करते हुए त्रिकोणीय मैट्रिक्स विघटित करता हूं, जैसे कि । मैं तब बैकस्बस्ट्रेशन या फॉरवर्डूबस्ट्रेशन का उपयोग करता हूं (इस पर निर्भर करता है कि मैं एल को ऊपरी या निचला त्रिकोणीय चुनता हूं), को पलटने के लिए , जैसे कि मेरे पास । इस से, मैं गणना कर सकता हूं ।M=AA⊤MLM=LL⊤LL−1M−1=(LL⊤)−1=L−⊤L−1
के साथ शुरू:
M=AA⊤ , जहां जाना जाता है और अंतर्निहित सममित है और सकारात्मक-निश्चित भी है।M
चोल्स्की कारक:
M→LL⊤ , जहाँ वर्ग और गैर-एकवचन हैL
बैक प्रतिस्थापन:
L→L−1 , संभवतः को पलटने का सबसे तेज़ तरीका (मुझे उस पर उद्धरण न दें)L
गुणा:
M−1=(LL⊤)−1=L−⊤L−1
संकेतन का उपयोग किया जाता है:
निचले सूचकांक पंक्तियाँ हैं, ऊपरी सूचकांक स्तंभ हैं और का स्थानान्तरण हैL−⊤L−1
मेरा चोल्स्की एल्गोरिथ्म (शायद न्यूमेरिकल रेसिपी या विकिपीडिया से)
Lji=Mji−Mi⋅MjMii−Mi⋅Mi
यह लगभग इन-प्लेस किया जा सकता है (आपको केवल विकर्ण तत्वों के लिए अस्थायी भंडारण, एक संचायक और कुछ पूर्णांक पुनरावृत्तियों की आवश्यकता होती है)।
मेरा बैक-प्रतिस्थापन एल्गोरिथ्म (न्यूमेरिकल रेसिपी से, उनके संस्करण की जाँच करें क्योंकि मैंने LaTeX मार्को के साथ एक गलती की है)
(L−1)ji=⎧⎩⎨1/Lii(−Li⋅(L−T)j)/Liiif i=jotherwise
जैसा कि अभिव्यक्ति में दिखाई देता है, यह आदेश कि आप मैट्रिक्स पर पुनरावृत्ति करते हैं, महत्वपूर्ण है (परिणाम मैट्रिक्स के कुछ भाग इसके अन्य भागों पर निर्भर करते हैं जिन्हें पहले से गणना की जानी चाहिए)। कोड में संपूर्ण उदाहरण के लिए न्यूमेरिकल रेसिपी कोड की जाँच करें। [संपादित करें]: वास्तव में, सिर्फ न्यूमेरिकल रेसिपी का उदाहरण देखें। मैंने बिंदु-उत्पादों का उपयोग करके बहुत अधिक सरलीकृत किया है, इस बिंदु पर कि उपरोक्त समीकरण में चक्रीय निर्भरता है चाहे आप किस क्रम में पुनरावृति करें ...L−T