### 6.44.13 Modifier un élément ou une ligne d’une matrice contenue dans une variable : `:=` et `=<`

Si la matrice a un nom, on peut assigner un élément d’une matrice en utilisant son indice entouré de crochets si les indices commencent à 0 et entouré de doubles crochets ou des parenthèses si les indices commencent à 1.
Attention
On ne peut pas utiliser les parenthèses avec une matrice formelle car pour `Xcas` cette notation sera la définition d’une fonction !
Si on veut que les indices commencent à 1 il faut utiliser les doubles crochets. Par exemple :

    A:=idn(3);
    pour j de 1 jusque 3 faire
      pour k de 1 jusque 3 faire
        A(j,k):=j*k;
      fpour;
    fpour;
    B:=idn(3);
    pour j de 1 jusque 3 faire
      pour k de 1 jusque 3 faire
        B[[j,k]]:=j*k;
      fpour;
    fpour;

On a alors
`A` renvoie la fonction `(j,k)->j*k`
`B` renvoie la matrice `[[1,2,3],[2,4,6],[3,6,9]]`
Si on assigne avec `:=`, une nouvelle copie de la matrice est créée et l’élément est modifié, et si on assigne avec `=<` la matrice est modifiée sans faire de copie ce qui est plus rapide lorque la matrice est de grande taille.
Par exemple :
Si `A:=[[4,5],[2,6]]`, pour modifier `A` en la matrice `[[4,5],[3,6]]` on peut taper :
`A[1,0]:=3` ou
`A[1,0]=<3` ou
`A[[2,1]]:=3` ou
`A(2,1):=3` ou
`A[[2,1]]=<3`
Puis on tape :
`A`
On obtient la nouvelle valeur de `A` :
`[[4,5],[3,6]]`
On peut aussi modifier une ligne, par exemple, si `A:=[[4,5],[2,6]]` pour modifier en `A` la matrice `[[4,5],[3,7]]`, on peut taper :
`A:=[[4,5],[2,6]]` `A[1]:=[3,7]` ou
`A[1]=<[3,7]` ou
`A[[2]]:=[3,7]` ou
`A(2):=[3,7]` ou
`A[[2]]=<[3,7]` ou
`A(2)=<[3,7]`
Puis on tape :
`A`
On obtient la nouvelle valeur de `A` :
`[[4,5],[3,7]]`.
Remarque
Il faut utiliser `=<` avec précautions car tous les objets pointant sur cette matrice seront modifiés. Dans un programme il faudra utiliser `A:=copy(B)` lors de l’initialisation pour que les modifications faites avec `=<` sur `B` ne se fassent pas sur la copie `A` ou que les modifications faites avec `=<` sur la copie `A` ne se fassent pas sur `B` (cf 8.4.14).
Par exemple :
On tape :
`B:=[[4,5],[2,6]]`
`A=<B` ou `A:=B`
`A,B`
On obtient :
`[[4,5],[2,6]],[[4,5],[2,6]]`
On tape :
`B[1]=<[3,7]` ou `A[1]=<[3,7]`
`A,B`
On obtient :
`[[4,5],[3,7]],[[4,5],[3,7]]`
Mais si on tape :
`B:=[[4,5],[2,6]]`
`A:=copy(B)`
`A,B`
On obtient :
`[[4,5],[2,6]],[[4,5],[2,6]]`
On tape :
`B[1]=<[3,7]`
`A,B`
On obtient :
`[[4,5],[2,6]],[[4,5],[3,7]]`
Ou si on tape :
`B:=[[4,5],[2,6]]`
`A:=copy(B)`
`A,B`
On obtient :
`[[4,5],[2,6]],[[4,5],[2,6]]`
On tape :
`A[1]=<[3,7]`
`A,B`
On obtient :
`[[4,5],[3,7]],[[4,5],[2,6]]`