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

11 votes

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

Juan Jesús Rocha Cuervo
Juan Jesús Rocha Cuervo le 9 Avr 2020
How can I stop the output of "M" in this example?
Jonathan Wharrier
Jonathan Wharrier le 2 Mai 2020
a semi-colon at the end of the line supresses output
giannit
giannit le 28 Sep 2020
Modifié(e) : giannit le 28 Sep 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 le 28 Sep 2020
If you're creating this as a sparse matrix see spdiags.
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:
Ana Sarai
Ana Sarai le 22 Fév 2025
Thank you, = )

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by