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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Stephen23
Stephen23 am 11 Nov. 2019
Bearbeitet: Stephen23 am 20 Mär. 2022

11 Stimmen

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

Juan Jesús Rocha Cuervo
Juan Jesús Rocha Cuervo am 9 Apr. 2020
How can I stop the output of "M" in this example?
Jonathan Wharrier
Jonathan Wharrier am 2 Mai 2020
a semi-colon at the end of the line supresses output
giannit
giannit am 28 Sep. 2020
Bearbeitet: giannit am 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 am 28 Sep. 2020
If you're creating this as a sparse matrix see spdiags.
Arth Patel
Arth Patel am 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 am 30 Okt. 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 am 22 Feb. 2025
Thank you, = )

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by