Creating a tridiagonal matrix

818 vues (au cours des 30 derniers jours)
Aaron Atkinson
Aaron Atkinson le 11 Nov 2019
Commenté : John D'Errico le 10 Déc 2022
I am currently trying to create a 500*500 matrix in matlab with diagonals a=-1, b=4, c=2. My teacher has said that the best way to go about it is using loops, but is there a coded in function to use?
  2 commentaires
David Goodmanson
David Goodmanson le 11 Nov 2019
Hi Aaron
check out the 'diag' function
Alex Treat
Alex Treat le 30 Oct 2020
coughs you were in the mec 103 class at CSU...

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 11 Nov 2019
Modifié(e) : Stephen23 le 20 Mar 2022
"My teacher has said that the best way to go about it is using loops"
Why on earth would they say that? Here are some non-loop aproaches:
2- Use diag :
>> N = 10;
>> a = -1;
>> b = 4;
>> c = 2;
>> M = diag(a*ones(1,N)) + diag(b*ones(1,N-1),1) + diag(c*ones(1,N-1),-1)
M =
-1 4 0 0 0 0 0 0 0 0
2 -1 4 0 0 0 0 0 0 0
0 2 -1 4 0 0 0 0 0 0
0 0 2 -1 4 0 0 0 0 0
0 0 0 2 -1 4 0 0 0 0
0 0 0 0 2 -1 4 0 0 0
0 0 0 0 0 2 -1 4 0 0
0 0 0 0 0 0 2 -1 4 0
0 0 0 0 0 0 0 2 -1 4
0 0 0 0 0 0 0 0 2 -1
3- indexing is reasonably simple:
>> M = zeros(N,N);
>> M( 1:1+N:N*N) = a;
>> M(N+1:1+N:N*N) = b;
>> M( 2:1+N:N*N-N) = c
M =
-1 4 0 0 0 0 0 0 0 0
2 -1 4 0 0 0 0 0 0 0
0 2 -1 4 0 0 0 0 0 0
0 0 2 -1 4 0 0 0 0 0
0 0 0 2 -1 4 0 0 0 0
0 0 0 0 2 -1 4 0 0 0
0 0 0 0 0 2 -1 4 0 0
0 0 0 0 0 0 2 -1 4 0
0 0 0 0 0 0 0 2 -1 4
0 0 0 0 0 0 0 0 2 -1
  6 commentaires
Arth Patel
Arth Patel le 29 Sep 2020
Can you please explain the second method a bit ? It's not clear to me how you're indexing a matrix using just one argument.
Stephen23
Stephen23 le 30 Oct 2020
"It's not clear to me how you're indexing a matrix using just one argument."
The second example uses linear indexing:

Connectez-vous pour commenter.

Plus de réponses (1)

Jihen
Jihen le 10 Déc 2022
function[A]=remplissage(n)
R1=(-4)*ones(n-1,1);
R2=ones(n-2,1);
A=6*eye(n)+diag(R1,-1)+diag(R1,1)+diag(R2,2)+diag(R2,-2);
end
  1 commentaire
John D'Errico
John D'Errico le 10 Déc 2022
This does not actually answer the question, creating instead a matrix with 5 diagonals, so a penta-diagonal matrix.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Operating on Diagonal 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!

Translated by