我正在尝试创建一个满足以下条件的矩阵:
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的最佳方式。任何提示?
答案 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将矩阵(或向量)重复为更大的矩阵。
我还编辑了以上内容以抽象出向量xi
和xj
- 您将它们作为1:m
和1:n
向量,但它们可以是任意数字向量(例如[1 2 7.0 pi 1:0.1:20]
)