Sophie

Sophie

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

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="tour_polynomial.html" />
    <link rel="prev" title="Основные кольца" href="tour_rings.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_polynomial.html" title="Полиномы"
             accesskey="N">следующий</a> |</li>
        <li class="right" >
          <a href="tour_rings.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="section-linalg">
<span id="id1"></span><h1>Линейная алгебра<a class="headerlink" href="#section-linalg" title="Ссылка на этот заголовок">¶</a></h1>
<p>Sage поддерживает стандартные конструкции из линейной алгебры, как
характеристические полиномы, ступенчатые формы, суммы элементов главной
диагонали матрицы, разложения.</p>
<p>Создавать и перемножать матрицы легко:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: A = Matrix([[1,2,3],[3,2,1],[1,1,1]])</span>
<span class="go">sage: w = vector([1,1,-4])</span>
<span class="go">sage: w*A</span>
<span class="go">(0, 0, 0)</span>
<span class="go">sage: A*w</span>
<span class="go">(-9, 1, -2)</span>
<span class="go">sage: kernel(A)</span>
<span class="go">Free module of degree 3 and rank 1 over Integer Ring</span>
<span class="go">Echelon basis matrix:</span>
<span class="go">[ 1  1 -4]</span>
</pre></div>
</div>
<p>Решение матричных уравнений также выполняется без затруднений, используя
метод <tt class="docutils literal"><span class="pre">solve_right</span></tt>. Вычисление <tt class="docutils literal"><span class="pre">A.solve_right(Y)</span></tt> возвратит матрицу
(или вектор) <img class="math" src="_images/math/6a47ca0fe7cb276abc022af6ac88ddae1a9d6894.png" alt="X"/> такой, что <img class="math" src="_images/math/d909781d970c2cffcd2ba8a6132bf0ef23877208.png" alt="AX=Y"/>:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: Y = vector([0, -4, -1])</span>
<span class="go">sage: X = A.solve_right(Y)</span>
<span class="go">sage: X</span>
<span class="go">(-2, 1, 0)</span>
<span class="go">sage: A * X   # проверка...</span>
<span class="go">(0, -4, -1)</span>
</pre></div>
</div>
<p><tt class="docutils literal"><span class="pre">\</span></tt> может быть использован вместо <tt class="docutils literal"><span class="pre">solve_right</span></tt>; используйте
<tt class="docutils literal"><span class="pre">A</span> <span class="pre">\</span> <span class="pre">Y</span></tt> вместо <tt class="docutils literal"><span class="pre">A.solve_right(Y)</span></tt>.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: A \ Y</span>
<span class="go">(-2, 1, 0)</span>
</pre></div>
</div>
<p>Если решения не существует, то Sage вернет ошибку:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: A.solve_right(w)</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="gr">ValueError</span>: <span class="n">matrix equation has no solutions</span>
</pre></div>
</div>
<p>Используйте <tt class="docutils literal"><span class="pre">A.solve_left(Y)</span></tt>, чтобы найти <img class="math" src="_images/math/6a47ca0fe7cb276abc022af6ac88ddae1a9d6894.png" alt="X"/> в <img class="math" src="_images/math/637e987ded321eecfc025d82935702a036714dbe.png" alt="XA=Y"/>.
Sage может находить собственное число и собственный вектор:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: A = matrix([[0, 4], [-1, 0]])</span>
<span class="go">sage: A.eigenvalues ()</span>
<span class="go">[-2*I, 2*I]</span>
<span class="go">sage: B = matrix([[1, 3], [3, 1]])</span>
<span class="go">sage: B.eigenvectors_left()</span>
<span class="go">[(4, [</span>
<span class="go">(1, 1)</span>
<span class="go">], 1), (-2, [</span>
<span class="go">(1, -1)</span>
<span class="go">], 1)]</span>
</pre></div>
</div>
<p>(Результат <tt class="docutils literal"><span class="pre">eigenvectors_left</span></tt> - это список троек: (собственное
число, собственный вектор, многообразие).) Собственные числа и вектора
для <tt class="docutils literal"><span class="pre">QQ</span></tt> или <tt class="docutils literal"><span class="pre">RR</span></tt> также могут быть вычислены с помощью Maxima
(см. <a class="reference internal" href="interfaces.html#section-maxima"><em>Maxima</em></a>).</p>
<p>Как указано в разделе <a class="reference internal" href="tour_rings.html#section-rings"><em>Основные кольца</em></a>, кольцо, в котором определена
матрица, влияет на некоторые ее свойства. В следующем примере первый
аргумент команды <tt class="docutils literal"><span class="pre">matrix</span></tt> сообщает Sage, чтобы матрица рассматривалась
как матрица целых чисел (случай с <tt class="docutils literal"><span class="pre">ZZ</span></tt>), как матрица рациональных чисел
(<tt class="docutils literal"><span class="pre">QQ</span></tt>) или как матрица вещественных чисел (<tt class="docutils literal"><span class="pre">RR</span></tt>):</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: AZ = matrix(ZZ, [[2,0], [0,1]])</span>
<span class="go">sage: AQ = matrix(QQ, [[2,0], [0,1]])</span>
<span class="go">sage: AR = matrix(RR, [[2,0], [0,1]])</span>
<span class="go">sage: AZ.echelon_form()</span>
<span class="go">[2 0]</span>
<span class="go">[0 1]</span>
<span class="go">sage: AQ.echelon_form()</span>
<span class="go">[1 0]</span>
<span class="go">[0 1]</span>
<span class="go">sage: AR.echelon_form()</span>
<span class="go">[ 1.00000000000000 0.000000000000000]</span>
<span class="go">[0.000000000000000  1.00000000000000]</span>
</pre></div>
</div>
<p>Для вычисления собственных значений и собственных векторов матриц
действительных или комплексных чисел с плавающей точкой, матрица должна быть
определена над <tt class="docutils literal"><span class="pre">RDF</span></tt> (Real Double Field) или <tt class="docutils literal"><span class="pre">CDF</span></tt> (Complex Double Field),
соответственно. Если кольцо не указано, и в матрице используются действительные или
комплексные константы с плавающей точкой, то (по умолчанию) она определена над не
всегда поддерживающими такие вычисления полями <tt class="docutils literal"><span class="pre">RR</span></tt> или <tt class="docutils literal"><span class="pre">CC</span></tt>,
соответственно:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: ARDF = matrix(RDF, [[1.2, 2], [2, 3]])</span>
<span class="go">sage: ARDF.eigenvalues()</span>
<span class="go">[-0.0931712199461, 4.29317121995]</span>
<span class="go">sage: ACDF = matrix(CDF, [[1.2, I], [2, 3]])</span>
<span class="go">sage: ACDF.eigenvectors_right()</span>
<span class="go">[(0.881845698329 - 0.820914065343*I, [(0.750560818381, -0.616145932705 + 0.238794153033*I)], 1),</span>
<span class="go">(3.31815430167 + 0.820914065343*I, [(0.145594698293 + 0.37566908585*I, 0.915245825866)], 1)]</span>
</pre></div>
</div>
<div class="section" id="id2">
<h2>Матричное пространство<a class="headerlink" href="#id2" title="Ссылка на этот заголовок">¶</a></h2>
<p>Создадим пространство <img class="math" src="_images/math/a7074f35f7dc78ebda02541089860cb883cf5270.png" alt="\text{Mat}_{3\times 3}(\QQ)"/>, состоящее
из матриц <img class="math" src="_images/math/d278803d72fcc493afb1559174a483aa7f41d143.png" alt="3 \times 3"/> с элементами из рациональных чисел:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: M = MatrixSpace(QQ,3)</span>
<span class="go">sage: M</span>
<span class="go">Full MatrixSpace of 3 by 3 dense matrices over Rational Field</span>
</pre></div>
</div>
<p>(Для того, чтобы создать пространство из матриц 3 на 4, используйте
<tt class="docutils literal"><span class="pre">MatrixSpace(QQ,3,4)</span></tt>. Если число столбцов не указано, по умолчанию
оно будет равно числу строк (<tt class="docutils literal"><span class="pre">MatrixSpace(QQ,3)</span></tt> эквивалентно
<tt class="docutils literal"><span class="pre">MatrixSpace(QQ,3,3)</span></tt>.) Матричное пространство имеет базис, который
содержится в Sage в виде списка:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: B = M.basis()</span>
<span class="go">sage: len(B)</span>
<span class="go">9</span>
<span class="go">sage: B[1]</span>
<span class="go">[0 1 0]</span>
<span class="go">[0 0 0]</span>
<span class="go">[0 0 0]</span>
</pre></div>
</div>
<p>Создадим матрицу как элемент <tt class="docutils literal"><span class="pre">M</span></tt>.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: A = M(range(9)); A</span>
<span class="go">[0 1 2]</span>
<span class="go">[3 4 5]</span>
<span class="go">[6 7 8]</span>
</pre></div>
</div>
<p>Далее покажем вычисление матриц, определенных в конечных полях:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: M = MatrixSpace(GF(2),4,8)</span>
<span class="go">sage: A = M([1,1,0,0, 1,1,1,1, 0,1,0,0, 1,0,1,1,</span>
<span class="gp">... </span>         <span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">])</span>
<span class="go">sage: A</span>
<span class="go">[1 1 0 0 1 1 1 1]</span>
<span class="go">[0 1 0 0 1 0 1 1]</span>
<span class="go">[0 0 1 0 1 1 0 1]</span>
<span class="go">[0 0 1 1 1 1 1 0]</span>
<span class="go">sage: rows = A.rows()</span>
<span class="go">sage: A.columns()</span>
<span class="go">[(1, 0, 0, 0), (1, 1, 0, 0), (0, 0, 1, 1), (0, 0, 0, 1),</span>
<span class="go"> (1, 1, 1, 1), (1, 0, 1, 1), (1, 1, 0, 1), (1, 1, 1, 0)]</span>
<span class="go">sage: rows</span>
<span class="go">[(1, 1, 0, 0, 1, 1, 1, 1), (0, 1, 0, 0, 1, 0, 1, 1),</span>
<span class="go"> (0, 0, 1, 0, 1, 1, 0, 1), (0, 0, 1, 1, 1, 1, 1, 0)]</span>
</pre></div>
</div>
<p>Создадим подпространство в <img class="math" src="_images/math/f6837415ad1fc9748278919f47f32f9649bd7117.png" alt="\GF{2}"/>, охватывающее вышеперечисленные строки.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: V = VectorSpace(GF(2),8)</span>
<span class="go">sage: S = V.subspace(rows)</span>
<span class="go">sage: S</span>
<span class="go">Vector space of degree 8 and dimension 4 over Finite Field of size 2</span>
<span class="go">Basis matrix:</span>
<span class="go">[1 0 0 0 0 1 0 0]</span>
<span class="go">[0 1 0 0 1 0 1 1]</span>
<span class="go">[0 0 1 0 1 1 0 1]</span>
<span class="go">[0 0 0 1 0 0 1 1]</span>
<span class="go">sage: A.echelon_form()</span>
<span class="go">[1 0 0 0 0 1 0 0]</span>
<span class="go">[0 1 0 0 1 0 1 1]</span>
<span class="go">[0 0 1 0 1 1 0 1]</span>
<span class="go">[0 0 0 1 0 0 1 1]</span>
</pre></div>
</div>
</div>
<div class="section" id="id3">
<h2>Разреженная линейная алгебра<a class="headerlink" href="#id3" title="Ссылка на этот заголовок">¶</a></h2>
<p>Sage поддерживает разреженную линейную алгебру.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: M = MatrixSpace(QQ, 100, sparse=True)</span>
<span class="go">sage: A = M.random_element(density = 0.05)</span>
<span class="go">sage: E = A.echelon_form()</span>
</pre></div>
</div>
<p>Мультимодульный алгоритм в Sage работает хорошо для квадратных матриц
(но не так хорошо для неквадратных матриц):</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: M = MatrixSpace(QQ, 50, 100, sparse=True)</span>
<span class="go">sage: A = M.random_element(density = 0.05)</span>
<span class="go">sage: E = A.echelon_form()</span>
<span class="go">sage: M = MatrixSpace(GF(2), 20, 40, sparse=True)</span>
<span class="go">sage: A = M.random_element()</span>
<span class="go">sage: E = A.echelon_form()</span>
</pre></div>
</div>
<p>Заметьте, что в Python использование заглавных букв играет роль:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: M = MatrixSpace(QQ, 10,10, Sparse=True)</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="gr">TypeError</span>: <span class="n">__classcall__() got an unexpected keyword argument &#39;Sparse&#39;</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>
</ul>
</li>
</ul>

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