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