मैं स्क्रैच से नियंत्रण प्रणाली टूलबॉक्स लिख रहा हूं और शुद्ध रूप से पायथन 3 (बेशर्म प्लग:) में harold
। अपने पिछले शोध से, मुझे हमेशा रिक्ती सॉल्वर के बारे में शिकायत care.m
है कि वे तकनीकी / अप्रासंगिक हैं।
इसलिए, मैं दिनचर्या का अपना सेट लिख रहा हूं। एक चीज जो मुझे नहीं मिल रही है, वह यह है कि एक उच्च-प्रदर्शन संतुलन एल्गोरिथ्म प्राप्त किया जाए, कम से कम उतना ही अच्छा हो balance.m
। इससे पहले कि आप इसका उल्लेख करें, xGEBAL
परिवार को स्काइप में उजागर किया गया है और आप मूल रूप से स्काइप से निम्नानुसार कॉल कर सकते हैं, मान लें कि आपके पास एक फ्लोट प्रकार 2 डी सरणी है A
:
import scipy as sp
gebal = sp.linalg.get_lapack_funcs(('gebal'),(A,)) # this picks up DGEBAL
Ab, lo, hi, scaling , info = gebal(A, scale=1 , permute=1 , overwrite_a=0 )
अब अगर मैं निम्नलिखित परीक्षण मैट्रिक्स का उपयोग करता हूं
array([[ 6. , 0. , 0. , 0. , 0.000002],
[ 0. , 8. , 0. , 0. , 0. ],
[ 2. , 2. , 6. , 0. , 0. ],
[ 2. , 2. , 0. , 8. , 0. ],
[ 0. , 0. , 0.000002, 0. , 2. ]])
मुझे मिला
array([[ 8. , 0. , 0. , 2. , 2. ],
[ 0. , 2. , 0.000002, 0. , 0. ],
[ 0. , 0. , 6. , 2. , 2. ],
[ 0. , 0.000002, 0. , 6. , 0. ],
[ 0. , 0. , 0. , 0. , 8. ]])
हालाँकि, अगर मैं इसे पास कर दूं, तो balance.m
मुझे मिल जाएगा
>> balance(A)
ans =
8.0000 0 0 0.0625 2.0000
0 2.0000 0.0001 0 0
0 0 6.0000 0.0002 0.0078
0 0.0003 0 6.0000 0
0 0 0 0 8.0000
यदि आप क्रमपरिवर्तन पैटर्न की जांच करते हैं, तो वे समान हैं, हालांकि स्केलिंग बंद है। gebal
एकता स्केलिंग देता है जबकि मतलाब 2 की निम्न शक्तियाँ देता है [-5,0,8,0,2]
:।
तो जाहिर है, ये एक ही मशीनरी का उपयोग नहीं कर रहे हैं। मैंने विभिन्न विकल्पों की कोशिश की है जैसे कि लेमनियर, वान डोरेन दो तरफा स्केलिंग, मूल पैलेट-रीन्सच और साहित्य में कुछ अन्य कम ज्ञात विधियां जैसे कि घने संस्करण SPBALANCE
।
एक बात शायद मैं इस बात पर जोर दे सकता हूं कि मुझे बेनर के काम की जानकारी है; विशेष रूप से इस उद्देश्य के लिए विशेष रूप से हैमिल्टनियन मेट्रिसेस के सिम्पलेक्टिक संतुलन । हालांकि, ध्यान दें कि इस प्रकार के उपचार को gcare.m
(सामान्यीकृत रिक्ति सॉल्वर) के भीतर किया जाता है और संतुलन को सीधे के माध्यम से किया जाता है balance.m
। इसलिए, अगर कोई मुझे वास्तविक कार्यान्वयन के लिए इंगित कर सकता है, तो मैं सराहना करूंगा।
प्रकटीकरण: मैं वास्तव में इंजीनियर मैथवर्क्स कोड को उलटने की कोशिश नहीं कर रहा हूं: मैं वास्तव में इस प्रश्न की प्रेरणा सहित विभिन्न कारणों के कारण इससे दूर होना चाहता हूं, यह कहना है, मुझे नहीं पता कि यह क्या कर रहा है जिससे मुझे बहुत फायदा हुआ दिन में समय वापस। मेरा इरादा एक संतोषजनक संतुलन एल्गोरिथ्म प्राप्त करना है जो मुझे CAREX उदाहरणों को पारित करने की अनुमति देता है जैसे कि मैं नियमित सॉल्वर के शीर्ष पर न्यूटन पुनरावृत्ति विधियों को लागू कर सकता हूं।