
Anomalous histogram for small argument
    4 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Gordon Edwards
 le 6 Sep 2019
  
    
    
    
    
    Commenté : Gordon Edwards
 le 7 Sep 2019
            Running the following code from the command line with c = 1e-15 or greater leads to a normal histogram
c = 1e-15; figure; histogram(c * rand(100,1))

Running the following code with c = 1e-16 or less leads to an incorrect histogram
c = 1e-16; figure; histogram(c * rand(100,1))

The problem appears also in apps when the histogram function is invoked.
Is this a bug? 
Gordon
0 commentaires
Réponse acceptée
  Bruno Luong
      
      
 le 7 Sep 2019
        
      Modifié(e) : Bruno Luong
      
      
 le 7 Sep 2019
  
      Yes it is a BUG. I chase back and in the file
C:\Program Files\MATLAB\R2019a\toolbox\matlab\datafun\+matlab\+internal\+math\binpicker.m
line #20 (R2019a)
there is a test
if xrange > max(sqrt(eps(xscale)), realmin(class(xscale)))
To me the correct test should be  (without sqrt)
    if xrange > max(eps(xscale), realmin(class(xscale)))
Now if I change this line and rerun the code
        c = 1e-16; figure; histogram(c * rand(100,1))
it produces correct plot

More seriously, the function binpicker is called by HISTCOUNT. So HISTCOUNT is also buggy. Not only plotting but calculation might be wrong.
Plus de réponses (1)
  Jackson Burns
      
 le 7 Sep 2019
        Here's a similar question asked a few years ago which was never really solved either. This comment may be your best approach, but I would reccomend just bringing the values to unity with something like this:
c = 1E-16;
figure
mydata = c * rand(100,1);
histogram(mydata./max(mydata))
You could then modify the xticklabels to match whatever the original values were.
0 commentaires
Voir également
Catégories
				En savoir plus sur Data Distribution Plots dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


