Help understanding matlab code ?

I am completely new to Matlab and I also don't have Matlab - but I have been asked to convert some Matlab code to another language, which is proving a little bit tricky for me. At the moment I am stuck with the following lines which are within a loop:
d=s2(1)*ones(dim(1),1);
for i=2:R,
d=[d;s2(i)*ones(dim(i),1)];
s2 is a 1x2 matrix [0.1 1], dim = [3], and R is equal to 1 (the first time this code is evaluated)
My understanding is that the first line results in the 3x1 matrix
0.1
0.1
0.1
But I am confused by what happens in the for loop a) since R is 1, is this a decrementing loop (evaluated with i=2 then i=1 ?) b) I really don't get the line d=[d;s2(i)*ones(dim(i),1)] at all
Could anyone help explain this to me ?

 采纳的回答

No. First of all dim(1) doesn't work - throws error. But I'll assume you copied it incorrectly and that it is a 3 by 1 column vector. What the code does is to tack on additional columns with different values that depend on s2's value. For example if s2(2) = 12.34 then the second column of d will be [12.34;12.34;12.34]. Then the third column of d will have elements with the value of s2(3), and so on. If R equals 1, then it doesn't even enter the loop at all so d stays the same as before the loop.
The loop does not decrement from 2 to R - it increments. To decrement, there would have to be a step of -1, like
for i = R : -1 : 2

3 个评论

Thank you. In the code I'm looking at, there is
dim=[3];
immediately before this code block. Doesn't dim(1) just result in 3 ? As for the loop, since R = 1, I don't get what this
for i=2:R,
does ?
If you defined dim that way, then yes, dim(1) will be 3. Also, since R=1 the loop never gets entered, as I said earlier, and so basically the loop does nothing and can be deleted, unless you might ever have situations where R does not equal anything less than 2.
Ahh - OK - that makes sense - thank you !

请先登录,再进行评论。

更多回答(2 个)

for i=2:R
for R=1 is an empty loop
Matlab for loop control is
for start:[increment:]end
with the default for increment when not given of +1. If initial end < start, the loop body is never entered. The code as written is the same as
for i=2:1:R
and a decrementing loop would require
for i=2:-1:R
the step variable cannot be skipped in that case. It's same as Fortran DO with the optional increment excepting Fortran writes the increment last instead of in the middle. The difference is that Matlab syntax follows that for vectors with the colon operator for consistency.
I really don't get the line d=[d;s2(i)*ones(dim(i),1)]
If R>=2, then it concatenates the results to the initial d to build a longer column vector of the elements of s repeated the number of times in the dim array.
Harmon Harmon
Harmon Harmon 2016-10-5

0 个投票

Hi, I'm trying my best to understand this code and how everything works together. I know that there are some comments, which are in green and I understand that.

1 个评论

How is this an answer of Modus's original question?
Do you have a question? Or is this just an announcement?

请先登录,再进行评论。

类别

帮助中心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!

Translated by