{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "## L3 Algèbre effective - algèbre linéaire et matricielle - TP\n",
    "\n",
    "_F-X. Dehon - version du 5 décembre 2019_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "#### TP"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "**Ex.1** Déterminer avec les méthodes de niveau 1 et 2 une base des solutions entières de l'équation homogène et une solution particulière si elle existe du système d'équations modulaires\n",
    "\n",
    "$$ \\left\\{\\begin{array}{l}\n",
    "x+2y-z = 2\\textrm{ mod 6}\\\\\n",
    "2x-y+2z = 3\\textrm{ mod 9}\\\\\n",
    "x+y+z = 3\n",
    "\\end{array}\\right.$$\n",
    "\n",
    "Si on remplace les valeurs du second membre $2,3,3$ par des paramètres $a,b,c\\in\\mathbb{Z}$, à quelle condition sur ces paramètres le système admet il une solution ?\n",
    "\n",
    "_Méthode : Observer que les solutions cherchées sont les projections sur les 3 premières coordonnées des solutions entières du système_\n",
    "\n",
    "$\\left\\{\\begin{array}{l}\n",
    "x+2y-z+6k=2\\\\\n",
    "2x-y+2z+9l=3\\\\\n",
    "x+y+z=3\n",
    "\\end{array}\\right.$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "**Ex.2** Soient $A$ et $B$ les matrices définies par\n",
    "$$ A=\\left(\\begin{array}{rrr}\n",
    "2 & 1 & 2 \\\\\n",
    "-1 & 0 & 1 \\\\\n",
    "0 & -1 & 0 \\\\\n",
    "1 & 1 & 2 \\\\\n",
    "1 & 2 & 3 \\\\\n",
    "2 & 1 & 3\n",
    "\\end{array}\\right)\n",
    "\\quad\n",
    "B=\\left(\\begin{array}{rrr}\n",
    "3 & 5 & 1 \\\\\n",
    "0 & 0 & 3 \\\\\n",
    "1 & -1 & -3 \\\\\n",
    "2 & 4 & 3 \\\\\n",
    "2 & 6 & 7 \\\\\n",
    "4 & 6 & 2\n",
    "\\end{array}\\right) $$\n",
    "```\n",
    "A=matrix(ZZ,[[2,-1,0,1,1,2],[1,0,-1,1,2,1],[2,1,0,2,3,3]]).transpose()\n",
    "B=matrix(ZZ,[[3, 0, 1, 2, 2, 4],[5, 0, -1, 4, 6, 6],[1, 3, -3, 3, 7, 2]]).transpose()\n",
    "#latex(A)\n",
    "```\n",
    "A t-on $\\textrm{Im}(A)=\\textrm{Im}(B)$ vus comme sous-espaces vectoriels de $\\mathbb{Q}^6$ ? Et comme sous-modules de $\\mathbb{Z}^6$ ? Donner une réponse basées sur les méthodes de niveau 1 et 2. Combien de méthodes pouvez vous concevoir ?\n",
    "\n",
    "Il y a un test d'égalité natif dans Sagemath (de niveau 3) :\n",
    "```\n",
    "print matrix(QQ,A).column_space()==matrix(QQ,B).column_space()\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "**Ex.3** Soient $A$ et $B$ les matrices de $\\textrm{M}_{6,4}(\\mathbb{Z})$ définies par\n",
    "```\n",
    "A=matrix(QQ,[[1,0,1,-1,1,2],[-1,1,0,0,1,0],[3,-2,1,-1,2,2],[0,0,2,2,3,2]]).transpose()\n",
    "B=matrix(QQ,[[2,-1,0,1,1,2],[1,0,-1,1,2,1],[2,1,0,2,3,3],[3,1,2,4,4,1]]).transpose()\n",
    "#show('A=',A,'B=',B)\n",
    "```\n",
    "$A=\\left(\\begin{array}{rrrr}\n",
    "1 & -1 & 3 & 0 \\\\\n",
    "0 & 1 & -2 & 0 \\\\\n",
    "1 & 0 & 1 & 2 \\\\\n",
    "-1 & 0 & -1 & 2 \\\\\n",
    "1 & 1 & 2 & 3 \\\\\n",
    "2 & 0 & 2 & 2\n",
    "\\end{array}\\right)$,\n",
    "$B=\\left(\\begin{array}{rrrr}\n",
    "2 & 1 & 2 & 3 \\\\\n",
    "-1 & 0 & 1 & 1 \\\\\n",
    "0 & -1 & 0 & 2 \\\\\n",
    "1 & 1 & 2 & 4 \\\\\n",
    "1 & 2 & 3 & 4 \\\\\n",
    "2 & 1 & 3 & 1\n",
    "\\end{array}\\right)$\n",
    "\n",
    "Déterminer avec les méthodes de niveau 1 et 2 la dimension, une base et une équation de $\\textrm{Im}(A)\\cap\\textrm{Im}(B)$ vu comme sous-$\\mathbb{Q}$-espace vectoriel de $\\mathbb{Q}^6$.\n",
    "Combien de méthodes pouvez vous concevoir ?\n",
    "\n",
    "Déterminer ces mêmes objets vus comme sous-$\\mathbb{Z}$-modules de $\\mathbb{Z}^6$.\n",
    "\n",
    "Comparer avec la réponse donnée par l'instruction (de niveau 3) :\n",
    "```\n",
    "print matrix(ZZ,A).column_space().intersection(matrix(ZZ,B).column_space())\n",
    "```\n",
    "ou par\n",
    "```\n",
    "V=VectorSpace(QQ,6);VA=V.submodule(A.columns());VB=V.submodule(B.columns())\n",
    "print VA.intersection(VB)\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "**Ex.4** Soit $A$ la matrice de $\\textrm{M}_{6,3}(\\mathbb{Q})$ définie par\n",
    "\n",
    "$A=\\left(\\begin{array}{rrr}\n",
    "2 & t^{2} + 1 & 2 t^{2} \\\\\n",
    "-1 & -t & -1 \\\\\n",
    "0 & t^{2} - 1 & 0 \\\\\n",
    "1 & 1 & -t^{2} + 2 \\\\\n",
    "1 & -t + 2 & -2 t^{2} + 3 \\\\\n",
    "2 & t + 1 & -t^{2} + 3\n",
    "\\end{array}\\right)$\n",
    "\n",
    "où $t\\in\\mathbb{Q}$ est un paramètre.\n",
    "```\n",
    "t=QQ['t'].gen();A=matrix(QQ['t'],[[2,-1,0,1,1,2],[1+t^2,-t,t^2-1,1,2-t,1+t],[2*t^2,-1,0,2-t^2,3-2*t^2,3-t^2]]).transpose()\n",
    "```\n",
    "Discuter du rang de $A$ suivant la valeur de $t$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "**Ex.5** Calculer, avec les méthodes de niveau 1 et 2, le polynôme minimal et le polynôme caractéristique de la matrice\n",
    "\n",
    "$A=\\left(\\begin{array}{rrr}\n",
    "1 & 1 & -2 \\\\\n",
    "1 & 5 & 0 \\\\\n",
    "-2 & 0 & -4\n",
    "\\end{array}\\right)$\n",
    "\n",
    "```\n",
    "A=matrix(ZZ,3,3,[1,1,-2,1,5,0,-2,0,-4])\n",
    "```\n",
    "\n",
    "Comparer avec les méthodes (de niveau 3) `A.charpoly()`, `A.det()`\n",
    "\n",
    "Que pouvez vous dire des racines du polynôme minimal avec Sagemath ? (Chercher les méthodes disponibles.) La matrice $A$ est elle diagonalisable ?\n",
    "\n",
    "Mêmes questions avec la matrice de la projection orthogonale de $\\mathbb{R}^3$ sur le plan d'équation $x-y-2z=0$. (Dans quel anneau vivent les coefficients de cette matrice ?)\n",
    "\n",
    "_Méthode pour le polynôme minimal : chercher une relation à coefficients dans $\\mathbb{Z}$ ou $\\mathbb{Q}$ entre $1$, $A$, $A^2$, par exemple en transformant $A$ en un vecteur de $\\mathbb{Z}^9$ ou de $\\mathbb{Q}^9$ `vector(matrix(QQ,A))`_\n",
    "\n",
    "_Méthode pour le polynôme caractéristique : observer que les matrices de passage pour la forme normale de Smith de_ $AX-I\\in\\textrm{M}_3(\\mathbb{Q}[X])$ _sont de déterminant dans $\\mathbb{Q}$ ; on peut faire $X=0$ pour calculer ces déterminants._\n",
    "_La liste des opérations élémentaires sur les lignes et les colonnes pour obtenir la forme de Smith de $AX-I$ donnerait également ces déterminants._  \n",
    "\n",
    "_Comment procèderait on si la matrice $A$ dépendait de paramètres $a,\\ldots$ ? En restreignant les opérations élémentaires à celles ne changeant le déterminant au plus que du signe._"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "**Ex.6&starf;** Soient $U$ le groupe des éléments inversibles pour la multiplication de $\\mathbb{Z}/15\\mathbb{Z}$ et $K$ le noyau de l'application\n",
    "$$ \\varphi:\\mathbb{Z}^U\\to U,\\ (x_g)_{g\\in U}\\mapsto \\sum_{g\\in U} x_g*g $$\n",
    "en notation additive, autrement dit\n",
    "$$ K=\\{(x_g)_{g\\in U}\\in \\mathbb{Z}^U,\\ \\prod_{g\\in U} g^{x_g}=1\\textrm{ dans }\\mathbb{Z}/15\\mathbb{Z}\\} $$\n",
    "Construire une famille finie génératrice de $K$ puis une base adaptée de $K$ dans $\\mathbb{Z}^U$ à partir de la liste des éléments de $U$ `Zmod(15).list_of_elements_of_multiplicative_group()` et des opérations et test d'égalité dans $\\mathbb{Z}/15$ `Zmod(15)(5)^3`.  \n",
    "En déduire une description du groupe $U$ comme produit de groupes cycliques.\n",
    "\n",
    "Comparer avec le résultat de l'instruction (de niveau 3) `U=Zmod(15).unit_group();print U`."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "SageMath (stable)",
   "language": "sagemath",
   "metadata": {
    "cocalc": {
     "description": "Open-source mathematical software system",
     "priority": 10,
     "url": "https://www.sagemath.org/"
    }
   },
   "name": "sagemath"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
