2013-11-04 23 views
5

एक सीमित तत्व समस्या के संदर्भ में, मेरे पास 12800x12800 स्पैर मैट्रिक्स है। मैं हल करने के लिए MATLAB के \ ऑपरेटर का उपयोग करके रैखिक प्रणाली को हल करने का प्रयास कर रहा हूं और मुझे mldivide का उपयोग करके स्मृति त्रुटि से बाहर निकलना है। तो मैं बस सोच रहा हूं कि इसे गति देने का कोई तरीका है या नहीं।MATLAB स्पैर मैट्रिक्स सॉल्वर? मेमोरी त्रुटियां

मेरा मतलब है, क्या एलयू कारककरण की तरह कुछ वास्तव में मेमोरी त्रुटि नहीं मिलने के मामले में यहां मदद करेगा? मैंने प्राथमिकता में ढेर आकार को 256 जीबी तक बढ़ा दिया, जो अधिकतम मैं इसे प्राप्त कर सकता हूं, और मुझे अभी भी स्मृति त्रुटि से बाहर निकलना है।

इसके अलावा, बस एक सामान्य प्रश्न। मेरे पास अभी मेरे लैपटॉप पर 8 जीबी रैम है। 16 जीबी की मदद के लिए अपग्रेड कर रहे हैं? या शायद मैटलैब को और मेमोरी आवंटित करने के लिए मैं कुछ कर सकता हूं? मैं इस सामान से बहुत अपरिचित हूँ।

enter image description here

+2

एक बार जब मैं 'मल्डिवाइड' के मैटलैब के कार्यान्वयन पर पहुंच गया। यह एक बेहद अनुकूलित कोड है: इनपुट के प्रकार और दुर्लभता को ध्यान में रखते हुए। मुझे नहीं लगता कि यह संभावना है कि आप कुछ बेहतर तरीके से आने में सक्षम होंगे जबतक कि आप इसे विशेष रूप से अपने विशिष्ट कॉन्फ़िगरेशन के अनुरूप नहीं बनाते। – Shai

+0

क्या आप स्पष्टीकरण पैटर्न का साजिश पोस्ट कर सकते हैं? ('जासूस (ए)' के साथ बनाएं) –

+0

@RodyOldenhuis किया। – user1799323

उत्तर

0
this के अनुसार

और this कि आपको कुछ विकल्प matlab में स्मृति समस्या से बाहर से बचने के लिए है:

  • बढ़ाएँ ऑपरेटिंग सिस्टम के आभासी स्मृति
  • कार्य प्रबंधक में MATLAB प्रक्रिया के लिए उच्च प्राथमिकता दें
  • MATLAB
के 64-बिट संस्करण का उपयोग करें

कुछ महीने पहले, मैं matlab में पूर्णांक प्रोग्रामिंग पर काम कर रहा था। मुझे "स्मृति से बाहर" समस्या का सामना करना पड़ा, इसलिए मैंने स्पैर मैट्रिस का उपयोग किया और उल्लिखित युक्तियों का पालन किया, अंततः समस्या हल हो गई!

0

क्या आप mldivide का उपयोग करने के लिए बंद हैं? एक पुनरावृत्ति विधि के लिए सही स्थिति की तरह लगता है - bicg, gmres आदि?

0

जबकि बैकस्लैश ए की स्पैरिटी का लाभ उठाता है, तो जिस qr विधि का उपयोग करता है वह पूर्ण मैट्रिक्स उत्पन्न करता है जिसके लिए आवंटित करने के लिए (number_occupied_elements)^3 मेमोरी की आवश्यकता होती है। कुछ बातें आप कुछ विकर्णों के साथ विरल मैट्रिक्स विभाजित कर रहे हैं आप

  1. कोशिश कर सकते हैं, तो आप में आगे/पीछे की ओर प्रतिस्थापन के साथ प्रणाली
  2. समस्या को तोड़ने का प्रयास हल करने का प्रयास कर सकते हैं की कोशिश एक छोटे आप को तोड़ने एक छोटी
  3. में समस्या यह देखने के लिए कि मैट्रिक्स डिवीजन शुरू करने से पहले कौन से तत्व आपकी याददाश्त पर कब्जा कर रहे हैं, क्या इनमें से कोई भी पहले से साफ़ किया जा सकता है?
  4. आपकी समस्या आप इसे यहाँ कहा गया है, लेकिन अगर आपके सिस्टम के रूप में परिभाषित किया गया है करने के लिए लागू नहीं का उपयोग करने से (ए कॉलम की तुलना में अधिक पंक्तियां हैं) छद्म प्रतिलोम (A.'*A)\(A.'*b) का उपयोग कर छोटे स्तंभों आयाम एक परिणाम पैदा करता है

अतिरिक्त मेमोरी जोड़ने के लिए; Matlab32 2^32 बाइट्स मेमोरी (4 जीबी) का उपयोग करता है, इसलिए आपके कंप्यूटर पर भौतिक RAM बढ़ने से आप तब तक मदद नहीं करेंगे जब तक कि आप 64 बिट संस्करण का उपयोग नहीं कर रहे हों।

0

MATLAB \ आमतौर पर किसी समस्या को हल करने के लिए कई विधियों का प्रयास करता है। सबसे पहले, अगर यह देखता है कि यदि आपके मैट्रिक्स की संरचना सममित है तो यह Cholesky कारककरण की कोशिश करता है। कई कदमों के बाद यदि यह Matlab का एक उपयुक्त उत्तर वर्तमान संस्करण नहीं मिला है तो UMFPACK Suitsparse पैकेज का उपयोग करता है।

यूएमएफपैक एक विशिष्ट LU लागू है, और यह अभ्यास में स्मृति की गति और अच्छे उपयोग के लिए जाना जाता है।यह भरने को कम करने और मैट्रिक्स को जितना संभव हो उतना स्पैस रखने की कोशिश करता है। यही कारण है कि MATLAB इस कोड का उपयोग करता है। ,

वजह (मैं डॉ टिम डेविस, इसके निर्माता की देखरेख में मेरी पीएचडी के लिए UMFPACK पर काम कर रहा हूँ) एक और LU गुणन का उपयोग कर मदद नहीं करेगा। यह पहले से ही एक LU कारक है। आपकी समस्या का समाधान करने का सबसे आसान तरीका यह है कि यह बेहतर काम करने के साथ किसी अन्य डिवाइस पर आपकी समस्या का परीक्षण कर रहा है या नहीं।

मुझे लगता है कि मैटलैब कुछ कचरा संग्रह करते हैं और कुछ मेमोरी बर्बाद करते हैं, इसलिए यदि आप सीधे यूएमएफपीएक का उपयोग करते हैं तो यह आपकी मदद कर सकता है। आप या तो इसे सी/सी ++ में कार्यान्वित कर सकते हैं या इसके लिए MATLAB इंटरफ़ेस का उपयोग कर सकते हैं। SuitSparse पैकेज पर एक नज़र डालें।

आपके मैट्रिक्स की संरचना के आधार पर मुझे लगता है कि MATLAB Cholesky का उपयोग करने का प्रयास करता है; मुझे नहीं पता कि MATLAB की रणनीति क्या है यदि Cholesky स्मृति प्रबंधन में विफल रहता है। ध्यान रखें कि स्मृति के मामले में Cholesky को प्रबंधित करना आसान है।

ऐसे अन्य पैकेज भी हैं जो आपकी मदद कर सकते हैं। CSparse एक हल्के पैकेज है और यह मदद कर सकता है। अन्य famouse संकुल भी उपयोगी हो सकता है; superLU के लिए खोज।

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