<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) 2008 - INRIA
 * Copyright (C) 2012 - 2016 - Scilab Enterprises
 * Copyright (C) 2019 - Samuel GOUGEON
 *
 * This file is hereby licensed under the terms of the GNU GPL v2.0,
 * pursuant to article 5.3.4 of the CeCILL v.2.1.
 * This file was originally licensed under the terms of the CeCILL v2.1,
 * and continues to be available under such terms.
 * For more information, see the COPYING file which you should have received
 * along with this program.
 *
 -->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
          xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML"
          xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"
          xml:lang="ru" xml:id="slash">
    <refnamediv>
        <refname>слэш (косая черта)</refname>
        <refpurpose>(/) правое деление и обратная связь</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>Syntax</title>
        <synopsis>
            X = A / B        // при этом A = X * B
            X = A ./ B       // при этом A = X .* B
            X = A ./. B      // при этом A = X .*. B
            S = G /. K
            // комментарий в строке
            /* блок многострочных комментариев */
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>Описание</title>
        <para>
            Правое деление. <literal>X=A/B</literal> является решением <literal>X*B=A</literal>.
        </para>
        <para>
            Операторы слэш (правое деление) и обратный слэш (левое
            деление) связаны следующим выражением: <literal>B/A=(A'\B')'</literal>.
        </para>
        <para>
            В случае, когда <literal>A</literal> - квадратная матрица,
            решение <literal>X</literal> может быть вычислено
            либо через LU-разложение, либо через программу линейного
            решения по методу наименьших квадратов.
            Если число обусловленности матрицы <literal>A</literal>
            меньше, чем <literal>1/(10*%eps)</literal> (то есть, если
            <literal>A</literal> хорошо обусловлена),
            то используется LU-разложение с перестановками строк
            матрицы. Если нет (то есть, если <literal>A</literal> плохо
            обусловлена), то <literal>X</literal> является решением с
            минимальной нормой, которое минимизирует
            <literal>||A*X-B||</literal> используя полное ортогональное
            разложение <literal>A</literal> (то есть
            <literal>X</literal> - это решение линейной задачи по методу
            наименьших квадратов).
        </para>
        <para>
            <literal>A ./ B</literal> является матрицей с элементами
            <literal>A(i,j)/ B(i,j)</literal>.
            Если <literal>B</literal> - скаляр (матрица размером
            1 на 1), то эта операция то же самое, что и
            <literal>A ./ B * ones(A)</literal>. Аналогично, если скаляром
            является <literal>A</literal>.
        </para>
        <para>
            Обратный слэш ставят для левого деления.
        </para>
        <para>
            Обратная связь системы.  <literal>S = G /. K</literal> вычисляет
            <literal>S = G*(eye() + K*G)^(-1)</literal> и этот оператор избегает проблему упрощения.
        </para>
        <note>
          Заметьте, что <literal>123./B</literal> интерпретируется как <literal>(123)./B</literal>.
          В таких случаях точка является частью оператора, а не числа.
          <para/>
          In the opposite, Заметьте, что <literal>G/.5</literal> интерпретируется как <literal>G/(.5)</literal>.
          В таких случаях точка интерпретируется как часть числа, а не оператора,
          while it is not the case in  <literal>G/. 5</literal>
        </note>
        <para>
            Комментарий <literal>//</literal> комментирует строку, т. е. строки, которые начинаются с
            <literal>//</literal>, игнорируются интерпретатором.
        </para>
        <para>
            Это то же самое, что <literal>/*</literal>, с которого начинается комментирование блока кода, и
            <literal>*/</literal>, которым заканчивается комментирование этого блока.
         </para>
    </refsection>
    <refsection>
        <title>Примеры</title>
        <programlisting role="example"><![CDATA[
a = [3.,-24.,30.];
B = [
   9.   -36.    30.
  -36.   192.  -180.
   30.  -180.   180.
];
x = a / B
x*B-a // близко к нулю

a = 4 / 2;        // Должно быть 2
a = 2 ./ [2,4];   //  [1. 0.5]
     ]]></programlisting>
        <para>
            Kronecker right division :
        </para>
        <programlisting role="example"><![CDATA[
A = [1 100 ; 10 1000], B = [1 2 4],
P = A .*. B
P ./. B
 ]]></programlisting>
    <screen><![CDATA[
--> A = [1 100 ; 10 1000], B = [1 2 4],
 A  =
   1.    100.
   10.   1000.

 B  =
   1.   2.   4.

--> P = A .*. B
 P  =
   1.    2.    4.    100.    200.    400.
   10.   20.   40.   1000.   2000.   4000.

--> P ./. B
 ans  =
   1.   100.
   10.  1000.
]]></screen>
        <para/>
        <programlisting role="example"><![CDATA[
// Комментарии - это хорошо. Они помогают понять код
a = 1;  // Комментарий после некоторых инструкций в начале строки
/* Даже длинные, то есть на множестве строк,
комментарии полезны */
 ]]></programlisting>
    </refsection>
    <refsection role="see also">
        <title>Смотрите также</title>
        <simplelist type="inline">
            <member>
                <link linkend="inv">inv</link>
            </member>
            <member>
                <link linkend="backslash">backslash</link>
            </member>
            <member>
                <link linkend="krondivide">kron ./.</link>
            </member>
            <member>
                <link linkend="comments">комментарии</link>
            </member>
            <member>
                <link linkend="overloading">перегрузка</link>
            </member>
        </simplelist>
    </refsection>
    <refsection>
        <title>История</title>
        <revhistory>
            <revision>
                <revnumber>5.4.1</revnumber>
                <revremark>
                    Пороговый уровень для обусловливания в слэше увеличен.
                </revremark>
            </revision>
            <revision>
                <revnumber>6.0.0</revnumber>
                <revremark>
                  1./B  теперь означает 1 ./ B, больше не интерпретируется как 1. / B
                </revremark>
            </revision>
        </revhistory>
    </refsection>
</refentry>
