<?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>
        <variablelist>
            <varlistentry>
                <term>CAS DES MATRICES</term>
                <listitem>
                    <para/>
                    <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>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>CAS DES LISTES</term>
                <listitem>
                    <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>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <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>
    </refsection>
    <refsection>
        <title>Exemples</title>
        <programlisting role="example"><![CDATA[
// CAS DES MATRICES
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
// CAS des LISTES (types LIST et TLIST)
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="find">find</link>
            </member>
            <member>
                <link linkend="horner">horner</link>
            </member>
            <member>
                <link linkend="parentheses">parentheses</link>
            </member>
            <member>
                <link linkend="extraction">extraction</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
