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 comentarios

David Goodmanson
David Goodmanson el 11 de Nov. de 2019
Hi Aaron
check out the 'diag' function
Alex Treat
Alex Treat el 30 de Oct. de 2020
coughs you were in the mec 103 class at CSU...

Iniciar sesión para comentar.

 Respuesta aceptada

Stephen23
Stephen23 el 11 de Nov. de 2019
Editada: Stephen23 el 20 de Mzo. de 2022

11 votos

"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 comentarios

Juan Jesús Rocha Cuervo
Juan Jesús Rocha Cuervo el 9 de Abr. de 2020
How can I stop the output of "M" in this example?
Jonathan Wharrier
Jonathan Wharrier el 2 de Mayo de 2020
a semi-colon at the end of the line supresses output
giannit
giannit el 28 de Sept. de 2020
Editada: giannit el 28 de Sept. de 2020
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
Steven Lord
Steven Lord el 28 de Sept. de 2020
If you're creating this as a sparse matrix see spdiags.
Arth Patel
Arth Patel el 29 de Sept. de 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 el 30 de Oct. de 2020
"It's not clear to me how you're indexing a matrix using just one argument."
The second example uses linear indexing:
Ana Sarai
Ana Sarai el 22 de Feb. de 2025
Thank you, = )

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 11 de Nov. de 2019

Comentada:

el 22 de Feb. de 2025

Community Treasure Hunt

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

Start Hunting!

Translated by