【问题标题】:How to use function by having its name as a string如何通过将函数名称作为字符串来使用函数
【发布时间】:2017-01-22 21:21:19
【问题描述】:

假设您要使用在 MATLAB 中定义的一系列函数,并且您只需将这些函数的名称作为字符串变量。假设您已经创建了fun1fun2、...、funN,并且您还有一个字符串向量为['fun1','fun2',...,'funN']。如何自动调用每个函数,而不必一个个写每个函数的名称?

【问题讨论】:

  • 你可以使用feval来调用一个函数,但是为什么你的函数名是字符串呢?可能值得告诉我们您要完成的工作,以便我们可以帮助您提出更好的选择。通常你只想存储一个函数句柄数组或其他东西
  • 我有近五十个函数,我需要运行一段代码,并对每个函数进行一些计算,主要是关于微分方程和 ode45 函数。我不想每次更改函数时都更改代码。我生成了一个字符串,以便以更通用的方式编写根代码,并且每次都会在开头设置N=...
  • 是的,但为什么你有 50 个函数,名称如 fun1fun2 等?也许你应该有一个函数,你有一些额外的输入来修改它的行为,而不是跟踪 50 个函数。
  • 这些函数已经生成。此外,他们每个人都有一个很长的表情。将它们结合起来会降低计算的速度和准确性。

标签: string matlab function eval sequence


【解决方案1】:

使用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

【讨论】:

  • 在我看来函数句柄将是要走的路。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 2018-08-22
  • 2019-11-23
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多