MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

# Regarding Iteration

Asked by Muruganandham Subramanian on 4 May 2012

Hi all,

```for j=1:30
x(:,j) = unifrnd(minsvc(j), maxsvc(j), no_pop,1);
if busdata(j,2)==0
rchoices = size(x(:,j));
randchoice = x(rchoices(1),j);
Qg(j,17)=randchoice;
else
Qg(j,17)=busdata(j,17);
end
v(:,j)=unifrnd(minv(j), maxv(j),no_pop,1);
end
```

Here, in this if the busdata(j,2)==0 condition is satisfied, i need to execute that if for only once that too for random 'j' values. Is there any solution for this?

## 1 Comment

Jan Simon on 4 May 2012

I do not understand the question.

## Products

No products are associated with this question.

Answer by Image Analyst on 4 May 2012

```for j=1:30
x(:,j) = unifrnd(minsvc(j), maxsvc(j), no_pop,1);
if busdata(j,2)==0
rchoices = size(x(:,j));
randchoice = x(rchoices(1),j);
Qg(j,17)=randchoice;
break; % Exit the for loop.
else
Qg(j,17)=busdata(j,17);
end
v(:,j)=unifrnd(minv(j), maxv(j),no_pop,1);
end
```

However, if j = 42 when the condition becomes true and it breaks, then the for loop has already executed 42 times before it exits, so in that regard, like Jan, I'm a bit confused.

If, we give break statement, it will totally come out from the for loop,but i have changed into like this.

for j=1:no_dim
x(:,j)=unifrnd(minsvc(j), maxsvc(j),no_pop,1);
ii=1;
while ii<=no_dim && ii==1
a=1;
b=no_dim;
ij= a + (b-a).*rand(1);
ii=round(ij);
if busdata(j,1)==ii && busdata(ii,2)==0
fprintf('The SVC device is added in: %gth bus\n\n',ii);
rchoices = size(x(:,ii));
randchoice = x(rchoices(1),ii);
fprintf('The optimized SVC rating is: %g Mvar\n\n',randchoice);
Qg(ii,17)=randchoice;

else
Qg(j,17)=busdata(j,17);
end

end

v(:,j)=unifrnd(minv(j), maxv(j),no_pop,1);
% ii=ii+1;
end;
but it still have a problem. for 'ii' it should execute only once. did you understand what exactly my problem is?

Jan Simon on 4 May 2012

I still do not understand the problem.