km-git-acc / dbn_upper_bound

Computational effort to upper bound the de Bruijn-Newman constant as part of a Polymath project
Other
13 stars 12 forks source link

Use data to look at $z_{j+1}(t)-z_{j}(t)$ behavior for large $j$ #16

Closed dhjpolymath closed 6 years ago

dhjpolymath commented 6 years ago

Summary of current data:

For t between .05 and .08 the data files in he pull request allow for considering the behavior for $z{j+1}(t)-z{j}(t)$ for t in .05 to .08 (step size .01) (as in below (4) in https://terrytao.wordpress.com/2018/01/27/polymath15-first-thread-computing-h_t-asymptotics-and-dynamics-of-zeroes/#comment-491874) by piecing together files. As more data is processed it will not be necessary to piece files together.

The current data has taken about 12 hours on average of four continuously running 2.5 Ghz processors. There are no estimates on how accurate the current python code is at calculating real zeros of H_t.

km-git-acc commented 6 years ago

Well I have noticed (through behavior of H0 by putting t=0) the first few hundred zeroes are accurate to few decimal places, but once we start reaching the 1000th zero, both the time required for computation, and the error in the estimate increases.

You will notice the cos(z*u) factor used in the phi_decay function. This is a oscillatory factor and you can imagine as we increase z (which is acting as a frequency term), the behavior of the integrand becomes quite 'chaotic' as u is varied within the integral.

As Terry mentioned in the latest blogpost, we need to use a different way to compute Ht for larger values of z. Firstly we have to check whether the Ht_complex_largez functions well enough for this purpose. And if not that, then we require to compute the integrals in eq (3).

Also, a temporary solution is to increase the number of 'subintervals' allowed in the quad function of scipy. The default is 50. Increasing this number will increase the computation time, but will extend the T range where accurate zeroes can be computed.

km-git-acc commented 6 years ago

Oh I forgot another thing. fsolve in scipy is currently using the secant method to locate roots using nearby guesses. This is because we are not providing the fprime parameter (df/dx), which would allow usage of the Newton-Raphson method, and would dramatically speed things up. I am currently wondering how to compute the derivative of Ht_real since its a definite integral.

dhjpolymath commented 6 years ago

@km-git-acc the new pull request has a file with 1000 estimated zeros for t=.20,.21, and .22

dhjpolymath commented 6 years ago

@km-git-acc H_t(z) can be differentiated under the integral sign. The real part of this is the derivative of the real part of H_t(z).

km-git-acc commented 6 years ago

Trying the Leibniz rule by partial diff wrt z. Lets see how that goes.

km-git-acc commented 6 years ago

So I tried it out.

first how to calculate d/dz(Ht_real)

def Ht_prime_real_integrand(u, z, t): if(abs(scipy.imag(z))>0 or abs(scipy.imag(t))>0 or abs(scipy.imag(u))>0): print ("complex values not allowed for this function") return "error" u,z,t = scipy.real(u),scipy.real(z),scipy.real(t) return scipy.real(-1uexp(tuu)phi_decay(u)sin(z*u))

def Ht_prime_real(z,t): if(abs(scipy.imag(z))>0 or abs(scipy.imag(t))>0): print ("complex values not allowed for this function") return "error" z,t = scipy.real(z),scipy.real(t) return quad(Ht_prime_real_integrand, 0, 10, args=(z,t))

Then how to find roots with using the fprime parameter Ht_root = fsolve(Ht_real,nearby_root,fprime=Ht_prime_real,args=(t,))[0]

instead of the earlier Ht_root = fsolve(Ht_real,nearby_root,args=(t,))[0]

But the results for me are coming to be less accurate with Newton Raphson. To check the accuracy I took some zeroes of t=0.1 (to serve as the nearby guesses), calculated roots of Ht_real for t=0, and compared the roots to 2*zeta zero

Without using the fprime parameter: t, 2*zeta zero, H0_real root estimate, error 0.0 28.269450284 28.2694502835 -5.30622656925e-10 0.0 42.044079278 42.0440792775 -4.67736072096e-10 0.0 50.02171516 50.0217151604 4.17990975166e-10 0.0 60.849752252 60.8497522521 8.11581912785e-11 0.0 65.870123176 65.8701231542 -2.18091145143e-08 0.0 75.172356318 75.1723570264 7.08413196548e-07 0.0 81.837438024 81.8374407594 2.73535219719e-06 0.0 86.654146562 86.6541080408 -3.85211963589e-05 0.0 96.010301762 96.0103491423 4.73803000034e-05 0.0 99.547664956 99.5476675519 2.59590760265e-06

Using the fprime parameter: t, 2*zeta zero, H0_real root estimate, error 0.0 28.269450284 28.2694502835 -5.30619104211e-10 0.0 42.044079278 42.0440792775 -4.65803395855e-10 0.0 50.02171516 50.0217151604 3.83323595088e-10 0.0 60.849752252 60.8497522542 2.21777440856e-09 0.0 65.870123176 65.8701231604 -1.56058490575e-08 0.0 75.172356318 75.1723561698 -1.48181129589e-07 0.0 81.837438024 81.83744266 4.63600486e-06 0.0 86.654146562 86.6540864419 -6.01200567871e-05 0.0 96.010301762 96.0104231454 0.000121383444196 0.0 99.547664956 99.548713768 0.00104881204138

Notice whats happening with the 3rd and 4the decimals in the last few zeroes in both tables.

But maybe the Ht_prime_real and Ht_prime_real_integrand functions need to be computed better. I haven't also noticed a speed bump, but that could happen when larger zeroes are calculated through this method. Better to park this for the future.

dhjpolymath commented 6 years ago

One might try changing the upper integration limit in Ht_prime_real from '10' to a larger number and see how that affects error.

km-git-acc commented 6 years ago

The phi_decay function decays quite rapidly. Even the upper limit of 10 is overkill in most cases. Also, I doubled it to 20 but didnt see any change in the output. Newton Raphson is still coming out to be less accurate than the secant method with the current implementations.

with integral upper limit 10 2*zeta zero with secant method with Newton Raphson method 28.269450284 28.2694502835 28.2694502835 42.044079278 42.0440792775 42.0440792775 50.02171516 50.0217151604 50.0217151604 60.849752252 60.8497522487 60.8497522487 65.870123176 65.870123176 65.870123176 75.172356318 75.172356318 75.172356318 81.837438024 81.837438024 81.837438024 86.654146562 86.654146562 86.6541325898 96.010301762 96.0103024462 96.0096323281 99.547664956 99.5476675519 99.548713768

with integral upper limit 20 2*zeta zero with secant method with Newton Raphson method 28.269450284 28.2694502835 28.2694502835 42.044079278 42.0440792775 42.0440792775 50.02171516 50.0217151604 50.0217151604 60.849752252 60.8497522487 60.8497522487 65.870123176 65.870123176 65.870123176 75.172356318 75.172356318 75.172356318 81.837438024 81.837438024 81.837438024 86.654146562 86.654146562 86.6541325898 96.010301762 96.0103024462 96.0096323281 99.547664956 99.5476675519 99.548713768