11

मैं 4x4 मैट्रिक्स को उलटा करना चाहता हूं। मेरी संख्या निश्चित-बिंदु प्रारूप में संग्रहीत है (1.15.16 सटीक होने के लिए)।उलटा 4x4 मैट्रिक्स - संख्यात्मक सबसे स्थिर समाधान की आवश्यकता

फ्लोटिंग-पॉइंट अंकगणितीय के साथ मैं आमतौर पर केवल निर्धारित मैट्रिक्स का निर्माण करता हूं और निर्धारक द्वारा विभाजित करता हूं (उदाहरण के लिए बल बल बल)। यह मेरे लिए अब तक काम करता है, लेकिन निश्चित बिंदु संख्याओं से निपटने पर मुझे उपयोग किए गए सभी गुणाओं के कारण एक अस्वीकार्य सटीक नुकसान मिलता है।

नोट: निश्चित बिंदु अंकगणित में मैं हमेशा तत्काल परिणामों के कम से कम महत्वपूर्ण बिट्स को फेंक देता हूं।

तो - मैट्रिक्स को घुमाने के लिए सबसे संख्यात्मक स्थिर तरीका क्या है? मुझे प्रदर्शन के बारे में बहुत कुछ नहीं लगता है, लेकिन बस मेरे लक्ष्य आर्किटेक्चर पर धीमा होना होगा।

+0

आपके मैट्रिक्स में तत्वों की परिमाण परिमाण में बंद हैं? –

+0

नहीं - दुर्भाग्यवश वे सभी जगह पर हैं। –

+0

क्या आपके पास मैट्रिक्स के लिए अनुमानित स्थिति संख्या है? मेरे उत्तर में दिए गए पेपर में कुछ सौ की स्थिति की सफलता है, हालांकि यह 8x8 या 32x32 मैट्रिक्स के लिए है, इसलिए आप इससे बेहतर कर सकते हैं। –

उत्तर

5

मुझे लगता है कि इसका उत्तर मैट्रिक्स के सटीक रूप पर निर्भर करता है। एक मानक अपघटन विधि (ल्यू, क्यूआर, चोलस्की इत्यादि) पिवोटिंग (एक आवश्यक) के साथ निश्चित बिंदु पर काफी अच्छा है, खासकर एक छोटे 4x4 मैट्रिक्स के लिए। प्रेस एट अल द्वारा पुस्तक 'न्यूमेरिकल रेसिपी' देखें। इन तरीकों के विवरण के लिए।

This paper कुछ उपयोगी एल्गोरिदम देता है, लेकिन दुर्भाग्यवश भुगतान के पीछे है। वे कुछ अतिरिक्त विशेषताओं के साथ यहां सूचीबद्ध होने के लिए जटिल (Chivoted) Cholesky अपघटन की सलाह देते हैं।

0

सादा पुराना गॉसियन उन्मूलन अच्छी तरह से काम करेगा।

यह इस बात पर निर्भर करता है कि आप किस पुस्तकालय/कक्षा/संरचनाओं का उपयोग कर रहे हैं। आप GSL पर एक नज़र डाल सकते हैं।

1

छिड़काव त्रुटियों और अन्य बुरेपन को कम करने के लिए, "पिवोटिंग" का उपयोग करें - संख्यात्मक व्यंजनों में मैट्रिक्स को बदलने पर अध्याय देखें। उनके पास अब तक का सबसे अच्छा स्पष्टीकरण है।

14

मेटा-उत्तर: क्या यह वास्तव में एक सामान्य 4x4 मैट्रिक्स है? यदि आपके मैट्रिक्स का एक विशेष रूप है, तो इनवर्टरिंग के लिए प्रत्यक्ष सूत्र हैं जो तेज़ होंगे और आपके ऑपरेशन को गिनती रखें।

उदाहरण के लिए, यह है कि अगर एक मानक समरूप समन्वय ग्राफिक्स से बदलना, जैसे:

[ux vx wx tx] 
[uy vy wy ty] 
[uz vz wz tz] 
[ 0 0 0 1] 

तो वहाँ एक easily-derivable direct formula, जो

है (रोटेशन, पैमाने, की एक रचना अनुवाद मैट्रिक्स कल्पना करते हुए)
[ux uy uz -dot(u,t)] 
[vx vy vz -dot(v,t)] 
[wx wy wz -dot(w,t)] 
[ 0 0 0  1 ] 

(ASCII मैट्रिक्स लिंक किए गए पृष्ठ से चोरी हो।)

आप शायद निश्चित बिंदु में परिशुद्धता के नुकसान के लिए इसे हरा नहीं सकते हैं।

यदि आपका मैट्रिक्स कुछ डोमेन से आता है जहां आप जानते हैं कि इसमें अधिक संरचना है, तो एक आसान जवाब होने की संभावना है।

+3

मुझे लगता है कि स्केलिंग कारक शामिल होने पर यह काम नहीं करता है? – Alnitak

-2

मैट्रिक्स एक affine परिवर्तन (कई बार यह इतने लंबे समय आप एक स्केलिंग घटक परिचय नहीं है के रूप में 4x4 मैट्रिक्स के साथ मामला है) उलटा बस अंतिम स्तंभ के साथ ऊपरी 3x3 रोटेशन हिस्सा नकार की पक्षांतरित है का प्रतिनिधित्व करता है । जाहिर है यदि आपको सामान्यीकृत समाधान की आवश्यकता है तो गॉसियन उन्मूलन की तलाश करना शायद सबसे आसान है।

+0

यह उत्तर सच नहीं है। एक ही दिशा में जा रहे एक सही के लिए एड्रियन के एवर देखें। – Suma

1

आप अपना सामान्य एल्गोरिदम करने से पहले 1.31 पर दोगुनी मान सकते हैं।यह गुणाओं की संख्या को दोगुना कर देगा, लेकिन आप एक मैट्रिक्स उलटा कर रहे हैं और जो भी आप करते हैं वह आपके प्रोसेसर में गुणक से काफी जुड़ा हुआ है।

किसी 4x4 उलटा के लिए समीकरण खोजने में रुचि रखने वाले किसी भी व्यक्ति के लिए, आप उनके लिए उन्हें हल करने के लिए एक प्रतीकात्मक गणित पैकेज का उपयोग कर सकते हैं। टीआई -88 इसे भी करेगा, हालांकि इसमें कई मिनट लगेंगे।

यदि आप हमें यह समझते हैं कि मैट्रिक्स उलटा आपके लिए क्या करता है, और यह आपके बाकी प्रसंस्करण के साथ कैसे फिट बैठता है तो हम विकल्प सुझा सकते हैं।

-Adam

+0

एक सामान्य मैट्रिक्स को उलटने के लिए एक प्रतीकात्मक गणित प्रोग्राम का उपयोग करें और इसे उन सूत्रों की आपूर्ति करनी चाहिए जिन्हें आप अधिक आसानी से गणना कर सकते हैं। – Karl

2

मुझे एक अलग सवाल पूछते हैं: क्या आप निश्चित रूप से मैट्रिक्स को उलटने की जरूरत है (यह एम कहते हैं), या आप अन्य समीकरणों को हल करने मैट्रिक्स उलटा उपयोग करने के लिए की जरूरत है? (उदाहरण के लिए ज्ञात एम के लिए एमएक्स = बी, बी) अक्सर इस तरह के अन्य तरीकों को विपरीत रूप से गणना करने की आवश्यकता होती है। या यदि मैट्रिक्स एम समय का एक कार्य है & यह धीरे-धीरे बदलता है तो आप एक बार पूर्ण उलटा गणना कर सकते हैं, & इसे अपडेट करने के लिए पुनरावृत्त तरीके हैं।

5

मैं जेसन एस उठाए गए सवाल को दूसरी बार लेना चाहता हूं: क्या आप निश्चित हैं कि आपको अपने मैट्रिक्स को उलटा करने की आवश्यकता है? यह लगभग कभी जरूरी नहीं है। इतना ही नहीं, यह अक्सर एक बुरा विचार है। यदि आपको एक्स = बी को हल करने की आवश्यकता है, तो यह एक उलटा करके बी को गुणा करने के बजाय सीधे सिस्टम को हल करने के लिए अधिक संख्यात्मक रूप से स्थिर है।

आप ख के कई मूल्यों के लिए अधिक हल करने के लिए Ax = b और अधिक है यहां तक ​​कि अगर, यह अभी भी एक अच्छा विचार ए आप कर सकते हैं कारक एक (माना LU गुणन या Cholesky गुणन) और बचाने के कारकों को उलटने के लिए नहीं है इसलिए आप हर बार उस काम को दोबारा नहीं कर रहे हैं, लेकिन आप कारक के इस्तेमाल से हर बार सिस्टम को हल करेंगे।

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