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

77 views (last 30 days)
Ethan Boyce on 31 Aug 2020
Commented: Ethan Boyce on 1 Sep 2020
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.

#### 1 Comment

KSSV on 31 Aug 2020
i = n:-1:1
The above takes i values as n, n-1, n-2, .....3, 2,1.

Steven Lord on 31 Aug 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.

Ethan Boyce on 31 Aug 2020
So then if say n=4, the first iteration will read
x(4)=(A(4,end)-A(4,3:n)*x(3:n))/A(4,4);
and sor forth?
Steven Lord on 31 Aug 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 on 1 Sep 2020
Got it, thank you!