How does Matlab interpret for loops when say I=n:-1:1

124 visualizaciones (últimos 30 días)
Ethan Boyce
Ethan Boyce el 31 de Ag. de 2020
Comentada: Luong Ngo el 13 de Oct. de 2021
So this is a code for gaussian elimination, the code seems to work but my question is for clarification on the function of the for loop and how Matlab reads it. This is more a question for my own understanding of the computer language than the math involved.
the section of code I am looking at is
x=zeros(n,1);
for i=n:-1:1
x(i)=(A(i,end)-A(i,i+1:n)*x(i+1:n))/A(i,i);
end
So how would the algorithm read this. My intution says when it reads x(i+1:n), that the program will simply move to the next i in the loop.
  2 comentarios
KSSV
KSSV el 31 de Ag. de 2020
i = n:-1:1
The above takes i values as n, n-1, n-2, .....3, 2,1.
Luong Ngo
Luong Ngo el 13 de Oct. de 2021
@KSSV do you know loop 1:1:n mean?

Iniciar sesión para comentar.

Respuesta aceptada

Steven Lord
Steven Lord el 31 de Ag. de 2020
The only part of that code that changes the value of i is the for statement itself, and MATLAB automatically handles changing the value of i to the next element of the vector n:-1:1 when the control flow returns to the for statement.
The expression i+1:n reads the value of i and computes with that value but does not modify the value.
  3 comentarios
Steven Lord
Steven Lord el 31 de Ag. de 2020
Almost.
x(i)=(A(i,end)-A(i,i+1:n)*x(i+1:n))/A(i,i);
Plugging in i = 4 and n = 4:
x(4)=(A(4,end)-A(4,4+1:4)*x(4+1:4))/A(4,4);
The expression 4+1:4 simplifies to the empty 1-by-0 vector since we perform addition (level 6 in the operator precedence table) before applying the colon operator (level 7.) How many steps does it take to get from 5 to 4 when you step forward by 1 unit each time? You can't get there from here.
Now if those i+1 terms were i-1 instead (subtraction is also at level 6) yes, those terms would be 3:4 and that creates a two element long vector. As long as x is a column vector that vector-vector multiplication would be defined and would return a scalar. The whole expression on the right side would then result in a scalar which fits nicely into the one element of x being reference on the left side.
Ethan Boyce
Ethan Boyce el 1 de Sept. de 2020
Got it, thank you!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by