MATLAB

2012-02-06 24 views
16

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

एक उदाहरण के रूप में, मैं पैरामीटर ग के विभिन्न मूल्यों के लिए च (ग, x) = x^3 + cx^2 + 2x + 3 की जड़ों को खोजने के लिए चाहते हैं। मेरे पास न्यूटन का विधि सॉल्वर है जो एक चर का एक फ़ंक्शन लेता है, दो नहीं। तो मैं सी के विभिन्न मूल्यों पर लूप करता हूं, फिर बाध्य कार्य को सॉल्वर को पास करता हूं।

for c=1:10 
    g=f(c); % somehow bind value of c 
    seed=1.1; % my guess for the root of the equation 
    root=newton(g,seed); % compute the actual root 
end 
+1

आप क्या बात कर रहे हैं का एक उदाहरण प्रदान कर सकता है? यह 'f = @ (x, y) (x + y)' से परे क्या है? –

+1

क्या आपका मतलब फ़ंक्शन लौटने वाला फ़ंक्शन है? जैसे 'जी = @ (आधार, एक्स) (@ (एक्स) मॉड (एक्स, आधार)); एफ = जी (3); 'और अब 'एफ (एक्स)' सिर्फ' mod (x, 3) 'है? –

उत्तर

19

आप इस तरह यह कर सकते हैं:

f = @(c,x)(@(x)(x^3+c*x^2+2*x+3)); 

for c=1:10 
    g=f(c); % g is @(x)(x^3+c*x^2+2*x+3) for that c 
    .... 
end 

कुंजी पहली पंक्ति है: यह एक समारोह एक फ़ंक्शन कि है।

यानी, वह रिटर्न@(x)(x^3+c*x^2+2*x+3), c के मूल्य के साथ में बंधे।

+0

MATLAB में @ -operator के इस उपयोग का नाम क्या है (खोज उद्देश्यों के लिए)? – dls

+1

'@ (args) (रिटर्न वैल)' के साथ परिभाषित एक फ़ंक्शन को * अज्ञात * फ़ंक्शन कहा जाता है, और 'f' (और' g') को "फ़ंक्शन हैंडल" भी कहा जाता है। [यहां] देखें (http://www.mathworks.com.au/help/techdoc/matlab_prog/f4-70115.html)। –

+2

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

0

मैं बहुत यकीन है कि एक नेस्टेड समारोह fminsearch साथ इस्तेमाल किया जा सकता हूँ। मैं विशेष रूप से न्यूटन विधि के बारे में नहीं जानता, लेकिन मेरा अनुमान है कि कोई समस्या नहीं है।

+0

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