【发布时间】: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
我正在保存来自多个回归的系数,并希望稍后一次评估所有不同的预测值。这段特殊的代码将被调用很多,所以我希望它尽可能快速和高效。 这个想法是我有一个对象,比如说
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
你的两个功能:
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
【讨论】: