2012-08-10 5 views
6

मैं प्रयोगों का एक सेट चलाऊंगा।MATLAB: प्रयोगों के लिए कार्यों को व्यवस्थित करने के लिए कोई तरीका है?

[Model threshold] = detect(... 
    TrainNeg, TrainPos, nf, nT, factors, ... 
    removeEachStage, applyEstEachStage, removeFeatures); 

बूलियन्स जहां removeEachStage, applyEstEachStage, और removeFeatures हैं: मुख्य विधि का मूल्यांकन निम्न हस्ताक्षर हैं। आप देख सकते हैं कि यदि मैं इनमें से किसी भी बूलियन पैरामीटर के क्रम को उलट देता हूं तो मुझे गलत परिणाम मिल सकते हैं।

क्या MATLAB में कोई तरीका है जो इस तरह की त्रुटि को कम करने के लिए बेहतर संगठन की अनुमति देता है? या क्या कोई उपकरण है जिसका उपयोग मैं इन त्रुटियों के खिलाफ मेरी रक्षा के लिए कर सकता हूं?

+2

तुम यहाँ से कुछ उत्तर प्राप्त हो सकता है उपयोगी: [कैसे MATLAB में समारोह तर्क का नाम/मान युग्म से निपटने के लिए] (http://stackoverflow.com/q/2775263/97160) – Amro

+1

फ़ाइल एक्सचेंज पर 'parseArgs' देखें। मैं इसे हर दिन उपयोग करता हूं: http://www.mathworks.com/matlabcentral/fileexchange/10670-parseargs-simplifies-input-processing-for-functions-with-multiple- विकल्प – slayton

+0

@ स्लेटन - मुझे यह नहीं पता था । मैं इसका परीक्षण करूंगा। धन्यवाद! : डी – Yamaneko

उत्तर

6

एक struct

आप इनपुट सकता है के साथ संगठन एक struct इन मानकों है कि के रूप में यह क्षेत्रों है।

उदाहरण के लिए खेतों

setts.TrainNeg 
    .TrainPos 
    .nf 
    .nT 
    .factors 
    .removeEachStage 
    .applyEstEachStage 
    .removeFeatures 

इस तरह जब आप फ़ील्ड सेट यह स्पष्ट है क्या क्षेत्र एक समारोह कॉल जहां मापदंडों के आदेश को याद करने के लिए है के विपरीत, है के साथ एक संरचना।

फिर अपने समारोह कॉल

[Model threshold] = detect(setts); 

हो जाता है और अपने कार्य परिभाषा

function [model, threshold] = detect(setts) 
की तरह कुछ

तो बस जैसे की घटनाओं की जगह होगी paramsetts.param के साथ।

मिश्रित दृष्टिकोण

तुम भी यदि आप चाहें, जैसे अपने वर्तमान से एक के साथ इस दृष्टिकोण मिश्रण कर सकते हैं

[Model threshold] = detect(in1, in2, setts); 

अगर आप अभी भी स्पष्ट रूप से in1 और in2, शामिल हैं और setts में आराम बंडल करना चाहता था।

OOP दृष्टिकोण

एक अन्य विकल्प एक वर्ग में पता लगाने चालू करने के लिए है। इसका लाभ यह है कि detect ऑब्जेक्ट के बाद निश्चित नामों के साथ सदस्य चर होते हैं, क्योंकि structs के विपरीत जहां आप फ़ील्ड सेट करते समय टाइपो बनाते हैं तो आप गलत वर्तनी वाले नाम के साथ एक नया फ़ील्ड बनाते हैं।

उदाहरण के लिए

classdef detect() 
properties 
    TrainNeg = []; 
    TrainPos = []; 
    nf = []; 
    nT = []; 
    factors = []; 
    removeEachStage = []; 
    applyEstEachStage = []; 
    removeFeatures =[]; 
end 
methods 
    function run(self) 
    % Put the old detect code in here, use e.g. self.TrainNeg to access member variables (aka properties) 
    end 
end 
+1

आपके उत्तर के लिए धन्यवाद! यह बहुत स्पष्ट है। मुझे ओओपी के माध्यम से समाधान बहुत दिलचस्प मिला है। इसके अलावा, मुझे लगता है कि [ओवरहेड की मात्रा] (http: // stackoverflow।कॉम/ए/1745686/9579 9 7) जोड़ा गया कोई फर्क नहीं पड़ता है। – Yamaneko

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

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