Предположим, вы хотите использовать последовательность функций, определенных в MATLAB, и вы просто называете эти функции как строковые. Скажем, вы уже создали fun1
, fun2
, ..., funN
, и у вас также есть вектор строк, как ['fun1','fun2',...,'funN']
. Как вызывать каждую функцию автоматически, не заставляя писать имя каждой функции по очереди?Как использовать функцию, указав ее имя как строку
1
A
ответ
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
Вы можете использовать 'feval' для вызова функции, но почему у вас есть имена функций в строках? Возможно, стоит сказать нам, что вы пытаетесь сделать, чтобы мы могли помочь вам придумать лучший вариант. обычно вам нужно просто сохранить массив дескрипторов функций или что-то. – Suever
У меня почти пятьдесят функций, и мне нужно запустить код и выполнить некоторые вычисления по каждому из них, в основном, о дифференциальных уравнениях и функции ode45. Я не хочу менять свой код каждый раз, когда меняю функцию. Я сгенерировал строку, чтобы я написал корневой код более общим образом, и я буду устанавливать 'N = ...' в начале каждый раз. –
Правильно, но почему у вас есть 50 функций с именами типа 'fun1',' fun2' и т. Д.? Возможно, у вас должна быть одна функция, в которой у вас есть несколько дополнительных входов, чтобы изменить поведение, а не отслеживать 50 функций. – Suever