<!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>Немного высшей математики — Sage Tutorial in Russian v5.9</title> <link rel="stylesheet" href="_static/sage.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', VERSION: '5.9', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <script type="text/javascript" src="_static/translations.js"></script> <link rel="shortcut icon" href="_static/favicon.ico"/> <link rel="top" title="Sage Tutorial in Russian v5.9" href="index.html" /> <link rel="up" title="Тур по Sage" href="tour.html" /> <link rel="next" title="Интерактивная оболочка" href="interactive_shell.html" /> <link rel="prev" title="Теория чисел" href="tour_numtheory.html" /> <link rel="icon" href="_static/sageicon.png" type="image/x-icon" /> </head> <body> <div class="related"> <h3>Просмотр</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="genindex.html" title="Словарь-указатель" accesskey="I">словарь</a></li> <li class="right" > <a href="py-modindex.html" title="Python Module Index" >модули</a> |</li> <li class="right" > <a href="interactive_shell.html" title="Интерактивная оболочка" accesskey="N">следующий</a> |</li> <li class="right" > <a href="tour_numtheory.html" title="Теория чисел" accesskey="P">предыдущий</a> |</li> <a href="../index.html"><img src="_static/sagelogo.png" style="vertical-align: middle" title="Sage Logo"></a> <li><a href="index.html">Sage Tutorial in Russian v5.9</a> »</li> <li><a href="tour.html" accesskey="U">Тур по Sage</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="id1"> <h1>Немного высшей математики<a class="headerlink" href="#id1" title="Ссылка на этот заголовок">¶</a></h1> <div class="section" id="id2"> <h2>Алгебраическая геометрия<a class="headerlink" href="#id2" title="Ссылка на этот заголовок">¶</a></h2> <p>Sage позволяет создавать любые алгебраические многообразия, но иногда функциональность ограничивается кольцами <img class="math" src="_images/math/156c0e43da2df99cae1c91cfcff9bfa48e8709c1.png" alt="\QQ"/> или конечными полями. Например, найдем объединение двух плоских кривых, а затем вычленим кривые как несократимые составляющие объединения.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: x, y = AffineSpace(2, QQ, 'xy').gens()</span> <span class="go">sage: C2 = Curve(x^2 + y^2 - 1)</span> <span class="go">sage: C3 = Curve(x^3 + y^3 - 1)</span> <span class="go">sage: D = C2 + C3</span> <span class="go">sage: D</span> <span class="go">Affine Curve over Rational Field defined by</span> <span class="go"> x^5 + x^3*y^2 + x^2*y^3 + y^5 - x^3 - y^3 - x^2 - y^2 + 1</span> <span class="go">sage: D.irreducible_components()</span> <span class="go">[</span> <span class="go">Closed subscheme of Affine Space of dimension 2 over Rational Field defined by:</span> <span class="go"> x^2 + y^2 - 1,</span> <span class="go">Closed subscheme of Affine Space of dimension 2 over Rational Field defined by:</span> <span class="go"> x^3 + y^3 - 1</span> <span class="go">]</span> </pre></div> </div> <p>Также можно найти все точки пересечения двух кривых.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: V = C2.intersection(C3)</span> <span class="go">sage: V.irreducible_components()</span> <span class="go">[</span> <span class="go">Closed subscheme of Affine Space of dimension 2 over Rational Field defined by:</span> <span class="go"> y - 1,</span> <span class="go"> x,</span> <span class="go">Closed subscheme of Affine Space of dimension 2 over Rational Field defined by:</span> <span class="go"> y,</span> <span class="go"> x - 1,</span> <span class="go">Closed subscheme of Affine Space of dimension 2 over Rational Field defined by:</span> <span class="go"> x + y + 2,</span> <span class="go"> 2*y^2 + 4*y + 3</span> <span class="go">]</span> </pre></div> </div> <p>Таким образом точки <img class="math" src="_images/math/25a306093bbd9e0699c65dba033c9483cd379dc4.png" alt="(1,0)"/> и <img class="math" src="_images/math/be11a56a55425d6c6b69f70f5fa98eab95e8ad18.png" alt="(0,1)"/> находятся на обеих кривых, а координаты по оси <img class="math" src="_images/math/092e364e1d9d19ad5fffb0b46ef4cc7f2da02c1c.png" alt="y"/> удовлетворяют функции <img class="math" src="_images/math/a90f1541775d64006d15b43cb7fb127ac330c98f.png" alt="2y^2 + 4y + 3=0"/>.</p> <p>Sage может вычислить тороидальный идеал неплоской кривой третьего порядка:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: R.<a,b,c,d> = PolynomialRing(QQ, 4)</span> <span class="go">sage: I = ideal(b^2-a*c, c^2-b*d, a*d-b*c)</span> <span class="go">sage: F = I.groebner_fan(); F</span> <span class="go">Groebner fan of the ideal:</span> <span class="go">Ideal (b^2 - a*c, c^2 - b*d, -b*c + a*d) of Multivariate Polynomial Ring</span> <span class="go">in a, b, c, d over Rational Field</span> <span class="go">sage: F.reduced_groebner_bases ()</span> <span class="go">[[-c^2 + b*d, -b*c + a*d, -b^2 + a*c],</span> <span class="go"> [-c^2 + b*d, b^2 - a*c, -b*c + a*d],</span> <span class="go"> [-c^2 + b*d, b*c - a*d, b^2 - a*c, -c^3 + a*d^2],</span> <span class="go"> [c^3 - a*d^2, -c^2 + b*d, b*c - a*d, b^2 - a*c],</span> <span class="go"> [c^2 - b*d, -b*c + a*d, -b^2 + a*c],</span> <span class="go"> [c^2 - b*d, b*c - a*d, -b^2 + a*c, -b^3 + a^2*d],</span> <span class="go"> [c^2 - b*d, b*c - a*d, b^3 - a^2*d, -b^2 + a*c],</span> <span class="go"> [c^2 - b*d, b*c - a*d, b^2 - a*c]]</span> <span class="go">sage: F.polyhedralfan()</span> <span class="go">Polyhedral fan in 4 dimensions of dimension 4</span> </pre></div> </div> </div> <div class="section" id="id3"> <h2>Эллиптические кривые<a class="headerlink" href="#id3" title="Ссылка на этот заголовок">¶</a></h2> <p>Функциональность эллиптических кривых включает в себя большую часть функциональности PARI, доступ к информации в онлайн таблицах Cremona (что требует дополнительный пакет баз данных), функциональность mwrank, алгоритм SEA, вычисление всех изогений, много нового кода для <img class="math" src="_images/math/156c0e43da2df99cae1c91cfcff9bfa48e8709c1.png" alt="\QQ"/> и некоторую функциональность программного обеспечения Denis Simon.</p> <p>Команда <tt class="docutils literal"><span class="pre">EllipticCurve</span></tt> для создания эллиптических кривых имеет много форм:</p> <ul> <li><p class="first">EllipticCurve([<img class="math" src="_images/math/1ab39d761413804680d26d972381f028001562f5.png" alt="a_1"/>, <img class="math" src="_images/math/5e97a8af68fbc8e357d3ee0eba452022b06c1875.png" alt="a_2"/>, <img class="math" src="_images/math/572b65ebc3f438b176b4ca4a890799f2f72564af.png" alt="a_3"/>, <img class="math" src="_images/math/5e28850813a5321d2a8ae3c0510457a7337975ed.png" alt="a_4"/>, <img class="math" src="_images/math/34ace040475607683853fcfd4960a8f7fa6678c7.png" alt="a_6"/>]): Возвратит эллиптическую кривую</p> <div class="math"> <p><img src="_images/math/a92e6b4980603c459f897b2cef469044c8005389.png" alt="y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6,"/></p> </div></li> <li><p class="first">EllipticCurve([<img class="math" src="_images/math/5e28850813a5321d2a8ae3c0510457a7337975ed.png" alt="a_4"/>, <img class="math" src="_images/math/34ace040475607683853fcfd4960a8f7fa6678c7.png" alt="a_6"/>]): То же, что и выше, но <img class="math" src="_images/math/d4eb43ebf1ae24062bcb59152a584a6338c81f2e.png" alt="a_1=a_2=a_3=0"/>.</p> </li> <li><p class="first">EllipticCurve(label): Вернет эллиптическую кривую из базы данных Cremona с заданным ярлыком Cremona. Ярлык - это строка, например, <tt class="docutils literal"><span class="pre">"11a"</span></tt> or <tt class="docutils literal"><span class="pre">"37b2"</span></tt>.</p> </li> <li><p class="first">EllipticCurve(j): Вернет эллиптическую кривую с инвариантой <img class="math" src="_images/math/8122aa89ea6e80784c6513d22787ad86e36ad0cc.png" alt="j"/>.</p> </li> <li><p class="first">EllipticCurve(R, [<img class="math" src="_images/math/1ab39d761413804680d26d972381f028001562f5.png" alt="a_1"/>, <img class="math" src="_images/math/5e97a8af68fbc8e357d3ee0eba452022b06c1875.png" alt="a_2"/>, <img class="math" src="_images/math/572b65ebc3f438b176b4ca4a890799f2f72564af.png" alt="a_3"/>, <img class="math" src="_images/math/5e28850813a5321d2a8ae3c0510457a7337975ed.png" alt="a_4"/>, <img class="math" src="_images/math/34ace040475607683853fcfd4960a8f7fa6678c7.png" alt="a_6"/>]): Создаст эллиптическую кривую из кольца <img class="math" src="_images/math/eff43e84f8a3bcf7b6965f0a3248bc4d3a9d0cd4.png" alt="R"/> с заданными <img class="math" src="_images/math/412787c048e28774dc63fc27db42dc52ca858de7.png" alt="a_i"/> ‘ми, как было указано выше.</p> </li> </ul> <p>Использование каждого конструктора:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: EllipticCurve([0,0,1,-1,0])</span> <span class="go">Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field</span> <span class="go">sage: EllipticCurve([GF(5)(0),0,1,-1,0])</span> <span class="go">Elliptic Curve defined by y^2 + y = x^3 + 4*x over Finite Field of size 5</span> <span class="go">sage: EllipticCurve([1,2])</span> <span class="go">Elliptic Curve defined by y^2 = x^3 + x + 2 over Rational Field</span> <span class="go">sage: EllipticCurve('37a')</span> <span class="go">Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field</span> <span class="go">sage: EllipticCurve_from_j(1)</span> <span class="go">Elliptic Curve defined by y^2 + x*y = x^3 + 36*x + 3455 over Rational Field</span> <span class="go">sage: EllipticCurve(GF(5), [0,0,1,-1,0])</span> <span class="go">Elliptic Curve defined by y^2 + y = x^3 + 4*x over Finite Field of size 5</span> </pre></div> </div> <p>Пара <img class="math" src="_images/math/f9603ca3089464e548fc6f1366bc474e7efef8d9.png" alt="(0,0)"/> - это точка на эллиптической кривой <img class="math" src="_images/math/fa2fa899f0afb05d6837885523503a2d4df434f9.png" alt="E"/>, заданной функцией <img class="math" src="_images/math/a70a4cbbd9dd117236ff748365bb1d274847e8ec.png" alt="y^2 + y = x^3 - x"/>. Для создания этой точки в Sage напечатайте <tt class="docutils literal"><span class="pre">E([0,0])</span></tt>. Sage может добавить точки на такую эллиптическую кривую:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: E = EllipticCurve([0,0,1,-1,0])</span> <span class="go">sage: E</span> <span class="go">Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field</span> <span class="go">sage: P = E([0,0])</span> <span class="go">sage: P + P</span> <span class="go">(1 : 0 : 1)</span> <span class="go">sage: 10*P</span> <span class="go">(161/16 : -2065/64 : 1)</span> <span class="go">sage: 20*P</span> <span class="go">(683916417/264517696 : -18784454671297/4302115807744 : 1)</span> <span class="go">sage: E.conductor()</span> <span class="go">37</span> </pre></div> </div> <p>Эллиптические кривые для комплексных чисел задаются параметрами инварианты <img class="math" src="_images/math/8122aa89ea6e80784c6513d22787ad86e36ad0cc.png" alt="j"/>. Sage вычислит инварианту <img class="math" src="_images/math/8122aa89ea6e80784c6513d22787ad86e36ad0cc.png" alt="j"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: E = EllipticCurve([0,0,0,-4,2]); E</span> <span class="go">Elliptic Curve defined by y^2 = x^3 - 4*x + 2 over Rational Field</span> <span class="go">sage: E.conductor()</span> <span class="go">2368</span> <span class="go">sage: E.j_invariant()</span> <span class="go">110592/37</span> </pre></div> </div> <p>Если мы создадим кривую с той же инвариантой <img class="math" src="_images/math/8122aa89ea6e80784c6513d22787ad86e36ad0cc.png" alt="j"/>, как для <img class="math" src="_images/math/fa2fa899f0afb05d6837885523503a2d4df434f9.png" alt="E"/>, она не должна быть изоморфной <img class="math" src="_images/math/fa2fa899f0afb05d6837885523503a2d4df434f9.png" alt="E"/>. В следующем примере кривые не изоморфны, так как их кондукторы различны.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: F = EllipticCurve_from_j(110592/37)</span> <span class="go">sage: F.conductor()</span> <span class="go">37</span> </pre></div> </div> <p>Однако кручение <img class="math" src="_images/math/a055f405829e64a3b70253ab67cb45ed6ed5bb29.png" alt="F"/> на 2 даст изоморфную кривую.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: G = F.quadratic_twist(2); G</span> <span class="go">Elliptic Curve defined by y^2 = x^3 - 4*x + 2 over Rational Field</span> <span class="go">sage: G.conductor()</span> <span class="go">2368</span> <span class="go">sage: G.j_invariant()</span> <span class="go">110592/37</span> </pre></div> </div> <p>Можно посчитать коэффициенты <img class="math" src="_images/math/6f1a2b6b7c193f9ba2b2134a59f1da5addcfbc98.png" alt="a_n"/> ряда <img class="math" src="_images/math/859ccf4cd60c7bc6b8fa1afc9a42dc811a826d6f.png" alt="L"/> или модулярной формы <img class="math" src="_images/math/e16e54493ae98935036a95c26359511c878651d2.png" alt="\sum_{n=0}^\infty a_nq^n"/>, прикрепленной к эллиптической кривой. Данное вычисление использует библиотеку PARI:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: E = EllipticCurve([0,0,1,-1,0])</span> <span class="go">sage: print E.anlist(30)</span> <span class="go">[0, 1, -2, -3, 2, -2, 6, -1, 0, 6, 4, -5, -6, -2, 2, 6, -4, 0, -12, 0, -4,</span> <span class="go"> 3, 10, 2, 0, -1, 4, -9, -2, 6, -12]</span> <span class="go">sage: v = E.anlist(10000)</span> </pre></div> </div> <p>Займет лишь секунду для подсчета всех <img class="math" src="_images/math/6f1a2b6b7c193f9ba2b2134a59f1da5addcfbc98.png" alt="a_n"/> для <img class="math" src="_images/math/914acc4da38770f31d8fbf48e946487c4554977e.png" alt="n\leq 10^5"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: %time v = E.anlist(100000)</span> <span class="go">CPU times: user 0.98 s, sys: 0.06 s, total: 1.04 s</span> <span class="go">Wall time: 1.06</span> </pre></div> </div> <p>Эллиптические кривые могут быть построены с помощью их ярлыков Cremona.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: E = EllipticCurve("37b2")</span> <span class="go">sage: E</span> <span class="go">Elliptic Curve defined by y^2 + y = x^3 + x^2 - 1873*x - 31833 over Rational</span> <span class="go">Field</span> <span class="go">sage: E = EllipticCurve("389a")</span> <span class="go">sage: E</span> <span class="go">Elliptic Curve defined by y^2 + y = x^3 + x^2 - 2*x over Rational Field</span> <span class="go">sage: E.rank()</span> <span class="go">2</span> <span class="go">sage: E = EllipticCurve("5077a")</span> <span class="go">sage: E.rank()</span> <span class="go">3</span> </pre></div> </div> <p>Также есть доступ к базе данных Cremona.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: db = sage.databases.cremona.CremonaDatabase()</span> <span class="go">sage: db.curves(37)</span> <span class="go">{'a1': [[0, 0, 1, -1, 0], 1, 1], 'b1': [[0, 1, 1, -23, -50], 0, 3]}</span> <span class="go">sage: db.allcurves(37)</span> <span class="go">{'a1': [[0, 0, 1, -1, 0], 1, 1],</span> <span class="go"> 'b1': [[0, 1, 1, -23, -50], 0, 3],</span> <span class="go"> 'b2': [[0, 1, 1, -1873, -31833], 0, 1],</span> <span class="go"> 'b3': [[0, 1, 1, -3, 1], 0, 3]}</span> </pre></div> </div> <p>Объекты, возвращенные из базы данных, не принадлежат типу <tt class="docutils literal"><span class="pre">EllipticCurve</span></tt>. Это элементы базы данных, имеющие пару полей. Существует малая версия базы данных Cremona, которая есть по умолчанию в Sage и содержит ограниченную информацию о эллиптических кривых с кондуктором <img class="math" src="_images/math/65514db1e5900e093aa886663873e2c84e07dc59.png" alt="\leq 10000"/>. Также существует дополнительная большая версия, которая содержит исчерпывающую информацию о всех кривых с кондуктором до <img class="math" src="_images/math/347b21143eaddaec30afeb3ba5204b6463eee8cc.png" alt="120000"/> (Октябрь 2005). Еще один дополнительный пакет (2GB) для Sage содержит сотни миллионов эллиптических кривых в базе данных Stein-Watkins.</p> </div> <div class="section" id="id4"> <h2>Символы Дирихле<a class="headerlink" href="#id4" title="Ссылка на этот заголовок">¶</a></h2> <p><em>Символ Дирихле</em> - это расширение гомоморфизма <img class="math" src="_images/math/80cb836c4bc64b841c779104e637579050c86872.png" alt="(\ZZ/N\ZZ)^* \to R^*"/> для кольца <img class="math" src="_images/math/eff43e84f8a3bcf7b6965f0a3248bc4d3a9d0cd4.png" alt="R"/> к <img class="math" src="_images/math/6c391c337502ef1e5c38027c4d6ebeca2958219a.png" alt="\ZZ \to R"/>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: G = DirichletGroup(12)</span> <span class="go">sage: G.list()</span> <span class="go">[Dirichlet character modulo 12 of conductor 1 mapping 7 |--> 1, 5 |--> 1,</span> <span class="go">Dirichlet character modulo 12 of conductor 4 mapping 7 |--> -1, 5 |--> 1,</span> <span class="go">Dirichlet character modulo 12 of conductor 3 mapping 7 |--> 1, 5 |--> -1,</span> <span class="go">Dirichlet character modulo 12 of conductor 12 mapping 7 |--> -1, 5 |--> -1]</span> <span class="go">sage: G.gens()</span> <span class="go">(Dirichlet character modulo 12 of conductor 4 mapping 7 |--> -1, 5 |--> 1,</span> <span class="go">Dirichlet character modulo 12 of conductor 3 mapping 7 |--> 1, 5 |--> -1)</span> <span class="go">sage: len(G)</span> <span class="go">4</span> </pre></div> </div> <p>Создав группу, нужно создать элемент и с его помощью посчитать.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: G = DirichletGroup(21)</span> <span class="go">sage: chi = G.1; chi</span> <span class="go">Dirichlet character modulo 21 of conductor 7 mapping 8 |--> 1, 10 |--> zeta6</span> <span class="go">sage: chi.values()</span> <span class="go">[0, 1, zeta6 - 1, 0, -zeta6, -zeta6 + 1, 0, 0, 1, 0, zeta6, -zeta6, 0, -1,</span> <span class="go"> 0, 0, zeta6 - 1, zeta6, 0, -zeta6 + 1, -1]</span> <span class="go">sage: chi.conductor()</span> <span class="go">7</span> <span class="go">sage: chi.modulus()</span> <span class="go">21</span> <span class="go">sage: chi.order()</span> <span class="go">6</span> <span class="go">sage: chi(19)</span> <span class="go">-zeta6 + 1</span> <span class="go">sage: chi(40)</span> <span class="go">-zeta6 + 1</span> </pre></div> </div> <p>Также возможно посчитать действие группы Галуа <img class="math" src="_images/math/8a14cc46957e17ec583cf5e059c456acb6fa913f.png" alt="\text{Gal}(\QQ(\zeta_N)/\QQ)"/> на эти символы.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: chi.galois_orbit()</span> <span class="go">[Dirichlet character modulo 21 of conductor 7 mapping 8 |--> 1, 10 |--> zeta6,</span> <span class="go">Dirichlet character modulo 21 of conductor 7 mapping 8 |--> 1, 10 |--> -zeta6 + 1]</span> <span class="go">sage: go = G.galois_orbits()</span> <span class="go">sage: [len(orbit) for orbit in go]</span> <span class="go">[1, 2, 2, 1, 1, 2, 2, 1]</span> <span class="go">sage: G.decomposition()</span> <span class="go">[</span> <span class="go">Group of Dirichlet characters of modulus 3 over Cyclotomic Field of order</span> <span class="go">6 and degree 2,</span> <span class="go">Group of Dirichlet characters of modulus 7 over Cyclotomic Field of order</span> <span class="go">6 and degree 2</span> <span class="go">]</span> </pre></div> </div> <p>Далее надо построить группу символов Дирихле по модулю 20, но со значениями с <img class="math" src="_images/math/ee3de5721a73174fa06783a6b72436ba091a8b74.png" alt="\QQ(i)"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: K.<i> = NumberField(x^2+1)</span> <span class="go">sage: G = DirichletGroup(20,K)</span> <span class="go">sage: G</span> <span class="go">Group of Dirichlet characters of modulus 20 over Number Field in i with defining polynomial x^2 + 1</span> </pre></div> </div> <p>Теперь посчитаем несколько инвариант <tt class="docutils literal"><span class="pre">G</span></tt>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: G.gens()</span> <span class="go">(Dirichlet character modulo 20 of conductor 4 mapping 11 |--> -1, 17 |--> 1,</span> <span class="go">Dirichlet character modulo 20 of conductor 5 mapping 11 |--> 1, 17 |--> i)</span> <span class="go">sage: G.unit_gens()</span> <span class="go">(11, 17)</span> <span class="go">sage: G.zeta()</span> <span class="go">i</span> <span class="go">sage: G.zeta_order()</span> <span class="go">4</span> </pre></div> </div> <p>В данном примере, символы Дирихле создаются со значениями в числовом поле, явно задается выбор корня объединения третьим аргументом <tt class="docutils literal"><span class="pre">DirichletGroup</span></tt>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: x = polygen(QQ, 'x')</span> <span class="go">sage: K = NumberField(x^4 + 1, 'a'); a = K.0</span> <span class="go">sage: b = K.gen(); a == b</span> <span class="go">True</span> <span class="go">sage: K</span> <span class="go">Number Field in a with defining polynomial x^4 + 1</span> <span class="go">sage: G = DirichletGroup(5, K, a); G</span> <span class="go">Group of Dirichlet characters of modulus 5 over Number Field in a with</span> <span class="go">defining polynomial x^4 + 1</span> <span class="go">sage: chi = G.0; chi</span> <span class="go">Dirichlet character modulo 5 of conductor 5 mapping 2 |--> a^2</span> <span class="go">sage: [(chi^i)(2) for i in range(4)]</span> <span class="go">[1, a^2, -1, -a^2]</span> </pre></div> </div> <p>Здесь <tt class="docutils literal"><span class="pre">NumberField(x^4</span> <span class="pre">+</span> <span class="pre">1,</span> <span class="pre">'a')</span></tt> говорит Sage использовать символ “a” для печати того, чем является <tt class="docutils literal"><span class="pre">K</span></tt> (числовое поле с определяющим полиномом <img class="math" src="_images/math/36a9aeb7ee8364b9dd556b36e54c27d9940897ac.png" alt="x^4 + 1"/>). Название “a” не объявлено на данный момент. Когда <tt class="docutils literal"><span class="pre">a</span> <span class="pre">=</span> <span class="pre">K.0</span></tt> (эквивалентно <tt class="docutils literal"><span class="pre">a</span> <span class="pre">=</span> <span class="pre">K.gen()</span></tt>) будет оценено, символ “a” представляет корень полинома <img class="math" src="_images/math/cea24d9df06f65f425979c5868eafbe403a97dac.png" alt="x^4+1"/>.</p> </div> <div class="section" id="id5"> <h2>Модулярные формы<a class="headerlink" href="#id5" title="Ссылка на этот заголовок">¶</a></h2> <p>Sage может выполнять вычисления, связанные с модулярными формами, включая измерения, вычисление модулярных символов, операторов Гекке и разложения.</p> <p>Существует несколько доступных функций для вычисления измерений пространств модулярных форм. Например,</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: dimension_cusp_forms(Gamma0(11),2)</span> <span class="go">1</span> <span class="go">sage: dimension_cusp_forms(Gamma0(1),12)</span> <span class="go">1</span> <span class="go">sage: dimension_cusp_forms(Gamma1(389),2)</span> <span class="go">6112</span> </pre></div> </div> <p>Далее показаны вычисления операторов Гекке в пространстве модулярных символов уровня <img class="math" src="_images/math/dce34f4dfb2406144304ad0d6106c5382ddd1446.png" alt="1"/> и веса <img class="math" src="_images/math/edf074831eb5bc9e61d6d6e09f525a86e3068f6a.png" alt="12"/>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: M = ModularSymbols(1,12)</span> <span class="go">sage: M.basis()</span> <span class="go">([X^8*Y^2,(0,0)], [X^9*Y,(0,0)], [X^10,(0,0)])</span> <span class="go">sage: t2 = M.T(2)</span> <span class="go">sage: t2</span> <span class="go">Hecke operator T_2 on Modular Symbols space of dimension 3 for Gamma_0(1)</span> <span class="go">of weight 12 with sign 0 over Rational Field</span> <span class="go">sage: t2.matrix()</span> <span class="go">[ -24 0 0]</span> <span class="go">[ 0 -24 0]</span> <span class="go">[4860 0 2049]</span> <span class="go">sage: f = t2.charpoly('x'); f</span> <span class="go">x^3 - 2001*x^2 - 97776*x - 1180224</span> <span class="go">sage: factor(f)</span> <span class="go">(x - 2049) * (x + 24)^2</span> <span class="go">sage: M.T(11).charpoly('x').factor()</span> <span class="go">(x - 285311670612) * (x - 534612)^2</span> </pre></div> </div> <p>Также можно создавать пространство для <img class="math" src="_images/math/0ce4343a7316d048508371ec15ac0cc5c641e53c.png" alt="\Gamma_0(N)"/> и <img class="math" src="_images/math/e1ce758e7944584095efc8e60f73a69edd624a20.png" alt="\Gamma_1(N)"/>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: ModularSymbols(11,2)</span> <span class="go">Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign</span> <span class="go"> 0 over Rational Field</span> <span class="go">sage: ModularSymbols(Gamma1(11),2)</span> <span class="go">Modular Symbols space of dimension 11 for Gamma_1(11) of weight 2 with</span> <span class="go">sign 0 and over Rational Field</span> </pre></div> </div> <p>Вычислим некоторые характеристические полиномы и <img class="math" src="_images/math/0615acc3725de21025457e7d6f7694dab8e2f758.png" alt="q"/>-разложения.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: M = ModularSymbols(Gamma1(11),2)</span> <span class="go">sage: M.T(2).charpoly('x')</span> <span class="go">x^11 - 8*x^10 + 20*x^9 + 10*x^8 - 145*x^7 + 229*x^6 + 58*x^5 - 360*x^4</span> <span class="go"> + 70*x^3 - 515*x^2 + 1804*x - 1452</span> <span class="go">sage: M.T(2).charpoly('x').factor()</span> <span class="go">(x - 3) * (x + 2)^2 * (x^4 - 7*x^3 + 19*x^2 - 23*x + 11)</span> <span class="go"> * (x^4 - 2*x^3 + 4*x^2 + 2*x + 11)</span> <span class="go">sage: S = M.cuspidal_submodule()</span> <span class="go">sage: S.T(2).matrix()</span> <span class="go">[-2 0]</span> <span class="go">[ 0 -2]</span> <span class="go">sage: S.q_expansion_basis(10)</span> <span class="go">[</span> <span class="go"> q - 2*q^2 - q^3 + 2*q^4 + q^5 + 2*q^6 - 2*q^7 - 2*q^9 + O(q^10)</span> <span class="go">]</span> </pre></div> </div> <p>Также возможны вычисления пространств модулярных символов с буквами.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: G = DirichletGroup(13)</span> <span class="go">sage: e = G.0^2</span> <span class="go">sage: M = ModularSymbols(e,2); M</span> <span class="go">Modular Symbols space of dimension 4 and level 13, weight 2, character</span> <span class="go">[zeta6], sign 0, over Cyclotomic Field of order 6 and degree 2</span> <span class="go">sage: M.T(2).charpoly('x').factor()</span> <span class="go">(x - 2*zeta6 - 1) * (x - zeta6 - 2) * (x + zeta6 + 1)^2</span> <span class="go">sage: S = M.cuspidal_submodule(); S</span> <span class="go">Modular Symbols subspace of dimension 2 of Modular Symbols space of</span> <span class="go">dimension 4 and level 13, weight 2, character [zeta6], sign 0, over</span> <span class="go">Cyclotomic Field of order 6 and degree 2</span> <span class="go">sage: S.T(2).charpoly('x').factor()</span> <span class="go">(x + zeta6 + 1)^2</span> <span class="go">sage: S.q_expansion_basis(10)</span> <span class="go">[</span> <span class="go">q + (-zeta6 - 1)*q^2 + (2*zeta6 - 2)*q^3 + zeta6*q^4 + (-2*zeta6 + 1)*q^5</span> <span class="go"> + (-2*zeta6 + 4)*q^6 + (2*zeta6 - 1)*q^8 - zeta6*q^9 + O(q^10)</span> <span class="go">]</span> </pre></div> </div> <p>Пример того, как Sage может вычислять действия операторов Гекке на пространство модулярных форм.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: T = ModularForms(Gamma0(11),2)</span> <span class="go">sage: T</span> <span class="go">Modular Forms space of dimension 2 for Congruence Subgroup Gamma0(11) of</span> <span class="go">weight 2 over Rational Field</span> <span class="go">sage: T.degree()</span> <span class="go">2</span> <span class="go">sage: T.level()</span> <span class="go">11</span> <span class="go">sage: T.group()</span> <span class="go">Congruence Subgroup Gamma0(11)</span> <span class="go">sage: T.dimension()</span> <span class="go">2</span> <span class="go">sage: T.cuspidal_subspace()</span> <span class="go">Cuspidal subspace of dimension 1 of Modular Forms space of dimension 2 for</span> <span class="go">Congruence Subgroup Gamma0(11) of weight 2 over Rational Field</span> <span class="go">sage: T.eisenstein_subspace()</span> <span class="go">Eisenstein subspace of dimension 1 of Modular Forms space of dimension 2</span> <span class="go">for Congruence Subgroup Gamma0(11) of weight 2 over Rational Field</span> <span class="go">sage: M = ModularSymbols(11); M</span> <span class="go">Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign</span> <span class="go">0 over Rational Field</span> <span class="go">sage: M.weight()</span> <span class="go">2</span> <span class="go">sage: M.basis()</span> <span class="go">((1,0), (1,8), (1,9))</span> <span class="go">sage: M.sign()</span> <span class="go">0</span> </pre></div> </div> <p>Допустим, <img class="math" src="_images/math/3e491952b676db6942353d75fc8bd8e4e97f7016.png" alt="T_p"/> — это обычный оператор Гекке (<img class="math" src="_images/math/36f73fc1312ee0349b3f3a0f3bd9eb5504339011.png" alt="p"/> простое). Как операторы Гекке <img class="math" src="_images/math/40db9b6f10ff583906d78a06a76e08e04381bc1a.png" alt="T_2"/>, <img class="math" src="_images/math/d0d8e9c5c70be5e8b812a08ce2566d0db946c608.png" alt="T_3"/>, <img class="math" src="_images/math/35d4698fff01484f830b3a88bd694e16f24bbfd2.png" alt="T_5"/> ведут себя в пространстве модулярных символов?</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: M.T(2).matrix()</span> <span class="go">[ 3 0 -1]</span> <span class="go">[ 0 -2 0]</span> <span class="go">[ 0 0 -2]</span> <span class="go">sage: M.T(3).matrix()</span> <span class="go">[ 4 0 -1]</span> <span class="go">[ 0 -1 0]</span> <span class="go">[ 0 0 -1]</span> <span class="go">sage: M.T(5).matrix()</span> <span class="go">[ 6 0 -1]</span> <span class="go">[ 0 1 0]</span> <span class="go">[ 0 0 1]</span> </pre></div> </div> </div> </div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3><a href="index.html">Содержание</a></h3> <ul> <li><a class="reference internal" href="#">Немного высшей математики</a><ul> <li><a class="reference internal" href="#id2">Алгебраическая геометрия</a></li> <li><a class="reference internal" href="#id3">Эллиптические кривые</a></li> <li><a class="reference internal" href="#id4">Символы Дирихле</a></li> <li><a class="reference internal" href="#id5">Модулярные формы</a></li> </ul> </li> </ul> <h4>Предыдущий раздел</h4> <p class="topless"><a href="tour_numtheory.html" title="предыдущая глава">Теория чисел</a></p> <h4>Следующий раздел</h4> <p class="topless"><a href="interactive_shell.html" title="следующая глава">Интерактивная оболочка</a></p> <h3>На этой странице</h3> <ul class="this-page-menu"> <li><a href="_sources/tour_advanced.txt" rel="nofollow">Показать исходный текст</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Быстрый поиск</h3> <form class="search" action="search.html" method="get"> <input type="text" name="q" size="18" /> <!-- The shading of the "Go" button should be consistent --> <!-- with the colour of the header and footer. See the file --> <!-- doc/common/themes/sage/theme.conf for colours used by --> <!-- the Sage theme. --> <input type="submit" style="background-color: #B8B9F6" value="Искать" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Введите слова для поиска или имя модуля, класса или функции. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Просмотр</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="genindex.html" title="Словарь-указатель" >словарь</a></li> <li class="right" > <a href="py-modindex.html" title="Python Module Index" >модули</a> |</li> <li class="right" > <a href="interactive_shell.html" title="Интерактивная оболочка" >следующий</a> |</li> <li class="right" > <a href="tour_numtheory.html" title="Теория чисел" >предыдущий</a> |</li> <a href="../index.html"><img src="_static/sagelogo.png" style="vertical-align: middle" title="Sage Logo"></a> <li><a href="index.html">Sage Tutorial in Russian v5.9</a> »</li> <li><a href="tour.html" >Тур по Sage</a> »</li> </ul> </div> <div class="footer"> © Copyright 2005--2011, The Sage Development Team. При создании использован <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. </div> <script type="text/javascript"> /*global jQuery, window */ /* Sphinx sidebar toggle. Putting this code at the end of the body * enables the toggle for the live, static, and offline docs. Note: * sage.misc.html.math_parse() eats jQuery's dollar-sign shortcut. */ var jq = jQuery; jq(document).ready(function () { var bar, bod, bg, fg, key, tog, wid_old, wid_new, resize, get_state, set_state; bod = jq('div.bodywrapper'); bar = jq('div.sphinxsidebar'); tog = jq('<div class="sphinxsidebartoggle"></div>'); /* Delayed resize helper. Not perfect but good enough. */ resize = function () { setTimeout(function () { tog.height(bod.height()); }, 100); }; jq(window).resize(function () { resize(); }); /* Setup and add the toggle. See Sphinx v0.5.1 default.css. */ fg = jq('div.sphinxsidebar p a').css('color') || 'rgb(152, 219, 204)'; bg = jq('div.document').css('background-color') || 'rgb(28, 78, 99)'; wid_old = '230px'; wid_new = '5px'; tog.css('background-color', bg) .css('border-width', '0px') .css('border-right', wid_new + ' ridge ' + bg) .css('cursor', 'pointer') .css('position', 'absolute') .css('left', '-' + wid_new) .css('top', '0px') .css('width', wid_new); bod.css('position', 'relative'); bod.prepend(tog); resize(); /* Cookie helpers. */ key = 'sphinxsidebar='; set_state = function (s) { var date = new Date(); /* Expiry in 7 days. */ date.setTime(date.getTime() + (7 * 24 * 3600 * 1000)); document.cookie = key + encodeURIComponent(s) + '; expires=' + date.toUTCString() + '; path=/'; }; get_state = function () { var i, c, crumbs = document.cookie.split(';'); for (i = 0; i < crumbs.length; i += 1) { c = crumbs[i].replace(/^\s+/, ''); if (c.indexOf(key) === 0) { return decodeURIComponent(c.substring(key.length, c.length)); } } return null; }; /* Event handlers. */ tog.mouseover(function (ev) { tog.css('border-right-color', fg); }).mouseout(function (ev) { tog.css('border-right-color', bg); }).click(function (ev) { if (bod.hasClass('wide')) { bod.removeClass('wide'); bod.css('margin-left', wid_old); bar.css('width', wid_old); bar.show(); set_state('visible'); } else { set_state('hidden'); bar.hide(); bar.css('width', '0px'); bod.css('margin-left', wid_new); bod.addClass('wide'); } resize(); }); /* Hide the normally visible sidebar? */ if (get_state() === 'hidden') { tog.trigger('click'); } else { set_state('visible'); } }); </script> </body> </html>