# Matlab question_for loop

1. Oct 9, 2011

### elecz

For loop in Matlab

I have written following code in matlab but the if condition inside the for loop isn't working properly. Can anyone tell whats the possible bug??

f=1000;
T=0.001;
g=0:0.00005:5;
w=2*f*T*pi;
s=sin(g*w);
plot(g,s);
grid on;
title('SINE FN');
xlabel(' x10^-3 TIME axis(ms)');
ylabel('sin(x)');
diary off
c=0;
for i=0:0.25:5
if(sin(w.*i)==0)
c=c+1;
end
end
display(c);

counter 'c' shows the value one instead of 11..

2. Oct 9, 2011

### MATLABdude

Re: For loop in Matlab

I don't have my copy of MATLAB in front of me, but my first thought is that you may be breaking a cardinal rule of programming when you're trying to compare a FLOATING number (for instance, the sin of 1.999999999999*pi) to the exact value of 0. You may have better results by using a comparison with epsilon, or, better yet, an arbitrarily-defined tolerance value.
http://www.mathworks.com/help/techdoc/ref/eps.html
http://www.mathworks.com/support/tech-notes/1100/1108.html
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

Code (Text):
[ /code] tags (obviously, with the space removed from the second tag).  This even allows you to preserve white space!

3. Oct 9, 2011

### xugi

Re: For loop in Matlab

View attachment NNFL_HW2.m

4. Oct 9, 2011

### S_Happens

There is a forum for this question under Computing & Technology > Math & Science Software.

I'm still working on this part of MATLAB programming myself, but I think the problem is your if statement. It runs once at i = 0 and your logical statment is true, therefore c = 0+1.

The second time it runs, it evaluates to false and that is the end.

I think the problem is that what you want it to do is continuously evaluate every point even though it's swapping between true and false through the entire range.

My suggestion is to write it so that you're only evaluating points where sin(bleh)==0 up through 10*pi, which should be a pretty simple modification. I don't have MATLAB on this comp so i'm not going to check it, but I would imagine that should work.

5. Oct 9, 2011

### Integral

Staff Emeritus
First off I know nothing of matlab, but... Due to round off errors your contition of sin(..) = 0 maybe impossible. You might want to try sin(,,)< e where e is some small number say .00001 .

6. Oct 9, 2011

### S_Happens

Yeah, it's not coming up with 0 for sin(n*pi) even when I just do the calculation separately in MATLAB.