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