दोहराया हल करने के लिए यदि आप अशक्त अंतरिक्ष के एक गणना करने के लिए खर्च कर सकते हैं कोई जरूरत नहीं है। शून्य करने के लिए सिर्फ एक कॉल पर्याप्त होगा। एक नए वेक्टर वी को देखते हुए, यदि वी और नलस्पेस आधार के साथ डॉट उत्पाद गैर-शून्य है, तो वी मैट्रिक्स के रैंक को बढ़ाएगा। उदाहरण के लिए, मान लीजिए हम मैट्रिक्स एम, जो निश्चित रूप से की 2.
M = [1 1;2 2;3 1;4 2];
nullM = null(M')';
एक रैंक जाएगा एक नया स्तंभ वेक्टर [1, 1, 1, 1] है है रैंक अगर हम इसे एम के साथ जोड़ दिया वृद्धि?
nullM*[1;1;1;1]
ans =
-0.0321573705742971
-0.602164651199413
हां, क्योंकि इसमें कम से कम एक आधार शून्य पर नल-शून्य प्रक्षेपण है।
कैसे इस सदिश के बारे में:
nullM*[0;0;1;1]
ans =
1.11022302462516e-16
2.22044604925031e-16
इस मामले में, दोनों संख्या अनिवार्य रूप से शून्य हैं, तो सवाल में वेक्टर एम
के पद बिंदु है वृद्धि हुई है नहीं होगा, केवल एक एक बार शून्य अंतरिक्ष आधार उत्पन्न होने के बाद सरल मैट्रिक्स-वेक्टर गुणा आवश्यक है। यदि आपका मैट्रिक्स बहुत बड़ा है (और मैट्रिक्स लगभग पूर्ण रैंक) कि शून्य पर कॉल विफल हो जाएगा, तो आपको और अधिक काम करने की आवश्यकता होगी। हालांकि, जब तक मैट्रिक्स में बहुत अधिक कॉलम नहीं होते हैं, तब तक n = 4096 अत्यधिक बड़ा नहीं होता है।
एक विकल्प अगर नल बहुत अधिक है तो एसवीडीएस के लिए एक कॉल है, जो उन एकवचन वैक्टर को खोजने के लिए अनिवार्य रूप से शून्य हैं। ये नलस्पेस आधार बनेंगे जो हमें चाहिए।
स्रोत
2012-02-01 16:12:24
आप कहते हैं कि आपको यह 10k बार करने की ज़रूरत है। रन से रन में क्या परिवर्तन? जैसे 'ए 'हमेशा वही है और आप कई वैक्टरों के खिलाफ जांच करते हैं' v'? या प्रत्येक रन के लिए 'ए' और 'v' अलग हैं? –
@FlorianBrucker मैं ए के साथ तुलनात्मक रूप से कुछ कॉलम शुरू करता हूं, और फिर मेरे पास एक लूप है जो ~ 20K बार चलता है, हर बार कुछ विशिष्ट तरीके से एक नया वी उत्पन्न करता है, यह देखने के लिए जांच करता है कि यह ए के कॉलम स्पेस से रैखिक रूप से स्वतंत्र है या नहीं, और यदि यह है, तो इसे ए –
में जोड़ना सबसे तेज़ समाधान नल-स्पेस को नए वैक्टर 'v' बनाने के लिए बाधा के रूप में उपयोग करना हो सकता है। – Jonas