MATLAB

2010-06-22 9 views
16

में अज्ञात फ़ंक्शन के साथ आउटपुट छोड़ना कहें कि मैं एक एम-फाइल-फ़ंक्शन से एक अनाम फ़ंक्शन बनाना चाहता हूं जो दो आउटपुट देता है। क्या अनाम कार्य को स्थापित करना संभव है जैसे कि यह केवल m-file-function से दूसरा आउटपुट लौटाता है?MATLAB

उदाहरण: ttest2 दो आउटपुट, टी/एफ और एक संभावना देता है। मैं cellfun साथ टी परीक्षण का उपयोग करना चाहते हैं, तो मैं सिर्फ संभावनाओं का संग्रह में रुचि हो सकती, यानी मैं इस

probabilities = cellfun(@(u,v)ttest2(u,v)%take only second output%,cellArray1,cellArray2) 

उत्तर

14

की तरह कुछ कोई रास्ता नहीं मैं अभिव्यक्ति भीतर के बारे में पता नहीं है लिखने के लिए करना चाहते हैं anonymous function का यह चयन करने के लिए कि कौन से आउटपुट को एक फ़ंक्शन से कई संभावित आउटपुट तर्कों के साथ वापस लौटना है। हालांकि, कई आउटपुट लौटा सकता है जब आप अज्ञात फ़ंक्शन का मूल्यांकन करते हैं। यहाँ समारोह MAX का उपयोग कर एक उदाहरण है:

>> data = [1 3 2 5 4]; %# Sample data 
>> fcn = @(x) max(x); %# An anonymous function with multiple possible outputs 
>> [maxValue,maxIndex] = fcn(data) %# Get two outputs when evaluating fcn 

maxValue = 

    5   %# The maximum value (output 1 from max) 


maxIndex = 

    4   %# The index of the maximum value (output 2 from max) 

इसके अलावा, सबसे अच्छा तरीका विशिष्ट उदाहरण आप ऊपर देने को संभालने के लिए वास्तव में सिर्फ CELLFUN को इनपुट के रूप में function handle@ttest2 उपयोग करने के लिए है, तो CELLFUN से ही कई आउटपुट मिलता है :

[junk,probabilities] = cellfun(@ttest2,cellArray1,cellArray2); 

MATLAB के नए संस्करण पर आपको प्रथम उत्पादन तर्क की अनदेखी करने के ~ साथ चर junk बदल सकते हैं।

+0

दूसरे शब्दों में, मुझे एक रैपर फ़ंक्शन लिखने की आवश्यकता है। स्पष्टीकरण के लिए धन्यवाद! इसके अलावा: 20k पर बधाई! – Jonas

+0

@ जोनास: धन्यवाद, और रजत MATLAB बैज पर बधाई! – gnovice

4

एक तरह से यह करने के लिए समारोह को परिभाषित करने के लिए है:

function varargout = getOutput(func,outputNo,varargin) 
    varargout = cell(max(outputNo),1); 
    [varargout{:}] = func(varargin{:}); 
    varargout = varargout(outputNo); 
end 

और फिर getOutput(@ttest2,2,u,v) केवल p-value देता है।

एक cellfun में इसका इस्तेमाल करने के लिए आप को चलाने के लिए की आवश्यकता होगी:

probabilities = cellfun(@(u,v)getOutput(@ttest2,2,u,v)... 

यह एक आवरण हर बार लिखने के लिए की आवश्यकता समाप्त, लेकिन तब क्या आप वाकई इस समारोह पथ में हमेशा होता है बनाने के लिए किया है।