2017-01-22 15 views
1

Предположим, вы хотите использовать последовательность функций, определенных в MATLAB, и вы просто называете эти функции как строковые. Скажем, вы уже создали fun1, fun2, ..., funN, и у вас также есть вектор строк, как ['fun1','fun2',...,'funN']. Как вызывать каждую функцию автоматически, не заставляя писать имя каждой функции по очереди?Как использовать функцию, указав ее имя как строку

+1

Вы можете использовать 'feval' для вызова функции, но почему у вас есть имена функций в строках? Возможно, стоит сказать нам, что вы пытаетесь сделать, чтобы мы могли помочь вам придумать лучший вариант. обычно вам нужно просто сохранить массив дескрипторов функций или что-то. – Suever

+0

У меня почти пятьдесят функций, и мне нужно запустить код и выполнить некоторые вычисления по каждому из них, в основном, о дифференциальных уравнениях и функции ode45. Я не хочу менять свой код каждый раз, когда меняю функцию. Я сгенерировал строку, чтобы я написал корневой код более общим образом, и я буду устанавливать 'N = ...' в начале каждый раз. –

+2

Правильно, но почему у вас есть 50 функций с именами типа 'fun1',' fun2' и т. Д.? Возможно, у вас должна быть одна функция, в которой у вас есть несколько дополнительных входов, чтобы изменить поведение, а не отслеживать 50 функций. – Suever

ответ

6

Использование str2func. Конечно, если функции определены как дескрипторы функций (например, fun1 = @(x)x+x.^2+sqrt(x))), вы можете пропустить шаг str2func ниже.

strList= {'sum','mean','max','min'}; 
funList = cellfun(@str2func,strList,'uniformOutput',false); 

nFunctions = length(funList); 
data = rand(10,1); 
results = zeros(nFunctions,1) 

for iFunction = 1:nFunctions 
    results(iFunction) = fulList{iFunction}(data); 
end 
+0

Кажется, что функции ручек - это путь. – beaker