Matlab

2012-10-05 18 views
6

में पैरामीटर की अलग-अलग संख्याओं के साथ कॉलिंग फ़ंक्शन मैं मैटलैब फ़ंक्शन उत्पन्न करने के लिए प्रतीकात्मक टूलबॉक्स का उपयोग कर रहा हूं। लेकिन जेनरेट किए गए फ़ंक्शन में इनपुट की संख्या मुझे आवश्यक वस्तुओं की संख्या के साथ भिन्न होती है (उदा।, स्विच की संख्या)। 2 और 3 के लिए स्विच उत्पन्न समारोह देखो यह पसंद है: इस समारोह मैं इन मानकों का वैक्टर की स्थापना का उपयोग करMatlab

y = fun(a1,a2,b1,b2) 
y = fun(a1,a2,a3,b1,b2,b3) 

स्क्रिप्ट में:

a = [a1 a2 ...] 

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

उत्तर

11

आप शायद सेल सरणियों के लिए देखो और {:} ऑपरेटर। यह सेल की सामग्री को coma separated list में बदल देता है। परिणाम पैरामीटर के रूप में एक समारोह में पारित किया जा सकता है।

v2 = {a1, a2, b1, b2}; 
v3 = {a1, a2, a3, b1, b2, b3}; 

और एक उदाहरण समारोह: उदाहरण के लिए:

function fun(varargin) 
    display(['number of parameters: ' num2str(nargin)]); 

आप मापदंडों 'पारदर्शी' के रूप में इस प्रकार है

fun(v2{:}) 
number of parameters: 4 

fun(v3{:}) 
number of parameters: 6 
2

आप varargin के साथ इनपुट तर्कों की चर संख्याओं के साथ फ़ंक्शंस बना सकते हैं।

function fun(varargin) 
a = cell2mat(varargin); % works only if arguments indeed only consists of scalars. 

% your code comes hereafter 
+1

मुझे नहीं लगता कि हल करती है के विभिन्न संख्या के लिए समारोह कॉल कर सकते हैं मेरे सवाल, क्योंकि मैं पैरामीटर को अलग-अलग पैरामीटर के साथ नहीं बना सकता, क्योंकि यह प्रतीकात्मक टूलबॉक्स (http://www.mathworks.se/help/symbolic/matlabfunction.html) द्वारा उत्पन्न होता है मैंने वर्जिन का उपयोग करने की कोशिश की लेकिन मैं इसे काम नहीं कर सकता: एफ = @ (एक्स, वाई) (एक्स + वाई); वर्जीन {1} = 1; वर्जीन {2} = 2; एफ (वर्जीन) –

+1

@angainor द्वारा प्रदान किया गया उत्तर शायद आपको जिस तरह जाना चाहिए। –