2012-10-05 10 views
6

Używam symbolicznego zestawu narzędzi do generowania funkcji matlab. Ale liczba danych wejściowych do wygenerowanej funkcji różni się w zależności od liczby obiektów, których potrzebuję (na przykład liczby przełączników). 2 i 3 włącza wygenerowany wygląd funkcja lubi to:Wywołanie funkcji z różną liczbą parametrów w Matlab

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

W skrypcie za pomocą tej funkcji ustanowię wektory tych parametrów:

a = [a1 a2 ...] 

co chcę, albo wywołać funkcję wygenerowany bezpośrednio lub utwórz funkcję otoki, więc nie muszę zmieniać instrukcji połączenia, gdy zmieniam liczbę przełączników. Aby jeszcze bardziej skomplikować ten problem, zmienne te są zmiennymi ACADO. Oznacza to, że operacja macierzowa i elementarna jest niedozwolona (tj. Cała operacja matematyczna musi być wykonana za pomocą skalarów, a równania w symbolicznym przyborniku muszą być zapisane dla skalarów).

Odpowiedz

11

Prawdopodobnie szukasz macierzy komórkowych i operatora {:}. Zmienia zawartość komórki na coma separated list. Wynik można przekazać do funkcji jako parametry. Na przykład:

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

a przykładem funkcji:

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

można wywołać funkcję dla różnej liczby parametrów „przejrzysty” następująco

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

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

Można tworzyć funkcje ze zmienną liczbą argumentów wejściowych za pomocą varargin.

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

% your code comes hereafter 
+1

Nie sądzę, że rozwiązuje mój pytanie, ponieważ nie mogę wykonać funkcji z różną liczbą parametrów, ponieważ jest generowany przez symboliczny toolbox (http://www.mathworks.se/help/symbolic/matlabfunction.html) Próbowałem użyć vargin, ale nie mogę go uruchomić: f = @ (x, y) (x + y); vargin {1} = 1; vargin {2} = 2; f (vargin) –

+1

Odpowiedź udzielona przez @angainor to prawdopodobnie sposób, w jaki powinieneś pójść. –

Powiązane problemy