Конечно!
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()
повторяет матрицу (или вектор) в большую матрицу.
Я также отредактировал вышеприведенное, чтобы абстрагировать векторы xi
и xj
- они у вас естькак 1:m
и 1:n
векторов, но они могут быть произвольными числовыми векторами (например, [1 2 7.0 pi 1:0.1:20]
)