如何通过将其名称作为字符串来使用函数
问题描述:
假设您想要使用MATLAB中定义的函数序列,并且只需将这些函数的名称作为字符串变量。假设您已经创建了fun1
,fun2
,...,funN
,并且您还有一个字符串向量,如['fun1','fun2',...,'funN']
。如何自动调用每个函数而不必强制每个函数的名称逐一写入?如何通过将其名称作为字符串来使用函数
答
使用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