Filter löschen
Filter löschen

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

95 Ansichten (letzte 30 Tage)
Ethan Boyce
Ethan Boyce am 31 Aug. 2020
Kommentiert: Luong Ngo am 13 Okt. 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 Kommentare
KSSV
KSSV am 31 Aug. 2020
i = n:-1:1
The above takes i values as n, n-1, n-2, .....3, 2,1.
Luong Ngo
Luong Ngo am 13 Okt. 2021
@KSSV do you know loop 1:1:n mean?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Steven Lord
Steven Lord am 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 Kommentare
Steven Lord
Steven Lord am 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
Ethan Boyce am 1 Sep. 2020
Got it, thank you!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by