MATLAB: создать матричную диагональную матрицу с одним и тем же повторяющимся блоком - программирование
Подтвердить что ты не робот

MATLAB: создать матричную диагональную матрицу с одним и тем же повторяющимся блоком

У меня есть матрица K размеров n x n. Я хочу создать новую матричную диагональную матрицу M размеров N x N, такую, что она содержит d блоков матрицы K в качестве своей диагонали.

Я бы прямо использовал M = blkdiag (K, K, K) и т.д. был меньше. К сожалению, d очень большой, и я не хочу вручную писать формулу с d точно такими же аргументами для функции blkdiag().

Есть ли более короткий, более умный способ сделать это?

4b9b3361

Ответ 1

вы можете использовать kron для этого.

M = kron(X,Y)

возвращает тензорное произведение Кронекера X и Y. Результатом является большой массив, образованный путем получения всех возможных произведений между элементами X и элементами Y. Если X является m-by-n и Y является p-by- q, то kron (X, Y) является m * p-by-n * q. Поэтому в вашем случае что-то вроде этого будет делать:

M = kron(eye(L),K)

с L # блоков.

Ответ 2

Следующее должно работать:

д = 5; К = глаза (3); T = ячейка (1, d);

для j = 1: d   T {j} = K; конец

M = blkdiag (T {:})

Ответ 3

tmp = repmat({K},d,1);
M = blkdiag(tmp{:});

Вы никогда не должны использовать eval или использовать ненужные петли. Крон очень элегантный. Просто хотел поделиться этим, так как он также работает.

Ответ 4

s = 'A,';
s = repmat(s,[1,n2]);
s = ['B=blkdiag(', s(1:end-1),');'];
eval(s);

Это может быть быстрее, чем использование kron-eye.