添加匿名函数matlab

时间:2016-10-16 02:05:58

标签: matlab loops anonymous-function

我有一个循环

for i = 1: n
f = @(x) x + vec(i)
end

将所有这些函数添加到一个单独的匿名函数中是否可行?

感谢。

1 个答案:

答案 0 :(得分:0)

我能建议的最好是逐步添加你的功能:

n = 10;
vec = rand(1,n);    % Random data
f = @(x)x + vec(1); % Initial function
for i = 2:n
    f = @(x)x + vec(i) + f(x); % Add previous sum to next
end
x = 2;
s = f(x) % Evaluate

如果您需要单独保存每个函数并在之后求和,则可以创建cell array函数句柄并使用cellfun来评估特定值x的所有函数:

n = 10;
vec = rand(1,n); % Random data
f = cell(1,n);   % Pre-allocate cell
for i = 1:n
    f{i} = @(x)x + vec(i) % Save a handle to each function in cell array
end
x = 2;
s = sum(cellfun(@(c)c(x),f)) % Evaluate each function at x and sum

另一个选择是使用Symbolic Math执行此操作,但根据您的实际功能,这可能效率非常低:

n = 10;
vec = rand(1,n);    % Random data
syms x;
f(x) = x+vec; % Create vector function
x = 2;
s = double(sum(f(x))); % Evaluate and convert to floating point

我们无法知道您的实际问题是什么,如果这些问题在没有更详细的问题的情况下适合您,那么您可能需要针对您的特定应用进行相当大的改动。