知道一些Matlab函数,知道它们的名字

时间:2012-11-12 20:11:41

标签: matlab

假设我有func1func2func3。有没有办法用已知的参数来定义他们的名字来调用它们? (或者他们的指针?处理程序?)

类似的东西:

toBeRunned = [ 'func1'; 'func2'; 'func3' ];
// .. foreach entry of toBeRunned call the function with VAR params ..

3 个答案:

答案 0 :(得分:7)

这是函数句柄的用途。

toBeRun = {@func1, @func2, @func3};
for ix = 1:length(toBeRun)
    fnArguments = {1, 2, 3, 'four'};
    fnTmp = toBeRun{ix};
    fnTmp(fnArguments{:});
end

我们在这里做的更多解释:

  1. toBeRun是一个函数句柄的单元格数组,只是一个任意列表。对于写为M文件的函数,添加@是创建函数句柄所需的全部内容。

  2. 为了评估函数,需要将其从单元格数组中删除(在这种情况下进入fnTmp。)这是Matlab的语法限制。您也可以使用fneval,但我通常会这样做。

  3. 可以按照常规方式(例如fnTmp(1,2,3,'four'))根据需要添加任何参数。但是如果你需要这么多的抽象,你可能还需要使用任意数量的输入参数。 fnArguments单元格是实现此目的的一种非常灵活的方式。

答案 1 :(得分:3)

功能feval

for i = 1 : size(toBeRunned, 1)
    feval(toBeRunned(i, :), argument);
end

答案 2 :(得分:1)

实现它的另一种方法......

toBeRunned = { 'func1', 'func2', 'func3' };

% arguments to be provided to functions
VAR = { arg1, arg2, arg3, arg4 };

% preallocate space for results 
results = cell(1, 3);

for i = 1 : length(toBeRunned)
    % KEY part ...
    toRun = eval( [ '@' boBeRunned{i} ] );
    results{i} = toRun( VAR{:} );
end

代码 key 部分的说明:

  • []连接字符串,
  • eval将字符串评估为Matlab代码。在循环的第一次迭代中,eval的行等于:

    toRun = @func1;
    
相关问题