### 6.54.3 Réduction de Gauss-Jordan : `rref gaussjord`

`rref` permet de résoudre un système d’équations linéaires que l’on écrit sous forme matricielle (voir aussi 6.33.17) :

`A*X=B`

`rref` a un ou deux paramètres.

- Si `rref` n’a qu’un paramètre, ce paramètre est la "matrice augmentée" du système (celle formée par la matrice `A` du système et ayant comme dernier vecteur colonne le second membre `B`).
  Le résultat est une matrice `[A1,B1]` : `[A1,B1]` a des zéros de part et d’autre de sa diagonale et des 1 sur sa diagonale et les solutions de :
  `A1*X=B1`
  sont les mêmes que celles de :
  `A*X=B`
  Par exemple, soit à résoudre le système :

  ⎧
  ⎨
  ⎩

  3x + y | = | −2
  3x +2y | = | 2

  On tape :
  `rref([[3,1,-2],[3,2,2]])`
  On obtient :
  `[[1,0,-2],[0,1,4]]`
  cela signifie donc que :
  x=−2 et y=4 sont solutions du système.
- Si `rref` a deux paramètres, le deuxième paramètre est un entier k qui permet de ne faire Gauss-Jordan que sur les k premières colonnes ou est l’option `conserver_pivot` ou `keep_pivot`.
  On tape :
  `rref([[3,1,-2,1],[3,2,2,2]],1)`
  On obtient :
  `[[3,1,-2,1],[0,1,4,1]]`
  L’option `conserver_pivot` ou `keep_pivot` permet de ne pas diviser par les pivots, cela pour éviter de diviser par des pivots nuls.
  par exemple, pour résoudre le système :

  ⎧
  ⎪
  ⎨
  ⎪
  ⎩

  z1 + z2 | = a1
  z2 + z3 | = a2
  z3 + z4 | = a3
  z4 + z1 | = a4

  On tape :
  `A:=syst2mat([z1+z2=a1,z2+z3=a2,z3+z4=a3,z4+z1=a4], [z1,z2,z3,z4])`
  puis,
  `rref(A,keep_pivot)`
  ou bien, on tape directement :
  `rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3], [1,0,0,1,-a4]],keep_pivot)`
  On obtient :
  `[[a1-a2+a3-a4,0,0,a1-a2+a3-a4,0], [0,a1-a2+a3-a4,0,-a1+a2-a3+a4,0], [0,0,a1-a2+a3-a4,a1-a2+a3-a4,0], [0,0,0,0,a1-a2+a3-a4]]`
  Remarque
  Lorsque le nombre de colonnes est égal au nombre de lignes +1 `rref` ne divise pas par le pivot de la derniere colonne, par exemple, pour résoudre le système :

  ⎧
  ⎪
  ⎨
  ⎪
  ⎩

  z1 + z2 | = a1
  z2 + z3 | = a2
  z3 + z4 | = a3
  z4 + z1 | = a4

  On tape :
  `A:=syst2mat([z1+z2=a1,z2+z3=a2,z3+z4=a3,z4+z1=a4], [z1,z2,z3,z4])`
  `rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3], [1,0,0,1,-a4]])`
  On obtient :
  `[[1,0,0,1,0],[0,1,0,-1,0],[0,0,1,1,0], [0,0,0,0,a1-a2+a3-a4]]`
  Ainsi on peut savoir que si `a1-a2+a3-a4` n’est pas nul, il n’y a pas de solution. Puis, on tape :
  `rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3], [1,0,0,1,-a4]],3)`
  On obtient :
  `[[1,0,0,1,-a1+a2-a3],[0,1,0,-1,-a2+a3],[0,0,1,1,-a3], [0,0,0,0,1]]`
  ou encore si on remplace `a4` par `a1-a2+a3`, on tape :
  `rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3], [1,0,0,1,-a1+a2-a3]])`
  On obtient :
  `[[1,0,0,1,-a1+a2-a3],[0,1,0,-1,-a2+a3],[0,0,1,1,-a3], [0,0,0,0,0]]`
  Donc, les solutions lorsque `a1-a2+a3-a4=0` sont : `z1=a1-a2+a3-z4, z2=a2-a3+z4, z3=a3-z4, z4=z4`
- `rref` permet aussi de résoudre plusieurs systèmes d’équations linéaires qui ne diffèrent que par leur second membre. On écrit alors les second membres comme les colonnes d’une matrice.
  On tape :
  `rref([[3,1,-2,1],[3,2,2,2]])`
  On obtient :
  `[[1,0,-2,0],[0,1,4,1]]`
  cela signifie donc que :
  x=−2 et y=4 sont solutions du système

  ⎧
  ⎨
  ⎩

  3x + y | = | −2
  3x +2y | = | 2

  et que x=0 et y=1 sont solutions du système

  ⎧
  ⎨
  ⎩

  3x + y | = | 1
  3x +2y | = | 2