मैं MATLAB से C ++ में एक मौजूदा कोड पोर्ट कर रहा हूं और (बजाय अधिक विशिष्ट रूप से ) हल करने के लिए एक रैखिक प्रणाली है
मैट्रिक्स , घने और सामान्य रूप का है, लेकिन 1000x1000 से बड़ा नहीं है। तो MATLAB में, समाधान फ़ंक्शन या फ़ॉरवर्ड-स्लैश नोटेशन द्वारा पाया जाता हैmrdivide(b,A)
x = b/A;
मुझे अपने C ++ कोड में BLAS और LAPACK दिनचर्या का उपयोग करके इसे कैसे हल करना चाहिए?
मैं LAPACK दिनचर्या से परिचित हूं DGESV
जो लिए को हल करती है ।
इसलिए, मुझे लगा कि मैट्रिक्स ट्रांसजेंड आइडेंटिटी का उपयोग करके कुछ हेरफेर करना है:
फिर DGESV
ट्रांसपोज़्ड पर परिचालन का उपयोग करके अंतिम रूप को हल करें । (इसलिए को स्थानांतरित करने के लिए लागत और सिस्टम को हल करने के लिए लागत) A
क्या एक दृष्टिकोण अधिक कुशल है या अन्यथा बेहतर है ?
मैं मैट्रिक्स और वेक्टर कक्षाओं के साथ-साथ BOOST UBLAS लाइब्रेरी से BLAS कार्यान्वयन के साथ-साथ LAPACK लाइब्रेरी रूटीन के लिए बाइंडिंग के साथ काम कर रहा हूं। मैं अन्य कार्यों के लिए सफलतापूर्वक इस सेटअप का उपयोग कर रहा हूं और इन पुस्तकालयों तक सीमित समाधान खोजने की उम्मीद कर रहा हूं।
इसके अलावा, मुझे ध्यान देना चाहिए कि मैं कोड सेटअप के दौरान केवल कुछ ही बार इस प्रकार का ऑपरेशन कर रहा हूं, इसलिए प्रदर्शन एक महत्वपूर्ण चिंता का विषय नहीं है।
हो सकता है कि इस MATLAB प्रलेखन पर mrdivide
दूसरों के लिए उपयोगी है।
boost::numeric::bindings::lapack::gesvx()
, लेकिन यह मेरे सवाल का हिस्सा नहीं है। अगर मुझे सफलता मिलती है, तो मैं यह नोट करूंगा कि यह कैसे करना है।