एक संख्यात्मक ODE सॉल्वर कार्यान्वयन का परीक्षण कैसे करता है?


26

मैं संख्यात्मक ODE सॉल्वरों के सॉफ़्टवेयर लाइब्रेरी पर काम करना शुरू करने वाला हूं, और मैं सॉल्यूशन कार्यान्वयन के लिए परीक्षण तैयार करने के तरीके से जूझ रहा हूं। मेरी महत्वाकांक्षा यह है कि पुस्तकालय, आखिरकार, दोनों नॉनस्टिफ और कठोर समस्याओं के लिए सॉल्वर शामिल होंगे, और कम से कम एक अंतर्निहित सॉल्वर (मैटलाब में odeदिनचर्या की क्षमताओं के साथ अधिक या कम ), इसलिए परीक्षण पद्धति को विभिन्न को प्रतिबिंबित करने की आवश्यकता है विभिन्न सॉल्वरों के लिए समस्याओं और मानदंडों के प्रकार।

मेरी समस्या अब यह है कि मुझे नहीं पता कि इस परीक्षण की शुरुआत कहां से की जाए। मैं एक एल्गोरिथ्म के उत्पादन का परीक्षण करने के लिए कुछ अलग तरीके सोच सकता हूं:

  • उस समस्या के लिए परीक्षण करें जिसमें एक विश्लेषणात्मक समाधान है, और जांचें कि सभी लौटाए गए डेटा बिंदुओं के लिए संख्यात्मक समाधान सहिष्णुता स्तरों के भीतर है। इसके लिए कई प्रकार की विश्लेषणात्मक समस्याओं का ज्ञान होना चाहिए जो उन सभी गुणों को प्रदर्शित करती हैं जो मैं चाहता हूं कि विभिन्न सॉल्वर काम करें (कठोरता, अंतर्निहित समस्याएं आदि), जो मेरे पास नहीं हैं, कम से कम मेरे सिर के ऊपर से नहीं।

    यह विधि एक सॉल्वर विधि के परिणामों का परीक्षण करती है । इस प्रकार, इस बात की कोई गारंटी नहीं है कि सॉल्वर वास्तव में काम करता है, बस यह दिए गए परीक्षण समस्या के लिए काम करता है । इसलिए, मुझे संदेह है कि सॉल्वर के काम करने के लिए बड़ी संख्या में परीक्षण समस्याओं को आत्मविश्वास से सत्यापित करने की आवश्यकता है।

  • मैं एल्गोरिदम का उपयोग करने के लिए कुछ समय के चरणों के समाधान की मैन्युअल रूप से गणना करता हूं, जिसे लागू करने का इरादा रखता हूं, और फिर सॉल्वर के साथ भी ऐसा करता हूं और जांचता हूं कि परिणाम समान हैं। इसके लिए समस्या के सही समाधान की कोई जानकारी नहीं है, लेकिन इसके लिए बहुत काम करने की आवश्यकता है।

    दूसरी ओर, यह विधि केवल एल्गोरिथ्म का परीक्षण करती है , जो मेरे द्वारा ठीक है - अगर किसी और ने साबित कर दिया है कि 4 वें क्रम रन-कुट्टा काम करता है, तो मुझे इसकी सख्त जरूरत नहीं है। हालाँकि, मुझे चिंता है कि परीक्षण के मामलों को तैयार करना बहुत ही बोझिल होगा, क्योंकि मुझे टेस्ट डेटा जनरेट करने का एक अच्छा तरीका नहीं पता (सिवाय हाथ से, जो बहुत काम का होगा ...)।

उपरोक्त दोनों विधियों में मेरे वर्तमान ज्ञान के साथ मेरे लिए गंभीर सीमाएँ हैं - मैं पहले एक के लिए परीक्षण समस्याओं का एक अच्छा सेट नहीं जानता, और मैं दूसरे के लिए परीक्षण डेटा उत्पन्न करने का एक अच्छा तरीका नहीं जानता।

क्या संख्यात्मक ODE सॉल्वर को सत्यापित करने के अन्य तरीके हैं? क्या कार्यान्वयन पर अन्य मानदंड हैं जिन्हें सत्यापित किया जाना चाहिए? वहाँ स्तोत्र समाधानकर्ताओं परीक्षण पर किसी भी अच्छे (मुक्त) संसाधन हैं 1 ?

EDIT:
चूंकि यह प्रश्न बहुत व्यापक है, इसलिए मैं थोड़ा स्पष्ट करना चाहता हूं। मैं जो टेस्ट सूट बनाना चाहता हूं, उसमें दो मुख्य उद्देश्य होंगे:

  1. यह सत्यापित करना कि सॉल्वरों ने उन समस्याओं के लिए काम किया है, जिन्हें हल करने का इरादा है। दूसरे शब्दों में, गैर-कठोर समस्याओं के लिए एक सॉल्वर को एक कड़ी समस्या पर केले जाने की अनुमति है, लेकिन गैर-कठोर समस्याओं पर अच्छा प्रदर्शन करना चाहिए। इसके अलावा, अगर लाइब्रेरी में अन्य सॉल्वर हैं जो उच्च सटीकता प्रदान करते हैं, तो बहुत सटीक परिणाम लागू करने के लिए आवश्यक नहीं हो सकता है - बस "सटीक" सटीक। इस प्रकार, मेरे प्रश्न का एक हिस्सा यह है कि किस सॉल्वर के लिए परीक्षणों का उपयोग किया जाना चाहिए; या, कम से कम, किसी को यह तय करने का कारण कैसे होना चाहिए।

  2. पुस्तकालय की स्थापना पर स्वच्छता परीक्षण। इन परीक्षणों की आवश्यकता (नहीं होनी चाहिए) विस्तृत या समय लेने वाली होनी चाहिए; केवल बहुत मूल बातें जो 5 सेकंड से कम समय में चलाई जा सकती हैं, लेकिन यह उपयोगकर्ता को सचेत कर देगा यदि कुछ ऑफ-द-चार्ट अजीब है। इस प्रकार, मुझे उन परीक्षणों के निर्माण का एक तरीका भी चाहिए जो बहुत सरल हैं, लेकिन फिर भी मुझे पुस्तकालय की स्थिति के बारे में कुछ बताते हैं।


1 हाँ, मैं अपनी आँखों से गोग्लिंग कर रहा हूँ, लेकिन मुझे जो भी मिलता है, वह बहुत तुच्छ उदाहरणों के साथ लेक्चर नोट्स हैं, जिसमें बरई से सीडब्ल्यूआई ओडीई टेस्ट सेट के उल्लेखनीय अपवाद हैं , जो मुझे पता नहीं है कि, या मैं कैसे। मेरे उद्देश्यों के लिए उपयोग कर सकता है, क्योंकि यह उन लोगों की तुलना में अधिक परिष्कृत सॉल्वरों का इलाज करता है जिन्हें मैं परीक्षण करना चाहता हूं ...


2
@ user75064: बिल्कुल! मुझे नहीं पता था कि साइट भी मौजूद है =) कोई भी मॉड, मुझे वहां स्थानांतरित करने के लिए स्वतंत्र महसूस हो रहा है।
टॉमस अचन

गणित स्टैक एक्सचेंज में इस उत्तर में अन्य परीक्षा सेटों के लिंक हैं ।
ज्योफ ऑक्सबेरी

@GeoffOxberry: मैंने उनमें से कई पहले पाए हैं। उनमें से अधिकांश फोरट्रान में कार्यान्वित किए जाते हैं, और यह मानते हैं कि पाठक एक ही भाषा में सॉल्वर का परीक्षण करना चाहता है, जो एक और त्रुटि स्रोत जोड़ता है ... हालांकि, एक युगल (डीटैस्ट सूट के लेख) वास्तव में उपयोगी साबित हुए। आपका बहुत बहुत धन्यवाद!
टॉमस एशचन

जवाबों:


12

यह एक बहुत व्यापक प्रश्न है और मैं आपको सोचने के लिए कुछ चीजें देने जा रहा हूं (कुछ आपके पोस्ट में पहले से ही शामिल हैं, लेकिन उन्हें पूर्णता के लिए यहां दोहराया गया है)।

समस्याओं का दायरा

  • आपको समस्याओं को निर्दिष्ट करने के तरीके के इंटरफ़ेस को परिभाषित करने की आवश्यकता है।
  • क्या आप उन मापदंडों की अनुमति देने जा रहे हैं जो तय किए जा सकते हैं या समाधान के लिए अलग-अलग हो सकते हैं?
  • क्या आप गड़बड़ी के मापदंडों को थोड़ी गड़बड़ी की अनुमति देने जा रहे हैं और देखें कि क्या वे अभी भी एक विशेष समस्या में हल करने योग्य हैं (उदाहरण के लिए, एक पैरामीटर कहीं भी परिभाषित किया गया है)?ϵ
  • क्या आप अनंत परिशुद्धता की अनुमति देने जा रहे हैं?
  • क्या आप संख्यात्मक परिशुद्धता के लिए गति और संवेदनशीलता के लिए परीक्षण करने जा रहे हैं?
  • क्या आपने दो (शायद अधिक) पुस्तकालयों को चुना है जो परिणामों की तुलना करने के लिए पहले से मौजूद हैं?
  • आप मानदंड रोकना कैसे चुनेंगे, क्या आप विभिन्न तरीकों का उपयोग करेंगे और उपयोगकर्ता को अपने स्वयं के चयन या परिभाषित करने देंगे?
  • क्या आप विभिन्न उपायों का उपयोग करके त्रुटि को मापने जा रहे हैं और उपयोगकर्ता को चालू और बंद करने की अनुमति देता है?
  • क्या आपने कंप्यूटर-बीजगणित-सिस्टम (CAS) जैसे पेशेवर पैकेजों को देखा है और उन सभी विकल्पों को समझते हैं जिनकी वे अनुमति देते हैं?
  • क्या आप परिणाम और / या तुलना और / या भूखंडों को प्रदर्शित करने की अनुमति देने जा रहे हैं?

समस्या की सिफारिशें

  • आपको समस्याओं के स्रोत को परिभाषित करने के लिए एक परीक्षण विनिर्देश लिखने की आवश्यकता है, समस्याओं का परीक्षण कैसे किया गया, परिणामों को कैप्चर करना और रूटीन चलाने के मीट्रिक।
  • मैं निश्चित रूप से अन्य पुस्तकालयों को पहले से ही उन समस्याओं के लिए देखूंगा जो वे उपयोग कर रहे हैं (शायद परीक्षण फाइलें)।
  • मैं कॉलेज के पुस्तकालयों में जाता हूं और ओडीई पर पुस्तकों के माध्यम से जाता हूं और सभी प्रकार की समस्याओं को बाहर निकालता हूं, जिन्हें ज्ञात बंद फॉर्म या संख्यात्मक समाधान के साथ ही जाना जाता है।
  • केस 1: हम बंद फॉर्म समाधान समस्याओं के कई रूप चाहते हैं, क्योंकि हम सटीक बनाम संख्यात्मक परिणामों की तुलना करने के लिए प्राप्त कर सकते हैं।
  • केस 2: मैं प्रत्येक संख्यात्मक विश्लेषण पुस्तक पर जाऊंगा, जो काम किए गए उदाहरणों को खोज और पकड़ सकता है और उन्हें डुप्लिकेट कर सकता है। मैं अतिरिक्त रूप से समस्या सेट पर कब्जा कर लूंगा, विशेष रूप से जो कुछ पैथोलॉजी हैं जो अधिकांश पुस्तकों (इस या उस प्रकार की संवेदनशीलता) में मौजूद हैं।
  • केस 3: मैं फिजिक्स, इकोलॉजी, बायोलॉजी, इकोनॉमिक्स, एट जैसे लागू गणित की विभिन्न शाखाओं में जाऊंगा। उन सभी डोमेन से समस्याओं को मान्य करने के लिए अल और कैप्चर करें जो समस्याओं के लिए आपके विनिर्देशन की भाषा ऐसे उदाहरणों के लिए अनुमति देते हैं।
  • केस 4: मैं उन शोधपत्रों / पत्रिकाओं पर शोध करूंगा जिनमें सबसे उपयोगी उदाहरण हैं जहां विशेष लेखक को कुछ पैथोलॉजी या अजीबता या कठोरता के लिए एक विशेष दृष्टिकोण को संशोधित करना था।
  • केस 5: अतिरिक्त उदाहरणों के लिए वेब पर खोजें। के लिए कठोर , संदर्भ यहाँ देखें और उन सब का अवलोकन परीक्षण समस्याओं पता लगाना। यहाँ कुछ MATLAB उदाहरण हैं।

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

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


2

मैं अपने ODE सॉल्वरों के खिलाफ चलने वाली एक पवित्रता जांच केवल सिस्टम के मैट्रिक्स के घातांक को कंप्यूटिंग के माध्यम से छोटे रेखीय प्रणालियों पर जांचना है। यानी दिया गया

dudt=Au

में त्रुटि की जाँच करें

exp(tA)u0u^(t)

जहां आपका परिकलित समाधान है। इस तरह से आपको किसी भी वास्तविक विश्लेषणात्मक समाधान को जानने की आवश्यकता नहीं है (यह मानते हुए कि आपके पास 'एक्सपीएम' के कुछ बराबर हैं), लेकिन आप अभी भी इस बात का अंदाजा लगा सकते हैं कि आपका सॉल्वर क्या कर रहा है।u^(t)

बस अपने एक टाइम-स्टेपर्स (यानी संदिग्ध विधि संख्या 6 :) http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf ) के साथ घातांक की गणना न करें


बस एक नोट: डी इंटीग्रेटर्स को "संदिग्ध" समझा गया था कि वे स्केलिंग + स्क्वेरिंग की तुलना में काफी अक्षम थे, अशुद्धि के कारण नहीं।
जेएम

1

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

http://prod.sandia.gov/techlib/access-control.cgi/2000/001444.pdf

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