6

मैं गणित में "ब्लैक बॉक्स" फ़ंक्शन का संख्यात्मक अनुकूलन करने का प्रयास कर रहा हूं। रेखाचित्र के रूप में यह इस प्रकार है:गणित: ब्लैक बॉक्स फ़ंक्शंस के संख्यात्मक अनुकूलन के दौरान मूल्यांकन आदेश

NMinimize[{comb[x,y,z], x > 0}, {x,y,z}] 

जहां कंघी [एक्स, वाई, z] यह करने के लिए इसी तरह परिभाषित किया गया है:

comb[x_,y_,z_] := Module[{}, 
    Print[x,y,z]; 
    M = FindMaximum[SkewNormal[a,x,y,z], {a,x}] // First; 
    val = f[x,y,z,M]; 
    Return[val]; 
]; 

हालांकि, न्यूनतम कार्यों मैं कोशिश की है के सभी तुरंत प्रदान नहीं करने लगते हैं संख्यात्मक मानों के साथ कंघी [एक्स, वाई, जेड], और यह एक्स, वाई, जेड के लिए प्रतीकात्मक मानों के साथ FindMaximum का मूल्यांकन करने की कोशिश कर रहा है (जिसे आसानी से सत्यापित किया जाता है क्योंकि प्रिंट [x, y, z] भी प्रतीकात्मक रूप से मूल्यांकन करता है)। इस प्रकार Findmaximum विफल रहता है (FindMaximum :: nrnum: फ़ंक्शन वैल्यू ब्ला ब्लाह वास्तविक संख्या नहीं है) और इसलिए न्यूनतमकरण विफल हो जाता है।

मैं मूल्यांकन आदेश को कैसे ठीक कर सकता हूं ताकि कंघी के उप-कार्यों का मूल्यांकन संख्यात्मक मूल्यों के साथ किया जा सके?

+1

एक और (और अधिक सूक्ष्म) 'में NMinimize' हाल ही में [अन्य धागा] (में हल किया गया था प्रतीकात्मक पूर्व प्रसंस्करण की वजह से समस्या http://stackoverflow.com/questions/6971536/nminimize-eats-all-memory- बीसी-ऑफ-अनावश्यक-प्रतीकात्मक-कार्य/6975501 # 6975501) डैनियल लिट्टलब्लू द्वारा। –

+0

हम्म ठीक है धन्यवाद, मैं इसे देख लूंगा। मैंने यह भी देखा है कि यह समस्या गणित 8 में नहीं होती है (मैं पहले 7 चला रहा था)। –

उत्तर

4

कैसे

comb[x_?NumericQ, y_?NumericQ, z_?NumericQ] := 
Module[{}, Print[x, y, z]; 
M = FindMaximum[SkewNormal[a, x, y, z], {a, x}] // First; 
val = f[x, y, z, M]; 
Return[val];]; 

जिसकी वजह से comb की परिभाषा का मूल्यांकन किया जाना ही अगर अपने तर्कों नंबर दिए गए हैं करने के लिए comb बदलने के बारे में? FindMinimum, FindMaximum, FindRoot और FindFit के लिए

+1

नाह जो मदद नहीं करता है। मेरे काम ने वास्तव में ऐसा किया है, मैंने अभी इस प्रश्न पूछने के प्रयोजनों के लिए उन बिट्स को हटा दिया है। –

+1

@ अजीब बात यह है कि 'प्रिंट' प्रतीकात्मक मूल्य भी दिखाएगा, क्योंकि प्रतीकात्मक मूल्यों के साथ 'कंघी [x, y, z]' मेरे द्वारा दी गई परिभाषा से मेल नहीं खाती है। क्या आपने इसे चलाने से पहले 'कंघी] साफ़ किया था? हो सकता है कि यह 'न्यूमेरिक्यू' बिट के बिना परिभाषा से मेल खा रहा हो। – acl

+0

@acl यह मेरे लिए पहले काम नहीं करता था, लेकिन समाशोधन के बाद यह चाल थी। –

5

मूल्यांकन आदेश tutorial/UnconstrainedOptimizationSymbolicEvaluation प्रलेखन पृष्ठ पर दर्ज है। मुझे लगता है कि NMinimize फ़ंक्शन पर बहुत कुछ समान है। वर्णन काफी लंबा है इसलिए मैं यहाँ उस पृष्ठ से केवल प्रस्तावित समाधान का हवाला देते हैं जाएगा:

अपने कार्य ऐसे है

हैं कि प्रतीकात्मक मूल्यांकन समारोह के रूप में इरादा या निषेधात्मक धीमी गति से हो जाएगा रखना नहीं होगा, तो आप परिभाषित करना चाहिए आपका फ़ंक्शन ताकि यह केवल चर के संख्यात्मक मानों के लिए मूल्यांकन कर सके। ऐसा करने का सबसे आसान तरीका है फंक्शनर्नस्ट (?) का उपयोग करके अपने फ़ंक्शन को परिभाषित करना, जैसा कि f [x_? NumberQ]: = परिभाषा में है।

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

संबंधित मुद्दे