pub(crate) static J0_ZEROS: [(u64, u64); 48]Expand description
J0 zeros and extremums.
Generated by SageMath:
# searching for zeros and extremums
R120 = RealField(120)
zeros = []
mp.prec = 150
step = mpf("0.001")
epsilon = mpf("1e-35")
x = mpf("0.0")
def j0_prime(x):
return diff(lambda t: besselj(0, t), x)
previous_zero = R120(0)
j0_zeros = []
while x < mpf("76.0"):
f1 = besselj(0, x)
f2 = besselj(0, x + step)
if f1 * f2 < 0:
zero = findroot(lambda t: j0(t), (x, x + step), solver='bisect', tol=mp.mpf("1e-41"))
previous_zero = zero
j0_zeros.append(zero)
if previous_zero is not None and abs(x - mpf(f'{round(x)}')) < epsilon:
zeros.append(previous_zero)
x += step
j0_extrema = []
x = mpf("0.0")
while x < mpf("76.0"):
d1 = mp.diff(lambda t: j0(t), x)
d2 = mp.diff(lambda t: j0(t), x + step)
if d1 * d2 < 0:
extremum = findroot(lambda t: mp.diff(lambda u: j0(u), t), (x, x + step), solver='bisect', tol=mp.mpf("1e-41"))
j0_extrema.append(extremum)
x += step
# Print results
for i, z in enumerate(j0_zeros):
print(f"Zero {i+1}: x ≈ {z}")
print("Extrema (peaks/valleys) of J0(x):")
for e in j0_extrema:
print(f"nExtrema: {e}")
j0_zeros.extend(j0_extrema)
j0_zeros = sorted(j0_zeros)
# Print results
for i, z in enumerate(j0_zeros):
print(f"Peak or zero {i+1}: x ≈ {z}")
print("")
print("pub(crate) static J0_ZEROS: [(u64, u64); 48] = [")
print(f"(0x0, 0x0),")
for z in j0_zeros:
k = split_double_double(z)
hi = double_to_hex(k[1])
lo = double_to_hex(k[0])
print(f"({lo}, {hi}),")
print("];")