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

  • Thread starter Thread starter elecz
  • Start date Start date
  • Tags Tags
    Loop Matlab
AI Thread Summary
The discussion revolves around a MATLAB code issue where a for loop's if condition fails to yield the expected count of zeros from the sine function. The code initializes parameters and attempts to count instances where the sine of a product involving a frequency and time results in zero. However, the counter 'c' only increments once instead of the expected eleven times. The primary concern highlighted is the comparison of floating-point numbers, which can lead to inaccuracies due to rounding errors. It is suggested to use a tolerance value or epsilon for comparisons instead of checking for exact equality to zero. Additionally, recommendations include modifying the loop to evaluate sine values at specific intervals to ensure all relevant points are checked. The importance of formatting code properly in forum posts is also mentioned for clarity.
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..
 
Physics news 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!
 


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

View attachment NNFL_HW2.m
 
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.
 
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 .
 
Yeah, it's not coming up with 0 for sin(n*pi) even when I just do the calculation separately in MATLAB.
 

Similar threads

Replies
8
Views
2K
Replies
4
Views
3K
Replies
4
Views
2K
Replies
2
Views
4K
Replies
8
Views
3K
Replies
1
Views
3K
Replies
6
Views
4K
Back
Top