如果我有一组函数
f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])
我有第二个矩阵
b = [x1,x2]
我如何评价f([b])
?我知道的唯一方法是说f(b(1),b(2))
,但我不知道如何自动化,因为变量的数量可能高达 n。我还想知道是否有比单独使用并插入它们更好的方法。
如果我有一组函数
f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])
我有第二个矩阵
b = [x1,x2]
我如何评价f([b])
?我知道的唯一方法是说f(b(1),b(2))
,但我不知道如何自动化,因为变量的数量可能高达 n。我还想知道是否有比单独使用并插入它们更好的方法。
您可以重写函数以将向量作为输入。
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]
。
convertToAcceptArray.m:
function f = convertToAcceptArray(old_f)
function r = new_f(X)
X = num2cell(X);
r = old_f(X{:});
end
f = @new_f
end
用法.m:
f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])
f2 = convertToAcceptArray(f);
f2([1 5])
假设这b
是一个 N×2 矩阵,您可以f
为每对值调用b
如下:
cell2mat(arrayfun(f, b(:, 1), b(:, 2), 'UniformOutput', 0)')'
结果也将是一个 N×2 矩阵。
或者,如果您被允许修改f
,您可以重新定义它以接受一个向量作为输入,这样您就可以通过简单地调用来获得整个结果f(b)
:
f = @(x)[sum(x, 2), sum(x .^ 2, 2)]