Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Matlab question_for loop

  1. Oct 9, 2011 #1
    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. jcsd
  3. Oct 9, 2011 #2

    MATLABdude

    User Avatar
    Science Advisor

    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

    For future reference, please put your code inside of
    Code (Text):
    [ /code] tags (obviously, with the space removed from the second tag).  This even allows you to preserve white space!
     
  4. Oct 9, 2011 #3
    Re: For loop in Matlab

    I wish my attached file may help you to compare with your m file...:D

    View attachment NNFL_HW2.m
     
  5. Oct 9, 2011 #4

    S_Happens

    User Avatar
    Gold Member

    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.
     
  6. Oct 9, 2011 #5

    Integral

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    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 .
     
  7. Oct 9, 2011 #6

    S_Happens

    User Avatar
    Gold Member

    Yeah, it's not coming up with 0 for sin(n*pi) even when I just do the calculation separately in MATLAB.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Matlab question_for loop
  1. For loop in matlab (Replies: 3)

Loading...