<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Elliptic functions — mpmath v0.17 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', VERSION: '0.17', COLLAPSE_MODINDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="top" title="mpmath v0.17 documentation" href="../index.html" /> <link rel="up" title="Mathematical functions" href="index.html" /> <link rel="next" title="Zeta functions, L-series and polylogarithms" href="zeta.html" /> <link rel="prev" title="Hypergeometric functions" href="hypergeometric.html" /> </head> <body> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="../modindex.html" title="Global Module Index" accesskey="M">modules</a> |</li> <li class="right" > <a href="zeta.html" title="Zeta functions, L-series and polylogarithms" accesskey="N">next</a> |</li> <li class="right" > <a href="hypergeometric.html" title="Hypergeometric functions" accesskey="P">previous</a> |</li> <li><a href="../index.html">mpmath v0.17 documentation</a> »</li> <li><a href="index.html" accesskey="U">Mathematical functions</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="module-mpmath.functions.elliptic"> <h1>Elliptic functions<a class="headerlink" href="#module-mpmath.functions.elliptic" title="Permalink to this headline">¶</a></h1> <p>Elliptic functions historically comprise the elliptic integrals and their inverses, and originate from the problem of computing the arc length of an ellipse. From a more modern point of view, an elliptic function is defined as a doubly periodic function, i.e. a function which satisfies</p> <div class="math"> <p><img src="../_images/math/533f8172f1693cd09ab3475f09392497da271a9a.png" alt="f(z + 2 \omega_1) = f(z + 2 \omega_2) = f(z)" /></p> </div><p>for some half-periods <img class="math" src="../_images/math/178ef0c25cb393195368ae91e70341404562e677.png" alt="\omega_1, \omega_2"/> with <img class="math" src="../_images/math/a84d1ba8341d6e90f45b25504738e0578a4990e6.png" alt="\mathrm{Im}[\omega_1 / \omega_2] > 0"/>. The canonical elliptic functions are the Jacobi elliptic functions. More broadly, this section includes quasi-doubly periodic functions (such as the Jacobi theta functions) and other functions useful in the study of elliptic functions.</p> <p>Many different conventions for the arguments of elliptic functions are in use. It is even standard to use different parameterizations for different functions in the same text or software (and mpmath is no exception). The usual parameters are the elliptic nome <img class="math" src="../_images/math/0615acc3725de21025457e7d6f7694dab8e2f758.png" alt="q"/>, which usually must satisfy <img class="math" src="../_images/math/1ac3bec0deb1b3d8164b2938edd7bb85d132b005.png" alt="|q| < 1"/>; the elliptic parameter <img class="math" src="../_images/math/f5047d1e0cbb50ec208923a22cd517c55100fa7b.png" alt="m"/> (an arbitrary complex number); the elliptic modulus <img class="math" src="../_images/math/8c325612684d41304b9751c175df7bcc0f61f64f.png" alt="k"/> (an arbitrary complex number); and the half-period ratio <img class="math" src="../_images/math/1dc1c0119a604b91be9142370dc3159b6a9bbcb9.png" alt="\tau"/>, which usually must satisfy <img class="math" src="../_images/math/a7ef44075cbdf48282414af0ac84fababad983c7.png" alt="\mathrm{Im}[\tau] > 0"/>. These quantities can be expressed in terms of each other using the following relations:</p> <div class="math"> <p><img src="../_images/math/96994da31f5c27b534e8ef8ace6e04575cc929b6.png" alt="m = k^2" /></p> </div><div class="math"> <p><img src="../_images/math/e528643f8b8c0916afe47632f7d93db8c3bdcbd4.png" alt="\tau = -i \frac{K(1-m)}{K(m)}" /></p> </div><div class="math"> <p><img src="../_images/math/c2ab4584cc120f5e9e012b0390f291f7513bebc7.png" alt="q = e^{i \pi \tau}" /></p> </div><div class="math"> <p><img src="../_images/math/96d65506a243f533894b3f53e6f1022dccb1d278.png" alt="k = \frac{\vartheta_2^4(q)}{\vartheta_3^4(q)}" /></p> </div><p>In addition, an alternative definition is used for the nome in number theory, which we here denote by q-bar:</p> <div class="math"> <p><img src="../_images/math/f3353b80b5e43440a63a9ad9dd0bdc470851e693.png" alt="\bar{q} = q^2 = e^{2 i \pi \tau}" /></p> </div><p>For convenience, mpmath provides functions to convert between the various parameters (<a title="mpmath.qfrom" class="reference internal" href="#mpmath.qfrom"><tt class="xref docutils literal"><span class="pre">qfrom()</span></tt></a>, <a title="mpmath.mfrom" class="reference internal" href="#mpmath.mfrom"><tt class="xref docutils literal"><span class="pre">mfrom()</span></tt></a>, <a title="mpmath.kfrom" class="reference internal" href="#mpmath.kfrom"><tt class="xref docutils literal"><span class="pre">kfrom()</span></tt></a>, <a title="mpmath.taufrom" class="reference internal" href="#mpmath.taufrom"><tt class="xref docutils literal"><span class="pre">taufrom()</span></tt></a>, <a title="mpmath.qbarfrom" class="reference internal" href="#mpmath.qbarfrom"><tt class="xref docutils literal"><span class="pre">qbarfrom()</span></tt></a>).</p> <p><strong>References</strong></p> <ol class="arabic simple"> <li><a class="reference external" href="../references.html#abramowitzstegun">[AbramowitzStegun]</a></li> <li><a class="reference external" href="../references.html#whittakerwatson">[WhittakerWatson]</a></li> </ol> <div class="section" id="elliptic-arguments"> <h2>Elliptic arguments<a class="headerlink" href="#elliptic-arguments" title="Permalink to this headline">¶</a></h2> <div class="section" id="qfrom"> <h3><tt class="xref docutils literal"><span class="pre">qfrom()</span></tt><a class="headerlink" href="#qfrom" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.qfrom"> <tt class="descclassname">mpmath.</tt><tt class="descname">qfrom</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#mpmath.qfrom" title="Permalink to this definition">¶</a></dt> <dd><p>Returns the elliptic nome <img class="math" src="../_images/math/0615acc3725de21025457e7d6f7694dab8e2f758.png" alt="q"/>, given any of <img class="math" src="../_images/math/a91b73688d1dfb846a77bd40b5563b4eb22f8947.png" alt="q, m, k, \tau, \bar{q}"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">qfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="mf">0.25</span><span class="p">)</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">qfrom</span><span class="p">(</span><span class="n">m</span><span class="o">=</span><span class="n">mfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">qfrom</span><span class="p">(</span><span class="n">k</span><span class="o">=</span><span class="n">kfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">qfrom</span><span class="p">(</span><span class="n">tau</span><span class="o">=</span><span class="n">taufrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">(0.25 + 0.0j)</span> <span class="gp">>>> </span><span class="n">qfrom</span><span class="p">(</span><span class="n">qbar</span><span class="o">=</span><span class="n">qbarfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">0.25</span> </pre></div> </div> </dd></dl> </div> <div class="section" id="qbarfrom"> <h3><tt class="xref docutils literal"><span class="pre">qbarfrom()</span></tt><a class="headerlink" href="#qbarfrom" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.qbarfrom"> <tt class="descclassname">mpmath.</tt><tt class="descname">qbarfrom</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#mpmath.qbarfrom" title="Permalink to this definition">¶</a></dt> <dd><p>Returns the number-theoretic nome <img class="math" src="../_images/math/3a42c26147ee1dc5cfa07f69a86e903ea55cb1c6.png" alt="\bar q"/>, given any of <img class="math" src="../_images/math/a91b73688d1dfb846a77bd40b5563b4eb22f8947.png" alt="q, m, k, \tau, \bar{q}"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">qbarfrom</span><span class="p">(</span><span class="n">qbar</span><span class="o">=</span><span class="mf">0.25</span><span class="p">)</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">qbarfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="n">qfrom</span><span class="p">(</span><span class="n">qbar</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">qbarfrom</span><span class="p">(</span><span class="n">m</span><span class="o">=</span><span class="n">extraprec</span><span class="p">(</span><span class="mi">20</span><span class="p">)(</span><span class="n">mfrom</span><span class="p">)(</span><span class="n">qbar</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="c"># ill-conditioned</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">qbarfrom</span><span class="p">(</span><span class="n">k</span><span class="o">=</span><span class="n">extraprec</span><span class="p">(</span><span class="mi">20</span><span class="p">)(</span><span class="n">kfrom</span><span class="p">)(</span><span class="n">qbar</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="c"># ill-conditioned</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">qbarfrom</span><span class="p">(</span><span class="n">tau</span><span class="o">=</span><span class="n">taufrom</span><span class="p">(</span><span class="n">qbar</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">(0.25 + 0.0j)</span> </pre></div> </div> </dd></dl> </div> <div class="section" id="mfrom"> <h3><tt class="xref docutils literal"><span class="pre">mfrom()</span></tt><a class="headerlink" href="#mfrom" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.mfrom"> <tt class="descclassname">mpmath.</tt><tt class="descname">mfrom</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#mpmath.mfrom" title="Permalink to this definition">¶</a></dt> <dd><p>Returns the elliptic parameter <img class="math" src="../_images/math/f5047d1e0cbb50ec208923a22cd517c55100fa7b.png" alt="m"/>, given any of <img class="math" src="../_images/math/a91b73688d1dfb846a77bd40b5563b4eb22f8947.png" alt="q, m, k, \tau, \bar{q}"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">mfrom</span><span class="p">(</span><span class="n">m</span><span class="o">=</span><span class="mf">0.25</span><span class="p">)</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">mfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="n">qfrom</span><span class="p">(</span><span class="n">m</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">mfrom</span><span class="p">(</span><span class="n">k</span><span class="o">=</span><span class="n">kfrom</span><span class="p">(</span><span class="n">m</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">mfrom</span><span class="p">(</span><span class="n">tau</span><span class="o">=</span><span class="n">taufrom</span><span class="p">(</span><span class="n">m</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">(0.25 + 0.0j)</span> <span class="gp">>>> </span><span class="n">mfrom</span><span class="p">(</span><span class="n">qbar</span><span class="o">=</span><span class="n">qbarfrom</span><span class="p">(</span><span class="n">m</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">0.25</span> </pre></div> </div> <p>As <img class="math" src="../_images/math/9db120b46ade50f2e63c13d506a8ec951e8c6f92.png" alt="q \to 1"/> and <img class="math" src="../_images/math/1f896ba0411e32a5403f664679bc7b6c717b1854.png" alt="q \to -1"/>, <img class="math" src="../_images/math/f5047d1e0cbb50ec208923a22cd517c55100fa7b.png" alt="m"/> rapidly approaches <img class="math" src="../_images/math/dce34f4dfb2406144304ad0d6106c5382ddd1446.png" alt="1"/> and <img class="math" src="../_images/math/afac538740054d4786c170ef0123850adea5cdf9.png" alt="-\infty"/> respectively:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">mfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="mf">0.75</span><span class="p">)</span> <span class="go">0.9999999999999798332943533</span> <span class="gp">>>> </span><span class="n">mfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=-</span><span class="mf">0.75</span><span class="p">)</span> <span class="go">-49586681013729.32611558353</span> <span class="gp">>>> </span><span class="n">mfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="go">1.0</span> <span class="gp">>>> </span><span class="n">mfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span> <span class="go">-inf</span> </pre></div> </div> <p>The inverse nome as a function of <img class="math" src="../_images/math/0615acc3725de21025457e7d6f7694dab8e2f758.png" alt="q"/> has an integer Taylor series expansion:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">taylor</span><span class="p">(</span><span class="k">lambda</span> <span class="n">q</span><span class="p">:</span> <span class="n">mfrom</span><span class="p">(</span><span class="n">q</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span> <span class="go">[0.0, 16.0, -128.0, 704.0, -3072.0, 11488.0, -38400.0, 117632.0]</span> </pre></div> </div> </dd></dl> </div> <div class="section" id="kfrom"> <h3><tt class="xref docutils literal"><span class="pre">kfrom()</span></tt><a class="headerlink" href="#kfrom" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.kfrom"> <tt class="descclassname">mpmath.</tt><tt class="descname">kfrom</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#mpmath.kfrom" title="Permalink to this definition">¶</a></dt> <dd><p>Returns the elliptic modulus <img class="math" src="../_images/math/8c325612684d41304b9751c175df7bcc0f61f64f.png" alt="k"/>, given any of <img class="math" src="../_images/math/a91b73688d1dfb846a77bd40b5563b4eb22f8947.png" alt="q, m, k, \tau, \bar{q}"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">kfrom</span><span class="p">(</span><span class="n">k</span><span class="o">=</span><span class="mf">0.25</span><span class="p">)</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">kfrom</span><span class="p">(</span><span class="n">m</span><span class="o">=</span><span class="n">mfrom</span><span class="p">(</span><span class="n">k</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">kfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="n">qfrom</span><span class="p">(</span><span class="n">k</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">0.25</span> <span class="gp">>>> </span><span class="n">kfrom</span><span class="p">(</span><span class="n">tau</span><span class="o">=</span><span class="n">taufrom</span><span class="p">(</span><span class="n">k</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">(0.25 + 0.0j)</span> <span class="gp">>>> </span><span class="n">kfrom</span><span class="p">(</span><span class="n">qbar</span><span class="o">=</span><span class="n">qbarfrom</span><span class="p">(</span><span class="n">k</span><span class="o">=</span><span class="mf">0.25</span><span class="p">))</span> <span class="go">0.25</span> </pre></div> </div> <p>As <img class="math" src="../_images/math/9db120b46ade50f2e63c13d506a8ec951e8c6f92.png" alt="q \to 1"/> and <img class="math" src="../_images/math/1f896ba0411e32a5403f664679bc7b6c717b1854.png" alt="q \to -1"/>, <img class="math" src="../_images/math/8c325612684d41304b9751c175df7bcc0f61f64f.png" alt="k"/> rapidly approaches <img class="math" src="../_images/math/dce34f4dfb2406144304ad0d6106c5382ddd1446.png" alt="1"/> and <img class="math" src="../_images/math/e357ce6be647b77d5509d0e90837fef3e945cd8d.png" alt="i \infty"/> respectively:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">kfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="mf">0.75</span><span class="p">)</span> <span class="go">0.9999999999999899166471767</span> <span class="gp">>>> </span><span class="n">kfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=-</span><span class="mf">0.75</span><span class="p">)</span> <span class="go">(0.0 + 7041781.096692038332790615j)</span> <span class="gp">>>> </span><span class="n">kfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="go">1</span> <span class="gp">>>> </span><span class="n">kfrom</span><span class="p">(</span><span class="n">q</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span> <span class="go">(0.0 + +infj)</span> </pre></div> </div> </dd></dl> </div> <div class="section" id="taufrom"> <h3><tt class="xref docutils literal"><span class="pre">taufrom()</span></tt><a class="headerlink" href="#taufrom" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.taufrom"> <tt class="descclassname">mpmath.</tt><tt class="descname">taufrom</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#mpmath.taufrom" title="Permalink to this definition">¶</a></dt> <dd><p>Returns the elliptic half-period ratio <img class="math" src="../_images/math/1dc1c0119a604b91be9142370dc3159b6a9bbcb9.png" alt="\tau"/>, given any of <img class="math" src="../_images/math/a91b73688d1dfb846a77bd40b5563b4eb22f8947.png" alt="q, m, k, \tau, \bar{q}"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">taufrom</span><span class="p">(</span><span class="n">tau</span><span class="o">=</span><span class="mf">0.5</span><span class="n">j</span><span class="p">)</span> <span class="go">(0.0 + 0.5j)</span> <span class="gp">>>> </span><span class="n">taufrom</span><span class="p">(</span><span class="n">q</span><span class="o">=</span><span class="n">qfrom</span><span class="p">(</span><span class="n">tau</span><span class="o">=</span><span class="mf">0.5</span><span class="n">j</span><span class="p">))</span> <span class="go">(0.0 + 0.5j)</span> <span class="gp">>>> </span><span class="n">taufrom</span><span class="p">(</span><span class="n">m</span><span class="o">=</span><span class="n">mfrom</span><span class="p">(</span><span class="n">tau</span><span class="o">=</span><span class="mf">0.5</span><span class="n">j</span><span class="p">))</span> <span class="go">(0.0 + 0.5j)</span> <span class="gp">>>> </span><span class="n">taufrom</span><span class="p">(</span><span class="n">k</span><span class="o">=</span><span class="n">kfrom</span><span class="p">(</span><span class="n">tau</span><span class="o">=</span><span class="mf">0.5</span><span class="n">j</span><span class="p">))</span> <span class="go">(0.0 + 0.5j)</span> <span class="gp">>>> </span><span class="n">taufrom</span><span class="p">(</span><span class="n">qbar</span><span class="o">=</span><span class="n">qbarfrom</span><span class="p">(</span><span class="n">tau</span><span class="o">=</span><span class="mf">0.5</span><span class="n">j</span><span class="p">))</span> <span class="go">(0.0 + 0.5j)</span> </pre></div> </div> </dd></dl> </div> </div> <div class="section" id="legendre-elliptic-integrals"> <h2>Legendre elliptic integrals<a class="headerlink" href="#legendre-elliptic-integrals" title="Permalink to this headline">¶</a></h2> <div class="section" id="ellipk"> <h3><tt class="xref docutils literal"><span class="pre">ellipk()</span></tt><a class="headerlink" href="#ellipk" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.ellipk"> <tt class="descclassname">mpmath.</tt><tt class="descname">ellipk</tt><big>(</big><em>m</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#mpmath.ellipk" title="Permalink to this definition">¶</a></dt> <dd><p>Evaluates the complete elliptic integral of the first kind, <img class="math" src="../_images/math/1665d5b15ea171ee4ac16d99f646ade489216dfe.png" alt="K(m)"/>, defined by</p> <div class="math"> <p><img src="../_images/math/24bc31755f6c275567377d790b11e8fb4bfe4280.png" alt="K(m) = \int_0^{\pi/2} \frac{dt}{\sqrt{1-m \sin^2 t}} \, = \, \frac{\pi}{2} \,_2F_1\left(\frac{1}{2}, \frac{1}{2}, 1, m\right)." /></p> </div><p>Note that the argument is the parameter <img class="math" src="../_images/math/cb19452d1ea001143cb433f0705278859f021e2a.png" alt="m = k^2"/>, not the modulus <img class="math" src="../_images/math/8c325612684d41304b9751c175df7bcc0f61f64f.png" alt="k"/> which is sometimes used.</p> <p><strong>Plots</strong></p> <div class="highlight-python"><div class="highlight"><pre><span class="c"># Complete elliptic integrals K(m) and E(m)</span> <span class="n">plot</span><span class="p">([</span><span class="n">ellipk</span><span class="p">,</span> <span class="n">ellipe</span><span class="p">],</span> <span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">3</span><span class="p">],</span> <span class="n">points</span><span class="o">=</span><span class="mi">600</span><span class="p">)</span> </pre></div> </div> <img alt="../_images/ellipk.png" src="../_images/ellipk.png" /> <p><strong>Examples</strong></p> <p>Values and limits include:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">ellipk</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="go">1.570796326794896619231322</span> <span class="gp">>>> </span><span class="n">ellipk</span><span class="p">(</span><span class="n">inf</span><span class="p">)</span> <span class="go">(0.0 + 0.0j)</span> <span class="gp">>>> </span><span class="n">ellipk</span><span class="p">(</span><span class="o">-</span><span class="n">inf</span><span class="p">)</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="n">ellipk</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="go">+inf</span> <span class="gp">>>> </span><span class="n">ellipk</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="go">1.31102877714605990523242</span> <span class="gp">>>> </span><span class="n">ellipk</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="go">(1.31102877714605990523242 - 1.31102877714605990523242j)</span> </pre></div> </div> <p>Verifying the defining integral and hypergeometric representation:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">ellipk</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span> <span class="go">1.85407467730137191843385</span> <span class="gp">>>> </span><span class="n">quad</span><span class="p">(</span><span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="mf">0.5</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span><span class="o">**-</span><span class="mf">0.5</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="p">])</span> <span class="go">1.85407467730137191843385</span> <span class="gp">>>> </span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="o">*</span><span class="n">hyp2f1</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span><span class="mf">0.5</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mf">0.5</span><span class="p">)</span> <span class="go">1.85407467730137191843385</span> </pre></div> </div> <p>Evaluation is supported for arbitrary complex <img class="math" src="../_images/math/f5047d1e0cbb50ec208923a22cd517c55100fa7b.png" alt="m"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">ellipk</span><span class="p">(</span><span class="mi">3</span><span class="o">+</span><span class="mi">4</span><span class="n">j</span><span class="p">)</span> <span class="go">(0.9111955638049650086562171 + 0.6313342832413452438845091j)</span> </pre></div> </div> <p>A definite integral:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">quad</span><span class="p">(</span><span class="n">ellipk</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span> <span class="go">2.0</span> </pre></div> </div> </dd></dl> </div> <div class="section" id="ellipf"> <h3><tt class="xref docutils literal"><span class="pre">ellipf()</span></tt><a class="headerlink" href="#ellipf" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.ellipf"> <tt class="descclassname">mpmath.</tt><tt class="descname">ellipf</tt><big>(</big><em>phi</em>, <em>m</em><big>)</big><a class="headerlink" href="#mpmath.ellipf" title="Permalink to this definition">¶</a></dt> <dd><p>Evaluates the Legendre incomplete elliptic integral of the first kind</p> <blockquote> <div class="math"> <p><img src="../_images/math/cef2aab913d0702fd07e34a04636a5adab620c48.png" alt="F(\phi,m) = \int_0^{\phi} \frac{dt}{\sqrt{1-m \sin^2 t}}" /></p> </div></blockquote> <p>or equivalently</p> <div class="math"> <p><img src="../_images/math/abeba8d557076548c92c2e82980cf043c786846e.png" alt="F(\phi,m) = \int_0^{\sin z} \frac{dt}{\left(\sqrt{1-t^2}\right)\left(\sqrt{1-mt^2}\right)}." /></p> </div><p>The function reduces to a complete elliptic integral of the first kind (see <a title="mpmath.ellipk" class="reference internal" href="#mpmath.ellipk"><tt class="xref docutils literal"><span class="pre">ellipk()</span></tt></a>) when <img class="math" src="../_images/math/cb165bb419a3b9316db921e9f050a8a8905521a6.png" alt="\phi = \frac{\pi}{2}"/>; that is,</p> <div class="math"> <p><img src="../_images/math/85e515410817bdd91c57e196c5853946db7c5e01.png" alt="F\left(\frac{\pi}{2}, m\right) = K(m)." /></p> </div><p>In the defining integral, it is assumed that the principal branch of the square root is taken and that the path of integration avoids crossing any branch cuts. Outside <img class="math" src="../_images/math/5e349edb3ab0ea5c5c7adc0ccffb39ae650362b7.png" alt="-\pi/2 \le \Re(z) \le \pi/2"/>, the function extends quasi-periodically as</p> <div class="math"> <p><img src="../_images/math/2bfb34eb927e461fde7be479fe854774d5ebe367.png" alt="F(\phi + n \pi, m) = 2 n K(m) + F(\phi,m), n \in \mathbb{Z}." /></p> </div><p><strong>Plots</strong></p> <div class="highlight-python"><div class="highlight"><pre><span class="c"># Elliptic integral F(z,m) for some different m</span> <span class="n">f1</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellipf</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="n">f2</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellipf</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="o">-</span><span class="mf">0.5</span><span class="p">)</span> <span class="n">f3</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellipf</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="n">f4</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellipf</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="mf">0.5</span><span class="p">)</span> <span class="n">f5</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellipf</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="n">plot</span><span class="p">([</span><span class="n">f1</span><span class="p">,</span><span class="n">f2</span><span class="p">,</span><span class="n">f3</span><span class="p">,</span><span class="n">f4</span><span class="p">,</span><span class="n">f5</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="n">pi</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">4</span><span class="p">])</span> </pre></div> </div> <img alt="../_images/ellipf.png" src="../_images/ellipf.png" /> <p><strong>Examples</strong></p> <p>Basic values and limits:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">);</span> <span class="n">ellipf</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">3</span><span class="n">j</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="go">1.0</span> <span class="go">(2.0 + 3.0j)</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span> <span class="n">log</span><span class="p">(</span><span class="n">sec</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">tan</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> <span class="go">1.226191170883517070813061</span> <span class="go">1.226191170883517070813061</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">);</span> <span class="n">ellipk</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">)</span> <span class="go">1.415737208425956198892166</span> <span class="go">1.415737208425956198892166</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="o">+</span><span class="n">eps</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="n">ellipf</span><span class="p">(</span><span class="o">-</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="o">-</span><span class="n">eps</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="go">+inf</span> <span class="go">+inf</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="mf">1.5</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="go">3.340677542798311003320813</span> </pre></div> </div> <p>Comparing with numerical integration:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">z</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">1.25</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="n">m</span><span class="p">)</span> <span class="go">0.5287219202206327872978255</span> <span class="gp">>>> </span><span class="n">quad</span><span class="p">(</span><span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="n">m</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span><span class="o">**</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">),</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="n">z</span><span class="p">])</span> <span class="go">0.5287219202206327872978255</span> </pre></div> </div> <p>The arguments may be complex numbers:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="mi">3</span><span class="n">j</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span> <span class="go">(0.0 + 1.713602407841590234804143j)</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="mi">3</span><span class="o">+</span><span class="mi">4</span><span class="n">j</span><span class="p">,</span> <span class="mi">5</span><span class="o">-</span><span class="mi">6</span><span class="n">j</span><span class="p">)</span> <span class="go">(1.269131241950351323305741 - 0.3561052815014558335412538j)</span> <span class="gp">>>> </span><span class="n">z</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="mi">2</span><span class="o">+</span><span class="mi">3</span><span class="n">j</span><span class="p">,</span> <span class="mf">1.25</span> <span class="gp">>>> </span><span class="n">k</span> <span class="o">=</span> <span class="mi">1011</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="n">z</span><span class="o">+</span><span class="n">pi</span><span class="o">*</span><span class="n">k</span><span class="p">,</span><span class="n">m</span><span class="p">);</span> <span class="n">ellipf</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="n">m</span><span class="p">)</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">k</span><span class="o">*</span><span class="n">ellipk</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="go">(4086.184383622179764082821 - 3003.003538923749396546871j)</span> <span class="go">(4086.184383622179764082821 - 3003.003538923749396546871j)</span> </pre></div> </div> <p>For <img class="math" src="../_images/math/d951f09ece5acca30e8786115055165850cc0f02.png" alt="|\Re(z)| < \pi/2"/>, the function can be expressed as a hypergeometric series of two variables (see <a title="mpmath.appellf1" class="reference external" href="hypergeometric.html#mpmath.appellf1"><tt class="xref docutils literal"><span class="pre">appellf1()</span></tt></a>):</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">z</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.25</span> <span class="gp">>>> </span><span class="n">ellipf</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="n">m</span><span class="p">)</span> <span class="go">0.5050887275786480788831083</span> <span class="gp">>>> </span><span class="n">sin</span><span class="p">(</span><span class="n">z</span><span class="p">)</span><span class="o">*</span><span class="n">appellf1</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span><span class="mf">0.5</span><span class="p">,</span><span class="mf">0.5</span><span class="p">,</span><span class="mf">1.5</span><span class="p">,</span><span class="n">sin</span><span class="p">(</span><span class="n">z</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">,</span><span class="n">m</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">z</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span> <span class="go">0.5050887275786480788831083</span> </pre></div> </div> </dd></dl> </div> <div class="section" id="ellipe"> <h3><tt class="xref docutils literal"><span class="pre">ellipe()</span></tt><a class="headerlink" href="#ellipe" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.ellipe"> <tt class="descclassname">mpmath.</tt><tt class="descname">ellipe</tt><big>(</big><em>*args</em><big>)</big><a class="headerlink" href="#mpmath.ellipe" title="Permalink to this definition">¶</a></dt> <dd><p>Called with a single argument <img class="math" src="../_images/math/f5047d1e0cbb50ec208923a22cd517c55100fa7b.png" alt="m"/>, evaluates the Legendre complete elliptic integral of the second kind, <img class="math" src="../_images/math/024ee2b592ac8c90f9998bcd1d98bbc365e936f1.png" alt="E(m)"/>, defined by</p> <blockquote> <div class="math"> <p><img src="../_images/math/0b3b32a77ec2ef5a5c1b71055d08b8db33972115.png" alt="E(m) = \int_0^{\pi/2} \sqrt{1-m \sin^2 t} \, dt \,=\, \frac{\pi}{2} \,_2F_1\left(\frac{1}{2}, -\frac{1}{2}, 1, m\right)." /></p> </div></blockquote> <p>Called with two arguments <img class="math" src="../_images/math/24970ef86eae7331977f7170cd105c3eb0c11e2a.png" alt="\phi, m"/>, evaluates the incomplete elliptic integral of the second kind</p> <blockquote> <div class="math"> <p><img src="../_images/math/8e2646cdd75c927199c18567d3d4cbf469601b19.png" alt="E(\phi,m) = \int_0^{\phi} \sqrt{1-m \sin^2 t} \, dt = \int_0^{\sin z} \frac{\sqrt{1-mt^2}}{\sqrt{1-t^2}} \, dt." /></p> </div></blockquote> <p>The incomplete integral reduces to a complete integral when <img class="math" src="../_images/math/cb165bb419a3b9316db921e9f050a8a8905521a6.png" alt="\phi = \frac{\pi}{2}"/>; that is,</p> <div class="math"> <p><img src="../_images/math/fbb189178c35f6810865686b2d9a083a220101ca.png" alt="E\left(\frac{\pi}{2}, m\right) = E(m)." /></p> </div><p>In the defining integral, it is assumed that the principal branch of the square root is taken and that the path of integration avoids crossing any branch cuts. Outside <img class="math" src="../_images/math/5e349edb3ab0ea5c5c7adc0ccffb39ae650362b7.png" alt="-\pi/2 \le \Re(z) \le \pi/2"/>, the function extends quasi-periodically as</p> <div class="math"> <p><img src="../_images/math/fd752948f11202fec6df4c7d23796c46553b02c6.png" alt="E(\phi + n \pi, m) = 2 n E(m) + F(\phi,m), n \in \mathbb{Z}." /></p> </div><p><strong>Plots</strong></p> <div class="highlight-python"><div class="highlight"><pre><span class="c"># Elliptic integral E(z,m) for some different m</span> <span class="n">f1</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellipe</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="o">-</span><span class="mi">2</span><span class="p">)</span> <span class="n">f2</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellipe</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="n">f3</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellipe</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="n">f4</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellipe</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="n">f5</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellipe</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span> <span class="n">plot</span><span class="p">([</span><span class="n">f1</span><span class="p">,</span><span class="n">f2</span><span class="p">,</span><span class="n">f3</span><span class="p">,</span><span class="n">f4</span><span class="p">,</span><span class="n">f5</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="n">pi</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">4</span><span class="p">])</span> </pre></div> </div> <img alt="../_images/ellipe.png" src="../_images/ellipe.png" /> <p><strong>Examples for the complete integral</strong></p> <p>Basic values and limits:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="go">1.570796326794896619231322</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="go">1.0</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="go">1.910098894513856008952381</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="go">(0.5990701173677961037199612 + 0.5990701173677961037199612j)</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="n">inf</span><span class="p">)</span> <span class="go">(0.0 + +infj)</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="o">-</span><span class="n">inf</span><span class="p">)</span> <span class="go">+inf</span> </pre></div> </div> <p>Verifying the defining integral and hypergeometric representation:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span> <span class="go">1.350643881047675502520175</span> <span class="gp">>>> </span><span class="n">quad</span><span class="p">(</span><span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="mf">0.5</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">),</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="p">])</span> <span class="go">1.350643881047675502520175</span> <span class="gp">>>> </span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="o">*</span><span class="n">hyp2f1</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mf">0.5</span><span class="p">)</span> <span class="go">1.350643881047675502520175</span> </pre></div> </div> <p>Evaluation is supported for arbitrary complex <img class="math" src="../_images/math/f5047d1e0cbb50ec208923a22cd517c55100fa7b.png" alt="m"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mf">0.5</span><span class="o">+</span><span class="mf">0.25</span><span class="n">j</span><span class="p">)</span> <span class="go">(1.360868682163129682716687 - 0.1238733442561786843557315j)</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">3</span><span class="o">+</span><span class="mi">4</span><span class="n">j</span><span class="p">)</span> <span class="go">(1.499553520933346954333612 - 1.577879007912758274533309j)</span> </pre></div> </div> <p>A definite integral:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">quad</span><span class="p">(</span><span class="n">ellipe</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span> <span class="go">1.333333333333333333333333</span> </pre></div> </div> <p><strong>Examples for the incomplete integral</strong></p> <p>Basic values and limits:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="go">1.0</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">3</span><span class="n">j</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="go">(2.0 + 3.0j)</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span> <span class="n">sin</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="go">0.8414709848078965066525023</span> <span class="go">0.8414709848078965066525023</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">);</span> <span class="n">ellipe</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">)</span> <span class="go">1.751771275694817862026502</span> <span class="go">1.751771275694817862026502</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="n">ellipe</span><span class="p">(</span><span class="o">-</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="go">1.0</span> <span class="go">-1.0</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mf">1.5</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="go">0.9974949866040544309417234</span> </pre></div> </div> <p>Comparing with numerical integration:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">z</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">1.25</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="n">m</span><span class="p">)</span> <span class="go">0.4740152182652628394264449</span> <span class="gp">>>> </span><span class="n">quad</span><span class="p">(</span><span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="n">m</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">),</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="n">z</span><span class="p">])</span> <span class="go">0.4740152182652628394264449</span> </pre></div> </div> <p>The arguments may be complex numbers:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">3</span><span class="n">j</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span> <span class="go">(0.0 + 7.551991234890371873502105j)</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="mi">3</span><span class="o">+</span><span class="mi">4</span><span class="n">j</span><span class="p">,</span> <span class="mi">5</span><span class="o">-</span><span class="mi">6</span><span class="n">j</span><span class="p">)</span> <span class="go">(24.15299022574220502424466 + 75.2503670480325997418156j)</span> <span class="gp">>>> </span><span class="n">k</span> <span class="o">=</span> <span class="mi">35</span> <span class="gp">>>> </span><span class="n">z</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="mi">2</span><span class="o">+</span><span class="mi">3</span><span class="n">j</span><span class="p">,</span> <span class="mf">1.25</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="n">z</span><span class="o">+</span><span class="n">pi</span><span class="o">*</span><span class="n">k</span><span class="p">,</span><span class="n">m</span><span class="p">);</span> <span class="n">ellipe</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="n">m</span><span class="p">)</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">k</span><span class="o">*</span><span class="n">ellipe</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="go">(48.30138799412005235090766 + 17.47255216721987688224357j)</span> <span class="go">(48.30138799412005235090766 + 17.47255216721987688224357j)</span> </pre></div> </div> <p>For <img class="math" src="../_images/math/d951f09ece5acca30e8786115055165850cc0f02.png" alt="|\Re(z)| < \pi/2"/>, the function can be expressed as a hypergeometric series of two variables (see <a title="mpmath.appellf1" class="reference external" href="hypergeometric.html#mpmath.appellf1"><tt class="xref docutils literal"><span class="pre">appellf1()</span></tt></a>):</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">z</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.25</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="n">m</span><span class="p">)</span> <span class="go">0.4950017030164151928870375</span> <span class="gp">>>> </span><span class="n">sin</span><span class="p">(</span><span class="n">z</span><span class="p">)</span><span class="o">*</span><span class="n">appellf1</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span><span class="mf">0.5</span><span class="p">,</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span><span class="mf">1.5</span><span class="p">,</span><span class="n">sin</span><span class="p">(</span><span class="n">z</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">,</span><span class="n">m</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">z</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span> <span class="go">0.4950017030164151928870376</span> </pre></div> </div> </dd></dl> </div> <div class="section" id="ellippi"> <h3><tt class="xref docutils literal"><span class="pre">ellippi()</span></tt><a class="headerlink" href="#ellippi" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.ellippi"> <tt class="descclassname">mpmath.</tt><tt class="descname">ellippi</tt><big>(</big><em>*args</em><big>)</big><a class="headerlink" href="#mpmath.ellippi" title="Permalink to this definition">¶</a></dt> <dd><p>Called with three arguments <img class="math" src="../_images/math/1274029e7bc6430bb707966ea48c1a2cb83f736d.png" alt="n, \phi, m"/>, evaluates the Legendre incomplete elliptic integral of the third kind</p> <div class="math"> <p><img src="../_images/math/d24e70e72e0de8ecdcfe5d91ecf5c0498588c88e.png" alt="\Pi(n; \phi, m) = \int_0^{\phi} \frac{dt}{(1-n \sin^2 t) \sqrt{1-m \sin^2 t}} = \int_0^{\sin \phi} \frac{dt}{(1-nt^2) \sqrt{1-t^2} \sqrt{1-mt^2}}." /></p> </div><p>Called with two arguments <img class="math" src="../_images/math/c5be19edae9196ae8f8106e8133e0bf69ca909c8.png" alt="n, m"/>, evaluates the complete elliptic integral of the third kind <img class="math" src="../_images/math/0fa582bfee51ae4091ed0dafd79b14e274d0e51c.png" alt="\Pi(n,m) = \Pi(n; \frac{\pi}{2},m)"/>.</p> <p>In the defining integral, it is assumed that the principal branch of the square root is taken and that the path of integration avoids crossing any branch cuts. Outside <img class="math" src="../_images/math/5e349edb3ab0ea5c5c7adc0ccffb39ae650362b7.png" alt="-\pi/2 \le \Re(z) \le \pi/2"/>, the function extends quasi-periodically as</p> <div class="math"> <p><img src="../_images/math/6b30c7c209cf75b4a0ef8fda32e896dc526bce29.png" alt="\Pi(n,\phi+k\pi,m) = 2k\Pi(n,m) + \Pi(n,\phi,m), k \in \mathbb{Z}." /></p> </div><p><strong>Plots</strong></p> <div class="highlight-python"><div class="highlight"><pre><span class="c"># Elliptic integral Pi(n,z,m) for some different n, m</span> <span class="n">f1</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellippi</span><span class="p">(</span><span class="mf">0.9</span><span class="p">,</span><span class="n">z</span><span class="p">,</span><span class="mf">0.9</span><span class="p">)</span> <span class="n">f2</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellippi</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span><span class="n">z</span><span class="p">,</span><span class="mf">0.5</span><span class="p">)</span> <span class="n">f3</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellippi</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span><span class="n">z</span><span class="p">,</span><span class="o">-</span><span class="mf">0.9</span><span class="p">)</span> <span class="n">f4</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellippi</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span><span class="n">z</span><span class="p">,</span><span class="mf">0.5</span><span class="p">)</span> <span class="n">f5</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">ellippi</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">z</span><span class="p">,</span><span class="mf">0.5</span><span class="p">)</span> <span class="n">plot</span><span class="p">([</span><span class="n">f1</span><span class="p">,</span><span class="n">f2</span><span class="p">,</span><span class="n">f3</span><span class="p">,</span><span class="n">f4</span><span class="p">,</span><span class="n">f5</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="n">pi</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">4</span><span class="p">])</span> </pre></div> </div> <img alt="../_images/ellippi.png" src="../_images/ellippi.png" /> <p><strong>Examples for the complete integral</strong></p> <p>Some basic values and limits:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">);</span> <span class="n">ellipk</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">)</span> <span class="go">0.9555039270640439337379334</span> <span class="go">0.9555039270640439337379334</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="n">inf</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="n">inf</span><span class="p">)</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="nb">abs</span><span class="p">(</span><span class="n">ellippi</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</span><span class="p">))</span> <span class="go">+inf</span> <span class="gp">>>> </span><span class="nb">abs</span><span class="p">(</span><span class="n">ellippi</span><span class="p">(</span><span class="mf">0.25</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span> <span class="go">+inf</span> </pre></div> </div> <p>Evaluation in terms of simpler functions:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mf">0.25</span><span class="p">,</span><span class="mf">0.25</span><span class="p">);</span> <span class="n">ellipe</span><span class="p">(</span><span class="mf">0.25</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="mf">0.25</span><span class="p">)</span> <span class="go">1.956616279119236207279727</span> <span class="go">1.956616279119236207279727</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">);</span> <span class="n">pi</span><span class="o">/</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">sqrt</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">))</span> <span class="go">(0.0 - 1.11072073453959156175397j)</span> <span class="go">(0.0 - 1.11072073453959156175397j)</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="o">-</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">);</span> <span class="n">pi</span><span class="o">/</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">4</span><span class="p">))</span> <span class="go">0.7853981633974483096156609</span> <span class="go">0.7853981633974483096156609</span> </pre></div> </div> <p><strong>Examples for the incomplete integral</strong></p> <p>Basic values and limits:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mf">0.25</span><span class="p">,</span><span class="o">-</span><span class="mf">0.5</span><span class="p">);</span> <span class="n">ellippi</span><span class="p">(</span><span class="mf">0.25</span><span class="p">,</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="o">-</span><span class="mf">0.5</span><span class="p">)</span> <span class="go">1.622944760954741603710555</span> <span class="go">1.622944760954741603710555</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="n">inf</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.25</span><span class="p">,</span><span class="mf">0.5</span><span class="p">);</span> <span class="n">ellipf</span><span class="p">(</span><span class="mf">0.25</span><span class="p">,</span><span class="mf">0.5</span><span class="p">)</span> <span class="go">0.2513040086544925794134591</span> <span class="go">0.2513040086544925794134591</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span> <span class="p">(</span><span class="n">log</span><span class="p">(</span><span class="n">sec</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">tan</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span><span class="o">+</span><span class="n">sec</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">tan</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span> <span class="go">2.054332933256248668692452</span> <span class="go">2.054332933256248668692452</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mf">0.25</span><span class="p">,</span> <span class="mi">53</span><span class="o">*</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="mf">0.75</span><span class="p">);</span> <span class="mi">53</span><span class="o">*</span><span class="n">ellippi</span><span class="p">(</span><span class="mf">0.25</span><span class="p">,</span><span class="mf">0.75</span><span class="p">)</span> <span class="go">135.240868757890840755058</span> <span class="go">135.240868757890840755058</span> <span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span><span class="n">pi</span><span class="o">/</span><span class="mi">4</span><span class="p">,</span><span class="mf">0.5</span><span class="p">);</span> <span class="mi">2</span><span class="o">*</span><span class="n">ellipe</span><span class="p">(</span><span class="n">pi</span><span class="o">/</span><span class="mi">4</span><span class="p">,</span><span class="mf">0.5</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="o">/</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="go">0.9190227391656969903987269</span> <span class="go">0.9190227391656969903987269</span> </pre></div> </div> <p>Complex arguments are supported:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">ellippi</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mi">5</span><span class="o">+</span><span class="mi">6</span><span class="n">j</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">pi</span><span class="p">,</span> <span class="o">-</span><span class="mi">7</span><span class="o">-</span><span class="mi">8</span><span class="n">j</span><span class="p">)</span> <span class="go">(-0.3612856620076747660410167 + 0.5217735339984807829755815j)</span> </pre></div> </div> </dd></dl> </div> </div> <div class="section" id="carlson-symmetric-elliptic-integrals"> <h2>Carlson symmetric elliptic integrals<a class="headerlink" href="#carlson-symmetric-elliptic-integrals" title="Permalink to this headline">¶</a></h2> <div class="section" id="elliprf"> <h3><tt class="xref docutils literal"><span class="pre">elliprf()</span></tt><a class="headerlink" href="#elliprf" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.elliprf"> <tt class="descclassname">mpmath.</tt><tt class="descname">elliprf</tt><big>(</big><em>x</em>, <em>y</em>, <em>z</em><big>)</big><a class="headerlink" href="#mpmath.elliprf" title="Permalink to this definition">¶</a></dt> <dd><p>Evaluates the Carlson symmetric elliptic integral of the first kind</p> <div class="math"> <p><img src="../_images/math/2ce2deb0b65b3721d5d863917d10ae5e3d7b3da7.png" alt="R_F(x,y,z) = \frac{1}{2} \int_0^{\infty} \frac{dt}{\sqrt{(t+x)(t+y)(t+z)}}" /></p> </div><p>which is defined for <img class="math" src="../_images/math/9da3283d000a7986dc95e18e0375b529f5b1edac.png" alt="x,y,z \notin (-\infty,0)"/>, and with at most one of <img class="math" src="../_images/math/accc80fdf164cef264f56a82b6f9f6add320fe05.png" alt="x,y,z"/> being zero.</p> <p>For real <img class="math" src="../_images/math/a75ceb298935ae043127348517c77c774d8e3011.png" alt="x,y,z \ge 0"/>, the principal square root is taken in the integrand. For complex <img class="math" src="../_images/math/accc80fdf164cef264f56a82b6f9f6add320fe05.png" alt="x,y,z"/>, the principal square root is taken as <img class="math" src="../_images/math/fa44caf5ce301cf881acb2a018523fb7333d2d73.png" alt="t \to \infty"/> and as <img class="math" src="../_images/math/76a9c7714322b8986a689db59cce9238f69b5857.png" alt="t \to 0"/> non-principal branches are chosen as necessary so as to make the integrand continuous.</p> <p><strong>Examples</strong></p> <p>Some basic values and limits:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span> <span class="n">pi</span><span class="o">/</span><span class="mi">2</span> <span class="go">1.570796326794896619231322</span> <span class="go">1.570796326794896619231322</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">inf</span><span class="p">)</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="go">1.0</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="go">0.5</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">);</span> <span class="n">elliprf</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span> <span class="n">elliprf</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">);</span> <span class="n">elliprf</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="go">+inf</span> <span class="go">+inf</span> <span class="go">+inf</span> <span class="go">+inf</span> </pre></div> </div> <p>Representing complete elliptic integrals in terms of <img class="math" src="../_images/math/7499c85f329a4af02da5baec1094bbc1eab44e44.png" alt="R_F"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">m</span> <span class="o">=</span> <span class="n">mpf</span><span class="p">(</span><span class="mf">0.75</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">ellipk</span><span class="p">(</span><span class="n">m</span><span class="p">);</span> <span class="n">elliprf</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="o">-</span><span class="n">m</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="go">2.156515647499643235438675</span> <span class="go">2.156515647499643235438675</span> <span class="gp">>>> </span><span class="n">ellipe</span><span class="p">(</span><span class="n">m</span><span class="p">);</span> <span class="n">elliprf</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="o">-</span><span class="n">m</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="o">-</span><span class="n">m</span><span class="o">*</span><span class="n">elliprd</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="o">-</span><span class="n">m</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="mi">3</span> <span class="go">1.211056027568459524803563</span> <span class="go">1.211056027568459524803563</span> </pre></div> </div> <p>Some symmetries and argument transformations:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">);</span> <span class="n">elliprf</span><span class="p">(</span><span class="n">y</span><span class="p">,</span><span class="n">x</span><span class="p">,</span><span class="n">z</span><span class="p">);</span> <span class="n">elliprf</span><span class="p">(</span><span class="n">z</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">x</span><span class="p">)</span> <span class="go">0.5840828416771517066928492</span> <span class="go">0.5840828416771517066928492</span> <span class="go">0.5840828416771517066928492</span> <span class="gp">>>> </span><span class="n">k</span> <span class="o">=</span> <span class="n">mpf</span><span class="p">(</span><span class="mi">100000</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="n">k</span><span class="o">*</span><span class="n">x</span><span class="p">,</span><span class="n">k</span><span class="o">*</span><span class="n">y</span><span class="p">,</span><span class="n">k</span><span class="o">*</span><span class="n">z</span><span class="p">);</span> <span class="n">k</span><span class="o">**</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">)</span> <span class="o">*</span> <span class="n">elliprf</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">)</span> <span class="go">0.001847032121923321253219284</span> <span class="go">0.001847032121923321253219284</span> <span class="gp">>>> </span><span class="n">l</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">x</span><span class="o">*</span><span class="n">y</span><span class="p">)</span> <span class="o">+</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">y</span><span class="o">*</span><span class="n">z</span><span class="p">)</span> <span class="o">+</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">z</span><span class="o">*</span><span class="n">x</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">);</span> <span class="mi">2</span><span class="o">*</span><span class="n">elliprf</span><span class="p">(</span><span class="n">x</span><span class="o">+</span><span class="n">l</span><span class="p">,</span><span class="n">y</span><span class="o">+</span><span class="n">l</span><span class="p">,</span><span class="n">z</span><span class="o">+</span><span class="n">l</span><span class="p">)</span> <span class="go">0.5840828416771517066928492</span> <span class="go">0.5840828416771517066928492</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">((</span><span class="n">x</span><span class="o">+</span><span class="n">l</span><span class="p">)</span><span class="o">/</span><span class="mi">4</span><span class="p">,(</span><span class="n">y</span><span class="o">+</span><span class="n">l</span><span class="p">)</span><span class="o">/</span><span class="mi">4</span><span class="p">,(</span><span class="n">z</span><span class="o">+</span><span class="n">l</span><span class="p">)</span><span class="o">/</span><span class="mi">4</span><span class="p">)</span> <span class="go">0.5840828416771517066928492</span> </pre></div> </div> <p>Comparing with numerical integration:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">)</span> <span class="go">0.5840828416771517066928492</span> <span class="gp">>>> </span><span class="n">f</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="mf">0.5</span><span class="o">*</span><span class="p">((</span><span class="n">t</span><span class="o">+</span><span class="n">x</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">t</span><span class="o">+</span><span class="n">y</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">t</span><span class="o">+</span><span class="n">z</span><span class="p">))</span><span class="o">**</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">q</span> <span class="o">=</span> <span class="n">extradps</span><span class="p">(</span><span class="mi">25</span><span class="p">)(</span><span class="n">quad</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">q</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="n">inf</span><span class="p">])</span> <span class="go">0.5840828416771517066928492</span> </pre></div> </div> <p>With the following arguments, the square root in the integrand becomes discontinuous at <img class="math" src="../_images/math/96140d8d6781d1aee99a494b0bd27408ee8dd7f2.png" alt="t = 1/2"/> if the principal branch is used. To obtain the right value, <img class="math" src="../_images/math/c3cef30254d867ed235c9a4e5198ba3fb580ede6.png" alt="-\sqrt{r}"/> must be taken instead of <img class="math" src="../_images/math/6a3e9006ecc9debb184b411a0fb4e94a291b9b62.png" alt="\sqrt{r}"/> on <img class="math" src="../_images/math/6aafdfcbc567225fee212d00de14d1f68c6d5786.png" alt="t \in (0, 1/2)"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span> <span class="o">=</span> <span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">j</span><span class="p">,</span><span class="mi">0</span> <span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">)</span> <span class="go">(0.7961258658423391329305694 - 1.213856669836495986430094j)</span> <span class="gp">>>> </span><span class="o">-</span><span class="n">q</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.5</span><span class="p">])</span> <span class="o">+</span> <span class="n">q</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="p">[</span><span class="mf">0.5</span><span class="p">,</span><span class="n">inf</span><span class="p">])</span> <span class="go">(0.7961258658423391329305694 - 1.213856669836495986430094j)</span> </pre></div> </div> <p>The so-called <em>first lemniscate constant</em>, a transcendental number:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">elliprf</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span> <span class="go">1.31102877714605990523242</span> <span class="gp">>>> </span><span class="n">extradps</span><span class="p">(</span><span class="mi">25</span><span class="p">)(</span><span class="n">quad</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="mi">1</span><span class="o">/</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="n">t</span><span class="o">**</span><span class="mi">4</span><span class="p">),</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span> <span class="go">1.31102877714605990523242</span> <span class="gp">>>> </span><span class="n">gamma</span><span class="p">(</span><span class="s">'1/4'</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="o">/</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">pi</span><span class="p">))</span> <span class="go">1.31102877714605990523242</span> </pre></div> </div> <p><strong>References</strong></p> <ol class="arabic simple"> <li><a class="reference external" href="../references.html#carlson">[Carlson]</a></li> <li><a class="reference external" href="../references.html#dlmf">[DLMF]</a> Chapter 19. Elliptic Integrals</li> </ol> </dd></dl> </div> <div class="section" id="elliprc"> <h3><tt class="xref docutils literal"><span class="pre">elliprc()</span></tt><a class="headerlink" href="#elliprc" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.elliprc"> <tt class="descclassname">mpmath.</tt><tt class="descname">elliprc</tt><big>(</big><em>x</em>, <em>y</em>, <em>pv=True</em><big>)</big><a class="headerlink" href="#mpmath.elliprc" title="Permalink to this definition">¶</a></dt> <dd><p>Evaluates the degenerate Carlson symmetric elliptic integral of the first kind</p> <div class="math"> <p><img src="../_images/math/5073723749e75fab9ce2dce264f936d83dec4e54.png" alt="R_C(x,y) = R_F(x,y,y) = \frac{1}{2} \int_0^{\infty} \frac{dt}{(t+y) \sqrt{(t+x)}}." /></p> </div><p>If <img class="math" src="../_images/math/7192a0165224d843092ab9cde361c52ccafb7ea4.png" alt="y \in (-\infty,0)"/>, either a value defined by continuity, or with <em>pv=True</em> the Cauchy principal value, can be computed.</p> <p>If <img class="math" src="../_images/math/5baeb2af7bb8343f4481411ae135111a7457ad29.png" alt="x \ge 0, y > 0"/>, the value can be expressed in terms of elementary functions as</p> <div class="math"> <p><img src="../_images/math/439d316af221044946e8a85e2d32880262ec7856.png" alt="R_C(x,y) = \begin{cases} \dfrac{1}{\sqrt{y-x}} \cos^{-1}\left(\sqrt{\dfrac{x}{y}}\right), & x < y \\ \dfrac{1}{\sqrt{y}}, & x = y \\ \dfrac{1}{\sqrt{x-y}} \cosh^{-1}\left(\sqrt{\dfrac{x}{y}}\right), & x > y \\ \end{cases}." /></p> </div><p><strong>Examples</strong></p> <p>Some special values and limits:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">elliprc</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span><span class="p">;</span> <span class="n">elliprc</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">2</span><span class="p">;</span> <span class="o">+</span><span class="n">pi</span> <span class="go">3.141592653589793238462643</span> <span class="go">3.141592653589793238462643</span> <span class="go">3.141592653589793238462643</span> <span class="gp">>>> </span><span class="n">elliprc</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="go">+inf</span> <span class="gp">>>> </span><span class="n">elliprc</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="go">0.2</span> <span class="gp">>>> </span><span class="n">elliprc</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">inf</span><span class="p">);</span> <span class="n">elliprc</span><span class="p">(</span><span class="n">inf</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span> <span class="n">elliprc</span><span class="p">(</span><span class="n">inf</span><span class="p">,</span><span class="n">inf</span><span class="p">)</span> <span class="go">0.0</span> <span class="go">0.0</span> <span class="go">0.0</span> </pre></div> </div> <p>Comparing with the elementary closed-form solution:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">elliprc</span><span class="p">(</span><span class="s">'1/3'</span><span class="p">,</span> <span class="s">'1/5'</span><span class="p">);</span> <span class="n">sqrt</span><span class="p">(</span><span class="mf">7.5</span><span class="p">)</span><span class="o">*</span><span class="n">acosh</span><span class="p">(</span><span class="n">sqrt</span><span class="p">(</span><span class="s">'5/3'</span><span class="p">))</span> <span class="go">2.041630778983498390751238</span> <span class="go">2.041630778983498390751238</span> <span class="gp">>>> </span><span class="n">elliprc</span><span class="p">(</span><span class="s">'1/5'</span><span class="p">,</span> <span class="s">'1/3'</span><span class="p">);</span> <span class="n">sqrt</span><span class="p">(</span><span class="mf">7.5</span><span class="p">)</span><span class="o">*</span><span class="n">acos</span><span class="p">(</span><span class="n">sqrt</span><span class="p">(</span><span class="s">'3/5'</span><span class="p">))</span> <span class="go">1.875180765206547065111085</span> <span class="go">1.875180765206547065111085</span> </pre></div> </div> <p>Comparing with numerical integration:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">q</span> <span class="o">=</span> <span class="n">extradps</span><span class="p">(</span><span class="mi">25</span><span class="p">)(</span><span class="n">quad</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">elliprc</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">,</span> <span class="n">pv</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="go">0.3333969101113672670749334</span> <span class="gp">>>> </span><span class="n">elliprc</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">,</span> <span class="n">pv</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span> <span class="go">(0.3333969101113672670749334 + 0.7024814731040726393156375j)</span> <span class="gp">>>> </span><span class="mf">0.5</span><span class="o">*</span><span class="n">q</span><span class="p">(</span><span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="mi">1</span><span class="o">/</span><span class="p">(</span><span class="n">sqrt</span><span class="p">(</span><span class="n">t</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">t</span><span class="o">-</span><span class="mi">3</span><span class="p">)),</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">3</span><span class="o">-</span><span class="n">j</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="n">inf</span><span class="p">])</span> <span class="go">(0.3333969101113672670749334 + 0.7024814731040726393156375j)</span> </pre></div> </div> </dd></dl> </div> <div class="section" id="elliprj"> <h3><tt class="xref docutils literal"><span class="pre">elliprj()</span></tt><a class="headerlink" href="#elliprj" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.elliprj"> <tt class="descclassname">mpmath.</tt><tt class="descname">elliprj</tt><big>(</big><em>x</em>, <em>y</em>, <em>z</em>, <em>p</em><big>)</big><a class="headerlink" href="#mpmath.elliprj" title="Permalink to this definition">¶</a></dt> <dd><p>Evaluates the Carlson symmetric elliptic integral of the third kind</p> <div class="math"> <p><img src="../_images/math/95a615e641af9317428a8261a045c19c4a9eb761.png" alt="R_J(x,y,z,p) = \frac{3}{2} \int_0^{\infty} \frac{dt}{(t+p)\sqrt{(t+x)(t+y)(t+z)}}." /></p> </div><p>Like <a title="mpmath.elliprf" class="reference internal" href="#mpmath.elliprf"><tt class="xref docutils literal"><span class="pre">elliprf()</span></tt></a>, the branch of the square root in the integrand is defined so as to be continuous along the path of integration for complex values of the arguments.</p> <p><strong>Examples</strong></p> <p>Some values and limits:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">elliprj</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="go">1.0</span> <span class="gp">>>> </span><span class="n">elliprj</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">);</span> <span class="mi">1</span><span class="o">/</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="p">))</span> <span class="go">0.3535533905932737622004222</span> <span class="go">0.3535533905932737622004222</span> <span class="gp">>>> </span><span class="n">elliprj</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span> <span class="go">1.067937989667395702268688</span> <span class="gp">>>> </span><span class="mi">3</span><span class="o">*</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">gamma</span><span class="p">(</span><span class="s">'5/4'</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="n">pi</span><span class="o">**</span><span class="mi">2</span><span class="o">/</span><span class="n">gamma</span><span class="p">(</span><span class="s">'1/4'</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">pi</span><span class="p">))</span> <span class="go">1.067937989667395702268688</span> <span class="gp">>>> </span><span class="n">elliprj</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">);</span> <span class="mi">3</span><span class="o">*</span><span class="n">pi</span><span class="o">*</span><span class="p">(</span><span class="mi">2</span><span class="o">-</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="p">))</span><span class="o">/</span><span class="mi">4</span> <span class="go">1.380226776765915172432054</span> <span class="go">1.380226776765915172432054</span> <span class="gp">>>> </span><span class="n">elliprj</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">);</span> <span class="n">elliprj</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">);</span> <span class="n">elliprj</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="go">+inf</span> <span class="go">+inf</span> <span class="go">+inf</span> <span class="gp">>>> </span><span class="n">elliprj</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">inf</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">);</span> <span class="n">elliprj</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">inf</span><span class="p">)</span> <span class="go">0.0</span> <span class="go">0.0</span> <span class="gp">>>> </span><span class="n">chop</span><span class="p">(</span><span class="n">elliprj</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="n">j</span><span class="p">,</span> <span class="mi">1</span><span class="o">-</span><span class="n">j</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span> <span class="go">0.8505007163686739432927844</span> </pre></div> </div> <p>Scale transformation:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">,</span><span class="n">p</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span> <span class="gp">>>> </span><span class="n">k</span> <span class="o">=</span> <span class="n">mpf</span><span class="p">(</span><span class="mi">100000</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">elliprj</span><span class="p">(</span><span class="n">k</span><span class="o">*</span><span class="n">x</span><span class="p">,</span><span class="n">k</span><span class="o">*</span><span class="n">y</span><span class="p">,</span><span class="n">k</span><span class="o">*</span><span class="n">z</span><span class="p">,</span><span class="n">k</span><span class="o">*</span><span class="n">p</span><span class="p">);</span> <span class="n">k</span><span class="o">**</span><span class="p">(</span><span class="o">-</span><span class="mf">1.5</span><span class="p">)</span><span class="o">*</span><span class="n">elliprj</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">,</span><span class="n">p</span><span class="p">)</span> <span class="go">4.521291677592745527851168e-9</span> <span class="go">4.521291677592745527851168e-9</span> </pre></div> </div> <p>Comparing with numerical integration:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">elliprj</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">)</span> <span class="go">0.2398480997495677621758617</span> <span class="gp">>>> </span><span class="n">f</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="mi">1</span><span class="o">/</span><span class="p">((</span><span class="n">t</span><span class="o">+</span><span class="mi">4</span><span class="p">)</span><span class="o">*</span><span class="n">sqrt</span><span class="p">((</span><span class="n">t</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">t</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">t</span><span class="o">+</span><span class="mi">3</span><span class="p">)))</span> <span class="gp">>>> </span><span class="mf">1.5</span><span class="o">*</span><span class="n">quad</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="n">inf</span><span class="p">])</span> <span class="go">0.2398480997495677621758617</span> <span class="gp">>>> </span><span class="n">elliprj</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="o">+</span><span class="mi">1</span><span class="n">j</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="o">-</span><span class="mi">2</span><span class="n">j</span><span class="p">)</span> <span class="go">(0.216888906014633498739952 + 0.04081912627366673332369512j)</span> <span class="gp">>>> </span><span class="n">f</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="mi">1</span><span class="o">/</span><span class="p">((</span><span class="n">t</span><span class="o">+</span><span class="mi">4</span><span class="o">-</span><span class="mi">2</span><span class="n">j</span><span class="p">)</span><span class="o">*</span><span class="n">sqrt</span><span class="p">((</span><span class="n">t</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">t</span><span class="o">+</span><span class="mi">2</span><span class="o">+</span><span class="mi">1</span><span class="n">j</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">t</span><span class="o">+</span><span class="mi">3</span><span class="p">)))</span> <span class="gp">>>> </span><span class="mf">1.5</span><span class="o">*</span><span class="n">quad</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="n">inf</span><span class="p">])</span> <span class="go">(0.216888906014633498739952 + 0.04081912627366673332369511j)</span> </pre></div> </div> </dd></dl> </div> <div class="section" id="elliprd"> <h3><tt class="xref docutils literal"><span class="pre">elliprd()</span></tt><a class="headerlink" href="#elliprd" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.elliprd"> <tt class="descclassname">mpmath.</tt><tt class="descname">elliprd</tt><big>(</big><em>x</em>, <em>y</em>, <em>z</em><big>)</big><a class="headerlink" href="#mpmath.elliprd" title="Permalink to this definition">¶</a></dt> <dd><p>Evaluates the degenerate Carlson symmetric elliptic integral of the third kind or Carlson elliptic integral of the second kind <img class="math" src="../_images/math/d5138a92cfa026ebb10c536141157f6a85d500bc.png" alt="R_D(x,y,z) = R_J(x,y,z,z)"/>.</p> <p>See <a title="mpmath.elliprj" class="reference internal" href="#mpmath.elliprj"><tt class="xref docutils literal"><span class="pre">elliprj()</span></tt></a> for additional information.</p> <p><strong>Examples</strong></p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">elliprd</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">)</span> <span class="go">0.2904602810289906442326534</span> <span class="gp">>>> </span><span class="n">elliprj</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">)</span> <span class="go">0.2904602810289906442326534</span> </pre></div> </div> <p>The so-called <em>second lemniscate constant</em>, a transcendental number:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">elliprd</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="mi">3</span> <span class="go">0.5990701173677961037199612</span> <span class="gp">>>> </span><span class="n">extradps</span><span class="p">(</span><span class="mi">25</span><span class="p">)(</span><span class="n">quad</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="n">t</span><span class="o">**</span><span class="mi">2</span><span class="o">/</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="n">t</span><span class="o">**</span><span class="mi">4</span><span class="p">),</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span> <span class="go">0.5990701173677961037199612</span> <span class="gp">>>> </span><span class="n">gamma</span><span class="p">(</span><span class="s">'3/4'</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="o">/</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">pi</span><span class="p">)</span> <span class="go">0.5990701173677961037199612</span> </pre></div> </div> </dd></dl> </div> <div class="section" id="elliprg"> <h3><tt class="xref docutils literal"><span class="pre">elliprg()</span></tt><a class="headerlink" href="#elliprg" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.elliprg"> <tt class="descclassname">mpmath.</tt><tt class="descname">elliprg</tt><big>(</big><em>x</em>, <em>y</em>, <em>z</em><big>)</big><a class="headerlink" href="#mpmath.elliprg" title="Permalink to this definition">¶</a></dt> <dd><p>Evaluates the Carlson completely symmetric elliptic integral of the second kind</p> <div class="math"> <p><img src="../_images/math/ff1baa05c040f368e34c2f3c3c0b58211af14429.png" alt="R_G(x,y,z) = \frac{1}{4} \int_0^{\infty} \frac{t}{\sqrt{(t+x)(t+y)(t+z)}} \left( \frac{x}{t+x} + \frac{y}{t+y} + \frac{z}{t+z}\right) dt." /></p> </div><p><strong>Examples</strong></p> <p>Evaluation for real and complex arguments:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">elliprg</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span><span class="p">;</span> <span class="o">+</span><span class="n">pi</span> <span class="go">3.141592653589793238462643</span> <span class="go">3.141592653589793238462643</span> <span class="gp">>>> </span><span class="n">elliprg</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.5</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="go">0.6753219405238377512600874</span> <span class="gp">>>> </span><span class="n">chop</span><span class="p">(</span><span class="n">elliprg</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="n">j</span><span class="p">,</span> <span class="mi">1</span><span class="o">-</span><span class="n">j</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> <span class="go">1.172431327676416604532822</span> </pre></div> </div> <p>A double integral that can be evaluated in terms of <img class="math" src="../_images/math/436a0b303206b4d357ff9db947c757012dcacac9.png" alt="R_G"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span> <span class="gp">>>> </span><span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">t</span><span class="p">,</span><span class="n">u</span><span class="p">):</span> <span class="gp">... </span> <span class="n">st</span> <span class="o">=</span> <span class="n">fp</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">t</span><span class="p">);</span> <span class="n">ct</span> <span class="o">=</span> <span class="n">fp</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="gp">... </span> <span class="n">su</span> <span class="o">=</span> <span class="n">fp</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">u</span><span class="p">);</span> <span class="n">cu</span> <span class="o">=</span> <span class="n">fp</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="gp">... </span> <span class="k">return</span> <span class="p">(</span><span class="n">x</span><span class="o">*</span><span class="p">(</span><span class="n">st</span><span class="o">*</span><span class="n">cu</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="n">y</span><span class="o">*</span><span class="p">(</span><span class="n">st</span><span class="o">*</span><span class="n">su</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="n">z</span><span class="o">*</span><span class="n">ct</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span><span class="o">**</span><span class="mf">0.5</span> <span class="o">*</span> <span class="n">st</span> <span class="gp">...</span> <span class="gp">>>> </span><span class="n">nprint</span><span class="p">(</span><span class="n">mpf</span><span class="p">(</span><span class="n">fp</span><span class="o">.</span><span class="n">quad</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="n">fp</span><span class="o">.</span><span class="n">pi</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">fp</span><span class="o">.</span><span class="n">pi</span><span class="p">])</span><span class="o">/</span><span class="p">(</span><span class="mi">4</span><span class="o">*</span><span class="n">fp</span><span class="o">.</span><span class="n">pi</span><span class="p">)),</span> <span class="mi">13</span><span class="p">)</span> <span class="go">1.725503028069</span> <span class="gp">>>> </span><span class="n">nprint</span><span class="p">(</span><span class="n">elliprg</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">),</span> <span class="mi">13</span><span class="p">)</span> <span class="go">1.725503028069</span> </pre></div> </div> </dd></dl> </div> </div> <div class="section" id="jacobi-theta-functions"> <h2>Jacobi theta functions<a class="headerlink" href="#jacobi-theta-functions" title="Permalink to this headline">¶</a></h2> <div class="section" id="jtheta"> <h3><tt class="xref docutils literal"><span class="pre">jtheta()</span></tt><a class="headerlink" href="#jtheta" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.jtheta"> <tt class="descclassname">mpmath.</tt><tt class="descname">jtheta</tt><big>(</big><em>n</em>, <em>z</em>, <em>q</em>, <em>derivative=0</em><big>)</big><a class="headerlink" href="#mpmath.jtheta" title="Permalink to this definition">¶</a></dt> <dd><p>Computes the Jacobi theta function <img class="math" src="../_images/math/c3cf9a7b93535d07185603a625973776a711146a.png" alt="\vartheta_n(z, q)"/>, where <img class="math" src="../_images/math/2ccb96c3451d351085035d873b42734c582c37c6.png" alt="n = 1, 2, 3, 4"/>, defined by the infinite series:</p> <div class="math"> <p><img src="../_images/math/1d6462a4086bcc70c1df40c08d404d346f144106.png" alt="\vartheta_1(z,q) = 2 q^{1/4} \sum_{n=0}^{\infty} (-1)^n q^{n^2+n\,} \sin((2n+1)z) \vartheta_2(z,q) = 2 q^{1/4} \sum_{n=0}^{\infty} q^{n^{2\,} + n} \cos((2n+1)z) \vartheta_3(z,q) = 1 + 2 \sum_{n=1}^{\infty} q^{n^2\,} \cos(2 n z) \vartheta_4(z,q) = 1 + 2 \sum_{n=1}^{\infty} (-q)^{n^2\,} \cos(2 n z)" /></p> </div><p>The theta functions are functions of two variables:</p> <ul class="simple"> <li><img class="math" src="../_images/math/b13f21416d84e13708696f34dea81026cda583c9.png" alt="z"/> is the <em>argument</em>, an arbitrary real or complex number</li> <li><img class="math" src="../_images/math/0615acc3725de21025457e7d6f7694dab8e2f758.png" alt="q"/> is the <em>nome</em>, which must be a real or complex number in the unit disk (i.e. <img class="math" src="../_images/math/1ac3bec0deb1b3d8164b2938edd7bb85d132b005.png" alt="|q| < 1"/>). For <img class="math" src="../_images/math/90857d9871b7c3fa3da5e460b4dcf28e15010383.png" alt="|q| \ll 1"/>, the series converge very quickly, so the Jacobi theta functions can efficiently be evaluated to high precision.</li> </ul> <p>The compact notations <img class="math" src="../_images/math/31facbaea3148747a34c271634f575a0b8f375d6.png" alt="\vartheta_n(q) = \vartheta_n(0,q)"/> and <img class="math" src="../_images/math/3b667cd19acc01190a00fd75c54ae6c7dac96149.png" alt="\vartheta_n = \vartheta_n(0,q)"/> are also frequently encountered. Finally, Jacobi theta functions are frequently considered as functions of the half-period ratio <img class="math" src="../_images/math/1dc1c0119a604b91be9142370dc3159b6a9bbcb9.png" alt="\tau"/> and then usually denoted by <img class="math" src="../_images/math/8504614f9cdc6601ddec06319e3750c7fa1ed274.png" alt="\vartheta_n(z|\tau)"/>.</p> <p>Optionally, <tt class="docutils literal"><span class="pre">jtheta(n,</span> <span class="pre">z,</span> <span class="pre">q,</span> <span class="pre">derivative=d)</span></tt> with <img class="math" src="../_images/math/a0224701c4b2abd86b0caed6287a52296cfa468e.png" alt="d > 0"/> computes a <img class="math" src="../_images/math/96ab646de7704969b91c76a214126b45f2b07b25.png" alt="d"/>-th derivative with respect to <img class="math" src="../_images/math/b13f21416d84e13708696f34dea81026cda583c9.png" alt="z"/>.</p> <p><strong>Examples and basic properties</strong></p> <p>Considered as functions of <img class="math" src="../_images/math/b13f21416d84e13708696f34dea81026cda583c9.png" alt="z"/>, the Jacobi theta functions may be viewed as generalizations of the ordinary trigonometric functions cos and sin. They are periodic functions:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">,</span> <span class="s">'0.2'</span><span class="p">)</span> <span class="go">0.2945120798627300045053104</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mf">0.25</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">pi</span><span class="p">,</span> <span class="s">'0.2'</span><span class="p">)</span> <span class="go">0.2945120798627300045053104</span> </pre></div> </div> <p>Indeed, the series defining the theta functions are essentially trigonometric Fourier series. The coefficients can be retrieved using <a title="mpmath.fourier" class="reference external" href="../calculus/approximation.html#mpmath.fourier"><tt class="xref docutils literal"><span class="pre">fourier()</span></tt></a>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">10</span> <span class="gp">>>> </span><span class="n">nprint</span><span class="p">(</span><span class="n">fourier</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="p">[</span><span class="o">-</span><span class="n">pi</span><span class="p">,</span> <span class="n">pi</span><span class="p">],</span> <span class="mi">4</span><span class="p">))</span> <span class="go">([0.0, 1.68179, 0.0, 0.420448, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0])</span> </pre></div> </div> <p>The Jacobi theta functions are also so-called quasiperiodic functions of <img class="math" src="../_images/math/b13f21416d84e13708696f34dea81026cda583c9.png" alt="z"/> and <img class="math" src="../_images/math/1dc1c0119a604b91be9142370dc3159b6a9bbcb9.png" alt="\tau"/>, meaning that for fixed <img class="math" src="../_images/math/1dc1c0119a604b91be9142370dc3159b6a9bbcb9.png" alt="\tau"/>, <img class="math" src="../_images/math/c3cf9a7b93535d07185603a625973776a711146a.png" alt="\vartheta_n(z, q)"/> and <img class="math" src="../_images/math/8033b3c805ad08f4434c5ce0f3a1e63e8e319a8d.png" alt="\vartheta_n(z+\pi \tau, q)"/> are the same except for an exponential factor:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span> <span class="gp">>>> </span><span class="n">tau</span> <span class="o">=</span> <span class="mi">3</span><span class="o">*</span><span class="n">j</span><span class="o">/</span><span class="mi">10</span> <span class="gp">>>> </span><span class="n">q</span> <span class="o">=</span> <span class="n">exp</span><span class="p">(</span><span class="n">pi</span><span class="o">*</span><span class="n">j</span><span class="o">*</span><span class="n">tau</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">z</span> <span class="o">=</span> <span class="mi">10</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">z</span><span class="o">+</span><span class="n">tau</span><span class="o">*</span><span class="n">pi</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="go">(-0.682420280786034687520568 + 1.526683999721399103332021j)</span> <span class="gp">>>> </span><span class="o">-</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">j</span><span class="o">*</span><span class="n">z</span><span class="p">)</span><span class="o">/</span><span class="n">q</span> <span class="o">*</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span> <span class="go">(-0.682420280786034687520568 + 1.526683999721399103332021j)</span> </pre></div> </div> <p>The Jacobi theta functions satisfy a huge number of other functional equations, such as the following identity (valid for any <img class="math" src="../_images/math/0615acc3725de21025457e7d6f7694dab8e2f758.png" alt="q"/>):</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">q</span> <span class="o">=</span> <span class="n">mpf</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="o">/</span><span class="mi">10</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">q</span><span class="p">)</span><span class="o">**</span><span class="mi">4</span> <span class="go">6.823744089352763305137427</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">q</span><span class="p">)</span><span class="o">**</span><span class="mi">4</span> <span class="o">+</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">q</span><span class="p">)</span><span class="o">**</span><span class="mi">4</span> <span class="go">6.823744089352763305137427</span> </pre></div> </div> <p>Extensive listings of identities satisfied by the Jacobi theta functions can be found in standard reference works.</p> <p>The Jacobi theta functions are related to the gamma function for special arguments:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">pi</span><span class="p">))</span> <span class="go">1.086434811213308014575316</span> <span class="gp">>>> </span><span class="n">pi</span><span class="o">**</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mf">4.</span><span class="p">)</span> <span class="o">/</span> <span class="n">gamma</span><span class="p">(</span><span class="mi">3</span><span class="o">/</span><span class="mf">4.</span><span class="p">)</span> <span class="go">1.086434811213308014575316</span> </pre></div> </div> <p><a title="mpmath.jtheta" class="reference internal" href="#mpmath.jtheta"><tt class="xref docutils literal"><span class="pre">jtheta()</span></tt></a> supports arbitrary precision evaluation and complex arguments:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">50</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="mf">0.5</span><span class="p">)</span> <span class="go">2.0549510717571539127004115835148878097035750653737</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="n">j</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="n">j</span><span class="p">)</span><span class="o">/</span><span class="mi">5</span><span class="p">)</span> <span class="go">(7.180331760146805926356634 - 1.634292858119162417301683j)</span> </pre></div> </div> <p>Evaluation of derivatives:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="n">diff</span><span class="p">(</span><span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">),</span> <span class="mi">7</span><span class="p">)</span> <span class="go">1.209857192844475388637236</span> <span class="go">1.209857192844475388637236</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> <span class="n">diff</span><span class="p">(</span><span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">),</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="go">-0.2598718791650217206533052</span> <span class="go">-0.2598718791650217206533052</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="n">diff</span><span class="p">(</span><span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">),</span> <span class="mi">7</span><span class="p">)</span> <span class="go">-1.150231437070259644461474</span> <span class="go">-1.150231437070259644461474</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> <span class="n">diff</span><span class="p">(</span><span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">),</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="go">-0.6226636990043777445898114</span> <span class="go">-0.6226636990043777445898114</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="n">diff</span><span class="p">(</span><span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">),</span> <span class="mi">7</span><span class="p">)</span> <span class="go">-0.9990312046096634316587882</span> <span class="go">-0.9990312046096634316587882</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> <span class="n">diff</span><span class="p">(</span><span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">),</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="go">-0.1530388693066334936151174</span> <span class="go">-0.1530388693066334936151174</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="n">diff</span><span class="p">(</span><span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">),</span> <span class="mi">7</span><span class="p">)</span> <span class="go">0.9820995967262793943571139</span> <span class="go">0.9820995967262793943571139</span> <span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> <span class="n">diff</span><span class="p">(</span><span class="k">lambda</span> <span class="n">z</span><span class="p">:</span> <span class="n">jtheta</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">),</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="go">0.3936902850291437081667755</span> <span class="go">0.3936902850291437081667755</span> </pre></div> </div> <p><strong>Possible issues</strong></p> <p>For <img class="math" src="../_images/math/e7f46a50bae4c4ba199b8f1eba5497c4d8751d40.png" alt="|q| \ge 1"/> or <img class="math" src="../_images/math/22a257eca6d85bb59e15945d8ac6309a92cbe915.png" alt="\Im(\tau) \le 0"/>, <a title="mpmath.jtheta" class="reference internal" href="#mpmath.jtheta"><tt class="xref docutils literal"><span class="pre">jtheta()</span></tt></a> raises <tt class="docutils literal"><span class="pre">ValueError</span></tt>. This exception is also raised for <img class="math" src="../_images/math/f3e0d75c3450ca8f389d08d904ed1fc695734539.png" alt="|q|"/> extremely close to 1 (or equivalently <img class="math" src="../_images/math/1dc1c0119a604b91be9142370dc3159b6a9bbcb9.png" alt="\tau"/> very close to 0), since the series would converge too slowly:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">jtheta</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mf">0.99999999</span> <span class="o">*</span> <span class="n">exp</span><span class="p">(</span><span class="mf">0.5</span><span class="o">*</span><span class="n">j</span><span class="p">))</span> <span class="gt">Traceback (most recent call last):</span> <span class="c">...</span> <span class="nc">ValueError</span>: <span class="n-Identifier">abs(q) > THETA_Q_LIM = 1.000000</span> </pre></div> </div> </dd></dl> </div> </div> <div class="section" id="jacobi-elliptic-functions"> <h2>Jacobi elliptic functions<a class="headerlink" href="#jacobi-elliptic-functions" title="Permalink to this headline">¶</a></h2> <div class="section" id="ellipfun"> <h3><tt class="xref docutils literal"><span class="pre">ellipfun()</span></tt><a class="headerlink" href="#ellipfun" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.ellipfun"> <tt class="descclassname">mpmath.</tt><tt class="descname">ellipfun</tt><big>(</big><em>kind</em>, <em>u=None</em>, <em>m=None</em>, <em>q=None</em>, <em>k=None</em>, <em>tau=None</em><big>)</big><a class="headerlink" href="#mpmath.ellipfun" title="Permalink to this definition">¶</a></dt> <dd><p>Computes any of the Jacobi elliptic functions, defined in terms of Jacobi theta functions as</p> <div class="math"> <p><img src="../_images/math/2a7acf8a95adedaf6afb65b54ea5ddb5ded87379.png" alt="\mathrm{sn}(u,m) = \frac{\vartheta_3(0,q)}{\vartheta_2(0,q)} \frac{\vartheta_1(t,q)}{\vartheta_4(t,q)} \mathrm{cn}(u,m) = \frac{\vartheta_4(0,q)}{\vartheta_2(0,q)} \frac{\vartheta_2(t,q)}{\vartheta_4(t,q)} \mathrm{dn}(u,m) = \frac{\vartheta_4(0,q)}{\vartheta_3(0,q)} \frac{\vartheta_3(t,q)}{\vartheta_4(t,q)}," /></p> </div><p>or more generally computes a ratio of two such functions. Here <img class="math" src="../_images/math/ddc26af4580eedb32c3ceb081d263eac3333d4f6.png" alt="t = u/\vartheta_3(0,q)^2"/>, and <img class="math" src="../_images/math/f43979d77d5a097ee3837758752d428a0e6af2e9.png" alt="q = q(m)"/> denotes the nome (see <tt class="xref docutils literal"><span class="pre">nome()</span></tt>). Optionally, you can specify the nome directly instead of <img class="math" src="../_images/math/f5047d1e0cbb50ec208923a22cd517c55100fa7b.png" alt="m"/> by passing <tt class="docutils literal"><span class="pre">q=<value></span></tt>, or you can directly specify the elliptic parameter <img class="math" src="../_images/math/8c325612684d41304b9751c175df7bcc0f61f64f.png" alt="k"/> with <tt class="docutils literal"><span class="pre">k=<value></span></tt>.</p> <p>The first argument should be a two-character string specifying the function using any combination of <tt class="docutils literal"><span class="pre">'s'</span></tt>, <tt class="docutils literal"><span class="pre">'c'</span></tt>, <tt class="docutils literal"><span class="pre">'d'</span></tt>, <tt class="docutils literal"><span class="pre">'n'</span></tt>. These letters respectively denote the basic functions <img class="math" src="../_images/math/9ff6cec40b3994b7b3ef044b7afc2ac53c30d948.png" alt="\mathrm{sn}(u,m)"/>, <img class="math" src="../_images/math/a77093951daa4f61fe9ba30ef262144435796f5b.png" alt="\mathrm{cn}(u,m)"/>, <img class="math" src="../_images/math/c1b9eaa599398f0f645821e088b51b880cc0b13c.png" alt="\mathrm{dn}(u,m)"/>, and <img class="math" src="../_images/math/dce34f4dfb2406144304ad0d6106c5382ddd1446.png" alt="1"/>. The identifier specifies the ratio of two such functions. For example, <tt class="docutils literal"><span class="pre">'ns'</span></tt> identifies the function</p> <div class="math"> <p><img src="../_images/math/1364d2acd9a7ab094fbd4a19a353581deb5a2e44.png" alt="\mathrm{ns}(u,m) = \frac{1}{\mathrm{sn}(u,m)}" /></p> </div><p>and <tt class="docutils literal"><span class="pre">'cd'</span></tt> identifies the function</p> <div class="math"> <p><img src="../_images/math/71fd80ce68755eb1585a0ba0ae6d908f2689047f.png" alt="\mathrm{cd}(u,m) = \frac{\mathrm{cn}(u,m)}{\mathrm{dn}(u,m)}." /></p> </div><p>If called with only the first argument, a function object evaluating the chosen function for given arguments is returned.</p> <p><strong>Examples</strong></p> <p>Basic evaluation:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">ellipfun</span><span class="p">(</span><span class="s">'cd'</span><span class="p">,</span> <span class="mf">3.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span> <span class="go">-0.9891101840595543931308394</span> <span class="gp">>>> </span><span class="n">ellipfun</span><span class="p">(</span><span class="s">'cd'</span><span class="p">,</span> <span class="mf">3.5</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="mf">0.25</span><span class="p">)</span> <span class="go">0.07111979240214668158441418</span> </pre></div> </div> <p>The sn-function is doubly periodic in the complex plane with periods <img class="math" src="../_images/math/06f1dddb3f8dc6bc1be20dfa3d96014ffb755016.png" alt="4 K(m)"/> and <img class="math" src="../_images/math/61df763bbb98a23963bd7678ac9a2449d93cb9d8.png" alt="2 i K(1-m)"/> (see <a title="mpmath.ellipk" class="reference internal" href="#mpmath.ellipk"><tt class="xref docutils literal"><span class="pre">ellipk()</span></tt></a>):</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">sn</span> <span class="o">=</span> <span class="n">ellipfun</span><span class="p">(</span><span class="s">'sn'</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">sn</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">)</span> <span class="go">0.9628981775982774425751399</span> <span class="gp">>>> </span><span class="n">sn</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">4</span><span class="o">*</span><span class="n">ellipk</span><span class="p">(</span><span class="mf">0.25</span><span class="p">),</span> <span class="mf">0.25</span><span class="p">)</span> <span class="go">0.9628981775982774425751399</span> <span class="gp">>>> </span><span class="n">chop</span><span class="p">(</span><span class="n">sn</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">j</span><span class="o">*</span><span class="n">ellipk</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="mf">0.25</span><span class="p">),</span> <span class="mf">0.25</span><span class="p">))</span> <span class="go">0.9628981775982774425751399</span> </pre></div> </div> <p>The cn-function is doubly periodic with periods <img class="math" src="../_images/math/06f1dddb3f8dc6bc1be20dfa3d96014ffb755016.png" alt="4 K(m)"/> and <img class="math" src="../_images/math/97c78b4046b5cc8c8e69da51ed3a0bb91e5c66e1.png" alt="4 i K(1-m)"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">cn</span> <span class="o">=</span> <span class="n">ellipfun</span><span class="p">(</span><span class="s">'cn'</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">cn</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">)</span> <span class="go">-0.2698649654510865792581416</span> <span class="gp">>>> </span><span class="n">cn</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">4</span><span class="o">*</span><span class="n">ellipk</span><span class="p">(</span><span class="mf">0.25</span><span class="p">),</span> <span class="mf">0.25</span><span class="p">)</span> <span class="go">-0.2698649654510865792581416</span> <span class="gp">>>> </span><span class="n">chop</span><span class="p">(</span><span class="n">cn</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">4</span><span class="o">*</span><span class="n">j</span><span class="o">*</span><span class="n">ellipk</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="mf">0.25</span><span class="p">),</span> <span class="mf">0.25</span><span class="p">))</span> <span class="go">-0.2698649654510865792581416</span> </pre></div> </div> <p>The dn-function is doubly periodic with periods <img class="math" src="../_images/math/19581a1a0b61aa8752b5fc45e389f124d430cdeb.png" alt="2 K(m)"/> and <img class="math" src="../_images/math/97c78b4046b5cc8c8e69da51ed3a0bb91e5c66e1.png" alt="4 i K(1-m)"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">dn</span> <span class="o">=</span> <span class="n">ellipfun</span><span class="p">(</span><span class="s">'dn'</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">dn</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">)</span> <span class="go">0.8764740583123262286931578</span> <span class="gp">>>> </span><span class="n">dn</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">ellipk</span><span class="p">(</span><span class="mf">0.25</span><span class="p">),</span> <span class="mf">0.25</span><span class="p">)</span> <span class="go">0.8764740583123262286931578</span> <span class="gp">>>> </span><span class="n">chop</span><span class="p">(</span><span class="n">dn</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">4</span><span class="o">*</span><span class="n">j</span><span class="o">*</span><span class="n">ellipk</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="mf">0.25</span><span class="p">),</span> <span class="mf">0.25</span><span class="p">))</span> <span class="go">0.8764740583123262286931578</span> </pre></div> </div> </dd></dl> </div> </div> <div class="section" id="modular-functions"> <h2>Modular functions<a class="headerlink" href="#modular-functions" title="Permalink to this headline">¶</a></h2> <div class="section" id="kleinj"> <h3><tt class="xref docutils literal"><span class="pre">kleinj()</span></tt><a class="headerlink" href="#kleinj" title="Permalink to this headline">¶</a></h3> <dl class="function"> <dt id="mpmath.kleinj"> <tt class="descclassname">mpmath.</tt><tt class="descname">kleinj</tt><big>(</big><em>tau=None</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#mpmath.kleinj" title="Permalink to this definition">¶</a></dt> <dd><p>Evaluates the Klein j-invariant, which is a modular function defined for <img class="math" src="../_images/math/1dc1c0119a604b91be9142370dc3159b6a9bbcb9.png" alt="\tau"/> in the upper half-plane as</p> <div class="math"> <p><img src="../_images/math/d356bb7eb198ba53c25f1b335f1cd41b3b965e77.png" alt="J(\tau) = \frac{g_2^3(\tau)}{g_2^3(\tau) - 27 g_3^2(\tau)}" /></p> </div><p>where <img class="math" src="../_images/math/a6053907b455e0ef20a366e07f007ac4fc0eb002.png" alt="g_2"/> and <img class="math" src="../_images/math/c40081c7061430d2ce8156fd4073dbedaee3ad36.png" alt="g_3"/> are the modular invariants of the Weierstrass elliptic function,</p> <div class="math"> <p><img src="../_images/math/a5367db3d178d46f1927197378b78c49ab0fc8ba.png" alt="g_2(\tau) = 60 \sum_{(m,n) \in \mathbb{Z}^2 \setminus (0,0)} (m \tau+n)^{-4} g_3(\tau) = 140 \sum_{(m,n) \in \mathbb{Z}^2 \setminus (0,0)} (m \tau+n)^{-6}." /></p> </div><p>An alternative, common notation is that of the j-function <img class="math" src="../_images/math/0e9150aee4bd61b1224ab7d9482f1889f5a71803.png" alt="j(\tau) = 1728 J(\tau)"/>.</p> <p><strong>Plots</strong></p> <div class="highlight-python"><div class="highlight"><pre><span class="c"># Klein J-function as function of the number-theoretic nome</span> <span class="n">fp</span><span class="o">.</span><span class="n">cplot</span><span class="p">(</span><span class="k">lambda</span> <span class="n">q</span><span class="p">:</span> <span class="n">fp</span><span class="o">.</span><span class="n">kleinj</span><span class="p">(</span><span class="n">qbar</span><span class="o">=</span><span class="n">q</span><span class="p">),</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span> <span class="n">points</span><span class="o">=</span><span class="mi">50000</span><span class="p">)</span> </pre></div> </div> <img alt="../_images/kleinj.png" src="../_images/kleinj.png" /> <div class="highlight-python"><div class="highlight"><pre><span class="c"># Klein J-function as function of the half-period ratio</span> <span class="n">fp</span><span class="o">.</span><span class="n">cplot</span><span class="p">(</span><span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="n">fp</span><span class="o">.</span><span class="n">kleinj</span><span class="p">(</span><span class="n">tau</span><span class="o">=</span><span class="n">t</span><span class="p">),</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mf">1.5</span><span class="p">],</span> <span class="n">points</span><span class="o">=</span><span class="mi">50000</span><span class="p">)</span> </pre></div> </div> <img alt="../_images/kleinj2.png" src="../_images/kleinj2.png" /> <p><strong>Examples</strong></p> <p>Verifying the functional equation <img class="math" src="../_images/math/5e35bfbbf1629282b4f88402550c537ff5f362d8.png" alt="J(\tau) = J(\tau+1) = J(-\tau^{-1})"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">mpmath</span> <span class="kn">import</span> <span class="o">*</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> <span class="n">mp</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="bp">True</span> <span class="gp">>>> </span><span class="n">tau</span> <span class="o">=</span> <span class="mf">0.625</span><span class="o">+</span><span class="mf">0.75</span><span class="o">*</span><span class="n">j</span> <span class="gp">>>> </span><span class="n">tau</span> <span class="o">=</span> <span class="mf">0.625</span><span class="o">+</span><span class="mf">0.75</span><span class="o">*</span><span class="n">j</span> <span class="gp">>>> </span><span class="n">kleinj</span><span class="p">(</span><span class="n">tau</span><span class="p">)</span> <span class="go">(-0.1507492166511182267125242 + 0.07595948379084571927228948j)</span> <span class="gp">>>> </span><span class="n">kleinj</span><span class="p">(</span><span class="n">tau</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="go">(-0.1507492166511182267125242 + 0.07595948379084571927228948j)</span> <span class="gp">>>> </span><span class="n">kleinj</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="o">/</span><span class="n">tau</span><span class="p">)</span> <span class="go">(-0.1507492166511182267125242 + 0.07595948379084571927228946j)</span> </pre></div> </div> <p>The j-function has a famous Laurent series expansion in terms of the nome <img class="math" src="../_images/math/bf527e68a0e92e9bce3a32ca38e006f145e0da19.png" alt="\bar{q}"/>, <img class="math" src="../_images/math/faa281e95775b6d3a4eb51c27dd2626503f54f26.png" alt="j(\tau) = \bar{q}^{-1} + 744 + 196884\bar{q} + \ldots"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">15</span> <span class="gp">>>> </span><span class="n">taylor</span><span class="p">(</span><span class="k">lambda</span> <span class="n">q</span><span class="p">:</span> <span class="mi">1728</span><span class="o">*</span><span class="n">q</span><span class="o">*</span><span class="n">kleinj</span><span class="p">(</span><span class="n">qbar</span><span class="o">=</span><span class="n">q</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="n">singular</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="go">[1.0, 744.0, 196884.0, 21493760.0, 864299970.0, 20245856256.0]</span> </pre></div> </div> <p>The j-function admits exact evaluation at special algebraic points related to the Heegner numbers 1, 2, 3, 7, 11, 19, 43, 67, 163:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="nd">@extraprec</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="gp">... </span><span class="k">def</span> <span class="nf">h</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> <span class="gp">... </span> <span class="n">v</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="n">sqrt</span><span class="p">(</span><span class="n">n</span><span class="p">)</span><span class="o">*</span><span class="n">j</span><span class="p">)</span> <span class="gp">... </span> <span class="k">if</span> <span class="n">n</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span> <span class="gp">... </span> <span class="n">v</span> <span class="o">*=</span> <span class="mf">0.5</span> <span class="gp">... </span> <span class="k">return</span> <span class="n">v</span> <span class="gp">...</span> <span class="gp">>>> </span><span class="n">mp</span><span class="o">.</span><span class="n">dps</span> <span class="o">=</span> <span class="mi">25</span> <span class="gp">>>> </span><span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">11</span><span class="p">,</span><span class="mi">19</span><span class="p">,</span><span class="mi">43</span><span class="p">,</span><span class="mi">67</span><span class="p">,</span><span class="mi">163</span><span class="p">]:</span> <span class="gp">... </span> <span class="n">n</span><span class="p">,</span> <span class="n">chop</span><span class="p">(</span><span class="mi">1728</span><span class="o">*</span><span class="n">kleinj</span><span class="p">(</span><span class="n">h</span><span class="p">(</span><span class="n">n</span><span class="p">)))</span> <span class="gp">...</span> <span class="go">(1, 1728.0)</span> <span class="go">(2, 8000.0)</span> <span class="go">(3, 0.0)</span> <span class="go">(7, -3375.0)</span> <span class="go">(11, -32768.0)</span> <span class="go">(19, -884736.0)</span> <span class="go">(43, -884736000.0)</span> <span class="go">(67, -147197952000.0)</span> <span class="go">(163, -262537412640768000.0)</span> </pre></div> </div> <p>Also at other special points, the j-function assumes explicit algebraic values, e.g.:</p> <div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">chop</span><span class="p">(</span><span class="mi">1728</span><span class="o">*</span><span class="n">kleinj</span><span class="p">(</span><span class="n">j</span><span class="o">*</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">5</span><span class="p">)))</span> <span class="go">1264538.909475140509320227</span> <span class="gp">>>> </span><span class="n">identify</span><span class="p">(</span><span class="n">cbrt</span><span class="p">(</span><span class="n">_</span><span class="p">))</span> <span class="c"># note: not simplified</span> <span class="go">'((100+sqrt(13520))/2)'</span> <span class="gp">>>> </span><span class="p">(</span><span class="mi">50</span><span class="o">+</span><span class="mi">26</span><span class="o">*</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">5</span><span class="p">))</span><span class="o">**</span><span class="mi">3</span> <span class="go">1264538.909475140509320227</span> </pre></div> </div> </dd></dl> </div> </div> </div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3><a href="../index.html">Table Of Contents</a></h3> <ul> <li><a class="reference external" href="#">Elliptic functions</a><ul> <li><a class="reference external" href="#elliptic-arguments">Elliptic arguments</a><ul> <li><a class="reference external" href="#qfrom"><tt class="docutils literal"><span class="pre">qfrom()</span></tt></a></li> <li><a class="reference external" href="#qbarfrom"><tt class="docutils literal"><span class="pre">qbarfrom()</span></tt></a></li> <li><a class="reference external" href="#mfrom"><tt class="docutils literal"><span class="pre">mfrom()</span></tt></a></li> <li><a class="reference external" href="#kfrom"><tt class="docutils literal"><span class="pre">kfrom()</span></tt></a></li> <li><a class="reference external" href="#taufrom"><tt class="docutils literal"><span class="pre">taufrom()</span></tt></a></li> </ul> </li> <li><a class="reference external" href="#legendre-elliptic-integrals">Legendre elliptic integrals</a><ul> <li><a class="reference external" href="#ellipk"><tt class="docutils literal"><span class="pre">ellipk()</span></tt></a></li> <li><a class="reference external" href="#ellipf"><tt class="docutils literal"><span class="pre">ellipf()</span></tt></a></li> <li><a class="reference external" href="#ellipe"><tt class="docutils literal"><span class="pre">ellipe()</span></tt></a></li> <li><a class="reference external" href="#ellippi"><tt class="docutils literal"><span class="pre">ellippi()</span></tt></a></li> </ul> </li> <li><a class="reference external" href="#carlson-symmetric-elliptic-integrals">Carlson symmetric elliptic integrals</a><ul> <li><a class="reference external" href="#elliprf"><tt class="docutils literal"><span class="pre">elliprf()</span></tt></a></li> <li><a class="reference external" href="#elliprc"><tt class="docutils literal"><span class="pre">elliprc()</span></tt></a></li> <li><a class="reference external" href="#elliprj"><tt class="docutils literal"><span class="pre">elliprj()</span></tt></a></li> <li><a class="reference external" href="#elliprd"><tt class="docutils literal"><span class="pre">elliprd()</span></tt></a></li> <li><a class="reference external" href="#elliprg"><tt class="docutils literal"><span class="pre">elliprg()</span></tt></a></li> </ul> </li> <li><a class="reference external" href="#jacobi-theta-functions">Jacobi theta functions</a><ul> <li><a class="reference external" href="#jtheta"><tt class="docutils literal"><span class="pre">jtheta()</span></tt></a></li> </ul> </li> <li><a class="reference external" href="#jacobi-elliptic-functions">Jacobi elliptic functions</a><ul> <li><a class="reference external" href="#ellipfun"><tt class="docutils literal"><span class="pre">ellipfun()</span></tt></a></li> </ul> </li> <li><a class="reference external" href="#modular-functions">Modular functions</a><ul> <li><a class="reference external" href="#kleinj"><tt class="docutils literal"><span class="pre">kleinj()</span></tt></a></li> </ul> </li> </ul> </li> </ul> <h4>Previous topic</h4> <p class="topless"><a href="hypergeometric.html" title="previous chapter">Hypergeometric functions</a></p> <h4>Next topic</h4> <p class="topless"><a href="zeta.html" title="next chapter">Zeta functions, L-series and polylogarithms</a></p> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../_sources/functions/elliptic.txt" rel="nofollow">Show Source</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="../search.html" method="get"> <input type="text" name="q" size="18" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="../modindex.html" title="Global Module Index" >modules</a> |</li> <li class="right" > <a href="zeta.html" title="Zeta functions, L-series and polylogarithms" >next</a> |</li> <li class="right" > <a href="hypergeometric.html" title="Hypergeometric functions" >previous</a> |</li> <li><a href="../index.html">mpmath v0.17 documentation</a> »</li> <li><a href="index.html" >Mathematical functions</a> »</li> </ul> </div> <div class="footer"> © Copyright 2010, Fredrik Johansson. Last updated on Feb 06, 2011. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.6. </div> </body> </html>