Ask Your Question

Revision history [back]

A few possible hints:

  • without Sage: g(x) vanishes if, and only if, x^2 or cos(2*x) vanish, if, and only if, x=0 or there exists k in ZZ such that x = pi/4 + k*pi/2.

  • now, plot the graph of g around zero:

    sage: g.plot()
    
  • the root at zero is "double" (aroind zero, g is very similar to x^2), so that a small perturbation (due to numerical noise) of g could either lead to two (roughly opposite) zeros, or no zero at all.

  • that said, 7.755077210568017e-09 is pretty huge for a numerical noise, how could that be ?

  • note that 0.1 is not an exact floating-point number, as it can not be written with a finite binary expansion exactly, hence the addition of the step 0.1 with itself could lead to some accumulated shift, see the middle of the output of:

    sage: for num in [-10..10,step=.1]: 
    ....:     print(num)
    [...]
    -0.200000000000019
    -0.100000000000019
    -1.87905246917808e-14
    0.0999999999999812
    0.199999999999981
    0.299999999999981
    [...]
    
  • compare

    sage: find_root(g,-0.100000000000019,-1.87905246917808e-14)                                                                                                                                                  
    -7.755114791616871e-09
    

    with

    sage: find_root(g,-0.1,0)                                                                                                                                                                                    
    0.0
    

A few possible hints:

  • without Sage: g(x) vanishes if, and only if, x^2 or cos(2*x) vanish, if, and only if, x=0 or there exists k in ZZ such that x = pi/4 + k*pi/2.

  • now, plot the graph of g around zero:

    sage: g.plot()
    
  • the root at zero is "double" (aroind (around zero, g is very similar to x^2), so that a small perturbation (due to numerical noise) of g could either lead to two (roughly opposite) zeros, or no zero at all.

  • that said, 7.755077210568017e-09 is pretty huge for a numerical noise, how could that be ?

  • note that 0.1 is not an exact floating-point number, as it can not be written with a finite binary expansion exactly, hence the addition of the step 0.1 with itself could lead to some accumulated shift, see the middle of the output of:

    sage: for num in [-10..10,step=.1]: 
    ....:     print(num)
    [...]
    -0.200000000000019
    -0.100000000000019
    -1.87905246917808e-14
    0.0999999999999812
    0.199999999999981
    0.299999999999981
    [...]
    
  • compare

    sage: find_root(g,-0.100000000000019,-1.87905246917808e-14)                                                                                                                                                  
    -7.755114791616871e-09
    

    with

    sage: find_root(g,-0.1,0)                                                                                                                                                                                    
    0.0