Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

A DiLog output in mathematica

  1. Oct 25, 2017 #1


    User Avatar
    Gold Member

    I have obtained the Dilog function in some output and was just wondering if anyone knew how to interpret its meaning. The mathematica notes tell me that

    ##\text{DiLog}(x,\alpha)## gives the dilogarithm function, which for real ##x>1## evaluates on the side of the branch prescribed by $$\text{lim}_{\epsilon \rightarrow 0^+} \text{Li}_2(x+i\alpha\epsilon)$$

    I'm just wondering how to proceed with this prescription - should I first check whether my ##\alpha## is positive or negative in which case the expression becomes $$\text{lim}_{\epsilon \rightarrow 0^+} \text{Li}_2(x\pm i\epsilon),$$ with ##\pm## for positive/negative ##\alpha## respectively. I believe it's ok to absorb ##\alpha## into ##\epsilon## here as the latter is infinitesimal, but please correct if I'm mistaken in any of my thoughts, I don't have much familiarity with polylogs. I believe I can then write
    $$\text{lim}_{\epsilon \rightarrow 0^+} \text{Li}_2(x \pm i\epsilon) = -\left(\text{Li}_2(x) \mp i\pi \ln x \right)$$
    I've seen this last display in some literature but I have not yet understood it's derivation. Mathematica tells me (from the above) that it holds only for ##x>1## which might not be the case for me, so I'm not sure either how to deal with the case ##x>0,x<1##.

    Thanks for any comments!
  2. jcsd
  3. Oct 25, 2017 #2
    You can approach this from complex analysis and contour integration over multi-valued functions. That gives you precise control over this function. Consider the analytic continuation of the function defined as:

    ##\displaystyle \text{Li}_2(z)=-\int _0^z \frac{\log(1-z)}{z}dz##

    That is not a difficult integral to numerically solve in Mathematica and once you understanding how to do it, you have precise (numerical) control over the value of the function and no ambiguity about branch cuts or alpha or anything else. If you're interested, the following Mathematica code implements the process for z=2+2i and then compares the result to the built-in PolyLog function:
    Code (Text):
    thez[t] = t + I t;
    tstart = 0.00001;
    tend = 2;
    wDeriv = w'[t] == (-1/(1 - z) D[thez[t], t]) /. {z -> thez[t]}
    mySol = First[NDSolve[{wDeriv, w[0] == 0}, w, {t, tstart, tend}]]
    myTrace[t_] := Evaluate[Flatten[w[t] /. mySol]];
    NIntegrate[-myTrace[t]/thez[t] (1 + I), {t, tstart, tend}]
    N[PolyLog[2, 2 + 2 I]]
    Last edited: Oct 25, 2017
  4. Oct 25, 2017 #3


    User Avatar
    Gold Member

    Hi @aheight thanks for reply,
    My mathematica output was originally a DiLog which I've interpreted in terms of the usual mathematica function PolyLog using the mathematica help notes online. Since the branch cut of the dilog, as can be seen through your given integral representation, is from (1,infty) , I believe for x<1, the mathematica functions DiLog[x,alpha] and PolyLog[2,x] coincide. For x>1, I think the correct evaluation is the last display in my post, if you agree that what I did with the alpha is correct. Once these basic things are understood, I will look at what you did in your code. Thanks!
  5. Oct 26, 2017 #4
    Hi caf,

    I don't have a DiLog function in my version of Mathematica 11.2. In my opinion, the best way to handle multi-valued functions is through analytic continuation. This eliminates completely the frequent problems one encounters dealing with branch cuts: To evaluate ##\text{Li}_2(z)## for z>1, we integrate over an analytically continuous path from ##0+\epsilon## , preferably around the singular point at z=1, and end at z. And since we do so over a domain in which the function is analytic, we have independence of path: For ##\text{Li}_2(2)##, we can go over the contour z=1+e^{it} to z=2 or first go to z=2i then straigh-line down to z=2 and get the same answer. However, Mathematica may use a different implied branch over which to evaluate PolyLog. Consider ##\text{Li}_2(2)## over the contour z(t)=1+e^{it} for t ranging from ##\pi## to zero:
    Code (Text):
    In[109]:= thez[t_] = 1 + Exp[I t];
    tstart = \[Pi];
    wDeriv = w'[t] == (-1/(1 - z) D[thez[t], t]) /. {z -> thez[t]};
    mySol = First[
       NDSolve[{wDeriv, w[tstart] == N[Log[1 - thez[tstart]]]},
        w, {t, tstart, tend}]];
    myTrace[t_] := Evaluate[Flatten[w[t] /. mySol]];
    NIntegrate[-myTrace[t]/thez[t] D[thez[t], t], {t, tstart, tend}]
    N[PolyLog[2, 2]]
    Out[114]= 2.4674 + 2.17759 I
    Out[115]= 2.4674 - 2.17759 I
    Note the different imaginary component between the built-in PolyLog and numerical integration: Mathematica is using a different branch surface to determine PolyLog: Had I integrated from pi to 2pi, I would get the same answer as Mathematica. And it is precisely these types of ambiguities, and our analysis and resolution of them, that cultivates a better understanding of dealing with these types of problems. Try plotting the function and analyzing exactly what is going on with these results.

    In order to be successful at working with contour integration over multi-valued functions, I have found approaching them from this perspective of analytic-continuation is the best way.
    Last edited: Oct 26, 2017
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted