फोरट्रान 95 और लैपैक के साथ एक वास्तविक असममित मैट्रिक्स का मैट्रिक्स घातीय


10

मैंने हाल ही में तिरछा-हर्मिटियन मेट्रिसेस के लिए समान लाइनों के साथ एक प्रश्न पूछा था । उस प्रश्न की सफलता से प्रेरित होकर, और कुछ घंटों के लिए एक दीवार के खिलाफ मेरे सिर को पीटने के बाद, मैं वास्तविक असममित मैट्रिक्स के मैट्रिक्स घातीय को देख रहा हूं। Eigenvalues ​​और eigenvectors को खोजने के लिए मार्ग बल्कि जटिल लगता है, और मुझे डर है कि मैंने खो दिया है।

पृष्ठभूमि: कुछ समय पहले मैंने सैद्धांतिक भौतिकी एसई पर यह प्रश्न पूछा था । परिणाम मुझे वास्तविक विषमता के रूप में मास्टर समीकरणों को वाक्यांशित करने की अनुमति देता है। समय-स्वतंत्र मामले में, इस मैट्रिक्स को घातांक करके मास्टर समीकरण को हल किया जाता है। समय-निर्भर मामले में इसे एकीकरण की आवश्यकता होगी। मैं इस समय केवल समय-स्वतंत्रता से संबंधित हूं।

विभिन्न सबरूटीन्स को देख करने पर मुझे लगता है कि मैं बुला किया जाना चाहिए ( ? Gehrd , ? Orghr , ? Hseqr ...) यह स्पष्ट नहीं है अगर यह आसान हो जाएगा से मैट्रिक्स कास्ट करने के लिए real*8करने के लिए complex*16और इन दिनचर्या के जटिल डबल संस्करणों के साथ आगे बढ़ना, या मेरे साथ real*8आने वाली संख्या को दोगुना करने और बाद में उनमें से एक जटिल मैट्रिक्स बनाने के हिट के साथ रहें ।

तो, मुझे किस रूटीन को कॉल करना चाहिए (और किस क्रम में), और क्या मुझे वास्तविक डबल संस्करणों या जटिल डबल संस्करणों का उपयोग करना चाहिए? नीचे वास्तविक दोहरे संस्करणों के साथ ऐसा करने का प्रयास किया गया है। मैं eigenvalues ​​और eigenvectors का पता लगाने के लिए अटक गया हूँ L*t

function time_indep_master(s,L,t)
  ! s is the length of a side of L, which is square.
  ! L is a real*8, asymmetric square matrix.
  ! t is a real*8 value corresponding to time.
  ! This function (will) compute expm(L*t).

  integer, intent(in)    :: s
  real*8,  intent(in)    :: L(s,s), t
  real*8                 :: tau(s-1), work(s), wr(s), wi(s), vl
  real*8, dimension(s,s) :: time_indep_master, A, H, vr
  integer                :: info, m, ifaill(2*s), ifailr(2*s)
  logical                :: sel(s)

  A = L*t
  sel = .true.

  call dgehrd(s,1,s,A,s,tau,work,s,info)
  H = A
  call dorghr(s,1,s,A,s,tau,work,s,info)
  call dhseqr('e','v',s,1,s,H,s,wr,wi,A,s,work,s,info)
  call dhsein('r','q','n',sel,H,s,wr,wi,vl,1,vr,s,2*s,m,work,ifaill,ifailr,info)

  ! Confused now...

end function

जवाबों:


8

मुझे पहले लगता है कि मैट्रिक्स वास्तव में पूरी तरह से मनमाना है या नहीं, इसके बारे में बहुत मुश्किल है: क्या कोई परिवर्तन है जो इसे हर्मिटियन बना देगा? क्या भौतिकी गारंटी देता है कि मैट्रिक्स तिरछे (एक यथोचित वातानुकूलित मैट्रिक्स के साथ) होना चाहिए?

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


1
2×24×4

1
मुझे यह उत्तर पसंद है; असममित मामले में पर्याप्त नुकसान होते हैं जो यह विचार करने योग्य है कि क्या आपकी समस्या का एक सूत्रीकरण हो सकता है जो कि असममित लोगों के बजाय सममित मैट्रिक की ओर जाता है।
JM

@ MarkS.Everitt: आप लगभग वहाँ होने लगते हैं ... मैट्रिसेस कितने बड़े हैं? ~ 36 x 36 फिर से?
जैक पॉल्सन

16×1636×36

2
@ MarkS.Everitt: तो आपकी समस्या प्रभावी रूप से अब सिर्फ 4x4 मैट्रिसेस को उजागर करने की है। यह अप्रासंगिक विश्लेषण के लिए अप्रासंगिक होने के लिए पर्याप्त रूप से छोटा है, इसलिए उत्तर पूरी तरह से मूल्यों पर निर्भर करेगा। मैं वास्तव में अब और नहीं कह सकता जब तक कि आप अपने लिंक किए गए भौतिकी पद को रेखीय बीजगणित (सुपरऑपरेटर?!) में अनुवाद न करें।
जैक पोल्सन

7

जैक ने जो कहा है, उस पर निर्माण करने के लिए, मानक दृष्टिकोण जो सॉफ्टवेयर में उपयोग किया जाता है (जैसे कि EXPOKIT, आपके पहले प्रश्न में उल्लेख किया गया है) स्केलिंग और स्क्वेरिंग के बाद Padé सन्निकटन (विधि 2 और 3) या क्रायलोवस्पेस तरीके (विधि) 20)। विशेष रूप से, यदि आप घातीय इंटीग्रेटर्स को देख रहे हैं, तो आप क्रायलोव उप-विधियों पर विचार करना चाहेंगे, और घातीय इंटीग्रेटर्स पर कागजात देखें (कुछ संदर्भों का उल्लेख मोलर एंड वैन लोन पेपर में विधि 20 के साथ किया गया है)।

यदि आप eigenvectors का उपयोग करने पर आमादा हैं, तो eigenvectors की त्रिकोणीय प्रणाली (विधि 15) का उपयोग करने पर विचार करें; चूँकि आपका मैट्रिक्स नोंडागोनलाइज़ेबल हो सकता है, इसलिए यह दृष्टिकोण सबसे अच्छा नहीं हो सकता है, लेकिन यह सीधे eigenvectors और eigenvalues ​​की गणना करने की कोशिश करने से बेहतर है (यानी, विधि 14)।

हेसेनबर्ग फॉर्म में कमी एक अच्छा विचार नहीं है (विधि 13)।

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

आप सुरक्षित तरीके से अनदेखी कर सकते हैं तरीके 5-7 (ODE सॉल्वर-आधारित विधियां अक्षम हैं), तरीके 8-13 (महंगे), विधि 14 (बड़े मेट्रिसेस के eigenvectors की गणना विशेष संरचना के बिना कठिन है और बीमार मामलों में संख्यात्मक त्रुटि होने का खतरा है) , और विधि 16 (मैट्रिक्स के जॉर्डन अपघटन की गणना संख्यात्मक रूप से अस्थिर है)। 17-19 के तरीके लागू करने के लिए पेचीदा हैं; विशेष रूप से, तरीके 17 और 18 को अधिक पढ़ने की आवश्यकता होगी। विधि 1 यदि स्केलिंग अच्छी तरह से काम नहीं करती है, तो स्केलिंग-और-स्क्वैरिंग के लिए एक पतन-वापस विकल्प है।

Bj

Bj=γjI+Ej,

γjjEj


1
O(n2)O(n3)

कोई संदेह नहीं कि वे जानते हैं कि वे क्या कर रहे हैं; मैं LAPACK के कार्यान्वयन के बारे में चिंतित नहीं हूं। मैं फोरट्रान संकलक व्यवहार के बारे में अधिक आश्चर्यचकित हूं।
ज्योफ ऑक्सीबेरी

2
हाँ, संकलक अच्छी तरह से लिखे गए लैपैक की तुलना में अधिक समस्या हो सकती है। यह पता लगाना निराशाजनक हो सकता है कि आपका कार्यक्रम केवल इसलिए विफल हो रहा था क्योंकि कंपाइलर द्वारा उपयोग किए जाने वाले निरपेक्ष मूल्य और विभाजन के कार्यान्वयन कार्यान्वित किए गए थे ...
JM

-1

मेरे पास एक सरल फोरट्रान सबरूटीन है जो एक मनमाना मैट्रिक्स के प्रतिपादक की गणना करता है। मैंने मतलाब कमांड के खिलाफ इसकी जाँच की और यह ठीक है। यह स्केलिंग और स्क्वैरिंग पर आधारित है। मैंने इसे कुछ साल पहले लिखा था।

मैं किसी अन्य सबरूटीन पर जुर्माना लगाना चाहूंगा, जैसे मैं gams.nist.gov से डाउनलोड करता हूं। लेकिन अभी तक कोई किस्मत नहीं।

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