基于索引初始化MATLAB矩阵

时间:2010-10-24 01:45:48

标签: matlab

我正在尝试创建一个满足以下条件的矩阵:

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

对于某些人来说。我可以通过说M = zeros(m,n)然后循环来进行元素初始化。例如(在Octave中):

M = zeros(m,n)
for i = 1 : m
  for j = 1 : n
    m(i, j) = (i+j)/2;
  endfor
endfor

但是AFAIK循环不是使用MATLAB的最佳方式。任何提示?

1 个答案:

答案 0 :(得分:3)

当然!

 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矩阵对每列具有相同的元素。 repmat() function将矩阵(或向量)重复为更大的矩阵。

我还编辑了以上内容以抽象出向量xixj - 您将它们作为1:m1:n向量,但它们可以是任意数字向量(例如[1 2 7.0 pi 1:0.1:20]