Вероятно, вам нужно создать несколько дескрипторов функций, а затем динамически выбрать один из них.Например:
functions = {@function_1, @function_2, @function_3};
parameters = {
{1,[10,20],'a'}
{2,[10,20],'c'}
{3,[100,200],'a'}};
for i=1:numel(functions)
for j=1:numel(parameters)
rhs{i,j} = @(t,p,m) functions{i}(t,p,m,parameters{j}{:})
end
end
odesolver(rhs{2,4});
Невозможно создать массив дескрипторов функций (синтаксис был бы неоднозначным), но их можно собрать в массив ячеек, как указано выше.
Параметры также собраны в массив ячеек, это обеспечивает большую гибкость.Каждый набор параметров снова является массивом ячеек.parameters{j}{:}
представляет собой список элементов в массиве ячеек, разделенных запятыми j
, идеально подходит для использования в качестве списка аргументов при вызове функции.
В отношении номенклатуры: @function_1
- дескрипторименованная функция.@()...
- анонимная функция (в других языках называемая лямбда).Анонимная функция - это функция, которая не имеет имени, но может быть назначена дескриптору функции и использоваться таким образом.В любом случае дескриптор функции - это способ использования функции в качестве переменной: вы можете передавать их в качестве аргументов функциям, возвращать их из функций и сохранять их в массивах ячеек или структурах.Строка с именем функции не имеет той же функции: вы не можете вызывать функцию через строку с ее именем (если вы не используете feval
или eval
).