### 6.63.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.35.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
  rref peut travailler dans ℤ/pℤ.
  Par exemple, soit à résoudre le système dans ℝ et dans ℤ/5ℤ:

  ⎧ ⎨ ⎩ |
  3x + y | = | −2
  3x +2y | = | 2

  On tape pour résoudre le système dans ℝ:
  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.
  On tape pour résoudre le système dans ℤ/5ℤ:
  rref([[3,1,-2],[3,2,2]]%5)
  On obtient :
  [[1 % 5,0,-2 % 5],[0,1 % 5,-1 % 5]]
  cela signifie donc que :
  x=−2%5 et y=−1%5 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 dans ℝ et dans ℤ/2ℤ:

  ⎧ ⎪ ⎨ ⎪ ⎩ |
  z1 + z2 | = a1
  z2 + z3 | = a2
  z3 + z4 | = a3
  z4 + z1 | = a4

  On tape pour résoudre le système dans ℝ :
  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]]

  On peut aussi taper :

  rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3], [1,0,0,1,-a4]],3,keep_pivot)

  On obtient tout de suite:

  [[1,0,0,1,-a1+a2-a3],[0,1,0,-1,-a2+a3],[0,0,1,1,-a3], [0,0,0,0,a1-a2+a3-a4]]

  Donc, les solutions lorsque a1-a2+a3-a4=0 sont :
  z1=a1-a2+a3-z4, z2=a2-a3+z4, z3=a3-z4, z4=z4.
  On tape pour résoudre le système dans ℤ/2ℤ :

  rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3], [1,0,0,1,-a4]]%2,3,keep_pivot)

  On obtient :
  [[1 % 2,0,0,1 % 2,(1 % 2)*a1+(1 % 2)*a2+(1 % 2)*a3],
  [0,1 % 2,0,1 % 2,(1 % 2)*a2+(1 % 2)*a3],[0,0,1 % 2,1 % 2,(1 % 2)*a3],
  [0,0,0,0,(1 % 2)*a1+(1 % 2)*a2+(1 % 2)*a3+(1 % 2)*a4]]
  Donc lorsque (a1+a2+a3+a4=0%2), les solutions dans ℤ/2ℤ sont :
  z1=a1+a2+a3+z4%2, z2=a2+a3+z4%2, z3=a3+z4%2, z4=(1 % 2)*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