Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

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.

Muruganandham Subramanian

Products

No products are associated with this question.

1 Answer

Answer by Image Analyst on 4 May 2012

Try adding a break statement:

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.

2 Comments

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.

Image Analyst

Contact us