添加匿名函数 matlab
Posted
技术标签:
【中文标题】添加匿名函数 matlab【英文标题】:Adding anonymous functions matlab 【发布时间】:2016-10-16 02:05:57 【问题描述】:我有一个循环
for i = 1: n
f = @(x) x + vec(i)
end
是否可以将所有这些函数添加到一个匿名函数中??
谢谢。
【问题讨论】:
我不确定这个函数是否有意义,你能解释一下你想总结什么吗?vec
的第一个n
元素应该增加x
?或者你想要n
单独的函数,每个函数都会将vec(i)
增加x
。
所以在每个循环中,函数都是 x + 1, x + 4, x + 3, x + 56,我想要的是 (x+1) + (x+4 ) + (x+3) + (x+56) +...
所以你想要n
不同的函数,每个函数将不同的数字(从vec
预定义)添加到x
。在你拥有 n
函数之后,你想同时对它们做一些事情。
正确。具体来说,我想将它们全部添加以定义一个新的匿名函数。
f = @(x) n*x + sum(vec)
应该为您解决问题。特别是因为您没有将 (x+1)
、(x+2)
、... 存储在数组中。
【参考方案1】:
我能建议的最好的方法是像这样逐步添加你的函数:
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
fi = @(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
如果没有更详细的问题,就不可能知道您的实际问题是什么,以及这些问题是否对您有用,因此您可能需要针对您的特定应用对它们进行大量更改。
【讨论】:
以上是关于添加匿名函数 matlab的主要内容,如果未能解决你的问题,请参考以下文章