Как сделать трехугольную матрицу в Matlab? - PullRequest
2 голосов
/ 07 мая 2011

Как создать матрицу ниже из вектора [1 2 3 4 5]

1 0 0 0 0
2 1 0 0 0
3 2 1 0 0
4 3 2 1 0
5 4 3 2 1
0 5 4 3 2
0 0 5 4 3
0 0 0 5 4
0 0 0 0 5

Ответы [ 3 ]

4 голосов
/ 07 мая 2011

Это не трехдиагональный, а вариант пятиугольной матрицы.Вы можете использовать diag, или sparse, или spdiags, и все это может создать его.Вы можете прочитать мой blktridiag код, который можно найти на File Exchange , чтобы узнать, как эффективно построить такую ​​матрицу.что ваша матрица имеет особую форму, матрицу Теплица.

>> toeplitz([1:5,zeros(1,4)]',[1, zeros(1,4)])
ans =
     1     0     0     0     0
     2     1     0     0     0
     3     2     1     0     0
     4     3     2     1     0
     5     4     3     2     1
     0     5     4     3     2
     0     0     5     4     3
     0     0     0     5     4
     0     0     0     0     5
2 голосов
/ 07 мая 2011

Не совсем точно, что вы пытаетесь сделать, но вы можете найти diag(v,n) и convmtx(v) полезными.В вашем случае

 convmtx([1,2,3,4,5],5)

Производит:

 1     2     3     4     5     0     0     0     0
 0     1     2     3     4     5     0     0     0
 0     0     1     2     3     4     5     0     0
 0     0     0     1     2     3     4     5     0
 0     0     0     0     1     2     3     4     5
0 голосов
/ 07 мая 2011

посмотрите здесь: http://www.mathworks.com/help/techdoc/ref/diag.html

Пример:

diag(-m:m)+diag(ones(2*m,1),1)+diag(ones(2*m,1),-1)

создает трехдиагональную матрицу порядка 2 * m + 1.

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