अस्थिर फ्लोटिंग पॉइंट कंप्यूटेशन की पहचान कैसे करें?


15

अंकशास्त्र में, अस्थिर योजनाओं की पहचान करने और उनकी स्थिरता में सुधार करने में सक्षम होना बहुत महत्वपूर्ण है। अस्थिर फ्लोटिंग पॉइंट कंप्यूटेशन की पहचान कैसे करें?

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

  1. (प्रारंभिक चरण) शारीरिक निरीक्षण पी

  2. सिमुलेशन के प्रारंभिक मापदंडों को निर्धारित करें। यह एक अनुकूलन एल्गोरिथ्म का उपयोग करता है, जहां हम एक पैरामीटर स्पेस में चलते हैं और पैरामीटर सी की तलाश करते हैं जैसे कि कुछ एरर फंक्शन ई (एफ (सी), पी) को कम से कम किया जाता है, जहां एफ कुछ मापदंडों की व्युत्पन्न मात्रा है।

  3. सिमुलेशन इंजन में प्लग सी । यह ईडीपी की एक यूलर स्कीम है, ताकि प्रत्येक समय कदम पर, हम गतिशील ड्राइविंग की शर्तों की गणना करें (उनमें से प्रत्येक एक जटिल फ़ंक्शन है, संभवतः अस्थिरता के अधीन है) और अगले डायन के लिए इन डायनेमिक शर्तों के साथ यूलर योजना को खिलाएं राज्य। यह हजारों समय बिंदुओं पर चलता है।

  4. अनुकार के अंत में, हम अंतिम अवस्था S के कुछ फ़ंक्शन प्रूफ (S) की गणना करते हैं और कुछ मात्राओं की तुलना करते हैं, जिन्हें आवश्यक मात्रा में P (P) घटाया गया है। यह परिणाम का एक औपचारिक प्रमाण नहीं है, अधिक प्रशंसनीय जांच है।

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

मैं अनुमान लगाता हूं कि कम सटीकता के साथ फ्लोटिंग पॉइंट नंबरों के सॉफ़्टवेयर कार्यान्वयन का उपयोग संख्यात्मक योजनाओं की अस्थिरता को बढ़ाएगा, इस प्रकार विभिन्न कार्यान्वयनों के बीच तुलना को आसान बनाता है। क्या इस प्रश्न की जांच करना एक सामान्य तकनीक है? क्या प्रोग्राम को बदले बिना इसे प्राप्त करने के लिए, Bochs के रूप में वर्चुअल मशीन का उपयोग करना संभव है?

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


हो सकता है कि आपके पास math.stackexchange.com
शमौन Bergot

@ साइमन आप सही हो सकते हैं, लेकिन यह निश्चित रूप से एक क्रॉस-डोमेन प्रश्न है। मुझे लगता है कि उत्तर देने में सक्षम व्यक्ति गणित और प्रोग्रामर दोनों के लिए पंजीकृत हैं या कोई भी नहीं ... चलो थोड़ा इंतजार करें कि क्या यह प्रश्न यहां आपका उत्तर पाता है!
user40989

1
अंतराल अंकगणित?
एसके-लॉजिक


2
राज्य का प्रचार करने के लिए यूलर का उपयोग करना आवश्यक रूप से बुराई नहीं है; न तो अनुकूलन है, लेकिन आपको वास्तव में समस्या को उप-मुखौटे में विभाजित करना होगा। संख्यात्मक अस्थिरता आपके संकटों में से कम से कम हो सकती है - एक झूठी अधिकतम के लिए अभिसरण और ODEs / PDEs की कठोरता से संबंधित समस्याएं इससे बड़ी हैं। और हाँ, कभी भी एकल परिशुद्धता का उपयोग न करें :)
हिरण हंटर

जवाबों:


6

फ्लोटिंग पॉइंट कम्प्यूटेशन की स्थिरता का अध्ययन संख्यात्मक विश्लेषण का हिस्सा है और यदि आप वास्तव में एक ध्वनि परिणाम चाहते हैं, तो आप वास्तव में उस डोमेन के किसी जानकार को उपयोग किए गए एल्गोरिदम का विश्लेषण करना चाहते हैं।

कुछ चीजें हैं जो प्रयोगात्मक एल्गोरिदम की पहचान करने में मदद कर सकती हैं। राउंडिंग सेट के साथ अलग-अलग मोड्स (अप / डाउन / रैंडम) के साथ या अलग-अलग परिशुद्धता के साथ चल रहा है और जाँच रहा है कि परिणाम बहुत भिन्न नहीं है। इसका जवाब देना बहुत ज्यादा है? बिल्कुल भी सरल नहीं है और यहां तक ​​कि जब जवाब नहीं है कि इसका मतलब यह नहीं है कि एल्गोरिथ्म स्थिर है, बस इसका उपयोग किए गए डेटा सेट पर अस्थिर नहीं पाया गया था।

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


3

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

एनजे हिगम। संख्यात्मक एल्गोरिदम की सटीकता और स्थिरता। सोसायटी फॉर इंडस्ट्रियल एंड एप्लाइड मैथमैटिक्स, फिलाडेल्फिया, पीए, यूएसए, दूसरा संस्करण, 2002। आईएसबीएन 0-89871-521-0

किस प्रकार की संगणनाएं, भाषाएं आदि के बारे में अधिक जानकारी न होने के कारण इसका ठोस उत्तर देना कठिन हो जाता है। यहाँ एक अच्छा व्याख्यान है: http://introcs.cs.princeton.edu/java/91float/ यह थोड़ा बुनियादी हो सकता है, लेकिन यदि आप जावा का उपयोग कर रहे हैं तो यह एक अच्छा परिचय है।


1

अस्थिर फ्लोटिंग पॉइंट कंप्यूटेशन की पहचान कैसे करें? क्या इस प्रश्न की जांच करना एक सामान्य तकनीक है?

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

किसी भी तरह, सामान्य प्रोग्रामिंग में, ज्यादातर समस्याएं आसान होती हैं कि फ्लोटिंग प्वाइंट कैसे काम करता है और बुनियादी संख्यात्मक तरीकों के बारे में कुछ बुनियादी समझ दी गई है। लेकिन 128-बिट फ़्लोट्स की उपलब्धता के साथ हल करने के लिए और भी जटिल समस्या "आसान" है, यहां तक ​​कि त्रुटि के नमूनों का उत्पादन करने का कम कारण। यहाँ कुछ उदाहरण समस्याएं हैं जो मेरी बात को प्रदर्शित करती हैं:

  1. मौद्रिक मूल्यों की गणना के लिए फ्लोटिंग पॉइंट का उपयोग करना।
  2. बड़ी संख्या के लिए फ्लोटिंग पॉइंट का उपयोग करना।
  3. जब ऐसा करना संभव हो तो अन्य ऑपरेशन से पहले विभाजन नहीं करना चाहिए। (मान को 0 के करीब बनाने के लिए)।
  4. त्रुटि प्रसार के लिए विशेष उपचार के बिना लंबी गणना।

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


आपके उत्तर के लिए धन्यवाद, मैं हालांकि अधिक विस्तृत जानकारी की तलाश में हूं। मेरे पास एक बहुत बड़ी गणना है और मैं इसके कमजोर हिस्सों की पहचान करना चाहता हूं। मैंने तदनुसार प्रश्न संपादित किया।
user40989

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

0

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


मैं संख्यात्मक त्रुटियों से बचना नहीं चाहता हूं, मैं यह जानना चाहता हूं कि गणना के कौन से हिस्से अस्थिर हैं। यह गति के लिए अनुकूलन करते समय गति बाधाओं को स्थानीय बनाने के समान है। इसलिए मैं सटीक अनुकूलन करना चाहता हूं और इसलिए सटीक बाधाओं का पता लगाना चाहता हूं। (यहां निरंतर अंश उपयोगी नहीं हैं।)
user40989

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