我有一个返回2个东西的函数(例如函数值和jacobian)。
function [f_val, J_val] = f(x)
f_val = x;
J_val = [1 0; 0 1];%.....
end
我想要的是提取第一个或第二个输出参数的函数。显然,我可以去[f_sol; J_sol] = f([1 1])
,然后提取适当的值,但我需要在匿名函数中执行此操作,在那里无法进行那种赋值。
丑陋的解决方案 可以创建以下功能,
function out = output_part(i, f, varargin) %This calls it here, but I would rather not
[all_out{1:nargout(f)}] = f(varargin{:});
out = all_out{i};
end
然后调用类似:output_part(2, @f, [ 0 1])
来达到我的目的,但这很难看。更好的语法是output_part(2, f([0,1]))
,但我无法弄清楚如何写这个。我们真正需要的是一种让函数的多个变量输出最终作为调用函数的可变输入的方法。我无法弄清楚这是否可能。
多个输出参数:
这与How can I index a MATLAB array returned by a function without first assigning it to a local variable?不重复。这具有相同的性质,但多个参数的处理方式不同。与How to elegantly ignore some return values of a MATLAB function?中的kthout
函数相关的更为相似的内容与我上面的output_part
类似。
这里的问题只是因为你不能通过函数组合轻松地将函数的多个输出链接到另一个函数的多个输入中。