यदि दो 12x12 मैट्रिसेस में एक ही निर्धारक हो तो परीक्षण करना


11

मुझे एक मैट्रिक्स जो कि सममित, उल्टा, सकारात्मक निश्चित और घना है। मुझे परीक्षण करने की आवश्यकता है अगर जहां जे सभी मैट्रिक्स हैं।12×12Q

det(Q)=det(12IQJ)(1)
J

मैं वर्तमान में आर्मडिलो लाइब्रेरी के साथ ऐसा कर रहा हूं, लेकिन यह बहुत धीमा है। बात यह है कि मुझे एक ट्रिलियन मैट्रिस के लिए ऐसा करने की आवश्यकता है और यह पता चला है कि दो निर्धारकों की गणना मेरे कार्यक्रम की अड़चन है। इसलिए मेरे दो सवाल हैं

  1. क्या कोई चाल है जो मैं निर्धारक की गणना तेजी से करने के लिए उपयोग कर सकता हूं जो कि मुझे उनके आकार के बारे में पता है? शायद 12×12 मैट्रिसेस के लिए एक गन्दा विस्तार है जो इस मामले में काम कर सकता है?

  2. क्या समानता का परीक्षण करने का कोई अन्य कुशल तरीका है (1)

संपादित करें। टिप्पणियों का जवाब देने के लिए। मैं सभी से जुड़ा गैर आत्म पूरक रेखांकन गणना करने के लिए की जरूरत है G के आदेश के 13 ऐसी है कि G और G¯ फैले पेड़ों की एक ही नंबर है। इस के लिए प्रेरणा इस mathoverflow पोस्ट में पाया जा सकता है । मशीन के लिए के रूप में मैं समानांतर में एक 8 कोर 3.4GHh मशीन पर चल रहा हूँ।

संपादित करें। मैं विशेष रूप से 12×12 _12 मैट्रिक्स के निर्धारक की गणना के लिए C प्रोग्राम बनाकर 50% तक चलने की उम्मीद कर रहा था । सुझाव अभी भी स्वागत है।


6
कितना धीमा है धीमा? कितना समय लगता है क्या हार्डवेयर पर? क्या इन के खरब स्वतंत्र हैं ताकि आप समानांतर में इनमें से कई निर्धारकों की गणना कर सकें? यदि हां, तो आप कितनी बड़ी मशीन चला सकते हैं? इस समस्या के कारण क्या हुआ? क्या आप निश्चित हैं कि आपको निर्धारकों की गणना करने की आवश्यकता है? Q
बिल बर्थ

3
कितनी बार (मामलों के किस अंश के लिए) निर्धारक समान / अलग होते हैं? यदि वे अधिकांश समय अलग-अलग हैं, तो यह निर्धारित करने के लिए एक सस्ता परीक्षण हो सकता है कि वे अलग - अलग हो सकते हैं और आप यह सत्यापित करेंगे कि वे पहले टेस्ट में विफल होने पर ही हैं। अगर वे अधिकांश समय के आसपास एक ही तरीका है।
वोल्फगैंग बंगर्थ

1
जैसा कि पहले ही पूछा जा चुका है: क्या आप कुछ विवरण प्रदान कर सकते हैं कि कहां से आया है? शायद नेत्रहीन कंप्यूटिंग निर्धारकों की तुलना में बेहतर दृष्टिकोण है। Q
JM

4
यह धारणा कि इस स्थिति का परीक्षण " मैट्रिस के एक ट्रिलियन के लिए" किया जाना है 1) सुझाव देता है कि को कुछ विशेष संरचना होने के लिए एप्रीओरी कहा जाता है (अन्यथा उम्मीद है कि स्थिति यादृच्छिक रूप से थोड़ी है), और 2) बेहतर दृष्टिकोण इस संपत्ति के साथ सभी मैट्रिसेस को चिह्नित करने के लिए हो सकता है (कुशलतापूर्वक जाँच योग्य फॉर्म्युलेशन के साथ)। क्यूQQ
हार्डमैथ

1
@hardmath हां, एक पूर्णांक मैट्रिक्स है जिसमें विकर्ण प्रविष्टियां से और से विकर्ण तत्वों के रूप में होती हैं1 12 - 1Q1121
Jernej

जवाबों:


8

चूँकि आप पहले से ही C ++ का उपयोग कर रहे हैं और आपके मैट्रिम्स सममित सकारात्मक निश्चित हैं, इसलिए मैं का एक अनिर्दिष्ट गुणन और भी । यहां मैं यह मान रहा हूं कि भी सकारात्मक निश्चित है, अन्यथा को संख्यात्मक स्थिरता के लिए धुरी की आवश्यकता होगी (यह भी संभव है कि भले ही यह सकारात्मक निश्चित नहीं है, धुरी की आवश्यकता नहीं है, लेकिन आपको इसे आज़माना होगा)। Q 12 I - Q - J 12 I - Q - J L D L TLDLTQ12IQJ12IQJLDLT

यह एक एलयू कारक से तेज है, और चोल्स्की से भी तेज है क्योंकि वर्गमूल से बचा जाता है। निर्धारक केवल विकर्ण मैट्रिक्स के तत्वों का उत्पाद है । एलडीएल फैक्टराइजेशन करने के लिए कोड इतना सरल है कि आप इसे सी की 50 लाइनों से कम में लिख सकते हैं। इस पर विकिपीडिया पृष्ठ एल्गोरिदम का वर्णन करता है, और मेरे पास चोल्स्की करने के लिए कुछ सरल टेम्पर्ड कोड हैं । आप फैक्टराइजेशन को लागू करने के लिए वर्गमूल से बचने के लिए इसे बहुत सरल कर सकते हैं और इसे संशोधित कर सकते हैं ।L D L TDLDLT

चूँकि आप स्टोरेज फॉर्मेट को भी नियंत्रित कर सकते हैं, आप केवल आधे मैट्रिक्स को स्टोर करने के लिए रूटीन को और अधिक ऑप्टिमाइज़ कर सकते हैं और मेमोरी एलीमेंट को अधिकतम करने के लिए इसे एक रैखिक सरणी में पैक कर सकते हैं। मैं सरल कस्टम डॉट उत्पाद और रैंक -1 अपडेट रूटीन भी लिखूंगा क्योंकि समस्या का आकार इतना छोटा है, आपको कॉल ओवरहेड को कम करने के लिए कंपाइलर को रूटीन को इनलाइन करने देना चाहिए। चूंकि यह एक निश्चित आकार का लूप है, इसलिए कंपाइलर को उचित रूप से इनलाइन और चीजों को अनियंत्रित करने में सक्षम होना चाहिए।

मैं इस तथ्य का फायदा उठाने के लिए चालें चलाने की कोशिश कर रहा हूं कि अभिव्यक्ति के अंदर में शामिल है । यह संभावना है कि इस तरह की छोटी समस्या के लिए, ये ट्रिक अंत में दो अलग-अलग निर्धारक संगणना करने की तुलना में धीमी होती हैं। बेशक, इन दावों को सत्यापित करने का एकमात्र तरीका यह प्रयास करना है।क्यू12IQJQ


1
मैं , उर्फ ​​रूट-फ्री चोल्स्की को लागू करने की सिफारिश करता हूं, क्योंकि आर्मडिलो के पास सकारात्मक-निश्चितता / विकर्ण प्रभुत्व का लाभ उठाने का एक तरीका नहीं है। LDLT
हार्डमैथ

5

इन _12 सकारात्मक निश्चित सममित मैट्रिक्स के निर्माण के बारे में कुछ जानकारी के बिना , किए जाने वाले सुझाव आवश्यक रूप से सीमित हैं।12×12

मैंने Sourceforge से आर्मडिलो पैकेज डाउनलोड किया और प्रलेखन पर एक नज़र डाली। अलग से कंप्यूटिंग और प्रदर्शन को बेहतर बनाने का प्रयास करें , जहां , उदाहरण के लिए सेट करके सभी का एक मैट्रिक्स है । दस्तावेज़ीकरण नोट करता है कि यह आकार के लिए डिफ़ॉल्ट के लिए डिफ़ॉल्ट है , इसलिए चूक से मुझे लगता है कि विकल्प मामले के लिए डिफ़ॉल्ट है।det ( 12 I - Q - J ) J 4 × 4 12 × 12det(Q)det(12IQJ)Jdet(Q,slow=false)4×4slow=true12×12

slow=true संभवतः ऐसा क्या है जो एक पंक्ति इक्वेलोन रूप पाने में आंशिक या पूर्ण धुरी है, जिसमें से निर्धारक आसानी से मिल जाता है। हालाँकि आप पहले से ही जानते हैं कि मैट्रिक्स सकारात्मक निश्चित है, इसलिए धुरी स्थिरता के लिए अनावश्यक है (कम से कम आपके संगणकों के थोक के लिए संभवतः)। यह स्पष्ट नहीं है कि यदि आर्मडिलो पैकेज एक अपवाद फेंकता है यदि पिवोट्स छोटे रूप से छोटे हैं, लेकिन यह एक होना चाहिए एक उचित संख्यात्मक लीनियर बीजगणित पैकेज की सुविधा। EDIT: मैंने पर्याप्त कार्यक्षमता के लिए C ++ टेम्प्लेट का उपयोग करते हुए, हेडर फ़ाइल में लागू होने वाले आर्मैडिलो कोड को पाया । सेटिंग को कैसे प्रभावित करती है, यह प्रकट नहीं होता है।12 × 12Qdetinclude\armadillo_bits\auxlib_meat.hppslow=false12×12निर्धारक इसलिए किया जाएगा क्योंकि गणना उस बिंदु पर "दीवार पर फेंकी गई" LAPACK (या ATLAS) हो जाती है, जिसमें कोई संकेत नहीं है कि धुरी की आवश्यकता नहीं है; det_lapackउस फ़ाइल में देखें और उसके चालान।

यदि आप वास्तव में उन का उपयोग कर रहे हैं, तो दूसरी बात यह होगी कि आप BLAS और LAPACK के लिए हाई स्पीड रिप्लेसमेंट से जुड़े आर्मडिलो पैकेज के निर्माण की उनकी सिफारिश का पालन करेंगे; सेक देखें। विवरण के लिए 5 Armadillo README.TXT फ़ाइल। [वर्तमान 64-बिट मशीनों पर गति के लिए BLAS या LAPACK के समर्पित 64-बिट संस्करण के उपयोग की भी सिफारिश की गई है।]

इकोनॉन रूप में पंक्ति में कमी अनिवार्य रूप से गाऊसी उन्मूलन है, और अंकगणित जटिलता । इसके बाद दोनों मेट्रिसेस के लिए यह काम दोगुना हो जाता है, या । ये प्रक्रियाएँ आपके प्रसंस्करण में अच्छी तरह से "अड़चन" हो सकती हैं, लेकिन इस बात की बहुत कम उम्मीद है कि में विशेष संरचना के बिना (या ट्रिलियन परीक्षण मामलों में कुछ ज्ञात संबंधों को परिशोधन की अनुमति देते हुए) काम को घटाकर किया जा सकता है ।423n3+O(n2)क्यू(एन2)43n3+O(n2)QO(n2)

तुलना के लिए, सामान्य मैट्रिक्स के cofactors द्वारा विस्तार शामिल हैगुणन संचालन (और मोटे तौर पर कई परिवर्धन / घटाव के रूप में), इसलिए की तुलना के लिए ( बनाम ) स्पष्ट रूप से कोफ़ैक्टर्स को समाप्त करने का पक्षधर है।n ! n = 12 12 ! = 479001600 2n×nn!n=1212!=47900160023n3=1152

एक और दृष्टिकोण की आवश्यकता होती है कार्य, को हाउसहोल्डर परिवर्तनों के साथ रूप में कम कर देगा , जो को रूप में रखता है । कम्प्यूटिंग और इसके बाद ऑपरेशन में किया जा सकता है । [ दूसरे निर्धारक में रैंक वन अपडेट का प्रभाव एक त्रिदलीय प्रणाली को हल करके दिए गए स्केलर कारक के रूप में व्यक्त किया जा सकता है।]43n3+O(n2)12 I - Q det ( Q ) det ( 12 I - Q - J ) O ( n ) - जेQ12मैं-क्यूdet(क्यू)det(12मैं-क्यू-जे)हे(n)-जे

ऐसी स्वतंत्र संगणना को लागू करना अर्माडिलो के detफ़ंक्शन के सफल (या विफल) कॉल के परिणामों पर एक जाँच के रूप में सार्थक हो सकता है ।

विशेष मामला: जैसा कि जर्नजीज की एक टिप्पणी द्वारा सुझाया गया है, मान लीजिए कि जहां पहले की तरह है (रैंक 1) सभी का मैट्रिक्स और है नॉनसिंगुलर (पॉज़िटिव) विकर्ण मैट्रिक्स। दरअसल ग्राफ थ्योरी में प्रस्तावित आवेदन के लिए ये पूर्णांक मैट्रेस होंगे। तब लिए एक स्पष्ट सूत्र है:J D = डायग ( d 1 , , d n ) det ( Q )क्यू=डी-जेजेडी=निदान(1,...,n)det(क्यू)

det(क्यू)=(Πमैं=1nमैं)(1-Σमैं=1nमैं-1)

इसके प्रमाण का एक स्केच व्यापक प्रयोज्यता को दर्शाने का अवसर देता है, अर्थात जब भी का एक ज्ञात निर्धारक और सिस्टम जल्दी हल हो जाता है। फैक्टरिंग द्वारा शुरू करें:डी वी = ( 1 ... 1 ) टीडीडीv=(1...1)टी

det(डी-जे)=det(डी)det(मैं-डी-1जे)

अब फिर से रैंक 1 है, । ध्यान दें कि दूसरा निर्धारक बस है:( d - 1 1d - 1 n ) T ( 1 1 )डी-1जे(1-1...n-1)टी(1...1)

(1)=det(मैं-डी-1जे)

जहाँ की विशेषता बहुपद है । एक रैंक 1 मैट्रिक्स के रूप में, पास अपने शून्य क्षेत्र के लिए कम से कम कारक होने चाहिए। "लापता" eigenvalue है , जैसा कि संगणना से देखा जा सकता है:(एक्स)( एक्स ) n - 1 एक्स Σ - 1 मैंडी-1जे(एक्स)n-1एक्सΣमैं-1

डी-1जे(1-1...n-1)टी=(Σमैं-1)(1-1...n-1)टी

यह इस प्रकार है कि विशेषता बहुपद , और ऊपर के रूप में लिए दिखाया गया है , ।( 1 ) det ( मैं - डी - 1 जे ) 1 - Σ - 1 मैं(एक्स)=एक्सn-1(एक्स-Σमैं-1)(1)det(मैं-डी-1जे)1-Σमैं-1

यह भी ध्यान दें कि यदि , तो , एक विकर्ण मैट्रिक्स है जिसका निर्धारक केवल इसके विकर्ण प्रविष्टियों का उत्पाद है।१२ आई - क्यू - जे = १२ आई - डी + जे - जे = १२ आई - डीक्यू=डी-जे12मैं-क्यू-जे=12मैं-डी+जे-जे=12मैं-डी


एचएम .. वास्तव में जहां का आसन्न मैट्रिक्स है इसलिए मुझे लगता है कि यह परिणाम सही नहीं हो सकता है। विशेष रूप से इसका तात्पर्य यह होगा कि ग्राफ पेड़ों की संख्या उसके डिग्री अनुक्रम द्वारा निर्धारित की जाती है जो धारण नहीं करता है। डी - जी जीक्यूडी-जीजी
जर्नियज

ऑफ-विकर्ण प्रविष्टियों में आम तौर पर 0 के साथ-साथ -1 भी होंगे। अपघटन विक्टर ने सुझाव दिया समरूपता का लाभ लेता है और से आपरेशन गिनती में अग्रणी अवधि कम कर देता है करने के लिए । एक सटीक पूर्णांक दृष्टिकोण है, लेकिन यह संभवतः आपके मामूली आकार के मैट्रिक्स और प्रविष्टियों के लिए आवश्यक नहीं है। अगर मैं निर्माण को समझते हैं, इसी कारण सकारात्मक निश्चित है है। एल डी एल टी 2क्यूएलडीएलटी23n312आई-क्यू-जेक्यू13n312मैं-क्यू-जेक्यू
हार्डमैथ

@ जेर्नेज: यदि आपको लगता है कि मेरे द्वारा कही गई कोई बात गलत है, तो मैंने इस प्रश्न के आधार पर एक चैट रूम बनाया है, जहाँ चर्चा को अनावश्यक टिप्पणी के बिना थ्रेड किया जा सकता है।
हार्डमैथ

1

यदि आपके पास उन ग्राफ़ों की गणना करने का एक संरचित तरीका है जो आप के निर्धारकों की गणना करना चाहते हैं, तो शायद आपको निम्न-श्रेणी के अपडेट मिल सकते हैं जो आपको एक ग्राफ से दूसरे में स्थानांतरित करते हैं।

यदि ऐसा है, तो आप मैट्रिक्स के निर्धारक लेम्मा का उपयोग कर सकते हैं ताकि वर्तमान ग्राफ के निर्धारक के अपने ज्ञान का उपयोग करके बाद के ग्राफ के निर्धारक की गणना की जा सके।

यही कारण है कि मैट्रिक्स और वैक्टर : यह सामान्यीकृत किया जा सकता है यदि U और V हैं। मैट्रिक्स और है : यू,v

det(+यूvटी)=(1+vटी-1यू)det()
n×n×n
det(+यूवीटी)=det(मैं+वीटी-1यू)det()

व्युत्क्रम की कुशलता से गणना करने के लिए, आप शरमन-मॉरिसन फार्मूले का उपयोग करके वर्तमान मैट्रिक्स के व्युत्क्रम को प्राप्त कर सकते हैं :

(+यूvटी)-1=-1--1यूvटी-11+vटी-1यू

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.