基于索引初始化MATLAB矩阵

基于索引初始化MATLAB矩阵,matlab,Matlab,我正在尝试创建一个矩阵,我很满意: M(i,j) = f(i,j) 为了一些f。我可以通过说M=zeros(M,n)然后循环来进行元素初始化。例如(八度): 但是AFAIK循环并不是使用MATLAB的最佳方式。有什么提示吗?当然 xi = 1:m; xj = 1:n; Ai = repmat(xi',1,length(xj)); Aj = repmat(xj,length(xi),1); M = f(Ai,Aj); 您可以对任何f()执行此操作,只要它接受矩阵参数并进行元素对元素的

我正在尝试创建一个矩阵,我很满意:

M(i,j) = f(i,j)
为了一些f。我可以通过说
M=zeros(M,n)
然后循环来进行元素初始化。例如(八度):

但是AFAIK循环并不是使用MATLAB的最佳方式。有什么提示吗?

当然

 xi = 1:m;
 xj = 1:n;
 Ai = repmat(xi',1,length(xj));
 Aj = repmat(xj,length(xi),1);
 M = f(Ai,Aj);
您可以对任何
f()
执行此操作,只要它接受矩阵参数并进行元素对元素的数学运算。例如:
f=@(i,j)(i+j)/2
或对于乘法:
f=@(i,j)i.*j
Ai矩阵每行有相同的元素,Aj矩阵每列有相同的元素。将矩阵(或向量)重复到更大的矩阵中


我还编辑了上面的内容以提取出向量
xi
xj
——它们是
1:m
1:n
向量,但它们可以是任意数字向量(例如
[1 2 7.0 pi 1:0.1:20]

一件事:上面的代码将为您提供一个m+1乘n+1矩阵,而不是m乘n。谢谢!我猜这与
x
y
中的情况类似,比如说,
[x,y]=meshgrid(1:1:m+1)
。如果
f
可以接受更多的标量输入,那么
bsxfun
将以更少的输入完成这项工作@奥利:你应该加上这个作为另一个答案!
 xi = 1:m;
 xj = 1:n;
 Ai = repmat(xi',1,length(xj));
 Aj = repmat(xj,length(xi),1);
 M = f(Ai,Aj);