将矩阵传递给函数句柄(MATLAB)

时间:2013-03-10 20:34:09

标签: matlab

如果我有一组功能

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

我有第二个

矩阵

b = [x1,x2]

如何评估f([b])?我知道如何说f(b(1),b(2))的唯一方法,但我无法弄清楚如何自动化,因为变量的数量可能达到n。我也想知道是否有更好的方法,而不是单独进行插入。

3 个答案:

答案 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)]