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

时间:2014-05-26 20:07:18

标签: matlab function matrix handle

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

f = @(i,j) i+j

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

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

M(i,j) = f(i,j)

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

f:=(i,j)->i+j;
M:=Matrix(N,f);

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

2 个答案:

答案 0 :(得分: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

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

  

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

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

>> M = bsxfun(f, (1:4).', 1:5)

答案 1 :(得分:0)

功能句柄可以接受矩阵作为输入。只需传递大小为N的方阵,其中值对应于i的行号,以及大小为N的方阵,其中值对应于{{1 }}。

j