添加匿名函数 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的主要内容,如果未能解决你的问题,请参考以下文章

使用匿名函数瓶颈提高 matlab 代码的性能

匿名函数中的Matlab大行

Matlab Codegen:不支持匿名函数

在具有 GPU 加速的 arrayfun 中使用匿名函数 (Matlab)

matlab函数赋值如何实现?

匿名函数,向量化和预分配,函数的函数,P码文件