Sophie

Sophie

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

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="next" title="Дополнение" href="appendix.html" />
    <link rel="prev" title="Использование SageTeX" href="sagetex.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="appendix.html" title="Дополнение"
             accesskey="N">следующий</a> |</li>
        <li class="right" >
          <a href="sagetex.html" title="Использование SageTeX"
             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>
 
      </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="python">
<h2>Почему Python?<a class="headerlink" href="#python" title="Ссылка на этот заголовок">¶</a></h2>
<div class="section" id="id2">
<h3>Преимущества Python<a class="headerlink" href="#id2" title="Ссылка на этот заголовок">¶</a></h3>
<p>Основной язык реализации Sage — это Python (см. <a class="reference internal" href="bibliography.html#py">[Py]</a>), однако код, который
должен обрабатываться быстро, написан на компилируемом языке. У Python есть
ряд преимуществ:</p>
<ul class="simple">
<li><strong>Сохранение объектов</strong> широко используется в Python. В Python присутствует
поддержка сохранения (почти) любых объектов на диск или в базу данных.</li>
<li>Замечательная поддержка <strong>документации</strong> функций и пакетов в исходном коде,
включая автоматический доступ к документации и автоматическое тестирование
всех примеров. Примеры проверяются автоматически на регулярной основе и их
правильная работоспособность гарантирована.</li>
<li><strong>Управление памятью</strong>: Python имеет продуманный и стабильный менеджер
памяти и сборщик мусора, которые исправно работают с циклическими ссылками
и позволяют использовать локальные переменные в файлах.</li>
<li>Python имеет <strong>множество пакетов</strong>, доступных уже сейчас, которые могут
быть интересны пользователям Sage: численный анализ и линейная алгебра,
2D и 3D визуализация, сеть (для распределенных вычислений и серверов,
например с помощью twisted), поддержка баз данных и т.д.</li>
<li><strong>Портируемость:</strong> Python с легкостью компилируется на большинстве платформ
в считанные минуты.</li>
<li><strong>Работа с исключениями:</strong> Python содержит сложный и продуманный механизм
работы с исключениями, благодаря чему программы продолжают работать даже
при возникновении ошибок в вызываемом ими коде.</li>
<li><strong>Отладчик:</strong> Python включает в себя отладчик, так что когда программа не
работает по какой-то причине, пользователь может получить доступ к истории
стека, проверить состояние необходимых переменных, перемещаться по стеку.</li>
<li><strong>Профилировщик:</strong> существует профилировщик Python, который запускает код и
создает отчет по количеству вызовов и времени работы каждой функции.</li>
<li><strong>Язык:</strong> Вместо того, чтобы писать <strong>новый язык</strong> для математики, как это
было сделано для Magma, Maple, Mathematica, Matlab, GP/PARI, GAP, Macaulay 2,
Simath, и т.д., мы используем язык Python, который является популярным языком
программирования; он активно развивается и оптимизируется сотнями опытных
специалистов по программному обеспечению (см. <a class="reference internal" href="bibliography.html#pydev">[PyDev]</a>).</li>
</ul>
</div>
<div class="section" id="sage-python">
<span id="section-mathannoy"></span><h3>Пре-парсер: Различия между Sage и Python<a class="headerlink" href="#sage-python" title="Ссылка на этот заголовок">¶</a></h3>
<p>В некоторых математических аспектах Python может ввести в заблуждение, поэтому
Sage ведет себя немного другим образом.</p>
<ul>
<li><p class="first"><strong>Обозначение возведения в степень:</strong> <tt class="docutils literal"><span class="pre">**</span></tt> вместо <tt class="docutils literal"><span class="pre">^</span></tt>. В Python,
<tt class="docutils literal"><span class="pre">^</span></tt> означает &#8220;исключительно или (xor)&#8221;, а не возведение в степень, так
в Python:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="mi">2</span><span class="o">^</span><span class="mi">8</span>
<span class="go">10</span>
<span class="gp">&gt;&gt;&gt; </span><span class="mi">3</span><span class="o">^</span><span class="mi">2</span>
<span class="go">1</span>
<span class="gp">&gt;&gt;&gt; </span><span class="mi">3</span><span class="o">**</span><span class="mi">2</span>
<span class="go">9</span>
</pre></div>
</div>
<p>Использование <tt class="docutils literal"><span class="pre">^</span></tt> может показаться странным; это не так важно для
математических исследований, потому как &#8220;исключительно или&#8221; используется
довольно редко. Для удобства, Sage использует пре-парсер для проверки кода
перед тем, как он передается в Python, и символ <tt class="docutils literal"><span class="pre">^</span></tt> (если он не находится
в строке) заменяет на <tt class="docutils literal"><span class="pre">**</span></tt>:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: 2^8</span>
<span class="go">256</span>
<span class="go">sage: 3^2</span>
<span class="go">9</span>
<span class="go">sage: &quot;3^2&quot;</span>
<span class="go">&#39;3^2&#39;</span>
</pre></div>
</div>
</li>
<li><p class="first"><strong>Деление целых чисел:</strong> Выражение <tt class="docutils literal"><span class="pre">2/3</span></tt> в Python означает не то, чего
ожидает математик. В Python, если <tt class="docutils literal"><span class="pre">m</span></tt> и <tt class="docutils literal"><span class="pre">n</span></tt> - целые числа, то <tt class="docutils literal"><span class="pre">m/n</span></tt>
также целое число, если быть точнее, то целая часть от деления <tt class="docutils literal"><span class="pre">m</span></tt> на
<tt class="docutils literal"><span class="pre">n</span></tt>. Следовательно <tt class="docutils literal"><span class="pre">2/3=0</span></tt>. В сообществе Python обсуждается вариант
изменения оператора так, чтобы <tt class="docutils literal"><span class="pre">2/3</span></tt> возвращало число с плавающей точкой
<tt class="docutils literal"><span class="pre">0.6666...</span></tt>, а <tt class="docutils literal"><span class="pre">2//3</span></tt> возвращало <tt class="docutils literal"><span class="pre">0</span></tt>.</p>
<p>В интерпретаторе Sage мы используем обозначение <tt class="docutils literal"><span class="pre">Integer(</span> <span class="pre">)</span></tt> и деление
используем как конструктор для рациональных чисел. Например:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: 2/3</span>
<span class="go">2/3</span>
<span class="go">sage: (2/3).parent()</span>
<span class="go">Rational Field</span>
<span class="go">sage: 2//3</span>
<span class="go">0</span>
<span class="go">sage: int(2)/int(3)</span>
<span class="go">0</span>
</pre></div>
</div>
</li>
<li><p class="first"><strong>Большие целые числа:</strong> Python имеет встроенную поддержку целых чисел
произвольной точности в дополнение к C-int’ам. Они намного медленнее, чем то,
что предоставляет GMP, а также имеют свойство: символ <tt class="docutils literal"><span class="pre">L</span></tt> в конце, чтобы
отличать их от переменных типа int (и это не изменится в ближайшем будущем).
Sage использует целые числа произвольной точности с помощью GMP C-библиотеки,
и они выводятся на экран без L.</p>
</li>
</ul>
<p>Вместо изменения интерпретатора Python (как поступили некоторые люди для
внутренних проектов), мы используем Python как есть, и применяем пре-парсер
для IPython так чтобы поведение командной строки IPython соответствовало
ожиданиям математиков. Это означает, что любой существующий код на Python
может быть использован в Sage. Однако, нужно придерживаться стандарта Python
при написании пакетов, которые будут импортированы в Sage.</p>
<p>(Чтобы установить пакет Python, который, скажем, вы нашли в интернете, следуйте
инструкции, но запускайте <tt class="docutils literal"><span class="pre">sage</span> <span class="pre">-python</span></tt> вместо <tt class="docutils literal"><span class="pre">python</span></tt>. Очень часто это
означает, что нужно ввести <tt class="docutils literal"><span class="pre">sage</span> <span class="pre">-python</span> <span class="pre">setup.py</span> <span class="pre">install</span></tt>.)</p>
</div>
</div>
<div class="section" id="sage">
<h2>Как принять участие в разработке Sage?<a class="headerlink" href="#sage" title="Ссылка на этот заголовок">¶</a></h2>
<p>Если вы хотите помочь в разработке Sage, это будет оценено по достоинству!
Помощь может варьироваться от внесения изменений в код до дополнения справочной
информации и нахождения багов.</p>
<p>Поищите информацию для разработчиков на главной странице Sage; кроме всего
прочего, вы можете найти список проектов, связанных с Sage, отсортированных по
приоритету и категории. <a class="reference external" href="http://www.sagemath.org/doc/developer/">Руководство разроботчика Sage</a> содержит полезную информацию; вы
также можете узнать больше в Google-группе <tt class="docutils literal"><span class="pre">sage-devel</span></tt>.</p>
</div>
<div class="section" id="id6">
<h2>Как правильно ссылаться на Sage?<a class="headerlink" href="#id6" title="Ссылка на этот заголовок">¶</a></h2>
<p>Если вы используете Sage для написания работы, пожалуйста, укажите, что
вычисления были произведены с помощью Sage. Включите</p>
<div class="highlight-python"><pre>[Sage] William A. Stein et al., Sage Mathematics Software (Version 4.3).
       The Sage Development Team, 2009, http://www.sagemath.org.</pre>
</div>
<p>в раздел библиографии (заменяя 4.3 версией Sage, которую вы используете).
Кроме того, пожалуйста, постарайтесь отследить, какие компоненты Sage были
использованы для вычислений, например PARI?, GAP?, Singular? Maxima?, и укажите
эти системы. Если вы сомневаетесь о том, какое программное обеспечение
используется для вычислений, задайте вопрос в Google-группе <tt class="docutils literal"><span class="pre">sage-devel</span></tt>.
См. <a class="reference internal" href="tour_polynomial.html#section-univariate"><em>Полиномы одной переменной</em></a> для дальнейшего обсуждения этой темы.</p>
<hr class="docutils" />
<p>Если вы прочитали это руководство от начала до конца, и у вас есть соображения
по поводу времени, затраченного на него, пожалуйста, выскажите свое мнение в
Google-группе <tt class="docutils literal"><span class="pre">sage-devel</span></tt>.</p>
<p>Наслаждайтесь Sage!</p>
</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="#python">Почему Python?</a><ul>
<li><a class="reference internal" href="#id2">Преимущества Python</a></li>
<li><a class="reference internal" href="#sage-python">Пре-парсер: Различия между Sage и Python</a></li>
</ul>
</li>
<li><a class="reference internal" href="#sage">Как принять участие в разработке Sage?</a></li>
<li><a class="reference internal" href="#id6">Как правильно ссылаться на Sage?</a></li>
</ul>
</li>
</ul>

            <h4>Предыдущий раздел</h4>
            <p class="topless"><a href="sagetex.html"
                                  title="предыдущая глава">Использование SageTeX</a></p>
            <h4>Следующий раздел</h4>
            <p class="topless"><a href="appendix.html"
                                  title="следующая глава">Дополнение</a></p>
            <h3>На этой странице</h3>
            <ul class="this-page-menu">
              <li><a href="_sources/afterword.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="appendix.html" title="Дополнение"
             >следующий</a> |</li>
        <li class="right" >
          <a href="sagetex.html" title="Использование SageTeX"
             >предыдущий</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>
 
      </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>