am1x icon

zetam001.py

am1x | PRO | 08/14/22 03:13:29 PM UTC | 0 ⭐ | 1446 👁️ | Never ⏰ | []
Python |

850 B

|

Source Code

|

0 👍

/

0 👎

import math
 
 
#calculates (x+1)^a - x^a
def df(x, a):
    lm = 0.5 * a * math.log(x * (x + 1.0))
    ld = 0.5 * a * math.log1p(1.0 / x)
    return 2 * math.exp(lm) * math.sinh(ld)
 
 
def zetam(a, n):
    a += 0.0
    assert a + 1 > 0
    l = [0.5, -1.0 / (a + 1.0)]
    for i in range(1, n):
        l.append(0.5 * ((i + 0.0) ** a + (i + 1.0) ** a))
        l.append(-df(i, a + 1.0) / (a + 1.0))
    bs = [1.0 / 6, -1.0 / 30, 1.0 / 42, -1.0 / 30, 5.0 / 66, -691.0 / 2730, 7.0 / 6]
    t0 = 0.5 * a
    for i in range(len(bs)):
        a0 = a - 1 - 2 * i
        l.append(-bs[i] * t0 * (n ** a0))
        t0 *= a0 * (a0 - 1.0) / ((i * 2 + 3) * (i * 2 + 4))
 
    return math.fsum(l)
 
zetam_vs = {
    2.5 : 0.00851692877785033054,
    2.0 : 0,
    0.5 : -0.207886224977354566,
    0.0 : -0.5,
    -0.5 : -1.4603545088095868,
}
 
 
 
a = 0.5
n = 9
 
print("a = ", a, ", n = ", n)
r0 = zetam(a, n)
rd = zetam_vs.get(a)
 
print("{:.30f}".format(r0), r0 - rd)
 
 

Comments