Construct tri or penta diagonal matrix from an exisiting matrix
6 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Risposta accettata
John D'Errico
il 25 Feb 2015
Modificato: John D'Errico
il 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.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Operating on Diagonal Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!