Sophie

Sophie

distrib > Fedora > 18 > i386 > by-pkgid > 971a3706a7676677c8b7bbdffc0c4b9b > files > 207

sagemath-doc-ru-5.9-9.fc18.noarch.rpm


<!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>Немного высшей математики &mdash; 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> &raquo;</li>

          <li><a href="tour.html" accesskey="U">Тур по Sage</a> &raquo;</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, &#39;xy&#39;).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.&lt;a,b,c,d&gt; = 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">&quot;11a&quot;</span></tt> or <tt class="docutils literal"><span class="pre">&quot;37b2&quot;</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(&#39;37a&#39;)</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(&quot;37b2&quot;)</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(&quot;389a&quot;)</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(&quot;5077a&quot;)</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">{&#39;a1&#39;: [[0, 0, 1, -1, 0], 1, 1], &#39;b1&#39;: [[0, 1, 1, -23, -50], 0, 3]}</span>
<span class="go">sage: db.allcurves(37)</span>
<span class="go">{&#39;a1&#39;: [[0, 0, 1, -1, 0], 1, 1],</span>
<span class="go"> &#39;b1&#39;: [[0, 1, 1, -23, -50], 0, 3],</span>
<span class="go"> &#39;b2&#39;: [[0, 1, 1, -1873, -31833], 0, 1],</span>
<span class="go"> &#39;b3&#39;: [[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 |--&gt; 1, 5 |--&gt; 1,</span>
<span class="go">Dirichlet character modulo 12 of conductor 4 mapping 7 |--&gt; -1, 5 |--&gt; 1,</span>
<span class="go">Dirichlet character modulo 12 of conductor 3 mapping 7 |--&gt; 1, 5 |--&gt; -1,</span>
<span class="go">Dirichlet character modulo 12 of conductor 12 mapping 7 |--&gt; -1, 5 |--&gt; -1]</span>
<span class="go">sage: G.gens()</span>
<span class="go">(Dirichlet character modulo 12 of conductor 4 mapping 7 |--&gt; -1, 5 |--&gt; 1,</span>
<span class="go">Dirichlet character modulo 12 of conductor 3 mapping 7 |--&gt; 1, 5 |--&gt; -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 |--&gt; 1, 10 |--&gt; 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 |--&gt; 1, 10 |--&gt; zeta6,</span>
<span class="go">Dirichlet character modulo 21 of conductor 7 mapping 8 |--&gt; 1, 10 |--&gt; -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.&lt;i&gt; = 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 |--&gt; -1, 17 |--&gt; 1,</span>
<span class="go">Dirichlet character modulo 20 of conductor 5 mapping 11 |--&gt; 1, 17 |--&gt; 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, &#39;x&#39;)</span>
<span class="go">sage: K = NumberField(x^4 + 1, &#39;a&#39;); 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 |--&gt; 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 использовать символ &#8220;a&#8221;
для печати того, чем является <tt class="docutils literal"><span class="pre">K</span></tt> (числовое поле с определяющим полиномом
<img class="math" src="_images/math/36a9aeb7ee8364b9dd556b36e54c27d9940897ac.png" alt="x^4 + 1"/>). Название &#8220;a&#8221; не объявлено на данный момент. Когда <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>) будет оценено, символ &#8220;a&#8221; представляет корень
полинома <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(&#39;x&#39;); 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(&#39;x&#39;).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(&#39;x&#39;)</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(&#39;x&#39;).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(&#39;x&#39;).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(&#39;x&#39;).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> &raquo;</li>

          <li><a href="tour.html" >Тур по Sage</a> &raquo;</li> 
      </ul>
    </div>
    
    <div class="footer">
        &copy; 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>