मुझे सुधार के साथ शुरू करते हैं। नहीं, odeint
कोई सहानुभूति समापक नहीं है। नहीं, सहानुभूति एकीकरण का मतलब ऊर्जा संरक्षण नहीं है।
सहानुभूति का क्या अर्थ है और आपको इसका उपयोग कब करना चाहिए?
सबसे पहले, सहानुभूति का क्या मतलब है? सिम्प्लेक्टिक का अर्थ है कि समाधान एक सहानुभूति के कई गुना पर मौजूद है। सिम्पेक्टिक मैनिफोल्ड एक समाधान सेट है जिसे 2-फॉर्म द्वारा परिभाषित किया गया है। सहानुभूतिपूर्ण कई गुना का ब्योरा शायद गणितीय बकवास की तरह लगता है, इसलिए इसके बजाय इसका सार यह है कि इस तरह के कई गुना पर चर के दो सेट के बीच सीधा संबंध है। यही कारण है कि भौतिकी के लिए यह महत्वपूर्ण है क्योंकि हैमिल्टन के समीकरणों में स्वाभाविक रूप से यह है कि समाधान चरण स्थान में एक सहानुभूति पर कई गुना रहते हैं, प्राकृतिक विभाजन के साथ स्थिति और गति घटक होते हैं। सही हैमिल्टन समाधान के लिए, उस चरण का अंतरिक्ष पथ निरंतर ऊर्जा है।
एक सहानुभूति इंटीग्रेटर एक इंटीग्रेटर है जिसका समाधान एक सिम्पेक्टिक मैनिफोल्ड पर रहता है। विवेकाधीन त्रुटि के कारण, जब यह एक हैमिल्टन प्रणाली को हल कर रहा है, तो यह कई गुना सही प्रक्षेपवक्र नहीं मिलता है। इसके बजाय, वह प्रक्षेपवक्र सही प्रक्षेपवक्र से क्रम लिए perturbed है। फिर समय के साथ इस प्रक्षेपवक्र की संख्यात्मक त्रुटि के कारण एक रैखिक बहाव होता है। सामान्य इंटीग्रेटर्स में द्विघात (या अधिक) बहाव होता है, और इस चरण के अंतरिक्ष पथ (सिर्फ स्थानीय) के बारे में कोई अच्छी वैश्विक गारंटी नहीं है।nO(Δtn)n
इसका तात्पर्य यह है कि सहानुभूतिपूर्ण इंटीग्रेटर सामान्य इंटीग्रेटर्स की तुलना में लंबे समय के पैटर्न को पकड़ने की प्रवृत्ति रखते हैं क्योंकि यह बहाव की कमी और आवधिकता की लगभग गारंटी है। यह नोटबुक केप्लर समस्या पर उन गुणों को अच्छी तरह से प्रदर्शित करता है । पहली छवि से पता चलता है कि मैं समाधान की आवधिक प्रकृति के बारे में क्या बात कर रहा हूं।
यह विभेदकक्वाशंस.ज्ल से काहन और ली के 6 वें क्रम सहानुभूति इंटीग्रेटर का उपयोग करके हल किया गया था । आप देख सकते हैं कि ऊर्जा बिल्कुल संरक्षित नहीं है, लेकिन इसकी भिन्नता इस बात पर निर्भर करती है कि सही समाधान कई गुना सही कई गुना है। लेकिन चूंकि संख्यात्मक समाधान स्वयं एक सहानुभूति के कई गुना पर रहता है, इसलिए यह लगभग बिल्कुल समय-समय पर होता है (कुछ रैखिक संख्यात्मक बहाव के साथ जो आप देख सकते हैं), यह दीर्घकालिक एकीकरण के लिए बहुत अच्छी तरह से करता है। यदि आप RK4 के साथ भी ऐसा ही करते हैं, तो आपको आपदा आ सकती है:
आप देख सकते हैं कि मुद्दा यह है कि संख्यात्मक समाधान में कोई वास्तविक आवधिकता नहीं है और इसलिए समय के साथ यह बहाव में बदल जाता है।
यह सहानुभूति इंटीग्रेटर्स को चुनने के सही कारण पर प्रकाश डालता है: सहानुभूति इंटीग्रेटर्स उन समस्याओं पर लंबे समय तक एकीकरण पर अच्छा होते हैं जिनमें सममित संपत्ति (हैमिल्टनियन सिस्टम) होती है । तो चलिए कुछ बातों को लेकर चलते हैं। ध्यान दें कि आपको हमेशा एक सहानुभूति समस्या पर भी सहानुभूति समापक की आवश्यकता नहीं होती है। इस मामले के लिए, एक अनुकूली 5 वीं क्रम रन-कुट्टा विधि ठीक कर सकती है। यहाँ है Tsit5
:
दो चीजों पर ध्यान दें। एक, यह एक अच्छी पर्याप्त सटीकता प्राप्त करता है कि आप चरण स्थान प्लॉट में वास्तविक बहाव नहीं देख सकते हैं। हालाँकि, दाईं ओर आप देख सकते हैं कि यह ऊर्जा बहाव है, और इसलिए यदि आप एक लंबे समय से एकीकरण कर रहे हैं, तो यह विधि आवधिक गुणों के साथ समाधान विधि भी नहीं करेगी। लेकिन यह सवाल उठता है कि यह दक्षता-वार बनाम केवल बेहद सटीक रूप से कैसे एकीकृत करता है? खैर, यह थोड़ा कम है। में DiffEqBenchmarks.jl आप कुछ इस सवाल की जांच मानक पा सकते हैं। उदाहरण के लिए, यह नोटबुकएक चतुष्कोणीय बोसोन मॉडल से हैमिल्टनियन समीकरण प्रणाली पर ऊर्जा त्रुटि बनाम रनटाइम को देखता है और दिखाता है कि यदि आप वास्तव में उच्च सटीकता चाहते हैं, तो यहां तक कि काफी लंबे एकीकरण समय के लिए यह एक उच्च क्रम आरके या रनगे-कुट्टा निस्ट्रॉम का उपयोग करने के लिए अधिक कुशल है ( आरकेएन) विधि। यह समझ में आता है क्योंकि सहानुभूतिपूर्ण संपत्ति को संतुष्ट करने के लिए इंटीग्रेटर्स कुछ दक्षता छोड़ देते हैं और बहुत कुछ निश्चित समय के कदम के लिए होता है (उत्तरार्द्ध में कुछ शोध कर रहे हैं लेकिन यह बहुत दूर नहीं है)।
इसके अलावा, इन दोनों नोटबुक्स से नोटिस करें कि आप भी एक मानक विधि ले सकते हैं और इसे वापस हल कर सकते हैं प्रत्येक चरण (या हर कुछ कदम) को कई गुना। यह है कि डिफरेंशियल ईक्शंस। जेएल मैनिफोल्डप्रो कॉलबैक का उपयोग करने वाले उदाहरण क्या कर रहे हैं। आप देखते हैं कि गारंटीकृत संरक्षण कानून बरकरार हैं लेकिन प्रत्येक चरण में एक निहित प्रणाली को हल करने की अतिरिक्त लागत के साथ। आप संरक्षण समीकरणों में जोड़ने के लिए पूरी तरह से निहित ODE सॉल्वर या एकवचन द्रव्यमान मेट्रिसेस का भी उपयोग कर सकते हैं, लेकिन अंतिम परिणाम यह है कि ये विधियां एक ट्रेडऑफ़ के रूप में अधिक कम्प्यूटेशनल रूप से महंगी हैं।
इसलिए संक्षेप में, उन समस्याओं का वर्ग जहां आप एक सहानुभूति समापक के लिए पहुंचना चाहते हैं, वे हैं जो एक सहानुभूति कई गुना (हैमिल्टनियन सिस्टम) पर एक समाधान है जहां आप कम्प्यूटेशनल संसाधनों का निवेश बहुत सटीक (सहिष्णुता <1e-12
) नहीं करना चाहते हैं समाधान और सटीक ऊर्जा / आदि की आवश्यकता नहीं है। संरक्षण। यह हाइलाइट है कि यह सभी दीर्घकालिक एकीकरण गुणों के बारे में है, इसलिए आपको उन सभी को बिलकुल नहीं करना चाहिए जैसे कि कुछ साहित्य बताते हैं। लेकिन वे अभी भी एस्ट्रोफिजिक्स जैसे कई क्षेत्रों में एक बहुत महत्वपूर्ण उपकरण हैं जहां आपके पास लंबे समय तक एकीकरण हैं जो आपको बेतुकी सटीकता के बिना पर्याप्त तेजी से हल करने की आवश्यकता है।
मुझे सहानुभूति समन्वयक कहां मिलेंगे? किस प्रकार के सहानुभूति समाकलनकर्ता मौजूद हैं?
सहानुभूति समापवर्तक के आम तौर पर दो वर्ग होते हैं। सहानुभूतिपूर्ण रन-कुट्टा इंटीग्रेटर्स हैं (जो ऊपर दिए गए उदाहरणों में दिखाए गए हैं) और इसमें निहित रनगे-कुट्टा विधियां हैं जिनके पास सहानुभूति संपत्ति है। जैसा कि @origimbo का उल्लेख है, सहानुभूतिपूर्ण Runge-Kutta इंटीग्रेटर्स की आवश्यकता है कि आप उन्हें एक विभाजित संरचना प्रदान करते हैं ताकि वे अलग से स्थिति और गति भागों को संभाल सकें। हालाँकि, टिप्पणी के लिए, निहित रन-कुट्टा तरीकों की आवश्यकता के बिना सहानुभूति है, लेकिन इसके बजाय एक nonlinear प्रणाली को हल करने की आवश्यकता है। यह बहुत बुरा नहीं है क्योंकि यदि सिस्टम गैर-कठोर है तो इस nonlinear सिस्टम को कार्यात्मक पुनरावृत्ति या एंडरसन त्वरण के साथ हल किया जा सकता है, लेकिन सहानुभूतिपूर्ण आरके विधियों को अभी भी दक्षता के लिए पसंद किया जाना चाहिए (यह '
उस ने कहा, odeint के पास इन परिवारों में से कोई भी तरीका नहीं है , इसलिए यदि आप सहानुभूतिपूर्ण एकीकरणकर्ताओं की तलाश कर रहे हैं तो यह एक अच्छा विकल्प नहीं है। फोरट्रान में, हेयरर की साइट पर एक छोटा सा सेट है जिसे आप उपयोग कर सकते हैं । Mathematica में कुछ बनाया गया है । GSL ODE सॉल्वर में RK Gaussian बिंदु इंटीग्रेटर्स निहित हैं जो IIRC सहानुभूतिपूर्ण हैं, लेकिन यह GSL विधियों का उपयोग करने के एकमात्र कारण के बारे में है।
लेकिन सहानुभूति समापक का सबसे व्यापक सेट जुलिया में डिफरेंशियल ईक्शन्स.jl में पाया जा सकता है (याद रखें कि इसका उपयोग ऊपर की नोटबुक के लिए किया गया था)। उपलब्ध सहानुभूतिपूर्ण रूज-कुट्टा विधियों की सूची इस पृष्ठ पर पाई गई है और आप देखेंगे कि निहित मिडपॉइंट विधि भी सहानुभूति है (अंतर्निहित रन-कुट्टा ट्रेपेज़ॉइड विधि को "लगभग सहानुभूतिपूर्ण" माना जाता है क्योंकि यह प्रतिवर्ती है)। न केवल इसके पास तरीकों का सबसे बड़ा सेट है, बल्कि यह ओपन-सोर्स भी है (आप उच्च-स्तरीय भाषा में कोड और इसके परीक्षण देख सकते हैं) और बहुत सारे बेंचमार्क हैं । शारीरिक समस्याओं को हल करने के लिए इसका उपयोग करने के लिए एक अच्छा परिचयात्मक नोटबुक यह ट्यूटोरियल नोटबुक है। लेकिन निश्चित रूप से यह अनुशंसा की जाती है कि आप पहले ODE ट्यूटोरियल के माध्यम से पैकेज के साथ शुरुआत करें ।
सामान्य तौर पर आप इस ब्लॉग पोस्ट पर संख्यात्मक अंतर समीकरण सुइट्स का विस्तृत विश्लेषण पा सकते हैं । यह काफी विस्तृत है, लेकिन चूंकि इसमें बहुत सारे विषयों को शामिल करना है, जो प्रत्येक को इससे कम विवरण देता है, इसलिए इसे किसी भी तरह से विस्तारित करने के लिए स्वतंत्र महसूस करें।