【问题标题】:Passing matrix to function handle (MATLAB)将矩阵传递给函数句柄(MATLAB)
【发布时间】:2013-03-10 20:34:08
【问题描述】:

如果我有一组函数

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

我有第二个矩阵

b = [x1,x2]

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

【问题讨论】:

  • 您希望评估什么?
  • 我需要用 x1, x2 找出 f 矩阵是什么。抱歉不清楚,我会编辑帖子

标签: matlab


【解决方案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])

【讨论】:

    【解决方案2】:

    您可以重写您的函数以将向量作为输入。

    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]

    【讨论】:

    • 括号内的矩阵下标在 MATLAB 中是无效的语法。另外,像这样重新定义f 有什么帮助?
    【解决方案3】:

    假设b 是一个N×2 矩阵,您可以为b 中的每一对值调用f,如下所示:

    cell2mat(arrayfun(f, b(:, 1), b(:, 2), 'UniformOutput', 0)')'
    

    结果也是一个 N×2 矩阵。

    或者,如果您被允许修改f,您可以重新定义它以接受一个向量作为输入,这样您就可以通过简单地调用f(b)获得整个结果:

    f = @(x)[sum(x, 2), sum(x .^ 2, 2)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 2013-06-04
      相关资源
      最近更新 更多