Construct tri or penta diagonal matrix from an exisiting matrix
5 ビュー (過去 30 日間)
古いコメントを表示
Dear all,
I am constructing a random number matrix, for instance A=randn(10,10)
For this matrix, I would like to be able to remove a tridiagonal, pentadiagonal, etc. matrix (i.e. I would like to have some simplicity in extracting this from the original matrix for any size diagonal matrix).
I know that I can get the diagonal terms that I need from the original matrix using diag(A), diag(A,-1) and diag(A,1) (for a tridiagonal), however I am not sure of a "sexy" way to populate a new matrix M with these diagonal elements after that.
Any input is greatly appreciated :)
0 件のコメント
採用された回答
John D'Errico
2015 年 2 月 25 日
編集済み: John D'Errico
2015 年 2 月 25 日
Lots of ways. You need to start learning them, as that understanding of the tools in MATLAB is necessary for success.
A simple one:
tril(triu(A,-1),1)
or
diag(diag(A,-1),-1) + diag(diag(A)) + diag(diag(A,1),1)
Ok, so those are pretty simple tricks. But they represent ideas that you need to learn and understand.
If you are working with diagonal matrices, you need to learn to use tools like sparse, spy, spdiags, sub2ind, ind2sub, etc. Here, for example, I'll extract a sparse pentadiagonal part of the 10x10 matrix A.
Apenta = spdiags(spdiags(A,-2:2),-2:2,10,10);
Lots of other ways too.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Operating on Diagonal Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!