【问题标题】:Matlab evaluate several functions at same pointMatlab 在同一点评估几个函数
【发布时间】:2017-12-12 16:23:07
【问题描述】:

我正在保存来自多个回归的系数,并希望稍后一次评估所有不同的预测值。这段特殊的代码将被调用很多,所以我希望它尽可能快速和高效。 这个想法是我有一个对象,比如说

    F{1} = @(x) 0.5 + 1*x
    F{2} = @(x) 0.3 + .4*x

现在我想评估例如F(5) 并得到 5.5 和 2.3 作为我的结果,而无需执行 F{1}(5) 和 F{2}(5)。

【问题讨论】:

标签: matlab


【解决方案1】:

你的两个功能:

F{1} = @(x) 0.5 + 1*x;
F{2} = @(x) 0.3 + .4*x;

% create another anonymous function which calls both F{1} and F{2}
FF = @(x) [F{1}(x) F{2}(x)];

FF(5)

给你输出:

[5.5 2.3]

编辑

如果你想要一些更聪明的东西,你可以为“集合”使用普通函数,你可以用它做更多的事情:

function test_function
  F{1} = @(x) 0.5 + 1*x;
  F{2} = @(x) 0.3 + .4*x;

  result = collectorFunction ( 5, F{:} )

end
function output = collectorFunction ( x, varargin )
  output = zeros(nargin-1,1);
  for ii=2:nargin
    output(ii-1) = feval(varargin{ii-1}, x );
  end
end

结果

5.5
2.3

然后,如果您添加另一个F{3},例如收集器功能将自动收集结果:

function test_function
  F{1} = @(x) 0.5 + 1*x;
  F{2} = @(x) 0.3 + .4*x;
  F{3} = @(x) 1.3 + .3*x;             % Simply ADD a new F{N}....

  result = collectorFunction ( 5, F{:} )

end
function output = collectorFunction ( x, varargin )
  output = zeros(nargin-1,1);
  for ii=2:nargin
    output(ii-1) = feval(varargin{ii-1}, x );
  end
end

结果:

5.5
2.3
2.8

【讨论】:

  • 是的,谢谢,我考虑过这一点,这实际上是我目前的解决方法。我只是发现这实施起来相当慢。此外,这不能轻松处理不同数量的输入。
  • 更新为允许集合动态处理多个函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多