首先,你应该阅读这个答案这给出了一系列避免使用的理由eval
。很少有这样的场合eval
是必要的,在所有其他情况下它只会使事情变得复杂。在这种情况下,您使用动态生成变量名称,这被认为是非常糟糕的做法。正如链接的答案和该答案中链接的进一步文章中所详述的,动态变量名称使代码更难阅读、更难维护,并且在 MATLAB 中执行速度更慢。
所以,不要定义函数f1
, f2
, f3
, ... fN
,你所做的就是定义函数f{1}
, f{2}
, f{3}
, ... f{N}
。那是,f
是一个元胞数组,其中每个元素都是匿名函数(或任何其他函数句柄)。
例如,代替
f1=@(x) a1*x+1;
f2=@(x) a2*x+1;
f3=@(x) a3*x+1;
f4=@(x) a4*x+1;
you do
N = 4;
a = [4.5, 3.4, 7.1, 2.1];
f = cell(N,1);
for ii=1:N
f{ii} = @(x) a(ii) * x + 1;
end
有了这些变化,我们就可以轻松回答这个问题了。我们现在可以编写一个函数来输出函数的总和f
:
function y = sum_of_functions(f,x)
y = 0;
for ii=1:numel(f)
y = y + f{ii}(x);
end
end
您可以将其放入名为的文件中sum_of_functions.m
,或者你可以把它放在函数文件或脚本文件的末尾,这并不重要。现在,在您的代码中,当您想要评估时y = f1(x) + f2(x) + f3(x)...
,你写的是y = sum_of_functions(f,x)
.