संख्यात्मक एकीकरणकर्ताओं के संदर्भ में "सहानुभूतिपूर्ण" का क्या अर्थ है, और SciPy का odeint उनका उपयोग करता है?


25

इस टिप्पणी में मैंने लिखा है:

... डिफ़ॉल्ट SciPy इंटीग्रेटर, जो मैं मान रहा हूं केवल सहानुभूति विधियों का उपयोग करता है।

जिसमें मैं SciPy's का उल्लेख कर रहा हूं odeint, जो या तो "गैर-कठोर (एडम्स) विधि" या "कठोर (BDF) विधि" का उपयोग करता है। स्रोत के अनुसार :

def odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0,
           ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0,
           hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12,
           mxords=5, printmessg=0):
    """
    Integrate a system of ordinary differential equations.

    Solve a system of ordinary differential equations using lsoda from the
    FORTRAN library odepack.

    Solves the initial value problem for stiff or non-stiff systems
    of first order ode-s::
        dy/dt = func(y, t0, ...)
    where y can be a vector.
    """

यहां एक उदाहरण है जहां मैं तीन महीने के लिए पृथ्वी के चारों ओर एक उपग्रह की कक्षा को केवल यह दिखाने के लिए प्रचारित करता हूं कि यह अपेक्षा के अनुरूप है।

मेरा मानना ​​है कि गैर-सहानुभूति समाहित करने वालों के पास अवांछनीय संपत्ति है जो वे ऊर्जा (या अन्य मात्रा) का संरक्षण नहीं करेंगे और इसलिए उदाहरण के लिए कक्षीय यांत्रिकी में अवांछनीय हैं। लेकिन मुझे बिल्कुल यकीन नहीं है कि यह क्या है जो एक सहानुभूति को एकीकृत करता है सहानुभूति।

क्या यह स्पष्ट करना संभव है कि संपत्ति क्या है (जो कि एक सीधा-साधा समद्विभाजक समद्विभाजक बना देती है) एक सरल और (काफी) समझने में आसान है लेकिन गलत तरीके से नहीं? मैं यह देखने के दृष्टिकोण से पूछ रहा हूं कि इंटीग्रेटर आंतरिक रूप से कैसे काम करता है, बजाय इसके कि वह परीक्षण में कैसा प्रदर्शन करता है।

और क्या मेरा संदेह सही है जो odeintकेवल सहानुभूति वाले इंटीग्रेटर का उपयोग करता है?


4
अंगूठे के एक मजबूत नियम के रूप में, आपको केवल यह आशा करनी चाहिए कि एक ब्लैक बॉक्स इंटीग्रेटर सहानुभूतिपूर्ण है अगर आपको स्थिति और संवेग समीकरणों को अलग करने की आवश्यकता है।
ओरिगम्बो

@origimbo धन्यवाद ये करते हैं, और ऐसा लगता है कि odeintकाफी पुराने, स्थापित और अच्छी तरह से संदर्भित स्रोत कोड, (संपादित प्रश्न, संदर्भ ODEPACK और LSoda) के लिए पायथन रैप्पोअर है, हालांकि मैं निश्चित रूप से इसे ब्लैक-बॉक्स मोड में उपयोग करने के लिए मानता हूं। मेरा जुड़ा उदाहरण दिखाता है कि 6 डी राज्य वेक्टर में तीन स्थान और तीन वेग होते हैं।
उहोह

11
ODEPACK और LSoda में ODE इंटीग्रेटर्स सिम्पेक्टिक इंटीग्रेटर्स नहीं हैं ।
ब्रायन बॉर्चर्स

2
यहाँ एक बहुत ही सरल सॉल्वरों की तुलना में काम किया गया उदाहरण है: यूलर और सिम्पलेक्टिक यूलर: idontgetoutmuch.wordpress.com/2013/08/06/…
idontgetoutmuch

2
हेयरर, नोरसेट और वानर की पुस्तक सहानुभूति के तरीकों का एक अच्छा विवरण देती है। चित्र 16.1 को विशेष रूप से देखें, और यहां के आंकड़े ।
जेएम

जवाबों:


47

मुझे सुधार के साथ शुरू करते हैं। नहीं, 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 ट्यूटोरियल के माध्यम से पैकेज के साथ शुरुआत करें ।

सामान्य तौर पर आप इस ब्लॉग पोस्ट पर संख्यात्मक अंतर समीकरण सुइट्स का विस्तृत विश्लेषण पा सकते हैं । यह काफी विस्तृत है, लेकिन चूंकि इसमें बहुत सारे विषयों को शामिल करना है, जो प्रत्येक को इससे कम विवरण देता है, इसलिए इसे किसी भी तरह से विस्तारित करने के लिए स्वतंत्र महसूस करें।


10
इस जवाब के साथ मुझे लगता है कि स्टैक एक्सचेंज जैकपॉट मारा गया है! यह मेरे लिए एकदम सही उत्तर है, क्योंकि मैं इसके बारे में कुछ तुरंत समझ जाता हूं और इसके कुछ हिस्सों को आगे पढ़ने के लिए उत्सुक नहीं छोड़ता। मैं वास्तव में उस समय की सराहना करता हूं जो आपने इस उत्तर के स्रोत के साथ-साथ अन्य सहायक और शिक्षाप्रद लिंक को शामिल करने के लिए लिया है।
ऊह

गणितीय विवरणों में जाने से पहले, हम मोटे तौर पर कह सकते हैं कि सहानुभूति का अर्थ मात्रा का संरक्षण है , क्या हम नहीं कर सकते?
मिगेल

2
एफटीआर, कारण अनुकूली 5 वें क्रम रन-कुट्टा आरके 4 की तुलना में बहुत बेहतर प्रदर्शन करता है यहां ऐसा नहीं है कि इसका उच्च आदेश है लेकिन यह अधिक उपयुक्त चरण आकार चुनता है। आरके 4 का प्रदर्शन इतनी बुरी तरह से होता है कि मुख्य रूप से पेरिगी पर कदम का आकार अनुचित रूप से अधिक होता है; आधा कदम आकार के साथ एक ही विलायक एक बेहतर समाधान देगा। (बस, यह बहुत समय बर्बाद कर देगा
अपोर्गी के

1
उत्कृष्ट प्रदर्शनी। एक पक्ष के प्रश्न के रूप में: ओपी पायथन के संदर्भ से शुरू होता है - क्या लिंक किए गए जूलिया उदाहरणों की तर्ज पर पायथन ट्यूटोरियल / पैकेज की सिफारिश की गई है?
Quetzalcoatl

1
इन प्रकार के इंटीग्रेटर्स के लिए एकमात्र एकमात्र पायथन पैकेज है जो कि अलग- अलग है , जहाँ यह README पर प्रलेखित नहीं है, लेकिन आप इन सभी विधियों को एक्सेस कर सकते हैं और उस पैकेज का उपयोग करके पायथन में इसे पुनः लिख सकते हैं।
क्रिस रैकैसस

14

क्रिस रैकैकास के उत्तर को पूरक करने के लिए, गणितीय बकवास के साथ-साथ कुछ सामान जो आप लगभग निश्चित रूप से जानते हैं, को बताने के लिए, एक गतिशील प्रणाली हैमिल्टनियन है यदि निर्देशांक और और एक कार्यात्मक के साथ एक विवरण है । ऐसे कि और यह प्रस्ताव प्रक्षेप पथों के साथ के मूल्य को संरक्षित करता है, लेकिन इसकी एक अतिरिक्त संपत्ति भी है, अर्थात यदि हम मानचित्रण को परिभाषित करते हैं pqH(p,q)

dqdt=+Hp
dpdt=Hq.
H
p(t),q(t)=ϕt(p(t0),q(t0))
तब मैपिंग दो फॉर्म संरक्षण करती है । ऐसी समस्या के लिए जिसमें और एक आयामी हैं आप इस बारे में यह कह सकते हैं कि चरण स्थान पर बंद वक्रों के अंदर का क्षेत्र संरक्षित है। यह सभी प्रकार की अच्छी स्थिरता के गुणों को सुनिश्चित करता है, क्योंकि प्रक्षेप पथ की "गेंदों" को एक दूसरे के लिए "करीब" रहना पड़ता है।dpdqpq

संख्या विज्ञान के संदर्भ में, एक सहानुभूति समन्वयक उसी तरह कार्य करता है, जो इस क्षेत्र / दो रूप का संरक्षण भी करता है। बदले में इसका मतलब है कि एक संरक्षित "संख्यात्मक हैमिल्टनियन" है (जो [पढ़ा नहीं जा सकता है '] ठीक उसी के समान है)। ध्यान दें कि स्थिरता सटीकता के समान नहीं है, ताकि सहानुभूति विधियों के अधिकांश लाभ बहुत लंबे समय के लिए एकीकृत हो जाएं (जैसे कि आपका तरीका तेजी से पृथ्वी के गलत पक्ष पर एक उपग्रह रख सकता है, जबकि इसे कभी भी क्षय करने की अनुमति नहीं देता है। यह)।


इसके लिए शुक्रिया! अब मैं अपने पे-ग्रेड से ऊपर के शब्दों का उपयोग करूंगा। जब वे 3-बॉडी सिमुलेशन में जैसे द्विभाजनों के पास होते हैं, तो n-trajectories की गेंदों का जोखिम अधिक होता है। सीएफ डीडेल एट अल। 2007, इंट। जे। द्विभाजन और अराजकता, वी 17, सं। 8 (2007) 2625–2677 मैंने कैसे किया? इसके अलावा ieec.cat/hosted/web-libpoint/papers/…
uhoh

2
जब तक पाठक गणितीय विवरणों से अवगत नहीं होता है, स्थिरता का उल्लेख भ्रामक है, क्योंकि वॉल्यूम के संरक्षण का मतलब यह नहीं है कि व्यक्तिगत प्रक्षेपवक्र करीब हैं।
मिगेल

1
@ मिग्युएल मुझे लगता है कि यह उन स्थितियों में से एक है जहां पाठक जो गणितीय विवरणों का पालन नहीं करता है, वैसे भी क्षतिग्रस्त हो जाता है, लेकिन सटीकता, स्थिरता और कम्प्यूटेशनल दक्षता के सामान्य संख्यात्मक की ट्रोइका के संदर्भ में, मैं तर्क देता हूं कि स्थिरता पर जोर देना लाभ उपयोगी है। यदि आप कुछ बेहतर के बारे में सोच सकते हैं, जो कि गलत तरीके से गलत नहीं है, तो मुझे फिर से लिखना स्वीकार करने में खुशी होगी।
ओरिगम्बो

@origimbo इस बारे में क्या? मानसिक छवि 1 सेमी शीट की जेली है, जिसके कण प्रवाह के अधीन हैं: व्यक्तिगत प्रक्षेपवक्र पूरी तरह से अलग हो सकते हैं, लेकिन कण अभी भी 1 सेमी , इसलिए लंबी अवधि में स्थिरता की धारणा प्रदान करते हैं । 22
मिगेल

1
@ मिगेल: लेकिन कणों के बूँद को दो या अधिक भागों में विभाजित करने की अनुमति है। इसकी कुल मात्रा को स्थिर रहना होगा।
वोल्फगैंग बैंगर्थ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.