मुझे स्पैर मैट्रिस के लिए अपना खुद का रैखिक समीकरण सॉल्वर लिखना है। मैं स्पैर मैट्रिस के लिए किसी भी प्रकार की डेटा संरचना का उपयोग करने के लिए स्वतंत्र हूं और मुझे कंजुगेट ग्रेडिएंट सहित कई हलकों को लागू करना है।कक्षा के लिए फास्ट स्पैर मैट्रिक्स गुणा
मैं सोच रहा था कि स्पैर मैट्रिक्स को स्टोर करने का एक प्रसिद्ध तरीका है, जैसे वेक्टर के साथ गुणा अपेक्षाकृत तेज़ है।
अभी मेरे स्पैर मैट्रिस मूल रूप से एक लपेटा std::map< std::pair<int, int>, double>
लागू किया गया है जो डेटा को स्टोर करता है, यदि कोई हो। यह वेक्टर से ओ (एन²) जटिलता के साथ एक ओ (n²log (n)) के साथ एक मैट्रिक्स के गुणा को बदलता है क्योंकि मुझे प्रत्येक मैट्रिक्स तत्वों के लिए लुक-अप करना होता है। मैंने येल स्पैर्स मैट्रिक्स प्रारूप में देखा है और ऐसा लगता है कि किसी तत्व का पुनर्प्राप्ति ओ (लॉग (एन)) में भी है, इसलिए मुझे यकीन नहीं है कि यह बहुत तेज़ होगा।
संदर्भ के लिए मेरे पास 800x800 मैट्रिक्स है जो 5000 प्रविष्टियों के साथ पॉप्युलेट किया गया है। Conjugate ढाल विधि के साथ इस तरह के एक प्रणाली को हल करने में लगभग 450 सेकंड लगते हैं।
क्या आपको लगता है कि यह किसी अन्य डेटा संरचना के साथ बहुत तेज़ करना संभव है?
धन्यवाद!
पहले विकिपीडिया पढ़ें। http://en.wikipedia.org/wiki/Sparse_matrix इसमें सामान्य स्टोरेज विधियों की एक अच्छी सूची है जो आपको कुशल संचालन प्रदान करेगी। –
@Song वांग: वर्ग के उद्देश्य से आरंभ करने के स्वयं के परिमित तत्व विधि solver – lezebulon