<!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="tour_linalg.html" /> <link rel="prev" title="Распространённые проблемы с функциями" href="tour_functions.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="tour_linalg.html" title="Линейная алгебра" accesskey="N">следующий</a> |</li> <li class="right" > <a href="tour_functions.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="section-rings"> <span id="id1"></span><h1>Основные кольца<a class="headerlink" href="#section-rings" title="Ссылка на этот заголовок">¶</a></h1> <p>При объявлении матриц, векторов или полиномов для них иногда полезно, а иногда и необходимо определять “кольца”, на которых они определены. <em>Кольцо</em> - это математическая конструкция, в которой существуют определенные понятия суммы и произведения. Если вы никогда о них не слышали, то вам, вероятно, достаточно знать об этих четырех часто используемых кольцах:</p> <ul class="simple"> <li>целые числа <img class="math" src="_images/math/2601ef5b13758c65b09749d015033f5e34022c0e.png" alt="\{..., -1, 0, 1, 2, ...\}"/>, называемые <tt class="docutils literal"><span class="pre">ZZ</span></tt> в Sage.</li> <li>рациональные числа – например, дроби или отношения целых чисел –-, называемые <tt class="docutils literal"><span class="pre">QQ</span></tt> в Sage.</li> <li>вещественные числа, называемые <tt class="docutils literal"><span class="pre">RR</span></tt> в Sage.</li> <li>комплексные числа, называемые <tt class="docutils literal"><span class="pre">CC</span></tt> в Sage.</li> </ul> <p>Знание различий между данными кольцами очень важно, так как один и тот же полином, определенный в разных кольцах, может вести себя по-разному. Например, полином <img class="math" src="_images/math/a201fddef752223c4dadd1238207df8ca4ef4d8b.png" alt="x^2-2"/> имеет два корня: <img class="math" src="_images/math/5d67061323ee2f02dabd7a4728075808f7d2e6dd.png" alt="\pm \sqrt{2}"/>. Эти корни не являются рациональными числами, поэтому если вы работаете с полиномами с рациональными коэффициентами, то полином не будет разлагаться на множители. С вещественными коэффициентами — будет. Поэтому стоит определить кольцо, чтобы быть уверенным, что полученный результат будет правильным. Следующие две команды задают множества полиномов с рациональными коэффициентами и вещественными коэффициентами соответственно. Множества названы “ratpoly” и “realpoly”, но это не столь важно в данном контексте, однако символьные сочетания ”.<t>” и ”.<z>” являются названиями переменных, использованных в двух случаях.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: ratpoly.<t> = PolynomialRing(QQ)</span> <span class="go">sage: realpoly.<z> = PolynomialRing(RR)</span> </pre></div> </div> <p>Факторизируем <img class="math" src="_images/math/a201fddef752223c4dadd1238207df8ca4ef4d8b.png" alt="x^2-2"/>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: factor(t^2-2)</span> <span class="go">t^2 - 2</span> <span class="go">sage: factor(z^2-2)</span> <span class="go">(z - 1.41421356237310) * (z + 1.41421356237310)</span> </pre></div> </div> <p>Символ <tt class="docutils literal"><span class="pre">I</span></tt> обозначает квадратный корень из <img class="math" src="_images/math/bae5aba07d37ff6ff813107e76260fb31ad5794e.png" alt="-1"/>; <tt class="docutils literal"><span class="pre">i</span></tt> — это то же самое, что <tt class="docutils literal"><span class="pre">I</span></tt>. Конечно, это не рациональное число:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: i # квадратный корень из -1</span> <span class="go">I</span> <span class="go">sage: i in QQ</span> <span class="go">False</span> </pre></div> </div> <p>Заметка: Вышеописанный код может работать не так, как задумывалось, если переменной <tt class="docutils literal"><span class="pre">i</span></tt> было задано другое значение, например, если оно было использовано, как счетчик для цикла. В таком случае введите</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: reset('i')</span> </pre></div> </div> <p>для того, чтобы получить изначальное комплексное значение <tt class="docutils literal"><span class="pre">i</span></tt>.</p> <p>Есть одна тонкость в задании комплексных чисел: как описано выше, символ <tt class="docutils literal"><span class="pre">i</span></tt> представляет квадратный корень из <img class="math" src="_images/math/bae5aba07d37ff6ff813107e76260fb31ad5794e.png" alt="-1"/>, но это <em>формальный</em> или <em>символичный</em> квадратный корень из <img class="math" src="_images/math/bae5aba07d37ff6ff813107e76260fb31ad5794e.png" alt="-1"/>. Вызов <tt class="docutils literal"><span class="pre">CC(i)</span></tt> или <tt class="docutils literal"><span class="pre">CC.0</span></tt> вернет <em>комплексный</em> квадратный корень из <img class="math" src="_images/math/bae5aba07d37ff6ff813107e76260fb31ad5794e.png" alt="-1"/>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: i = CC(i) # комплексное число с плавающей запятой</span> <span class="go">sage: i == CC.0</span> <span class="go">True</span> <span class="go">sage: a, b = 4/3, 2/3</span> <span class="go">sage: z = a + b*i</span> <span class="go">sage: z</span> <span class="go">1.33333333333333 + 0.666666666666667*I</span> <span class="go">sage: z.imag() # мнимая часть</span> <span class="go">0.666666666666667</span> <span class="go">sage: z.real() == a # автоматическое приведение типов перед сравнением</span> <span class="go">True</span> <span class="go">sage: a + b</span> <span class="go">2</span> <span class="go">sage: 2*b == a</span> <span class="go">True</span> <span class="go">sage: parent(2/3)</span> <span class="go">Rational Field</span> <span class="go">sage: parent(4/2)</span> <span class="go">Rational Field</span> <span class="go">sage: 2/3 + 0.1 # автоматическое приведение типов перед сложением</span> <span class="go">0.766666666666667</span> <span class="go">sage: 0.1 + 2/3 # приведение типов в Sage симметрично</span> <span class="go">0.766666666666667</span> </pre></div> </div> <p>Далее следуют примеры базовых колец в Sage. Как отмечено выше, кольцо рациональных чисел обозначается как <tt class="docutils literal"><span class="pre">QQ</span></tt>, а также как <tt class="docutils literal"><span class="pre">RationalField()</span></tt> (<em>поле</em> - это кольцо, в котором произведение является коммутативным и в котором каждый ненулевой элемент имеет обратную величину в этом кольце (рациональные числа являются полем, а целые - нет):</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: RationalField()</span> <span class="go">Rational Field</span> <span class="go">sage: QQ</span> <span class="go">Rational Field</span> <span class="go">sage: 1/2 in QQ</span> <span class="go">True</span> </pre></div> </div> <p>Десятичное число <tt class="docutils literal"><span class="pre">1.2</span></tt> рассматривается как <tt class="docutils literal"><span class="pre">QQ</span></tt>: десятичные числа, которые также являются рациональными, могут быть “приведены” к рациональным числам. Числа <img class="math" src="_images/math/f2ca003a7da0de4994b4733e203b74ff52d42553.png" alt="\pi"/> и <img class="math" src="_images/math/2c4dc1409208ff6a3039f4871d85c16763334983.png" alt="\sqrt{2}"/> не являются рациональными:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: 1.2 in QQ</span> <span class="go">True</span> <span class="go">sage: pi in QQ</span> <span class="go">False</span> <span class="go">sage: pi in RR</span> <span class="go">True</span> <span class="go">sage: sqrt(2) in QQ</span> <span class="go">False</span> <span class="go">sage: sqrt(2) in CC</span> <span class="go">True</span> </pre></div> </div> <p>Для использования в высшей математике Sage также может выполнять операции с другими кольцами, как конечные поля, <img class="math" src="_images/math/36f73fc1312ee0349b3f3a0f3bd9eb5504339011.png" alt="p"/>-адические числа, кольцо алгебраических чисел, полиномиальные кольца и матричные кольца. Далее показаны некоторые из них:</p> <div class="highlight-python"><div class="highlight"><pre><span class="go">sage: GF(3)</span> <span class="go">Finite Field of size 3</span> <span class="go">sage: GF(27, 'a') # если поле не простое, нужно задать имя генератора</span> <span class="go">Finite Field in a of size 3^3</span> <span class="go">sage: Zp(5)</span> <span class="go">5-adic Ring with capped relative precision 20</span> <span class="go">sage: sqrt(3) in QQbar # алгебраическое замыкакие QQ</span> <span class="go">True</span> </pre></div> </div> </div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h4>Предыдущий раздел</h4> <p class="topless"><a href="tour_functions.html" title="предыдущая глава">Распространённые проблемы с функциями</a></p> <h4>Следующий раздел</h4> <p class="topless"><a href="tour_linalg.html" title="следующая глава">Линейная алгебра</a></p> <h3>На этой странице</h3> <ul class="this-page-menu"> <li><a href="_sources/tour_rings.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="tour_linalg.html" title="Линейная алгебра" >следующий</a> |</li> <li class="right" > <a href="tour_functions.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>