Мне нужно создать диагональную матрицу, где диагональные элементы являются вектором - PullRequest
0 голосов
/ 31 августа 2018

Вектор должен выглядеть примерно так:

[1 2 3 0 0 0
 0 1 2 3 0 0
 0 0 1 2 3 0
 0 0 0 1 2 3];

Я знаю вектор ([1 2 3]), который я хочу «вставить» по диагонали, но я не знаю размер массива, поэтому число строк должно быть определено переменной N.

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Это немного грубо, но можно построить желаемую матрицу как теплица:

a = [1 2 3]; 
toeplitz([a(1); zeros(length(a),1)],[a(:); zeros(length(a),1)])

с ответом:

ans =

 1     2     3     0     0     0
 0     1     2     3     0     0
 0     0     1     2     3     0
 0     0     0     1     2     3
0 голосов
/ 31 августа 2018

Вы также можете использовать 2D-свертку:

v = [1 2 3];
N = 4;
result = conv2(v, eye(N))
0 голосов
/ 31 августа 2018

Вы можете использовать spdiags, чтобы установить диагонали и получить желаемую форму:

n = 4;
A = full(spdiags(ones(n,1)*[1,2,3],[0,1,2],n,n+2));

Возвращает:

A =

   1   2   3   0   0   0
   0   1   2   3   0   0
   0   0   1   2   3   0
   0   0   0   1   2   3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...