Matlab

2012-10-05 50 views
6

'deki çeşitli parametrelerle arama işlevi Bir matlab işlevi oluşturmak için sembolik araç kutusu kullanıyorum. Ancak üretilen işleve giriş sayısı, ihtiyacım olan nesnelerin sayısıyla (ör., Anahtar sayısı) değişmektedir. doğrudan oluşturulan işlevi çağırmak yaMatlab

a = [a1 a2 ...] 

İstediğim: Ben bu parametrelerin vektörleri kurmak bu fonksiyonu kullanarak komut dosyasında

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

: 2 ve 3 için oluşturulan işlev bakmak bunu beğendi anahtarları veya bir sarmalayıcı işlevini yapın, böylece anahtar sayısını değiştirdiğimde arama ifadesini değiştirmem gerekmez. Bu problemi daha da karmaşık hale getirmek için, bu değişkenler ACADO değişkenleridir. Bu, matris ve eleman-çalışma işlemine izin verilmediği anlamına gelir (yani, tüm matematik işlemleri skalerlerle yapılmalı ve sembolik araç kutusundaki denklemler skaler için yazılmalıdır).

cevap

11

Muhtemelen hücre dizileri için bakmak ve {:} operatörü. Hücrenin içeriğini coma separated list olarak değiştirir. Sonuç, parametreler olarak bir işleve geçirilebilir.

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

Ve bir örnek işlevi: Örneğin: Eğer parametreler 'şeffaf'

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

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

varargin ile değişken sayıda giriş bağımsız değişkenli işlevler oluşturabilirsiniz.

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

% your code comes hereafter 
+1

Bunun çözer sanmıyorum şöyle farklı sayı için işlevini çağırabilirsiniz

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

benim soru, sembolik araç kutusundan (http://www.mathworks.se/help/symbolic/matlabfunction.html) tarafından üretildiğinden, çeşitli parametrelerle işlevi yapamadığım içinVargin'i kullanmayı denedim ancak çalışamıyorum: f = @ (x, y) (x + y); vargin {1} = 1; vargin {2} = 2; f (vargin) –

+1

@angainor tarafından sağlanan cevap muhtemelen gitmeniz gereken yoldur. –