我打算做的事情很简单,但是我还没有找到合适的方法来做。我有一个依赖于两个变量的函数句柄,例如:
f = @(i,j) i+j
(尽管我的情况要复杂得多)
[我想做的是创建一个矩阵M使得
M(i,j) = f(i,j)
当然,我可以使用嵌套循环,但我正在尝试避免这种情况。我已经在Maple中以一种非常简单的方式做到了这一点:
f:=(i,j)->i+j;
M:=Matrix(N,f);
(其中N是矩阵的维数)但是我需要为此使用MATLAB。目前,我仍然坚持嵌套循环,但非常感谢您的帮助!
使用bsxfun
:
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
Function handles可以接受矩阵作为输入。只需传递大小为>> M = bsxfun(f, (1:4).', 1:5)
的方阵(其中值对应于N
的行号)和大小为i
的方阵,其中值对应于N
的列号。
j