<?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="fr" xml:id="insertion">
    <refnamediv>
        <refname>insertion</refname>
        <refpurpose>insertion/modification dans une
            variable
        </refpurpose>
    </refnamediv>
    <refnamediv xml:id="affectation">
        <refname>affectation</refname>
        <refpurpose>affectation partielle d'une variable  </refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>Séquence d'appel</title>
        <synopsis>x(i,j)=a
            x(i)=a
            l(i)=a
            l(k1)...(kn)(i)=a ou l(list(k1,...,kn,i))=a
            l(k1)...(kn)(i,j)=a ou l(list(k1,...,kn,list(i,j))=a
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>Paramètres</title>
        <variablelist>
            <varlistentry>
                <term>x  </term>
                <listitem>
                    <para>matrice de tout type
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>l  </term>
                <listitem>
                    <para>liste
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>i,j  </term>
                <listitem>
                    <para>indices
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>k1,...kn  </term>
                <listitem>
                    <para>indices à valeurs entières
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>a  </term>
                <listitem>
                    <para>nouvelles valeurs des termes
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Description</title>
        <refsect3>
            <title>Cas des matrices</title>
            <para>
              Si  <literal>x</literal> est un tableau <literal>i</literal> et <literal>j</literal> peuvent être :
            </para>
            <variablelist>
              <varlistentry>
                <term>Des scalaires, vecteurs ou matrices</term>
                <listitem>
                  <para>Dans ce cas, les valeurs données en
                    indices doivent être strictement positives. Seules les parties
                    entières sont prises en compte.
                  </para>
                  <itemizedlist>
                    <listitem>
                      <para>
                        Si <literal>a</literal> est une matrice de dimensions
                        <literal>(size(i,'*'),size(j,'*'))</literal>
                        <literal>x(i,j)=a</literal> renvoie une nouvelle matrice
                        <literal>x</literal> telle que <literal>x(int(i(l)),int(j(k)))=a(l,k)
                        </literal>
                        pour <literal>l</literal> variant de 1 à
                        <literal>size(i,'*')</literal> et <literal>k</literal> variant de
                        1 à <literal>size(j,'*')</literal>, les autres composantes

                        initiales de <literal>x</literal> sont inchangées.
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        Si <literal>a</literal> est un scalaire
                        <literal>x(i,j)=a</literal> renvoie une nouvelle matrice
                        <literal>x</literal> telle que <literal>x(int(i(l)),int(j(k)))=a </literal>
                        pour <literal>l</literal> variant de 1 à
                        <literal>size(i,'*')</literal> et <literal>k</literal> variant de
                        1 à <literal>size(j,'*')</literal>, les autres composantes
                        initiales de <literal>x</literal> sont inchangées.
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        Si la valeur maximum de <literal>i</literal> ou
                        <literal>j</literal> dépasse la dimension correspondante de
                        <literal>x</literal>, alors <literal>x</literal> est au préalable agrandie
                        aux dimensions adéquates en stockant des zéros pour les matrices
                        standard, des chaînes vides pour les matrices de chaînes de
                        caractères ou la valeur %F pour les matrices booléennes.
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(i,j)=[]</literal> détruit les lignes
                        spécifiées par <literal>i</literal> si <literal>j</literal> désigne toutes
                        les colonnes de <literal>x</literal> ou détruit les colonnes
                        spécifiées par <literal>j</literal> si <literal>i</literal> désigne toutes
                        les lignes de <literal>x</literal>. Dans tous les autres cas
                        <literal>x(i,j)=[]</literal> produit une erreur.
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(i)=a</literal> où <literal>a</literal> est un
                        vecteur renvoie une nouvelle matrice <literal>x</literal> telle que
                        <literal>x(int(i(l)))=a(l)</literal> pour <literal>l</literal> variant de 1
                        à <literal>size(i,'*')</literal> , les autres composantes
                        initiales de <literal>x</literal> sont inchangées.
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(i)=a</literal> où <literal>a</literal> est un
                        scalaire, renvoie une nouvelle matrice <literal>x</literal> telle que
                        <literal>x(int(i(l)))=a</literal> pour <literal>l</literal> variant de 1 à
                        <literal>size(i,'*')</literal> , les autres composantes
                        initiales de <literal>x</literal> sont inchangées.
                      </para>
                      <para>
                        Si la valeur maximum de <literal>i</literal> dépasse
                        <literal>size(x,1)</literal>, <literal>x</literal> est au préalable agrandie
                        aux dimensions adéquates en stockant des zéros pour les matrices
                        standard, des chaînes vides pour les matrices de chaînes de
                        caractères ou la valeur %F pour les matrices booléennes.
                      </para>
                      <variablelist>
                        <varlistentry>
                          <term>Si</term>
                          <listitem>
                            <para>
                              <literal>x</literal> est une matrice 1 x 1 <literal>a</literal> peut
                              être un vecteur ligne (resp. colonne) de dimension
                              <literal>size(i,'*')</literal>. La matrice
                              <literal>x</literal> obtenue est un vecteur ligne
                              (resp. colonne)
                            </para>
                          </listitem>
                        </varlistentry>
                        <varlistentry>
                          <term>Si</term>
                          <listitem>
                            <para>
                              <literal>x</literal> est un vecteur
                              ligne (resp. colonne) <literal>a</literal> doit être un vecteur
                              ligne (resp. colonne) de dimension
                              <literal>size(i,'*')</literal>
                            </para>
                          </listitem>
                        </varlistentry>
                        <varlistentry>
                          <term>Si</term>
                          <listitem>
                            <para>
                              <literal>x</literal> est une matrice
                              en général <literal>a</literal> doit être un vecteur ligne ou
                              colonne de dimension <literal>size(i,'*')</literal> et
                              la valeur maximum de<literal>i</literal> ne peut dépasser
                              <literal>size(x,'*')</literal>,
                            </para>
                          </listitem>
                        </varlistentry>
                      </variablelist>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(i)=[]</literal> supprime les termes


                        spécifiés par <literal>i</literal>.
                      </para>
                    </listitem>
                  </itemizedlist>
                </listitem>
              </varlistentry>
              <varlistentry>
                <term>Le : symbole</term>
                <listitem>
                  <para>
                    Le symbole <literal> : </literal> signifiant "tous les éléments".
                  </para>
                  <itemizedlist>
                    <listitem>
                      <para>
                        <literal>x(i,:)=a</literal> est interprété comme

                        <literal>x(i,1:size(x,2))=a</literal>
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(:,j)=a</literal> est interprété comme
                        <literal>x(1:size(x,1),j)=a</literal>
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(:)=a</literal> renvoie dans
                        <literal>x</literal> la matrice <literal>a</literal> remise en forme en
                        accord avec les dimensions de
                        x. <literal>size(x,'*')</literal> doit être égal
                        à<literal>size(a,'*')</literal>
                      </para>
                    </listitem>
                  </itemizedlist>
                </listitem>
              </varlistentry>
              <varlistentry>
                <term>Vecteurs de booléens</term>
                <listitem>
                  <para>  Si un indice

                    (<literal>i</literal> ou <literal>j</literal> ) est un vecteur de booléens, il
                    est interprété comme <literal>find(i)</literal> ou <literal>find(j)</literal>,
                    respectivement.
                  </para>
                </listitem>
              </varlistentry>
              <varlistentry>
                <term>Polynomes</term>
                <listitem>
                  <para>
                    Si un indice (<literal>i</literal> ou
                    <literal>j</literal> ) est un vecteur de polynômes ou de polynômes
                    implicites, il est interprété comme <literal>horner(i,m)</literal> ou
                    <literal>horner(j,n)</literal>, respectivement, où <literal>m</literal> et
                    <literal>n</literal> sont les dimensions de <literal>x</literal> associées.
                    Même si cette fonctionnalité marche pour tous les polynômes, il
                    est recommandé d'utiliser des polynômes dans <literal>$</literal>
                    par souci de lisibilité.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
        </refsect3>
        <refsect3>
            <title>Cas des listes</title>
            <itemizedlist>
              <listitem>
                <para>
                  S'ils sont présents les <literal>ki</literal> donnent le chemin
                  vers un terme d'une sous-liste de la liste
                  <literal>l</literal>. Ils permettent de faire une insertion récursive
                  directe sans utiliser de variable intermédiaire.  Les instructions
                  <literal>l(k1)...(kn)(i)=a</literal> et
                  <literal>l(list(k1,...,kn,i)=a)</literal> sont interprétées comme :
                </para>
                <para>
                  <literal>lk1 = l(k1)</literal>
                  <literal> ..  = ..  </literal>
                </para>
                <para>
                  <literal>lkn =   lkn-1(kn)</literal>
                </para>
                <para>
                  <literal>lkn(i) = a</literal>
                  <literal>lkn-1(kn) =lkn</literal>
                  <literal> ..  = ..</literal>
                </para>
                <para>
                  les instructions<literal>l(k1)...(kn)(i,j)=a</literal> et
                  <literal>l(list(k1,...,kn,list(i,j))=a</literal> sont interprétées
                  comme:
                </para>
                <para>
                  <literal>lk1 = l(k1)</literal>
                  <literal> ..  = ..  </literal>
                </para>
                <para>
                  <literal>lkn =lkn-1(kn)</literal>
                  <literal>lkn(i,j) = a</literal>
                </para>
                <para>
                  <literal>lkn-1(kn) = lkn</literal>
                  <literal> ..  = ..  </literal>
                </para>
                <para>
                  <literal>l(k1) = lk1</literal>
                </para>
              </listitem>
              <listitem>
                <para>
                  <literal>i</literal> peut être :
                </para>
                <itemizedlist>
                  <listitem>
                    <para>un scalaire réel positif (seule sa partie entière est prise en compte).
                      <literal>l(0)=a</literal> ajoute un terme "à gauche"
                      de la liste <literal>l(i)=a</literal> affecte <literal>a</literal> au
                      terme <literal>i</literal> de la liste <literal>l</literal>. Si
                      <literal>i&gt;size(l)</literal>, <literal>l</literal> est
                      préalablement agrandie et les termes créés sont de type
                      non-défini.  <literal>l(i)=null()</literal> supprime le terme
                      <literal>i</literal>th de la liste.
                    </para>
                  </listitem>
                  <listitem>
                    <para>
                      un polynôme. Si <literal>i</literal> est un

                      vecteur de polynômes ou de polynômes implicites il est
                      interprété comme <literal>horner(i,m)</literal> où
                      <literal>m=size(l)</literal>. Même si cette fonctionnalité marche
                      pour tous les polynômes, il est recommandé d'utiliser
                      des polynômes dans <literal>$</literal> par souci de lisibilité.
                    </para>
                  </listitem>
                </itemizedlist>
              </listitem>
              <listitem>
                <para>
                  <literal>k1,..kn</literal> peuvent être :
                </para>
                <itemizedlist>
                  <listitem>
                    <para>un polynôme, interprété comme
                      <literal>horner(ki,m)</literal> ou <literal>m</literal> est la taille de
                      la sous-liste correspondante.
                    </para>
                  </listitem>
                  <listitem>
                    <para>une chaîne de caractères associée à un nom

                      d'entrée de sous-liste.
                    </para>
                  </listitem>
                </itemizedlist>
              </listitem>
            </itemizedlist>
        </refsect3>
        <refsect3>
            <title>Remarque</title>
            <para>
                Pour les matrices rationnelles et les systèmes dynamiques
                linéaires stockés sous forme de représentation d'état, la
                syntaxe <literal>x(i)</literal> ne doit pas être utilisée pour
                l'insertion des éléments d'un vecteur, à cause de la
                confusion possible avec l'insertion des éléments de liste. La
                syntaxe <literal>x(1,j)</literal> où <literal>x(i,1)</literal> doit être
                utilisée dans ce cas.
            </para>
        </refsect3>
    </refsection>
    <refsection>
        <title>Exemples</title>
        <para>
            Cas des matrices :
        </para>
        <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
a(1,%pi) = 1 // équivalent à a(1,3)=1
//
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] // le numérateur
     ]]></programlisting>
        <para>
            Cas des listes simples ou tlist :
        </para>
        <programlisting role="example"><![CDATA[
l = list(1,'qwerw',%s)
l(1) = 'Changed'
l(0) = 'Added'
l(%pi) = 1  // équivalent à l(3)=1
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>Voir aussi</title>
        <simplelist type="inline">
            <member>
                <link linkend="extraction">extraction</link>
            </member>
            <member>
                <link linkend="colon">colon</link>
            </member>
            <member>
                <link linkend="find">find</link>
            </member>
            <member>
                <link linkend="horner">horner</link>
            </member>
            <member>
                <link linkend="parentheses">parentheses</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
