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

问题描述 投票:5回答:2

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

f = @(i,j) i+j

(尽管我的情况要复杂得多)

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

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

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

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

(其中N是矩阵的维数)但是我需要为此使用MATLAB。目前,我仍然坚持嵌套循环,但非常感谢您的帮助!

matlab function matrix handle
2个回答
3
投票

使用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中的每个元素仅是对CA的相应元素进行运算的结果。 B还必须支持标量扩展,这样,如果funA是标量,则B是将标量应用于另一个输入数组中的每个元素的结果。

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

i

0
投票

Function handles可以接受矩阵作为输入。只需传递大小为>> M = bsxfun(f, (1:4).', 1:5) 的方阵(其中值对应于N的行号)和大小为i的方阵,其中值对应于N的列号。

j
© www.soinside.com 2019 - 2024. All rights reserved.