(01-12-2021 11:24 PM)Albert Chan Wrote: [ -> ]I was playing around, and tried integrating using Li2(2) as base.
0 to 2+3i → 0 to 2, then 2 to 2+3i
Turns out, we have to use the conjugate of the base.
Anyone knows how and when we apply the conjugate ?
By experiments, I figured out how and when to apply conjugate, but don't know why ...
Consider only
imaginery part. If Spence integral limits has 1 positive, but the other not, apply conjugate.
>>> from mpmath import *
>>> mp.pretty = True
>>> Li2 = lambda x: polylog(2, x)
>>> F = lambda a, b: quad(lambda x: -ln(1-x)/x, [a, b])
>>> Li2(2+3j)
(-0.28098805537806 + 3.01725120636941j)
>>> F(0, 2+3j)
(-0.28098805537806 + 3.01725120636941j)
>>>
conj(Li2(2)) + F(2, 2+3j) # 2 is real, no positive imaginery part
(-0.280988055378061 + 3.01725120636941j)
Say, we have Li2(1-1j), how to correct it to Li2(2+3j) ?
We interpolate (1-1j), (2+3j) at the real axis.
x = x1 - y1*(x1-x2)/(y1-y2) = 1 - (-1)*(1-2)/(-1-3) = 1.25
>>> a, b, x = 1-j, 2+3j, 1.25
>>>
conj(Li2(a) + F(a,x)) + F(x,b) # == conj(Li2(x)) + F(x,b)
(-0.28098805537806 + 3.01725120636941j)
---
Without a close reference, we could use these identities to convert argument.
#1: Li2(z) + Li2(z/(z-1)) = -ln(1-z)^2/2
#2: Li2(z) + Li2(1-z) = pi^2/6 - ln(z) * ln(1-z)
#3: Li2(z) + Li2(1/z) = -pi^2/6 - ln(-z)^2/2
We have to be careful with #3 to get Li2(z), if Li2(z) is real, but Li2(1/z) is complex.
This may be why
https://mathworld.wolfram.com/Dilogarithm.html excluded it.
>>> z = 0.95
>>> Li2(z) , -pi**2/6 - ln(-z)**2/2 - Li2(1/z) # bad
(1.44063379697004, (1.44063379697004 + 0.322285273652695j))
>>> z = 1/0.95
>>> Li2(z) , -pi**2/6 - ln(-z)**2/2 - Li2(1/z) # ok
((1.84791883570185 - 0.161142636826347j), (1.84791883570185 - 0.161142636826347j))
For b = 2+3j, it is ok to apply. 1/b is tiny enough we can sum, instead of integrate.
>>> x = 1/b
>>> s = sum(x**k/(k*k) for k in range(24,0,-1)) # Li2(x)
>>> -pi**2/6 - ln(-b)**2/2 - s
(-0.280988055378061 + 3.01725120636941j) # Li2(b)
The other 2 identities seems safe ...
#1: Li2(2+3j) = -ln(-1-3j)^2/2 - Li2(1.1-.3j)
#2: Li2(1.1-.3j) = pi^2/6 - ln(1.1-.3j)*ln(-.1+.3j) - Li2(-.1+.3j)
>>> x = -.1 + .3j
>>> s = sum(x**k/(k*k) for k in range(24,0,-1)) # Li2(x)
>>> s = pi**2/6 - ln(1.1-.3j)*ln(-.1+.3j) - s # Li2(1-x)
>>> -ln(-1-3j)**2/2 - s # Li2(b)
(-0.28098805537806 + 3.01725120636941j)