बेंचमार्क सेटअप
जूलिया सॉफ्टवेयर डिफरेंशियल ईक्शंस.ज्ल में हमने बहुत सारे उच्चतर तरीके लागू किए, जिसमें फीजियन तरीके भी शामिल हैं। आप इसे हमारे तरीकों की सूची में देख सकते हैं , और फिर दूसरों के टन हैं जिन्हें आप आपूर्ति की गई झांकी के रूप में उपयोग कर सकते हैं । क्योंकि इन सभी तरीकों को एक साथ रखा गया है, आप आसानी से उनके बीच बेंचमार्क कर सकते हैं। आप मेरे यहाँ ऑनलाइन बेंचमार्क देख सकते हैं , और देख सकते हैं कि कई अलग-अलग एल्गोरिदम को बेंचमार्क करना बहुत सरल है। इसलिए यदि आप बेंचमार्क चलाने के लिए कुछ मिनट लेना चाहते हैं, तो इसके लिए जाएं। यहाँ एक सारांश है जो सामने आता है।
पहले यह नोट करना महत्वपूर्ण है कि, यदि आप प्रत्येक बेंचमार्क को देखते हैं, तो आप देखेंगे कि हमारे DP5
(डॉरमंड-प्रिंस ऑर्डर 5) और DP8
तरीके हेयरर फोरट्रान कोड ( dopri5
और dop853
) की तुलना में तेज़ हैं , और इसलिए ये कार्यान्वयन बहुत अच्छी तरह से अनुकूलित हैं । ये दिखाते हैं कि जैसा कि एक अन्य सूत्र में बताया गया है कि डॉर्मंड-प्रिंस विधियों का अति-उपयोग इसलिए है क्योंकि विधियां पहले से ही लिखी गई हैं, इसलिए नहीं कि वे अभी भी सर्वश्रेष्ठ हैं। इसलिए सबसे अधिक अनुकूलित कार्यान्वयन के बीच वास्तविक तुलना Tsitorous विधियों, वर्नर विधियों और फ़ाइनेगिन विद डिफरेंशियल ईक्शन्स.jl के बीच है।
परिणाम
सामान्य तौर पर, 7 से अधिक ऑर्डर के तरीकों में एक अतिरिक्त कम्प्यूटेशनल लागत होती है जिसे आमतौर पर ऑर्डर द्वारा आगे नहीं बढ़ाया जाता है, जो चुने गए सहनशीलता को देखते हुए। इसका एक कारण यह है कि निचले क्रम के तरीकों के लिए गुणांक विकल्प अधिक अनुकूलित होते हैं (उनके पास छोटे "सिद्धांत ट्रंकेशन त्रुटि गुणांक" होते हैं, जो तब अधिक महत्वपूर्ण होते हैं जब आप असमान रूप से छोटे नहीं होते हैं)। आप देख सकते हैं कि यहां कई समस्याओं में जैसे कि वर्नर एफ़िशिएंट 6 और 7 विधियाँ बहुत अच्छी तरह से काम करती हैं, लेकिन वर्नर इफ़िशिएंट 8 जैसी विधियों में कम ढलान हो सकती है। ऐसा इसलिए है क्योंकि उच्चतर क्रम के "लाभ" कम सहिष्णुता पर कंपाउंडिंग कर रहे हैं, इसलिए हमेशा एक सहिष्णुता है जहां उच्च आदेश विधियां अधिक कुशल होंगी।
हालांकि, सवाल यह है कि कितना कम है? एक अच्छी तरह से अनुकूलित कार्यान्वयन में, जो दो कारणों से बहुत कम हो जाता है। पहला कारण यह है कि निचले क्रम के तरीके एफएसएएल नामक कुछ को लागू करते हैं (पहले जैसा ही अंतिम)। इस संपत्ति का मतलब है कि निचले क्रम के तरीके अगले चरण में पिछले चरण से एक फ़ंक्शन मूल्यांकन का फिर से उपयोग करते हैं, और इस प्रकार प्रभावी रूप से एक कम फ़ंक्शन मूल्यांकन होता है। यदि यह ठीक से उपयोग किया जाता है, तो 5 वें क्रम विधि (Tsitorous या डॉरमंड-प्रिंस) की तरह कुछ वास्तव में 6 के बजाय 5 फ़ंक्शन मूल्यांकन ले रहा है जो कि तालिका का सुझाव देगा। यह वर्नर 6 विधि के लिए भी सही है।
अन्य कारण प्रक्षेपों के कारण है। बहुत उच्च क्रम विधि का उपयोग करने का एक कारण कम कदम उठाना और केवल मध्यवर्ती मूल्यों को प्रक्षेपित करना है। हालांकि, मध्यवर्ती मूल्यों को प्राप्त करने के लिए, इंटरपोलिंग फ़ंक्शन को कदम उठाने के लिए उपयोग किए जाने की तुलना में अधिक फ़ंक्शन मूल्यांकन की आवश्यकता हो सकती है। यदि आप वर्नर तरीकों को देखते हैं, यह ऑर्डर 8 विधि के लिए 8 अतिरिक्त फ़ंक्शन मूल्यांकन लेता है ताकि ऑर्डर 8 इंटरपोलेंट मिल सके। कई बार कम ऑर्डर विधियां "फ्री" इंटरपोलेंट प्रदान करती हैं, उदाहरण के लिए अधिकांश 5 वीं ऑर्डर विधियों में एक फ्री 4 डी ऑर्डर इंटरपोलेशन (कोई अतिरिक्त फ़ंक्शन मूल्यांकन नहीं) है। तो इसका मतलब है कि यदि आपको मध्यवर्ती मूल्यों की आवश्यकता है (जो आपको एक उच्च भूखंड के लिए आवश्यकता होगी यदि आप उच्च क्रम विधि का उपयोग कर रहे हैं), तो कुछ अतिरिक्त छिपी हुई लागतें हैं। इस तथ्य में तथ्य यह है कि इन प्रक्षेपित मान वास्तव में घटना से निपटने और देरी अंतर समीकरणों को सुलझाने के लिए महत्वपूर्ण हैं और आप देखते हैं कि अतिरिक्त प्रक्षेप लागत कारक क्यों हैं।
तो क्या Feagin तरीकों के बारे में?
तो आप देखेंगे कि फ़ेगिन के तरीके बेंचमार्क से संदिग्ध रूप से गायब हैं। वे ठीक हैं, अभिसरण परीक्षण मनमाने ढंग से सटीक संख्याओं आदि पर काम करते हैं, लेकिन वास्तव में उन्हें अच्छी तरह से करने के लिए आपको कुछ बहुत ही बेतुके कम सहनशीलता के लिए पूछने की आवश्यकता है। उदाहरण के लिए, मैंने अप्रकाशित बेंचमार्क में पाया कि Feagin14
आउटफ़ॉर्मफॉर्म Vern9
(9 वें क्रम वर्नर कुशल विधि) जैसे कि सहन करने पर 1e-30
। अराजक गतिशीलता के साथ अनुप्रयोगों के लिए (जैसे प्लीड्स या 3-बॉडी एस्ट्रोफिज़िक्स समस्याओं में), आप संवेदनशील निर्भरता (अराजक प्रणालियों में तेजी से त्रुटियों) के कारण सटीकता की इस राशि को प्राप्त कर सकते हैं। हालाँकि, अधिकांश लोग संभवतः दोहरे-सटीक फ़्लोटिंग पॉइंट नंबरों के साथ गणना कर रहे हैं, और मुझे एक बेंचमार्क नहीं मिला है जहां वे सहिष्णुता के इस क्षेत्र में बेहतर प्रदर्शन करते हैं।
इसके अलावा, फ़ेगिन विधियों के साथ जाने के लिए कोई इंटरपोलेंट नहीं है। इसलिए मैं जो करता हूं, बस उन पर तीसरा आदेश हैर्माइट प्रक्षेपित किया जाता है ताकि एक तरह से मौजूद रहे (और यह आश्चर्यजनक रूप से अच्छी तरह से काम करता है)। हालाँकि, यदि कोई मानक प्रक्षेप कार्य नहीं है, तो आप उच्च क्रम प्रक्षेप प्राप्त करने के लिए पुनरावर्ती हरमाईट विधि (मिडपॉइंट प्राप्त करने के लिए इस प्रक्षेप का उपयोग कर सकते हैं, फिर 5 वां क्रम प्रक्षेप करें, आदि) कर सकते हैं, लेकिन यह बहुत महंगा है और परिणामी है। प्रक्षेप में आवश्यक रूप से निम्न सिद्धांत ट्रंकेशन त्रुटि शब्द नहीं होता है (इसलिए यह केवल तभी अच्छा होता dt
है जब वास्तव में छोटा होता है, जो हम चाहते हैं उस मामले का सटीक विपरीत है!)। इसलिए यदि आपको कभी भी अपनी सटीकता से मेल खाने के लिए एक बहुत अच्छे प्रक्षेप की आवश्यकता होती है, तो आपको कम से कम कुछ ऐसा करने की आवश्यकता है Vern9
।
नोट निकालने के बारे में
ध्यान दें कि एक्सट्रपलेशन पद्धतियां केवल मनमाना ऑर्डर रन-कुट्टा विधियों को उत्पन्न करने के लिए एल्गोरिदम हैं। हालांकि, अपने आदेश के लिए वे आवश्यकता से अधिक कदम उठाते हैं और उच्च सिद्धांत ट्रंकेशन त्रुटि गुणांक होते हैं, और इसलिए वे दिए गए क्रम में एक अच्छी तरह से अनुकूलित आरके विधि के रूप में कुशल नहीं हैं। लेकिन पिछले विश्लेषण को देखते हुए, इसका मतलब है कि बेहद कम सहिष्णुता का एक क्षेत्र है जहां ये विधियां "ज्ञात" आरके विधियों की तुलना में बेहतर करेंगी। लेकिन मेरे द्वारा चलाए गए प्रत्येक बेंचमार्क में, ऐसा लगता है कि मैंने उस कम को प्राप्त नहीं किया है।
नोट स्थिरता के बारे में
पसंद का वास्तव में स्थिरता के मुद्दों से कोई लेना-देना नहीं है। वास्तव में, यदि आप डिफरेंशियल ईक्शंस.ज्ल टैबलियस (आप केवल plot(tab)
स्थिरता क्षेत्रों के लिए) से गुजरते हैं, तो आप देखेंगे कि अधिकांश विधियों में संदिग्ध समान स्थिरता वाले क्षेत्र हैं। यह वास्तव में एक विकल्प है। आमतौर पर तरीकों को प्राप्त करते समय, लेखक आमतौर पर निम्नलिखित कार्य करता है:
- निम्नतम सिद्धांत ट्रंकेशन त्रुटि गुणांक खोजें (जो कि, अगले आदेश की शर्तों के लिए गुणांक है)
- आदेश बाधाओं के अधीन
- और डॉर्मंड-प्रिंस ऑर्डर 5 विधि के करीब स्थिरता क्षेत्र बनाएं।
आखिरी शर्त क्यों? ठीक है, क्योंकि यह विधि पीआई-नियंत्रित अनुकूली विकल्प चुनने के तरीके के साथ हमेशा स्थिर होती है, इसलिए यह "अच्छे पर्याप्त" स्थिरता वाले क्षेत्रों के लिए एक अच्छा बार है। तो यह कोई संयोग नहीं है कि स्थिरता क्षेत्र सभी समान होते हैं।
निष्कर्ष
विधि के हर विकल्प में tradeoffs है। उच्चतम क्रम RK विधियाँ सरलता से कम सहिष्णुता दोनों में उतनी कुशल नहीं हैं क्योंकि यह गुणांक की पसंद को अनुकूलित करने के लिए कठिन है, और क्योंकि फ़ंक्शन मूल्यांकन यौगिकों की संख्या (और प्रक्षेप होने पर और भी तेज़ी से बढ़ती है)। हालाँकि, अगर सहनशीलता कम हो जाती है, तो वे जीत जाते हैं, लेकिन जो सहनशीलता आवश्यक होती है, वह "मानक" अनुप्रयोगों (यानी वास्तव में केवल अराजक प्रणालियों पर लागू) से बहुत नीचे हो सकती है।