Elementary matrices in Matlab
12 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am very new to MATLAB, and I am trying to create a numerical scheme to solve a differential equation. However I am having trouble implementing matrices. I was wondering if anyone can help with constructing a following NxN matrix?

I am sure there is a better way to implement, but the following works
N=10
tod=zeros(N)
for k=1:(N-1)
tod(k, k+1)=-2
end
for k=1:(N-2)
tod(k, k+2)=1
end
tod_2=zeros(N)
for k=1:(N-1)
tod_2(k, k+1)=2
end
for k=1:(N-2)
tod_2(k, k+2)=-1
end
tran=transpose(tod_2)
Final=tran+tod
0 commentaires
Réponses (3)
John D'Errico
le 2 Fév 2022
So many ways to do this. DGM showed a great way using toeplitz. But there are others. For example, you could use diag.
n = 5;
R = diag(ones(n-2,1),2) - 2*diag(ones(n-1,1),1); R = R + R'
Or use spdiags, creating the matrix directly. Since your matrix is banded, if n is at all large, then you truly want to learn to use sparse matrices.
n = 10;
R = spdiags(ones(n,1)*[1 -2 -2 1],[-2 -1 1 2],n,n);
R is now a sparse matrix, so it will offer great advantages in computing when n grows large.
spy(R)
full(R)
I could probably have used tools like meshgrid, tril and triu.
1 commentaire
Voss
le 2 Fév 2022
Here's one way you can do it (and it produces the correct matrix too):
N = 10;
R = zeros(N);
R(2:N+1:end-N) = 2;
R(3:N+1:end-2*N) = -1;
R(N+1:N+1:end-1) = -2;
R(2*N+1:N+1:end-2) = 1;
R
0 commentaires
Voir également
Catégories
En savoir plus sur Resizing and Reshaping Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
