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 个评论

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

请先登录,再进行评论。

 采纳的回答

Stephen23
Stephen23 2019-11-11
编辑:Stephen23 2022-3-20
"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 个评论

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, = )

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Operating on Diagonal Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by