1

如果我有一组函数

f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])

我有第二个矩阵

b = [x1,x2]

我如何评价f([b])?我知道的唯一方法是说f(b(1),b(2)),但我不知道如何自动化,因为变量的数量可能高达 n。我还想知道是否有比单独使用并插入它们更好的方法。

4

3 回答 3

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]

于 2013-03-10T20:59:52.263 回答
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

用法.m:

f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])
f2 = convertToAcceptArray(f);
f2([1 5])
于 2013-03-10T21:09:27.970 回答
1

假设这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)]
于 2013-03-10T21:54:10.160 回答