एक बड़े विरल सममित (लेकिन सकारात्मक निश्चित नहीं) प्रणाली के लिए सॉल्वर का सबसे अच्छा विकल्प


10

मैं वर्तमान में कुछ बड़े एल्गोरिदम द्वारा उत्पन्न बहुत बड़े सममित (लेकिन सकारात्मक निश्चित नहीं) प्रणालियों को हल करने पर काम कर रहा हूं। इन मेट्रिसेस में एक अच्छा ब्लॉक स्पार्सिटी है जिसका उपयोग समानांतर हल करने के लिए किया जा सकता है। लेकिन मैं यह तय नहीं कर सकता कि मुझे प्रत्यक्ष दृष्टिकोण (जैसे बहु-ललाट) या पुनरावृत्ति वाला (पूर्वगामी GMRES या MINRES) का उपयोग करना चाहिए या नहीं। मेरे सभी अध्ययनों से पता चलता है कि पुनरावृत्त सॉल्वर (यहां तक ​​कि 7 आंतरिक पुनरावृत्तियों के बहुत तेजी से अभिसरण के साथ) MATLAB में प्रत्यक्ष '\' ऑपरेटर को हराने में विफल रहते हैं। लेकिन सिद्धांत रूप में, प्रत्यक्ष तरीकों को महंगा माना जाता है। यह कैसे हो रहा है? क्या इस तरह के मामले के लिए कोई तारीख दस्तावेज़ या कागज है? क्या मैं जीएमआरईएस जैसे लचीले पुनरावृत्त सॉल्वर के रूप में कुशलता से प्रत्यक्ष तरीकों का उपयोग करके समानांतर प्रणालियों में ब्लॉक स्पारसिटी का उपयोग कर सकता हूं?


3
मुझे नहीं लगता कि लोग आपके विशिष्ट मैट्रिक्स के बारे में अधिक जानकारी के बिना वास्तव में इस पर प्रभावी ढंग से टिप्पणी कर सकते हैं। आयाम क्या हैं? स्पार्सिटी पैटर्न कैसा होता है?
कॉस्टिस

2
बहुत कुछ इस बात पर निर्भर करता है कि आप बड़े से क्या मतलब है। सैकड़ों की संख्या में चर, , की संख्या है? लाखों लोगों की? n
ब्रायन बॉर्कर्स

2
यह प्रश्न scicomp.stackexchange.com/q/81/276 के साथ काफी हद तक ओवरलैप होता है ; आपको वहां उपयोगी जानकारी मिल सकती है। इसके अलावा, उस प्रश्न के आधार पर, आपके ऑपरेटर के स्पेक्ट्रम (या आपके पहले से संचालित ऑपरेटर के स्पेक्ट्रम) के बारे में बात करना उपयोगी हो सकता है।
ज्योफ ऑक्सीबेरी

जवाबों:


9

MUMPS विरल प्रत्यक्ष सॉल्वर सममित अनिश्चित प्रणालियों को संभाल सकता है और स्वतंत्र रूप से उपलब्ध है ( http://graal.ens-lyon.fr/MUMPS/ )। इयान डफ MUMPS और MA57 दोनों के लेखकों में से एक थे इसलिए एल्गोरिदम में कई समानताएं हैं।

MUMPS को वितरित-मेमोरी समानांतर कंप्यूटरों के लिए डिज़ाइन किया गया था, लेकिन यह एकल-प्रोसेसर मशीनों पर भी अच्छा काम करता है। यदि आप इसे बहु-थ्रेडेड BLAS लाइब्रेरी से जोड़ते हैं, तो आप साझा मेमोरी, मल्टीकोर प्रोसेसर पर उचित स्पीडअप प्राप्त कर सकते हैं।

आपने यह नहीं कहा कि "बहुत बड़ी" कितनी बड़ी है, लेकिन MUMPS में समस्याओं को संभालने के लिए एक आउट-ऑफ-कोर क्षमता भी है जहां उपलब्ध मेमोरी में फैक्टरेड मैट्रिक्स फिट नहीं होगा।


7

सामान्य समस्या जो प्रत्यक्ष सॉल्वर से पीड़ित होती है, वह भराव की घटना है, जिसका अर्थ है कि विरल मैट्रिक्स का व्युत्क्रम घना हो सकता है। यह विशाल मेमोरी आवश्यकताओं की ओर जाता है यदि मैट्रिक्स की संरचना "उपयुक्त" नहीं है।

इन मुद्दों के आसपास काम करने की कोशिश की जा रही है, और MATLAB की डिफ़ॉल्ट- luकमी उनमें से कुछ को रोजगार देती है। क्रमपरिवर्तन, विकर्ण स्केलिंग और इस तरह के अवलोकन के लिए http://www.mathworks.de/de/help/matlab/ref/lu.html देखें । MUMPS ( http://graal.ens-lyon.fr/MUMPS/ ) जैसे अधिक उन्नत पैकेजों के लिए समान पाठ्यक्रम का सच है ।

सामान्य तौर पर, हालांकि, यदि आपकी समस्या काफी बड़ी है, तो आप उस मेमोरी सीमा से टकराएंगे, और आपको पुनरावृत्ति (क्रायलोव) विधियों का उपयोग करना होगा।

यदि आपकी समस्या सममित और अनिश्चित है, तो MINRES स्पष्ट विकल्प हो सकता है। ध्यान दें, हालांकि, अगर समस्या सममित है, तो GMRES और MINRES सटीक अंकगणित में एक ही काम करते हैं, लेकिन GMRES रूढ़िवाद के नुकसान से कम पीड़ित हैं। इसलिए, कुछ लोग GMRES को "MINRES का सर्वोत्तम कार्यान्वयन" मानते हैं।

किसी भी स्थिति में, आप शायद अपने सिस्टम को पूर्व-निर्धारित करने से लाभान्वित होंगे। यदि आप एक पूर्व-व्यवसायी की सिलाई पर समय नहीं बिताना चाहते हैं, तो अधूरा LU-Factization पूर्व-भुगतान (ILU) आपको पहले से ही कहीं मिल सकता है।


2

कोई भी पुनरावृत्त सॉल्वर केवल प्रत्यक्ष तरीकों को हरा सकता है यदि समस्या पर्याप्त रूप से बड़ी हो (बड़ी, कई कारकों पर निर्भर करती है जैसे कि भंडारण की आवश्यकता, कार्यान्वयन की दक्षता)। और किसी भी क्रायलोव विधि (उदाहरण के लिए GMRES) केवल तभी अच्छे होते हैं जब आप एक उपयुक्त पूर्व शर्त (व्यवहार में) का उपयोग करते हैं। यदि आप किसी पूर्व शर्त का उपयोग नहीं कर रहे हैं, तो क्रायलोव तरीकों का सामान्य रूप से कोई फायदा नहीं है। मैं भी ब्लॉक विरल मैट्रिस के साथ काम करता हूं (ये पीडीई एप्लिकेशन से आते हैं) और देखा कि ब्लॉक प्रीकॉन्डेड (अतिव्यापक शिवरेज़) क्रिलोव सॉल्वर (या तो मोटे ग्रिड सुधार (या एक मल्टीग्रिड) के साथ युग्मित GMRES या BiCG-Stab को फिर से शुरू किया गया है) इन के लिए स्केलेबल हैं मैट्रिसेस का प्रकार।


2

शीर्ष पायदान प्रोग्रामिंग के कारण मतलब '' ऑपरेटर अत्यधिक कुशल है। आप कुछ विचार देख सकते हैं और कैसे उन्होंने टिमोथी डेविस की पुस्तक में सभी संभावित शॉर्ट कट का उपयोग किया।

मतलाब में आप गमरों का उपयोग कर सकते हैं, जो अच्छी तरह से विकसित और स्थिर है। संभवतः मिनारे, जो सैद्धांतिक रूप से आपके मामले के लिए आदर्श होना चाहिए, वह विश्वसनीय नहीं हो सकता है (कम से कम मेरा अनुभव ऐसा कहता है)। यदि आप matlab gmres से समान या उच्च दक्षता प्राप्त कर रहे हैं

  1. आपका सिस्टम काफी बड़ा है (कम से कम कुछ हजार से कुछ हजार)।
  2. यदि आप सही प्रकार के मापदंडों (RESTART, MAXIT, X0) का उपयोग कर रहे हैं। इसके लिए कोई स्पष्ट दिशानिर्देश उपलब्ध नहीं हैं। अपने अनुभव का उपयोग करें।
  3. एक अच्छे प्रीकॉन्डिशनर का इस्तेमाल करें। आप ILU या उससे भी सस्ता, एक ब्लॉक जैकोबी का उपयोग कर सकते हैं। यह प्रयास में काफी कटौती करेगा।
  4. सबसे महत्वपूर्ण: यदि आपका मैट्रिक्स विरल है, तो matlab स्पार्स प्रारूप का उपयोग करें। मतलबी गमरे आदर्श रूप से उसी के लिए बनाए गए हैं। यह काफी हद तक लागत में कटौती करेगा।

और भी बड़े सिस्टम के लिए, PETSc जैसे टूल का उपयोग करें।


1

यदि आपके मैट्रिक्स में हजारों या उससे कम के मध्य दसियों में आयाम हैं, तो एक प्रत्यक्ष विधि का उपयोग करें, हालांकि अनिश्चित सममित प्रणालियों के लिए कई स्वतंत्र रूप से उपलब्ध प्रत्यक्ष तरीके नहीं हैं (वास्तव में कोई भी नहीं जिसे मैं जानता हूं कि खुले स्रोत हैं)। नहीं है MA57 एचएसएल से, लेकिन वह शैक्षणिक उपयोग के लिए केवल मुफ़्त है। आप निश्चित रूप से समरूपता को अनदेखा कर सकते हैं और UMFPACK का उपयोग कर सकते हैं ।

आयाम में सैकड़ों के निचले दसियों के आसपास, एक सीधी पद्धति का मेमोरी उपयोग उस से अधिक होने लगता है जो एक विशिष्ट डेस्कटॉप कंप्यूटर यथोचित रूप से संभाल सकता है, इसलिए जब तक कि आपके पास गोमांस साझा मेमोरी मशीन नहीं है, आपको पुनरावृत्त तरीकों पर जाने की आवश्यकता होगी। अनिश्चित समस्याओं के लिए, आप सममित प्रणालियों के लिए BiCG (द्विभाजित ग्रेडिएंट) के विशेषज्ञ हो सकते हैं, हालांकि टूटना संभव है। हाल ही में जारी MINRES-QLP हैसममित प्रणालियों के लिए है जो अधिक संख्यात्मक स्थिरता प्रदान करता है।

दो तरीकों के लिए अलग-अलग कार्यान्वयन की आवश्यकता होती है, क्योंकि प्रत्यक्ष तरीकों के लिए आपको वास्तव में मैट्रिक्स बनाने की आवश्यकता होती है, जबकि पुनरावृत्ति दृष्टिकोण में, आप आमतौर पर मैट्रिक्स को स्पष्ट रूप से नहीं बनाएंगे।

ऐसे कई कारण हैं कि एक दृष्टिकोण दूसरे की तुलना में तेज हो सकता है, खासकर मैट्रिक्स आयाम के कार्य के रूप में। अत्यधिक बीमार प्रणालियों के लिए, पुनरावृत्त तरीके बहुत बुरी तरह से गतिरोध कर सकते हैं। नहीं-तो-विरल मैट्रिस के लिए, सीधी विधियाँ बहुत सारे भरण-पोषण का निर्माण करती हैं, जो चीजों को बहुत कम कर देती हैं। इसके अलावा, Matlab में प्रत्यक्ष तरीके अत्यधिक अनुकूलित हैं (यह आंतरिक रूप से UMFPACK या MA57 का उपयोग करता है), जबकि पुनरावृत्त तरीकों को आमतौर पर सीधे Matlab में कोडित किया जाता है, और स्तर 3 BLAS का फायदा उठाने के कम अवसर होते हैं क्योंकि अड़चनें Matvecs और dot उत्पादों के अनुप्रयोग हैं।

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