# Attempted to access stepcount(0); index must be a positive integer or logical.

2 views (last 30 days)

Show older comments

I get the error message:"Attempted to access stepcount(0); index must be a positive integer or logical." But I've already set z11=floor(real(z1)) to make sure it's a positive integer, can someone help?

Here is my code:

a=input('range from = ');

b=input('range to = ');

N=input('pairs of complex number = ');

gcdcount=zeros(1,1);

stepcount=zeros(1,1);

for j=1:M

z1=a + (b-a).*rand(N,1)+ 1 + a + (b-a).*rand(N,1)*1i;

z2=a + (b-a).*rand(N,1)+ 1 + a + (b-a).*rand(N,1)*1i;

z11=floor(real(z1));

end

if(abs(z1)<abs(z2)) % switch z1 and z2, if necessary, so that b<a

c=z1; % hang onto the value of a

z1=z2; % even while replacing a with b

z2=c; % now replace b with a

end

count=0; % initialize counter

while(abs(z2)>0)

u=z1;

v=z2;

z1=z2;

q=(u/v);

q1=real(q);

q2=imag(q);

if (q1-floor(q1)<=0.5)

q1=floor(q1);

else

q1=1+floor(q1);

end

if (q2-floor(q2)<=0.5)

q2=floor(q2);

else

q2=1+floor(q2);

end

if(length(gcdcount) >=z11)

gcdcount(z11)=gcdcount(z11)+1; %increment appropriate counter

else

gcdcount(z11)=1;

end

if(length(stepcount) >=count)

stepcount(count)=stepcount(count)+1; %increment appropriate counter

else

stepcount(count)=1;

end

if(length(gcdcount) >=z11)

gcdcount(z11)=gcdcount(z11)+1; %increment appropriate counter

else

gcdcount(z11)=1;

end

if(length(stepcount) >=count)

stepcount(count)=stepcount(count)+1; %increment appropriate counter

else

stepcount(count)=1;

end

end

subplot(2,1,1)

plot(gcdcount/M)

title('Distribution of gcds')

subplot(2,1,2)

plot(stepcount/M)

title('Distribution of algorithm steps')

subplot(111) % means the figure window returns to normal single-graph behavior

##### 2 Comments

### Answers (4)

Azzi Abdelmalek
on 4 May 2016

stepcount(count) gives an error because count is initialized to 0

##### 4 Comments

Azzi Abdelmalek
on 4 May 2016

Edited: Azzi Abdelmalek
on 4 May 2016

I can't tell you what to do, because I don't know the aim of your code. Also your counter count is not incremented in your code. What the following loop is doing?

for j=1:M

z1=a + (b-a).*rand(N,1)+ 1 + a + (b-a).*rand(N,1)*1i;

z2=a + (b-a).*rand(N,1)+ 1 + a + (b-a).*rand(N,1)*1i;

z11=floor(real(z1));

end

each loop, your variables are erased!

I think, you need to revise all your code.

Steven Lord
on 4 May 2016

##### 0 Comments

Image Analyst
on 5 May 2016

Try replacing this

count=0; % initialize counter

with this

count = 1; % Initialize loop iteration counter

and see if the rest of the code works after that.

##### 0 Comments

Weird Rando
on 5 May 2016

Edited: Weird Rando
on 5 May 2016

for j=1:M

exactly what is M? Cause it was not previously defined in your code

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!