Учимся строить ленточные матрицы в MATLAB - PullRequest
4 голосов
/ 13 октября 2011

Я пытаюсь построить квадратные матрицы полос , используя blkdiag или spdiags, но не могу понять, как.Я нахожу документацию по spdiags немного запутанной, и не уверен, что смогу построить эти матрицы простым вызовом blkdiag.

Я хотел бы построить матрицу с квадратными полосами из двух параметров:

  • Ширина полосы
  • Размер матрицы

Например:

band_width = 2;
matrix size = 9;

Результат:

[1 1 1 0 0 0 0 0 0]
[1 1 1 1 0 0 0 0 0]
[1 1 1 1 1 0 0 0 0]
[0 1 1 1 1 1 0 0 0]
[0 0 1 1 1 1 1 0 0]
[0 0 0 1 1 1 1 1 0]
[0 0 0 0 1 1 1 1 1]
[0 0 0 0 0 1 1 1 1]
[0 0 0 0 0 1 1 1 1]
[0 0 0 0 0 0 1 1 1]

1 Ответ

6 голосов
/ 13 октября 2011

Сложный однострочный способ создания матрицы, подобной этой, заключается в свертке:

M = sign(conv2(eye(matrix_size),ones(band_width+1),'same'));

единичная матрица создается с заданным размером, затем сворачивается в2-D с квадратной матрицей из единиц , затем преобразованной в нули и единицы путем взятия знака .

Вышеприведенное хорошо для создания относительно небольшихне разреженные матрицы.Для больших матриц свертка может дорого обойтись, и вы, вероятно, захотите представить результат в виде разреженной матрицы .Вот как вы можете сделать это обычным способом, используя SPDIAGS :

M = spdiags(ones(matrix_size,2*band_width+1),...
            -band_width:band_width,matrix_size,matrix_size);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...