How to step-wise iterate for every element of a vector in a while-loop?

vec= [1 1 1 1 3 1 4 1 1 5 5]';
myOffset=0.05;
nonOnes=find(vec>1); % Find elements > 1
N=vec(nonOnes); % Create vector with elements > 1
i=1;
n=1;
counter=1;
while n<=N(i)
myOrder(counter)=(n/(N(i)+1))*(1 + myOffset*randn(1));
n=n+1;
counter=counter+1;
end
Here is my problem: In the code, I wrote i=1 to make it program function somehow. But in reality "i" should be in the range of i=1:length(N), and I do not know how to make the wile loop function for every N(i). The vector myOrder should store 17 elements if the while loop iterates for each element N(i), but I get only 3 with this code. "n" starts with the value of one until it reaches the value of N(i).

4 Commenti

Please use the "{} Code" button to format code properly: It is nicely indented, if the code lines start with two spaces.
I do not understand this:
The value of "i" should change with i=i+1 once the n reached the
value of % N(i) in the while-loop. In this case I'd like i to be
i=1:length(N)
If not, what is the problem with it? It probably only needs minor modifications to adapt to your new requirements (which don't seem to include your condition 1 anymore).
The new specification are still not very clear. Rather than giving us code that doesn't work give us an example of desired output, or explain step by step how that output is to be obtained.
And please, don't start another question for that. Edit one of these two.
Thank you for your feedback, Jan. I will use the "{} Code" in the future. What I mean is that i should be in the range of 1 to 4 {i=1:length(N)}.
I apologise for that, Guillaume. I wanted to be more specific on my question since as you said.. my question was not clear. I will be more careful in the future. Tanks!
Dear jan and Guillaume, I made some changes. I hope the question becomes a little bit clearer. Thank you so much. I learn from every mistake :)

Accedi per commentare.

 Risposta accettata

After some hours, I think I found the solution. I do not think it is a beautiful solution, but it makes the job :)
vec= [1 1 1 1 3 1 4 1 1 5 5];
myOffset=0.05;
nonOnes=find(vec>1);
N=vec(nonOnes);
i=1;
n=1;
counter=1;
while n/N(i)<=1
myOrder(counter)=( (n/N(i)) )*(1 + myOffset*randn(1) );
n=n+1;
counter=counter+1;
if n>N(i)
n=1;
i=i+1;
end
if i>length(N)
break
end
end

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by