如果我有一组功能
f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])
我有第二个
矩阵 b = [x1,x2]
如何评估f([b])
?我知道如何说f(b(1),b(2))
的唯一方法,但我无法弄清楚如何自动化,因为变量的数量可能达到n。我也想知道是否有更好的方法,而不是单独进行插入。
答案 0 :(得分:1)
您可以重写函数以将矢量作为输入。
f = @(b)[b(1) + b(2); b(1)^2 + b(2)^2]
然后,例如,b=[2 3]
来电f(b)
给出了[2+3; 2^2+3^2]=[5; 13]
。
答案 1 :(得分:1)
convertToAcceptArray.m:
function f = convertToAcceptArray(old_f)
function r = new_f(X)
X = num2cell(X);
r = old_f(X{:});
end
f = @new_f
end
usage.m:
f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])
f2 = convertToAcceptArray(f);
f2([1 5])
答案 2 :(得分:1)
假设b
是N-by-2矩阵,您可以为f
中的每对值调用b
,如下所示:
cell2mat(arrayfun(f, b(:, 1), b(:, 2), 'UniformOutput', 0)')'
结果也是N-by-2矩阵。
或者,如果您允许修改f
,则可以重新定义它以接受矢量作为输入,这样您只需拨打f(b)
即可获得整个结果:
f = @(x)[sum(x, 2), sum(x .^ 2, 2)]