MATLAB Answers

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

77 views (last 30 days)
Ethan Boyce
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
KSSV on 31 Aug 2020
i = n:-1:1
The above takes i values as n, n-1, n-2, .....3, 2,1.

Sign in to comment.

Accepted Answer

Steven Lord
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.

  3 Comments

Ethan Boyce
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
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.

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!