{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "### Ex.7 de la feuille 2 dans un cas concret\n",
    "\n",
    "*F-X. Dehon - 12 oct. 2020 - dehon[@]unice.fr*\n",
    "\n",
    "Enoncé :<br>\n",
    "\n",
    "<img src=\"f2ex7.svg\" width=\"500\" style=\"object-position:left top;border:2px solid black\">\n",
    "\n",
    "<br>\n",
    "On spécifie ci-dessous la réponse à l'ex.7 dans le cas $S=\\left(\\begin{array}{rr}\n",
    "3 & 2 \\\\\n",
    "2 & 3\n",
    "\\end{array}\\right)$\n",
    "\n",
    "<!--\n",
    "dans Sagemath : latex(matrix([[3,2],[2,3]]))\n",
    "-->\n",
    "\n",
    "<!--\n",
    "crop de Alg2.pdf avec Briss-0.9 puis pdf2svg Alg2_cropped.pdf f2ex7.svg 2\n",
    "-->"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "##### 1ère méthode avec une diagonalisation de $S$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "S=matrix([[3,2],[2,3]]);show(S)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "#Valeurs propres ?\n",
    "print S.charpoly().roots()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "print (S-identity_matrix(2)).right_kernel_matrix() #base de vecteurs propres pour la valeur propre 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "print (S-5*identity_matrix(2)).right_kernel_matrix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "u=vector([1,-1]);print u*u #produit scalaire usuel\n",
    "v=vector([1,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "P=block_matrix(1,2,[matrix(u/sqrt(u*u)).transpose(),matrix(v/sqrt(v*v)).transpose()])\n",
    "print P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "D=diagonal_matrix([1,sqrt(5)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "print S*P==P*D^2 #vérification P est une base de vecteurs propres et les valeurs propres associées sont les coef. de D^2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "R=P*D*P.transpose();show(R)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "show(R^2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "$R^2$ est égal à $S$ ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "show((R^2).simplify_full())\n",
    "print R^2==S"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "##### 2ème méthode avec le calcul d'une base orthonormée pour le produit scalaire de matrice $S$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "def B(u,v):return(u*S*v) #produit scalaire de matrice S\n",
    "def N(u):return(sqrt(B(u,u))) # norme associée"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "#base canonique de R^2\n",
    "f1=vector([1,0])\n",
    "f2=vector([0,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "e1=f1/N(f1);print e1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "f2p=f2-B(f2,e1)*e1\n",
    "e2=f2p/N(f2p);print e2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "BON=[e1,e2]\n",
    "show(matrix(2,2,lambda i,j:B(BON[i],BON[j]))) #vérification (e1,e2) est orthonormée pour B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "P=block_matrix(1,2,[matrix(e1).transpose(),matrix(e2).transpose()]);show(P) #Mat(e1,e2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "show(P.transpose()*S*P) #vérification matricielle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
   ],
   "source": [
    "A=P^(-1);show(A)\n",
    "print S==A.transpose()*A"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "SageMath (system-wide)",
   "language": "sagemath",
   "metadata": {
    "cocalc": {
     "description": "Open-source mathematical software system",
     "priority": -1,
     "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": 4
}