我有一个循环
for i = 1: n
f = @(x) x + vec(i)
end
将所有这些函数添加到一个单独的匿名函数中是否可行?
感谢。
答案 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
我们无法知道您的实际问题是什么,如果这些问题在没有更详细的问题的情况下适合您,那么您可能需要针对您的特定应用进行相当大的改动。