Solving MATLAB For Loop Error: Counting 'c' to 11

  • Context: MATLAB 
  • Thread starter Thread starter elecz
  • Start date Start date
  • Tags Tags
    Loop Matlab
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
5 replies · 3K views
elecz
Messages
17
Reaction score
0
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 what's 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..
 
on Phys.org


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

For future reference, please put your code inside of
Code:
[ /code] tags (obviously, with the space removed from the second tag).  This even allows you to preserve white space!
 
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 statement 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.
 
Yeah, it's not coming up with 0 for sin(n*pi) even when I just do the calculation separately in MATLAB.