Creating a tridiagonal matrix
820 views (last 30 days)
Show older comments
Aaron Atkinson
on 11 Nov 2019
Commented: John D'Errico
on 10 Dec 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 Comments
Accepted Answer
Stephen23
on 11 Nov 2019
Edited: Stephen23
on 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:
1- See @giannit's comment: https://www.mathworks.com/matlabcentral/answers/490368-creating-a-tridiagonal-matrix#comment_1027546
>> 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 Comments
Arth Patel
on 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
on 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:
More Answers (1)
Jihen
on 10 Dec 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 Comment
John D'Errico
on 10 Dec 2022
This does not actually answer the question, creating instead a matrix with 5 diagonals, so a penta-diagonal matrix.
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!