Construct tri or penta diagonal matrix from an exisiting matrix
5 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
John D'Errico
on 25 Feb 2015
Edited: John D'Errico
on 25 Feb 2015
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.
More Answers (0)
See Also
Categories
Find more on Operating on Diagonal Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!