<?xml version="1.0" encoding="UTF-8"?>
<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="insertion">
    <refnamediv>
        <refname>вставка</refname>
        <refpurpose>
            частичное присвоение или модификация значения переменной
        </refpurpose>
    </refnamediv>
    <refnamediv xml:id="assignation">
        <refname>присвоение</refname>
        <refpurpose>частичное присвоение значения переменной</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>Синтаксис</title>
        <synopsis>
            x(i,j)=a
            x(i)=a
            l(i)=a
            l(k1)...(kn)(i)=a или l(list(k1,...,kn,i))=a
            l(k1)...(kn)(i,j)=a или l(list(k1,...,kn,list(i,j))=a
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>Аргументы</title>
        <variablelist>
            <varlistentry>
                <term>x</term>
                <listitem>
                    <para>матрица любого типа (constant, sparse, polynomial,...)</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>l</term>
                <listitem>
                    <para>list</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>i,j</term>
                <listitem>
                    <para>индексы</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>k1,...kn</term>
                <listitem>
                    <para>индексы с целочисленными значениями</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>a</term>
                <listitem>
                    <para>новое значение элемента</para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Описание</title>
        <variablelist>
            <varlistentry>
                <term>В СЛУЧАЕ МАТРИЦЫ</term>
                <listitem>
                    <para>
                        Если <literal>x</literal> является матрицей, то индексы <literal>i</literal> и <literal>j</literal> могут быть:
                    </para>
                    <variablelist>
                        <varlistentry>
                            <term>вещественными скалярами или векторами или матрицами</term>
                            <listitem>
                                <para>
                                    В этом случае значения, указанные как индексы, должны быть положительными и учитывается лишь их целая часть.
                                </para>
                                <itemizedlist>
                                    <listitem>
                                        <para>
                                            Если <literal>a</literal> является матрицей с размерами
                                            <literal>(size(i,'*'),size(j,'*'))</literal>, то
                                            <literal>x(i,j)=a</literal> возвращает новую матрицу <literal>x</literal> такую, как
                                            <literal>x(int(i(l)),int(j(k)))=a(l,k)</literal> для
                                            <literal>l</literal> от 1 до
                                            <literal>size(i,'*')</literal> и <literal>k</literal> от
                                            1 до <literal>size(j,'*')</literal>, другие изначальные элементы  <literal>x</literal>
                                            остаются неизменными.
                                        </para>
                                    </listitem>
                                    <listitem>
                                        <para>
                                            Если <literal>a</literal> является скаляром, то
                                            <literal>x(i,j)=a</literal> возвращает новую матрицу <literal>x</literal> такую, как
                                            <literal>x(int(i(l)),int(j(k)))=a</literal> для
                                            <literal>l</literal> от 1 до
                                            <literal>size(i,'*')</literal> и <literal>k</literal> от
                                            1 до <literal>size(j,'*')</literal>, другие изначальные элементы  <literal>x</literal>
                                            остаются неизменными.
                                        </para>
                                    </listitem>
                                    <listitem>
                                        <para>
                                            Если максимальное значение <literal>i</literal> или <literal>j</literal>
                                            превосходит соответствующие размеры матрицы <literal>x</literal>, то
                                            массив <literal>x</literal> сначала расширяется до требуемых размеров нулевыми
                                            элементами для стандартных матриц, символьными строками нулевой длины для строковых матриц
                                            и значениями "ложь" для матриц логических значений.
                                        </para>
                                    </listitem>
                                    <listitem>
                                        <para>
                                            <literal>x(i,j)=[]</literal> удаляет строки, определённые через
                                            <literal>i</literal>, если <literal>j</literal> совпадает со всеми столбцами
                                            <literal>x</literal> или удаляет столбцы, определённые через
                                            <literal>j</literal>, если <literal>i</literal> совпадает со всеми строками
                                            <literal>x</literal>. В других случаях <literal>x(i,j)=[]</literal>
                                            формирует ошибку.
                                        </para>
                                    </listitem>
                                    <listitem>
                                        <para>
                                            <literal>x(i)=a</literal>, где <literal>a</literal> -- вектор, возвращает
                                            новую матрицу <literal>x</literal>, такую что
                                            <literal>x(int(i(l)))=a(l)</literal> для <literal>l</literal> от 1 до
                                            <literal>size(i,'*')</literal>, другие изначальные элементы <literal>x</literal>
                                            являются неизменными.
                                        </para>
                                    </listitem>
                                    <listitem>
                                        <para>
                                            <literal>x(i)=a</literal>, где <literal>a</literal> -- скаляр, возвращает
                                            новую матрицу <literal>x</literal>, такую что
                                            <literal>x(int(i(l)))=a</literal> для <literal>l</literal> от 1 до
                                            <literal>size(i,'*')</literal>, другие изначальные элементы <literal>x</literal>
                                            являются неизменными.
                                        </para>
                                        <para>
                                            Если максимальное значение <literal>i</literal> превосходит
                                            <literal>size(x,1)</literal>, то <literal>x</literal>  сначала расширяется до
                                            требуемого размера нулевыми элементами для стандартных матриц, символьными строками нулевой длины для строковых матриц
                                            и значениями "ложь" для матриц логических значений.
                                        </para>
                                        <variablelist>
                                            <varlistentry>
                                                <term>если</term>
                                                <listitem>
                                                    <para>
                                                        <literal>x</literal> является скаляром (1x1)
                                                    </para>
                                                    <para>
                                                        матрица <literal>a</literal> может быть вектор-строкой (соответственно вектор-столбцом) размером
                                                        <literal>size(i,'*')</literal>. Результирующая матрица
                                                        <literal>x</literal> является вектором-строкой (соответственно вектор-столбцом);
                                                    </para>
                                                </listitem>
                                            </varlistentry>
                                            <varlistentry>
                                                <term>если</term>
                                                <listitem>
                                                    <para>
                                                        <literal>x</literal> является вектор-строкой
                                                    </para>
                                                    <para>
                                                        вектор <literal>a</literal> должен быть вектор-строкой размером <literal>size(i,'*')</literal>;
                                                    </para>
                                                </listitem>
                                            </varlistentry>
                                            <varlistentry>
                                                <term>если</term>
                                                <listitem>
                                                    <para>
                                                        <literal>x</literal> является вектор-столбцом
                                                    </para>
                                                    <para>
                                                        вектор <literal>a</literal> должен быть вектор-столбцом размером <literal>size(i,'*')</literal>;
                                                    </para>
                                                </listitem>
                                            </varlistentry>
                                            <varlistentry>
                                                <term>если</term>
                                                <listitem>
                                                    <para>
                                                        <literal>x</literal> в общем виде
                                                    </para>
                                                    <para>
                                                        матрица <literal>a</literal> должна быть вектор-строкой или вектор-столбцом
                                                        размером <literal>size(i,'*')</literal> и максимальное значение
                                                        <literal>i</literal> не может превосходить
                                                        <literal>size(x,'*')</literal>.
                                                    </para>
                                                </listitem>
                                            </varlistentry>
                                        </variablelist>
                                    </listitem>
                                    <listitem>
                                        <para>
                                            <literal>x(i)=[]</literal> удаляет элементы, определённые через <literal>i</literal>.
                                        </para>
                                    </listitem>
                                </itemizedlist>
                            </listitem>
                        </varlistentry>
                        <varlistentry>
                            <term>символом "двоеточие"</term>
                            <listitem>
                                <para>
                                    Символ двоеточие <literal>:</literal> означает "все элементы".
                                </para>
                                <itemizedlist>
                                    <listitem>
                                        <para>
                                            <literal>x(i,:)=a</literal> интерпретируется как
                                            <literal>x(i,1:size(x,2))=a</literal>
                                        </para>
                                    </listitem>
                                    <listitem>
                                        <para>
                                            <literal>x(:,j)=a</literal> интерпретируется как
                                            <literal>x(1:size(x,1),j)=a</literal>
                                        </para>
                                    </listitem>
                                    <listitem>
                                        <para>
                                            <literal>x(:)=a</literal> возвращает в <literal>x</literal>
                                            матрицу <literal>a</literal>, элементы которой переставлены в соответсвии
                                            с размерами <literal>x</literal>. Размер <literal>size(x,'*')</literal>
                                            должен быть равен размеру <literal>size(a,'*')</literal>.
                                        </para>
                                    </listitem>
                                </itemizedlist>
                            </listitem>
                        </varlistentry>
                        <varlistentry>
                            <term>векторами логических значений</term>
                            <listitem>
                                <para>
                                    Если индекс (<literal>i</literal> или <literal>j</literal>) задан в виде
                                    вектора логических значений, то он интерпретируется как
                                    <literal>find(i)</literal> или, соответственно, <literal>find(j)</literal>.
                                </para>
                            </listitem>
                        </varlistentry>
                        <varlistentry>
                            <term>полиномами</term>
                            <listitem>
                                <para>
                                    Если индекс (<literal>i</literal> или <literal>j</literal>) задан в виде
                                    полиномов или в виде неявного вектора полиномов, то он интерпретируется как
                                    <literal>horner(i,m)</literal> или, соответственно,
                                    <literal>horner(j,n)</literal>, где <literal>m</literal> и
                                    <literal>n</literal> связаны с размерами <literal>x</literal>.
                                    Даже если это работает для всех полиномов, рекомендуется использовать символ
                                    <literal>$</literal> для удобочитаемости.
                                </para>
                            </listitem>
                        </varlistentry>
                    </variablelist>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>В СЛУЧАЕ СПИСКА (LIST) ИЛИ ТИПИЗИРОВАННОГО СПИСКА (TLIST)</term>
                <listitem>
                    <itemizedlist>
                        <listitem>
                            <para>
                                If they are present
                                the <literal>ki</literal> give the path to a sub-list entry of
                                <literal>l</literal> data structure. They allow a recursive insertion
                                without intermediate copies.  The <literal>l(k1)...(kn)(i)=a</literal>
                                and <literal>l(list(k1,...,kn,i)=a)</literal> instructions are
                                interpreted as:
                            </para>
                            <para>
                                <literal>lk1 = l(k1)</literal>
                            </para>
                            <para>
                                <literal> ..  = ..  </literal>
                            </para>
                            <para>
                                <literal>lkn = lkn-1(kn)</literal>
                            </para>
                            <para>
                                <literal>lkn(i) = a</literal>
                            </para>
                            <para>
                                <literal>lkn-1(kn) = lkn</literal>
                            </para>
                            <para>
                                <literal> ..  = ..  </literal>
                            </para>
                            <para>
                                <literal>l(k1) = lk1</literal>
                            </para>
                            <para>
                                А инструкции <literal>l(k1)...(kn)(i,j)=a</literal> и  <literal>l(list(k1,...,kn,list(i,j))=a</literal>
                                интерпретируется как:
                            </para>
                            <para>
                                <literal>lk1 = l(k1)</literal>
                            </para>
                            <para>
                                <literal> ..  = ..  </literal>
                            </para>
                            <para>
                                <literal>lkn = lkn-1(kn)</literal>
                            </para>
                            <para>
                                <literal>lkn(i,j) = a</literal>
                            </para>
                            <para>
                                <literal>lkn-1(kn) = lkn</literal>
                            </para>
                            <para>
                                <literal> ..  = ..  </literal>
                            </para>
                            <para>
                                <literal>l(k1)= lk1</literal>
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                <literal>i</literal> может быть:
                            </para>
                            <itemizedlist>
                                <listitem>
                                    <para>
                                        вещественным неотрицательным скаляром. <literal>l(0)=a</literal>
                                        добавляет элемент к списку "слева". <literal>l(i)=a</literal>
                                        присваивает элементу <literal>i</literal> списка  <literal>l</literal>
                                        значение <literal>a</literal>. Если <literal>i&gt;size(l)</literal>, то
                                        <literal>l</literal> сначала расширяется  элементами нулевой длины (неопределённые).
                                        <literal>l(i)=null()</literal> удаляет <literal>i</literal>-тый элемент из списка.
                                    </para>
                                </listitem>
                                <listitem>
                                    <para>
                                        полиномом.  Если <literal>i</literal> является полиномом, то он интерпретируется как
                                        <literal>horner(i,m)</literal>, где <literal>m=size(l)</literal>.
                                        Даже если это работает для всех полиномов, рекомендуется использовать символ
                                        <literal>$</literal> для удобочитаемости.
                                    </para>
                                </listitem>
                            </itemizedlist>
                        </listitem>
                        <listitem>
                            <para>
                                <literal>k1,..kn</literal> могут быть:
                            </para>
                            <itemizedlist>
                                <listitem>
                                    <para>
                                        вещественным положительным скаляром;
                                    </para>
                                </listitem>
                                <listitem>
                                    <para> полиномом, интерпретируемым как
                                        <literal>horner(ki,m)</literal>, где <literal>m</literal> является
                                        соответствующим размером подсписка;
                                    </para>
                                </listitem>
                                <listitem>
                                    <para>
                                        символьной строкой, связанной с именем элемента подсписка.
                                    </para>
                                </listitem>
                            </itemizedlist>
                        </listitem>
                    </itemizedlist>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Примечания</title>
        <para>
            Для программно формируемых типов матриц, таких, как рациональные функции и линейные системы пространства состояний,
            синтаксис <literal>x(i)</literal> нельзя использовать для вставки элементов вектора из-за путаницы со вставкой
            элемента списка. Должен использоваться синтаксис <literal>x(1,j)</literal> или <literal>x(i,1)</literal> .
        </para>
    </refsection>
    <refsection>
        <title>Примеры</title>
        <programlisting role="example"><![CDATA[
// В СЛУЧАЕ МАТРИЦЫ
a=[1 2 3;4 5 6]
a(1,2)=10
a([1 1],2)=[-1;-2]
a(:,1)=[8;5]
a(1,3:-1:1)=[77 44 99]
a(1)=%s
a(6)=%s+1
a(:)=1:6
a([%t %f],1)=33
a(1:2,$-1)=[2;4]
a($:-1:1,1)=[8;7]
a($)=123
//
x='test'
x([4 5])=['4','5']
//
b=[1/%s,(%s+1)/(%s-1)]
b(1,1)=0
b(1,$)=b(1,$)+1
b(2)=[1 2] // числитель

// в случае LIST или TLIST
l=list(1,'qwerw',%s)
l(1)='Changed'
l(0)='Added'
l(6)=['one more';'added']
//
//
dts=list(1,tlist(['x';'a';'b'],10,[2 3]));
dts(2).a=33
dts(2)('b')(1,2)=-100
 ]]></programlisting>
    </refsection>
    <refsection role="see also">
        <title>Смотрите также</title>
        <simplelist type="inline">
            <member>
                <link linkend="find">find</link>
            </member>
            <member>
                <link linkend="horner">horner</link>
            </member>
            <member>
                <link linkend="parentheses">круглые скобки</link>
            </member>
            <member>
                <link linkend="extraction">выделение</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
