2009-09-14 13 views
14

मैंने कुछ स्थानों पर (दस्तावेज़ में और इस ब्लॉग पोस्ट में: http://blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/) पढ़ा है कि मैटलैब में आविष्कार का उपयोग अनुशंसित नहीं है क्योंकि यह धीमा और गलत है।मैटलैब का आक्रमण धीमा और गलत क्यों है?

मैं इस गलतता का कारण ढूंढने की कोशिश कर रहा हूं। अभी तक, Google ने मुझे दिलचस्प परिणाम नहीं दिया है, इसलिए मैंने सोचा कि कोई यहां मुझे मार्गदर्शन कर सकता है।

धन्यवाद!

उत्तर

30

मैंने जो गलत बताया है, वह आईएनवी विधि के साथ है, MATLAB के कार्यान्वयन के साथ नहीं। आपको समीकरणों के सिस्टम को हल करने के लिए क्यूआर, एलयू या अन्य विधियों का उपयोग करना चाहिए क्योंकि इन तरीकों को आम तौर पर प्रश्न में सिस्टम की स्थिति संख्या को स्क्वायर करने की आवश्यकता नहीं होती है। आविष्कार का उपयोग आम तौर पर एक ऐसे ऑपरेशन की आवश्यकता होती है जो मूल प्रणाली की स्थिति संख्या को स्क्वायर करके सटीकता खो देता है। जब तक आप के लिए हल करने के लिए कई दाहिने हाथ की ओर वैक्टर है

--Loren

19

मुझे लगता है कि लॉरेन के ब्लॉग का बिंदु यह नहीं है कि MATLAB का inv फ़ंक्शन विशेष रूप से धीमा या मैट्रिक्स उलटा गणना करने के किसी भी अन्य संख्यात्मक कार्यान्वयन से अधिक गलत है; बल्कि, ज्यादातर मामलों में उलटा स्वयं की आवश्यकता नहीं होती है, और आप अन्य तरीकों से आगे बढ़ सकते हैं (जैसे \ - बैकस्लैश ऑपरेटर - एक उलटा गणना करने के बजाए एक रैखिक प्रणाली को हल करना)।

+1

इसके अलावा, बैकस्लैश ऑपरेटर (आमतौर पर) inv (ए) * बी से अधिक सटीक परिणाम देता है: यह ए * एक्स = बी को हल करने के लिए उपयुक्त एल्गोरिदम चुनता है। – Martijn

+0

वहां छात्रों के लिए स्पष्ट होने के लिए, आप रैखिक प्रणाली एक्स = बी को हल करने के लिए 'x = inv (ए) * बी' के बजाय 'x = A \ b' लिखना चाहते हैं। ए के विपरीत कंप्यूटिंग आवश्यक नहीं है, मजबूत नहीं, और तेज़ नहीं। गणितीय सूत्रों के एक विशाल हिस्से में जहां आप ए^-1 देखते हैं, एल्गोरिदम को ए के विपरीत कंप्यूटिंग के बिना कार्यान्वित किया जा सकता है, जो कि छोटे, पूर्ण रैंक मैट्रिस के लिए, कंप्यूटिंग आविष्कार (ए) लगभग हमेशा पूरी तरह से ठीक हो। बड़ी matrices या बीमार वातानुकूलित matrices के लिए, यह समस्याग्रस्त हो सकता है। –

0

inv() निश्चित रूप से \ की तुलना में धीमी है। हालांकि, गलतता के संबंध में मैथवर्क्स की सलाह एक संख्यात्मक रूढ़िवादी बीजगणित परिणाम में अत्यधिक रूढ़िवादी बाध्यता के कारण है। दूसरे शब्दों में, inv() गलत नहीं है। लिंक आगे बताते हैं: http://arxiv.org/abs/1201.6035

कई व्यापक रूप से इस्तेमाल पाठ्यपुस्तकों पाठक नेतृत्व विश्वास है कि एक गणना उलटा निवेश संबंधी निर्णय निर्माताओं (ए) द्वारा वेक्टर ख गुणा करके समीकरणों के एक रेखीय प्रणाली Ax = b सुलझाने गलत है। संख्यात्मक विश्लेषण और संख्यात्मक रैखिक बीजगणित पर लगभग सभी अन्य पाठ्यपुस्तक गणना किए गए इनवर्क्स का उपयोग किए बिना सलाह देते हैं कि यह सटीक है या नहीं। असल में, उलटा गणना कैसे की जाती है, इस पर उचित मान्यताओं के तहत, x = inv (ए) * बी सर्वोत्तम पिछड़े-स्थिर हलकों द्वारा गणना किए गए समाधान के रूप में सटीक है।