Previous Up Next

6.47.5  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 9.4.16).
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]]


Previous Up Next