Matlab在同一点评估几个函数

时间:2017-12-12 16:23:08

标签: matlab

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

    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)。

1 个答案:

答案 0 :(得分: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