Creating a tridiagonal matrix

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

Hi Aaron
check out the 'diag' function
coughs you were in the mec 103 class at CSU...

Sign in to comment.

 Accepted Answer

Stephen23
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:
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

7 Comments

How can I stop the output of "M" in this example?
a semi-colon at the end of the line supresses output
This can be done also using toeplitz
A = toeplitz( [-1 2 zeros(1,498)] , [-1 4 zeros(1,498)] ); % size = 2 MB
and since there are many zeros you can save space using sparse
B = toeplitz( sparse([1 1],[1 2],[-1 2],1,498) , sparse([1 1],[1 2],[-1 4],1,498) ); % size = 28 kB
If you're creating this as a sparse matrix see spdiags.
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.
"It's not clear to me how you're indexing a matrix using just one argument."
The second example uses linear indexing:
Thank you, = )

Sign in to comment.

More Answers (0)

Categories

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!