我打算做的很简单,但我找不到合适的方法。我有一个函数句柄,它依赖于两个变量,例如:
f = @(i,j) i+j
(但我的情况要复杂得多)
我想做的是创建一个矩阵M,以便
M(i,j) = f(i,j)
当然我可以使用嵌套循环,但我试图避免这些。我已经设法以一种非常简单的方式在Maple中做到了这一点:
f:=(i,j)->i+j;
M:=Matrix(N,f);
(其中N是矩阵的维数)但我需要使用MATLAB。现在我坚持使用嵌套循环,但我非常感谢你的帮助!
答案 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)
接受任意,但大小相等的数组A
和B
,并返回相同大小的输出。输出数组C
中的每个元素都是仅对A
和B
的相应元素进行操作的结果。fun
还必须支持标量扩展,这样如果A
或B
是标量,则C
是将标量应用于每个标量的结果另一个输入数组中的元素。
你可以处置ndgrid
。只需将转置(.'
)添加到第一个(i
)向量:
>> M = bsxfun(f, (1:4).', 1:5)
答案 1 :(得分:0)
功能句柄可以接受矩阵作为输入。只需传递大小为N
的方阵,其中值对应于i
的行号,以及大小为N
的方阵,其中值对应于{{1 }}。
j