从函数句柄创建矩阵(MATLAB)

Jav*_*cia 5 matlab function matrix handle

我打算做的很简单,但我找不到合适的方法.我有一个函数句柄,它依赖于两个变量,例如:

f = @(i,j) i+j
Run Code Online (Sandbox Code Playgroud)

(但我的情况要复杂得多)

我想做的是创建一个矩阵M

M(i,j) = f(i,j)
Run Code Online (Sandbox Code Playgroud)

当然我可以使用嵌套循环,但我试图避免这些.我已经设法以一种非常简单的方式在Maple中做到了这一点:

f:=(i,j)->i+j;
M:=Matrix(N,f);
Run Code Online (Sandbox Code Playgroud)

(其中N是矩阵的维数)但我需要使用MATLAB.现在我坚持使用嵌套循环,但我非常感谢你的帮助!

Lui*_*ndo 3

使用bsxfun

>> [ii jj] = ndgrid(1:4 ,1:5); %// change i and j limits as needed
>> M = bsxfun(f, ii, jj)

M =

     2     3     4     5     6
     3     4     5     6     7
     4     5     6     7     8
     5     6     7     8     9
Run Code Online (Sandbox Code Playgroud)

如果你的函数f满足以下条件:

C = fun(A,B)接受任意大小的数组A,但大小相等并返回相同大小的输出。输出数组中的每个元素都是and only对应元素的运算结果。还必须支持标量扩展,这样如果或是标量,则是将标量应用于另一个输入数组中的每个元素的结果。BCABfunABC

你可以处理掉ndgrid。只需将转置 ( .') 添加到第一个 ( i) 向量即可:

>> M = bsxfun(f, (1:4).', 1:5)
Run Code Online (Sandbox Code Playgroud)

  • 我想知道如果“f”只不过是“@(i,j)i+j”,“@plus”是否会更有效? (2认同)
  • @horchler 对于这个具体情况,我想是这样。并且`ndgrid`也可以被处理掉 (2认同)