BDF बनाम निहित रन कुट्टा समय कदम


16

क्या ऐसे कोई कारण हैं कि किसी को बीडीएफ समय कदम पर उच्च आदेश निहित रन कुट्टा (IMRK) का चयन करना चाहिए? BDF मेरे लिए बहुत आसान लगता है क्योंकि चरण IMRK को समय कदम प्रति q रैखिक हल की आवश्यकता होती है । BDF और IMRK के लिए स्थिरता एक महत्वपूर्ण बिंदु है। मैं किसी भी संसाधन की तुलना नहीं कर सकता / विपरीत समय के स्टेपर्स की तुलना कर सकता हूं।क्षक्ष

यदि यह मदद करता है, तो अंतिम लक्ष्य मेरे लिए एक उच्च क्रम अंतर्निहित समय स्टेपर का चयन करने के लिए है, जो एडवेक्शन-डिफ्यूजन पीडीई के लिए है।

जवाबों:


34

हां, किसी कारण से इस पर बहुत अधिक संसाधन नहीं हैं। बहुत लंबे समय के लिए, मानक गोटो "बस BDF विधियों का उपयोग करें" था। यह मंत्र कुछ ऐतिहासिक कारणों से पत्थर में सेट किया गया था: एक गियर के लिए कोड पहले व्यापक रूप से उपलब्ध कठोर सॉल्वर था, और दूसरे के लिए MATLAB सूट में एक अंतर्निहित आरके विधि शामिल नहीं थी / है। हालाँकि, यह अनुमान सही नहीं है, और मैं परीक्षण से कहूंगा कि यह आमतौर पर गलत है। मुझे विस्तार से बताएं।

BDF विधियों की एक उच्च निश्चित लागत है

BDF तरीकों में अनुकूली टाइमस्टैपिंग और अनुकूली क्रम वास्तव में उच्च लागत है। गुणांकों को पुनर्गणना करना पड़ता है, या मूल्यों को अलग-अलग समय में प्रक्षेपित करने की आवश्यकता होती है। वर्तमान बीडीएफ कोड को बेहतर बनाने में बहुत काम हुआ है (इस मुद्दे को अलग तरीके से संभालने की कोशिश में कार्यान्वयन के लिए दो प्रसिद्ध "रूप" हैं), लेकिन यह वास्तव में सिर्फ एक बहुत ही मुश्किल सॉफ्टवेयर इंजीनियरिंग समस्या है। इस वजह से, वास्तव में अधिकांश बीडीएफ कोड गियर के मूल कोड से सभी वंशज हैं: गियर के, वोड, लिसोडा, सुंडियाल के सीवीओडीई, यहां तक ​​कि डीएई सॉल्वर डीएएसकेआर और डीएएसएल एक ही कोड से वंशज हैं।

इसका मतलब यह है कि, यदि आप समस्या "बहुत छोटा है", उच्च निश्चित लागत वास्तव में मायने रखती है और Implicit RK तरीके बेहतर करेंगे।

उच्च क्रम बीडीएफ विधियाँ जटिल स्वदेशी के लिए बहुत अस्थिर हैं

BDF विधियां आपको अधिकतम आदेश को नियंत्रित करने और एक कारण के लिए इसे अधिक रूढ़िवादी बनाने की अनुमति देती हैं: उच्चतर आदेश BDF विधियां बहुत अच्छी तरह से "मध्यम आकार" के जटिल आइजनवेल्स को भी नहीं संभाल सकती हैं। तो इन मामलों में, स्थिर होने के लिए, उन्हें अपना आदेश छोड़ना होगा। यही कारण है कि तकनीकी रूप से स्थिर रहते हुए 6th ऑर्डर BDF मेथड को अक्सर नजरअंदाज कर दिया जाता है क्योंकि यहां तक ​​कि 5th ऑर्डर में पहले से ही मुद्दे हैं (और 6th ऑर्डर भी कम स्थिर है)। केवल 2 क्रम तक ही A- स्थिर होता है, इसलिए यह हमेशा वहां पर वापस आ सकता है, लेकिन फिर कदम त्रुटि हावी है।

तो गैर-तुच्छ समस्याओं पर BDF कोड का उपयोग करते समय, आपको हर समय 5 वाँ आदेश नहीं मिल रहा है। दोलन के कारण इसका क्रम गिर जाता है।

BDF विधियों में एक उच्च प्रारंभिक लागत होती है

मैंττ

बीडीएफ तरीके, मल्टीस्टेप तरीके हैं, जिनमें सबसे अच्छा स्केलिंग है

radau

क्या मानक उपलब्ध हैं?

आसानी से उपलब्ध कार्य-सटीक आरेख के संदर्भ में हेयरर की पुस्तक और डिफेकबेंचमार्क (नीचे समझाया गया) संभवतः सर्वश्रेष्ठ हैं। हेयरर्स सॉल्विंग ऑर्डिनरी डिफरेंशियल इक्वेशन II में 154 और 155 पेजों पर वर्क-सटीक आरेखों का एक समूह है। उन्होंने जो समस्याएं बताईं, उनके परिणामों का मैंने ऊपर बताए गए कारणों से मिलान किया है: यदि समस्या नहीं है तो अंतर्निहित आरके अधिक कुशल होगा। "पर्याप्त रूप से बड़े"। ध्यान देने वाली एक और दिलचस्प बात यह है कि उच्च क्रम रोसेनब्रोक विधियाँ Rodasशासन में उनके कई परीक्षणों (जैसे ) में सबसे अधिक कुशल के रूप में सामने आती हैं , जहाँ त्रुटि अधिक होती है, और अंतर्निहित आरके radau5कम त्रुटियों पर सबसे अधिक कुशल होता है। लेकिन उनकी परीक्षण समस्याएं ज्यादातर बड़े पीडीई के विवेक नहीं हैं, इसलिए ऊपर दिए गए बिंदुओं को ध्यान में रखें।

आप कैसे परीक्षण / बेंचमार्क करते हैं?

मैं जूलिया में डिफरेंशियल ईक्शंस.ज्ल के साथ इसका परीक्षण करना पसंद करता हूं (अस्वीकरण: मैं डेवलपर्स में से एक हूं)। यह जूलिया में है। प्रोग्रामिंग भाषा को वास्तव में यहां एक नोट मिलना चाहिए। याद रखें कि जैसे ही फंक्शन कॉल की लागत बढ़ती है, बीडीएफ तरीके बेहतर होते हैं। R / MATLAB / पायथन में, उपयोगकर्ता का फ़ंक्शन केवल R / MATLAB / पायथन कोड है जिसे अनुकूलित सॉल्वरों को वास्तव में उपयोग करना है: यदि आप SciPy या Sundials के रैपर का उपयोग कर रहे हैं, तो यह आपके द्वारा पास किए जाने वाले फ़ंक्शन को छोड़कर सभी C / Fortran कोड है। । इसका मतलब यह है कि, गतिशील भाषाओं में (जो जूलिया नहीं हैं), BDF विधियां सामान्य रूप से बेहतर होती हैं क्योंकि फ़ंक्शन कॉल बहुत अयोग्य हैं (शायद यही कारण है कि शैंपेन ode15sMATLAB सूट में शामिल है, लेकिन कोई अंतर्निहित KK विधि नहीं है) ।

ODEProblem

@time sol = solve(prob,CVODE_BDF())
@time sol = solve(prob,radau())

जहां पहले Sundials ' CVODE(BDF विधि) का उपयोग करता है, और दूसरा हेयरर radau(अंतर्निहित RK) का उपयोग करता है ।

किसी के लिए ODEProblem, आप बेंचमार्किंग टूल का उपयोग यह देखने के लिए कर सकते हैं कि अलग-अलग अनुकूली सहिष्णुता के लिए अलग-अलग एल्गोरिदम पैमाने कैसे हैं। कुछ परिणाम DiffEqBenchmarks.jl पर पोस्ट किए गए हैं । उदाहरण के लिए, ROBER समस्या (3 कठोर ODEs की प्रणाली) पर आप देख सकते हैं कि Sundials वास्तव में अस्थिर है और एक उच्च पर्याप्त सहिष्णुता के साथ विचलन करता है (जबकि अन्य विधियां केवल ठीक से अभिसरण करती हैं), स्थिरता के मुद्दों के बारे में ऊपर नोट दिखा रहा है। वैन डेर पोल समस्या पर , आप देख सकते हैं कि यह अधिक धुलाई है। मेरे पास एक बहुत अधिक है जो मैंने पोस्ट नहीं किया है, लेकिन शायद यह तब तक नहीं मिलेगा जब तक कि मैं कुछ उच्चतर ऑर्डर रोसेनब्रोक विधियों को समाप्त नहीं करता (रॉडास उन का फोरट्रान संस्करण है)।

(नोट: उन कठोर बेंचमार्क को अपडेट करने की आवश्यकता है। एक के लिए, किसी कारण से ODE.jl के तरीकों को हटाने के लिए पाठ को अपडेट करने की आवश्यकता है ...)

एक्सट्रपलेशन विधियों और आरकेसी

इसके अतिरिक्त एक्सट्रपलेशन तरीके भी हैं, seulexजो कठोर समस्याओं के लिए बने हैं। ये "असीम अनुकूली आदेश" हैं, लेकिन इसका मतलब है कि जब आप बहुत कम त्रुटि की तलाश कर रहे हैं (यानी कम से कम कठोर समस्याओं को हल करने के लिए देख रहे हैं, तो इसका मतलब है कि 1e-10आप शायद एक स्पष्ट पद्धति का उपयोग कर सकते हैं) । हालांकि, ज्यादातर मामलों में वे उतने कुशल नहीं होते हैं और इससे बचना चाहिए।

रनगे-कुट्टा चेबीचेव एक स्पष्ट पद्धति है जो कठोर समस्याओं पर भी काम करती है जिस पर आपको विचार करना चाहिए। मेरे पास यह डिफरेंशियल इक्वेशन में लिपटा हुआ नहीं है। अभी तक मेरे पास कोई सख्त सबूत नहीं है कि यह कैसे मेल खाता है।

विचार करने के अन्य तरीके: कठोर पीडीई के लिए विशेष तरीके

संभवतया यह नोट करना चाहिए कि छोटे-मध्यम आकार के कठोर समस्याओं के लिए उच्च क्रम रोसनब्रोक विधियां वास्तव में अच्छी तरह से कई बार बेहतर करती हैं, जब आप आसानी से याकूबियन की गणना कर सकते हैं। हालाँकि, कुछ PDEs के लिए, मेरा मानना ​​है कि अनुकूलन-प्रसार की समस्याएं इस श्रेणी में आती हैं, रोसेनब्रॉक सटीकता के कुछ आदेश खो सकते हैं। इसके अलावा, उन्हें अपनी सटीकता बनाए रखने के लिए बहुत सटीक जैकोबियंस की आवश्यकता होती है। जूलिया में यह आसान है क्योंकि सॉल्वर प्रतीकात्मक और ऑटोडीफ़ेन्शन के साथ आते हैं जो मशीन एप्सिलॉन के लिए सही हो सकते हैं। हालांकि, MATLAB की तरह बातेंode23sसमस्या हो सकती है क्योंकि ये कार्यान्वयन परिमित भिन्नता का उपयोग करते हैं। BDF और निहित आरके विधियों के लिए, जैकबियन में त्रुटियां धीमी गति से अभिसरण की ओर ले जाती हैं, जबकि रोसेनब्रॉक के लिए, क्योंकि ये निहित समीकरण नहीं हैं और बल्कि जैकबियन आक्रमणों के साथ आरके के तरीके हैं, ये सटीकता का क्रम खो देते हैं।

अन्य तरीकों को देखने के लिए घातीय आरके विधियां, घातीय समय-विभेदन (ETD), अंतर्निहित एकीकरण कारक (IIF) और घातीय Rosenbrock विधियां हैं। पहले तीन इस तथ्य का उपयोग करते हैं कि, कई पीडीई विवेकाधिकार में,

यूटी=यू+(यू)

यू

जेयू+जी(यू)जे=जेयू+जी

अभी भी अन्य विधियाँ: नवीनतम रचनाएँ

जो तरीके पूरी तरह से निहित हैं वे स्पष्ट रूप से कड़े समीकरणों के लिए हैं। यदि PDE पर्याप्त बड़ा नहीं है, तो आप HPCs का उपयोग करने के लिए प्रभावी रूप से "अंतरिक्ष में समानांतर" नहीं बना सकते हैं। इसके बजाय, आप समानांतर-इन-टाइम विवेकाधिकार बना सकते हैं जो पूरी तरह से अंतर्निहित हैं और इस तरह कड़े समीकरणों के लिए अच्छा है, फिर भी हार्डवेयर का पूर्ण उपयोग करने के लिए समानांतर है। XBraid एक सॉल्वर है जो इस तरह की एक तकनीक का उपयोग करता है, और मुख्य विधियाँ PFFAST और पारलियल विधियाँ हैं। डिफरेंशियलएक्शंस.ज्ल एक न्यूरल नेट विधि विकसित कर रहा है जो समान रूप से काम करता है।

फिर से, यह तब इष्टतम है जब आपके पास कुशलता से समानांतर करने के लिए एक बड़ा पर्याप्त स्थानिक विवेकाधिकार नहीं है, लेकिन इसके पास समानांतर उपयोग के लिए संसाधन उपलब्ध हैं।

निष्कर्ष: नमक के एक दाने के साथ स्पर्शोन्मुख विचार करें

Δटी

BDF विधियाँ asymptotically सर्वश्रेष्ठ हैं, लेकिन ज्यादातर मामलों में आप शायद उस शासन में काम नहीं कर रहे हैं। लेकिन अगर स्थानिक विवेक के पास पर्याप्त बिंदु हैं, तो BDF विधियां कुशलता से अंतरिक्ष में समानांतर हो सकती हैं (रेखीय हल को समानांतर करके) और कम से कम फ़ंक्शन कॉल करेंगे, और इस प्रकार सबसे अच्छा करेंगे। लेकिन अगर आपका पीडीई विवेक पर्याप्त रूप से बड़ा नहीं है, तो अंतर्निहित आरके, रोसेनब्रॉक, घातीय आरके आदि तरीकों पर एक अच्छी नज़र डालें। एक सॉफ्टवेयर सूट का उपयोग करना जैसे कि डिफ़रेंशियल ईक्शंस.ज्ल जो विभिन्न तरीकों के बीच स्वैप करना आसान बनाता है, आपके लिए यह समझने में मददगार हो सकता है कि आपके समस्या डोमेन के लिए कौन सी विधि सबसे अच्छा करती है, क्योंकि कई मामलों में यह पहले से ज्ञात नहीं हो सकता है।

[यदि आपके पास कोई उदाहरण समस्या है जिसे आप परीक्षण सूट में जोड़ा चाहते हैं, तो कृपया वहां कुछ पाने में मदद करने के लिए स्वतंत्र महसूस करें। मैं इस पर बहुत व्यापक संसाधन रखना चाहता हूं। मुझे उम्मीद है कि रनरटेबल नोटबुक फॉर्म में "जल्द ही" सभी हेयरर के बेंचमार्क होंगे, और अन्य समस्याओं को भी पसंद करेंगे जो वैज्ञानिक क्षेत्रों के प्रतिनिधि हैं। किसी भी मदद की सराहना की है!]


3
यह एक बहुत ही विस्तृत प्रतिक्रिया है, मेरी कुछ नई दिशाएँ हैं! मैं आपके समय की बहुत सराहना करता हूं।
user107904

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