2009-08-04 50 views
8

के लिए बूस्ट का रैखिक बीजगणित समाधान क्या बूस्ट में एक है? जहां ए, वाई और एक्स एक मैट्रिक्स (स्पैस और बहुत बड़ा हो सकता है) और वैक्टर क्रमशः। या तो वाई या एक्स अज्ञात हो सकता है।वाई = एक्स

मैं इसे यहाँ खोजने के लिए प्रतीत नहीं कर सकते हैं: http://www.boost.org/doc/libs/1_39_0/libs/numeric/ublas/doc/index.htm

+2

चूंकि मुझे बूस्ट या सी ++ के बारे में कुछ भी पता नहीं है, इसलिए मैं सिर्फ यह कहूंगा कि एक समाधान है यदि केवल और यदि ए एक अविभाज्य मैट्रिक्स है। यदि ए अचूक नहीं है, तो कम से कम वर्ग समाधान x = (ए^टी ए)^(- 1) ए^टी वाई निकटतम चीज है। –

+4

जो आम तौर पर मैट्रिक्स समीकरणों को हल नहीं किया जाता है (संख्यात्मक स्थिरता और गति के लिए इनवर्ड्स आम तौर पर खराब होते हैं), बल्कि आप क्यूआर या लू कारकीकरण को बाद में प्रतिस्थापन के बाद देखेंगे। –

उत्तर

4

रैखिक समाधानकर्ताओं आम तौर पर LAPACK पुस्तकालय जो BLAS पुस्तकालय के एक उच्च स्तर विस्तार है का हिस्सा हैं। यदि आप लिनक्स पर हैं, तो इंटेल एमकेएल में कुछ अच्छे सॉल्वर हैं, जो घने और स्पैस मैट्रिस दोनों के लिए अनुकूलित हैं। यदि आप खिड़कियों पर हैं, तो एमकेएल के पास एक महीने का परीक्षण मुफ्त में है ... और ईमानदार होने के लिए मैंने वहां किसी अन्य व्यक्ति की कोशिश नहीं की है। मुझे पता है कि एटलस पैकेज में एक मुफ्त LAPACK कार्यान्वयन है लेकिन यह सुनिश्चित नहीं है कि विंडोज़ पर चलना कितना मुश्किल है।

वैसे भी, एक LAPACK लाइब्रेरी के लिए चारों ओर खोजें जो आपके सिस्टम पर काम करता है।

+4

नोट: LAPACK एक स्पैस सॉल्वर नहीं है, इसलिए यह स्पैर मैट्रिस को बहुत कुशलता से स्टोर नहीं करता है, न ही यह स्पैस सिस्टम को विशेष रूप से कुशलतापूर्वक हल करता है। इंटेल एमकेएल में स्पैस सॉल्वर (http://software.intel.com/sites/products/collateral/hpc/mkl/mkl_brief.pdf) शामिल हैं, विशेष रूप से पार्डिसो प्रत्यक्ष स्पैस सॉल्वर (http: //www.pardiso-project .org)। घने और स्पैस संख्यात्मक रैखिक बीजगणित सॉफ्टवेयर का एक अच्छा अवलोकन http://www.netlib.org/utk/people/JackDongarra/la-sw.html – las3rjock

+0

पर पाया जा सकता है वास्तव में, और जब तक कि आप एक वाणिज्यिक उत्पाद का निर्माण नहीं कर रहे हैं I एमकेएल लाइब्रेरी से गुजरने और सिर्फ पार्डिसो प्राप्त करने का सुझाव देगा, आप पैसे बचाएंगे और लाइसेंसिंग मुद्दों से निपटने के लिए बचत करेंगे। लिंक के लिए – DeusAduro

3

बूस्ट प्रलेखन पढ़ना, यह w.r.t x को हल करने जैसा प्रतीत नहीं होता है। वाई में हल करना केवल मैट्रिक्स-वेक्टर उत्पाद का मामला है, जो यूबुला में लागू होता है।

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

3

बूस्ट के रैखिक बीजगणित पैकेज की ट्यूनिंग "घने matrices" पर केंद्रित है। जहां तक ​​मुझे पता है, बूस्ट के पैकेज में कोई रैखिक-सिस्टम-सॉल्वर नहीं है। सी में संख्यात्मक पकाने की विधि (http://www.nr.com/oldverswitcher.html) "में स्रोत कोड का उपयोग कैसे करें?

नोट। सोर्स कोड में सूक्ष्म इंडेक्स बग हो सकता है (कुछ कोड एरे इंडेक्स का उपयोग 1 से शुरू होता है)

+0

+1 धन्यवाद। –

+1

यह एक बग नहीं है यह एक सुविधा है! फोर्ट्रान उपयोगकर्ताओं के लिए एल्गोरिदम अधिक आकर्षक बनाने के लिए था। –

3

JAMA/TNT पर एक नज़र डालें। मैंने इसे केवल गैर-स्पैस मैट्रिस के लिए उपयोग किया है (आप शायद क्यूआर या लू कारकेशंस चाहते हैं, जिनमें से दोनों में सॉल्वर यूटिलिटी विधियां हैं), लेकिन जाहिर है कि इसमें स्पैर मैट्रिस के लिए कुछ सुविधाएं हैं।

4

के लिए Ax = b सबसे अच्छा समाधानकर्ताओं में से एक, जब एक विरल है, टिम डेविस की UMFPACK

UMFPACK ए के एक विरल LU अपघटन की गणना करता है यह एल्गोरिथ्म कि मैटलैब जब में पर्दे के पीछे इस्तेमाल किया जाता है है आप x=A\b टाइप करें (और ए स्पैस और वर्ग है)। UMFPACK मुफ्त सॉफ्टवेयर (जीपीएल)

यह भी ध्यान दें कि वाई = एक्स, और एक्स ज्ञात है, लेकिन वाई नहीं है, आप रैखिक प्रणाली को हल करके नहीं, एक स्पैर मैट्रिक्स वेक्टर गुणा करके वाई की गणना करते हैं।

17

हां, आप बूस्ट की ublas लाइब्रेरी के साथ रैखिक समीकरण हल कर सकते हैं। यहाँ एक छोटी LU-खंड करना और उलटा पाने के लिए पीठ के प्रतिस्थापन का उपयोग कर तरीका है:

using namespace boost::ublas; 

Ainv = identity_matrix<float>(A.size1()); 
permutation_matrix<size_t> pm(A.size1()); 
lu_factorize(A,pm) 
lu_substitute(A, pm, Ainv); 

तो एक रेखीय प्रणाली कुल्हाड़ी = y हल करने के लिए, आप समीकरण ट्रांस (ए) को हल किया जा कुल्हाड़ी = ट्रांस (ए) वाई के विपरीत (ट्रांस (ए) ए)^- 1 प्राप्त करने के लिए x: x = (ट्रांस (ए) ए)^- 1 एई।

+10

यदि आपको केवल एक्स = वाई के लिए समाधान की आवश्यकता है, तो बस 'permutation_matrix अपराह्न (एएसआईज़ 1()) का उपयोग करें; lu_factorize (ए, अपराह्न); lu_substitute (ए, अपराह्न, वाई); 'और' y' समाधान के साथ बदल दिया गया है। – Joey

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