How does Matlab interpret for loops when say I=n:-1:1
조회 수: 122 (최근 30일)
이전 댓글 표시
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
채택된 답변
Steven Lord
2020년 8월 31일
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
Steven Lord
2020년 8월 31일
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.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!