{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ANU - TP4 - Approximation spectrale\n",
    "\n",
    "B. Boutin, Y. Le Hénaff et M. Bouchereau"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## I - Méthode de la puissance\n",
    "\n",
    "Cette première partie propose d'implémenter la méthode de la puissance, d'abord afin de visualiser le taux de convergence sur une petite matrice de taille 2 x 2, et ensuite de l'implémenter sur une matrice de taille quelconque."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1 - Observation du taux de convergence\n",
    "\n",
    "On s'intéresse à la matrice 2 x 2 suivante:\n",
    "\n",
    "$$A = \\begin{bmatrix}\n",
    "        1 & 2 \\\\\n",
    "        2 & 1\n",
    "       \\end{bmatrix}$$\n",
    "       \n",
    "**Q1 -** Déterminer la plus grande valeur propre de $A$ (en module) et la seconde plus grande (donc la plus petite en module ici). Implémenter la méthode de la puissance et observer le taux de convergence sur cette matrice."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lambda_1: [[3.]]  - Remarque: La seconde valeur propre de A a pour valeur -1\n",
      "v_1 =  [[0.70710677]\n",
      " [0.70710679]]\n"
     ]
    },
    {
     "data": {
      "image/png": "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pg2xsbF88cUXfvnMjQmk/aP2o6MVHa3E1Y7LvO+XMUJ8xLY8Aih7R91Ro0ZxySWXAFCuXDkWLlwIuOFCM6Z3797NwIEDmTt3LhUrVuSpp55iwoQJJw1Yk11CQgILFy6kfPnyJ8z/7LPPWL16NWvWrGH37t20adMms231smXLWL9+PfXq1aN379589tlnNGjQgO3bt7N2reuyn1EIhg8fziuvvEKjRo1YunQpN998M99++y0AP//8M19++SVVq1YlLS2NqVOncs0117B06VLq169PZGQkl112GXfeeSfnnnsuv//+O7169WLDhg08/vjjnHfeeUyePJm9e/fStm1bevToUbRDgxpjTmLFI4By222VUUSyT3///fesX7+ejh07Aq6ZW+vWObaeOUH//v1PKhwACxcuZMiQIYSGhhIZGUmXLl1Yvnw5ERERtG3bljPOOAOAIUOGsHDhQrp3785vv/3GrbfeSt++fenZsydJSUksXryYwYMHZy436wHvwYMHZ+5qu+SSS3jkkUe45pprmDJlSub7mjt3LuvXr898zf79+zlw4ABz5szhyy+/zBzf/MiRI/z+++8+6yNkjCkYKx5BytNIgqrK+eefzwcffJD5WEYH0Kwj8Hk7imBujTGzj4onIlSrVo01a9Ywe/ZsJk6cyEcffcTzzz9P1apVPRbCrOvu0KEDmzZtYteuXXz++ec89JC7iCktLY0lS5acVOBUlU8//ZTGjRt7zGmMKXp2zKOYad++PYsWLWLTpk2AG1rzl19+Adwxj4SEBAA+/fRTr5bXuXNnPvzwQ1JTU9m1axfz58/PHNRp2bJlbN68mbS0ND788EPOPfdcdu/eTVpaGhdffDGPPvooK1euJCIiggYNGvDxxx8D7gt/zZo1Oa5PRBgwYAB33XUXTZo0oXr16oAbzCfrwfKMQtSrVy9eeumlzCK3atWq/Hxcxhg/seLhhUphlXKcX9gzITKOeWTcRo7MdUReAGrWrMlbb73FkCFDaN68Oe3bt88sHqNHj+b222+nU6dOXp+RNWDAAJo3b06LFi0477zzePrppzNHqevQoQMjR44kJiaGBg0aMGDAALZv307Xrl1p2bIlQ4cOzRyb+r333uONN96gRYsWNG3aNNcD25dccgnvvvvuCbvmXnzxRVasWEHz5s2Jjo7mlVdeAeDf//43x44do3nz5sTE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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def Puissance(A , Max_iter = 100 , tol = 1e-8):\n",
    "    \"\"\"\n",
    "    Applique la methode de la puissance à la matrice `A`, supposée carrée.\n",
    "    Entrée:\n",
    "    - A: Array de taille (d,d), où d est un entier naturel non nul.\n",
    "    - Max_iter: Int - Nombre maximal d'itérations. Defaut: 100\n",
    "    - tol: Float - Tolérence pour la convergence. Defaut: 1e-8\n",
    "    \"\"\"\n",
    "    d = A.shape[0] # taille de la matrice (supposee carre!)\n",
    "\n",
    "    b_k = np.random.rand(d, 1) # pre-allocation du vecteur bk, pour ne pas avoir une allocation a chaque iteration de la boucle while\n",
    "    \n",
    "    cur_iter = 0 # compte le nombre d'iterations passees\n",
    "    \n",
    "    Lambda, lambda_k, old_lambda_k = [], 0., 0.\n",
    "    \n",
    "    diff_lambda = 2*tol + 1 # n'importe quelle valeur plus grande que tol, pour rentrer dans la boucle while:\n",
    "    \n",
    "    while (cur_iter < Max_iter) and (diff_lambda > tol):\n",
    "        old_lambda_k = lambda_k\n",
    "        b_k = A @ b_k # @ est la multiplication matricielle\n",
    "        \n",
    "        # normalisation 'in-place' du vecteur pour qu'il soit unitaire :\n",
    "        b_k /= np.linalg.norm(b_k) \n",
    "\n",
    "        # estimation de la valeur propre :\n",
    "        lambda_k = b_k.conj().T @ A @ b_k \n",
    "        # Pour calculer le transconjugue d'un vecteur, on prend son conjuge (`.conj()`) puis on le transpose (`.T`)\n",
    "        \n",
    "        diff_lambda = np.abs(lambda_k - old_lambda_k) # on regarde la difference entre les estimation courante et ancienne des valeurs propres\n",
    "        \n",
    "        # Ajout de lambda_k à la liste Lambda pour étudier la convergence\n",
    "        Lambda.append(lambda_k[0,0])\n",
    "        \n",
    "        cur_iter += 1\n",
    "    \n",
    "    if diff_lambda > tol:\n",
    "        # Si la méthode n'a pas convergé après `max_iter` itérations, on retourne une erreur :\n",
    "        raise TimeoutError(f\"La méthode de la puissance n'a pas convergé après {max_iter} itérations, l'erreur finale est {diff_lbd}. Essayez un nombre d'itérations plus grand.\")\n",
    "    else:\n",
    "        return Lambda, lambda_k, b_k\n",
    "    \n",
    "\n",
    "A = np.array([[1,2],[2,1]])\n",
    "Lambda, lambda_1, v_1 = Puissance(A, Max_iter=100, tol=1e-14)\n",
    "print(\"lambda_1:\",lambda_1 , f\" - Remarque: La seconde valeur propre de A a pour valeur {-1}\")\n",
    "print(\"v_1 = \", v_1)\n",
    "\n",
    "K = np.array(list(range(len(Lambda))))\n",
    "Err = np.array([np.abs(lambda_k-lambda_1[0,0]) for lambda_k in Lambda]) # Erreur de convergence\n",
    "Err_th = np.array([(1/3)**k for k in K]) # Erreur théorique\n",
    "Err_th_h = np.array([(1/9)**k for k in K]) # Erreur théorique (matrices hermitiennes)\n",
    "\n",
    "\n",
    "plt.figure()\n",
    "plt.scatter(K , Err , color = \"green\" , marker = \"s\" , label = \"Erreur observée\")\n",
    "plt.plot(K , Err_th , color = \"red\" , label = \"Erreur théorique $\\propto (1/3)^k$\")\n",
    "plt.plot(K , Err_th_h , color = \"orange\" , label = \"Erreur théorique (matrice hermitienne) $\\propto (1/9)^k$\")\n",
    "plt.yscale(\"log\")\n",
    "plt.ylim(1e-16,1)\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.xlabel(\"Intérations - $k$\")\n",
    "plt.ylabel(\"Erreur\")\n",
    "plt.show()\n",
    "    \n",
    "    \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2 - Méthode de la puissance pour une matrice symétrique de taille quelconque\n",
    "\n",
    "Pour une matrice symétrique réelle $A$ de taille $d \\times d$ admettant pour valeurs propres $\\lambda_1,\\cdots,\\lambda_d$ telles que $|\\lambda_1|>\\cdots>|\\lambda_d|$, on peut adapter la méthode de la puissance afin d'en extraire toutes les valeurs et vecteurs propres (NB: La base de vecteurs propres est orthogonale et les valeurs propres sont toutes réelles). Pour cela, on suit les étapes suivantes:\n",
    "\n",
    "- On détermine d'abord la plus grande valeur propre (en module) $\\lambda_1$ ainsi qu'un vecteur propre $v_1$.\n",
    "- On applique la méthode de la puissance à la matrice $\\tilde{A}_1 = A - \\lambda_1v_1v_1^*$, cette matrice admet pour valeurs propres $0,\\lambda_2,\\cdots,\\lambda_d$, donc on va extraire $\\lambda_2$ et $v_2$ comme vecteur propre associé.\n",
    "- On applique de nouveau la méthode de la puissance à la matrice $\\tilde{A}_2 = A - \\lambda_1v_1v_1^* - \\lambda_2v_2v_2^*$ pour extraire $\\lambda_3$ et $v_3$.\n",
    "- $\\vdots$\n",
    "- On applique la méthode de la puissance à la matrice $\\tilde{A}_k = A - (\\lambda_1v_1v_1^* + \\cdots + \\lambda_kv_kv_k^*)$ pour extraire $\\lambda_{k+1}$ et $v_{k+1}$.\n",
    "\n",
    "**Q2 -** Coder la méthode de la puissance et la tester sur une matrice symétrique quelconque (par exemple de taille 10 x 10), comparer avec la fonction $\\verb|np.linalg.eigh|$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test avec la méthode de la puissance et déflation:\n",
      "[3.73205081 3.         2.         1.         0.26794919]\n",
      "[[-2.88675057e-01 -5.00000018e-01  5.77350345e-01  4.99999947e-01\n",
      "   2.88675082e-01]\n",
      " [ 4.99999922e-01  5.00000097e-01 -2.29837108e-08  5.00000014e-01\n",
      "   4.99999948e-01]\n",
      " [-5.77350269e-01 -1.49906275e-07 -5.77350269e-01  7.75638250e-08\n",
      "   5.77350269e-01]\n",
      " [ 5.00000078e-01 -4.99999903e-01  2.29836917e-08 -4.99999986e-01\n",
      "   5.00000052e-01]\n",
      " [-2.88675212e-01  4.99999982e-01  5.77350193e-01 -5.00000053e-01\n",
      "   2.88675187e-01]]\n",
      " \n",
      "Test avec la librairie np.linalg.eigh:\n",
      "[0.26794919 1.         2.         3.         3.73205081]\n",
      "[[-2.88675135e-01  5.00000000e-01 -5.77350269e-01 -5.00000000e-01\n",
      "  -2.88675135e-01]\n",
      " [-5.00000000e-01  5.00000000e-01  9.91449050e-17  5.00000000e-01\n",
      "   5.00000000e-01]\n",
      " [-5.77350269e-01 -2.26646689e-16  5.77350269e-01  1.59862670e-16\n",
      "  -5.77350269e-01]\n",
      " [-5.00000000e-01 -5.00000000e-01 -2.33868629e-16 -5.00000000e-01\n",
      "   5.00000000e-01]\n",
      " [-2.88675135e-01 -5.00000000e-01 -5.77350269e-01  5.00000000e-01\n",
      "  -2.88675135e-01]]\n"
     ]
    }
   ],
   "source": [
    "def Puissance_deflation(A, nb_vp, Max_iter=1000, tol=1e-8):\n",
    "    \"\"\"\n",
    "    Utilise la méthode de la déflation avec la méthode de la puissance pour récupérer les `nb_vp` premiers vecteurs propres.\n",
    "    Elle s'applique à des matrices *symétriques*.\n",
    "    Entrées:\n",
    "    - A: Array de taille (d,d), où d est un entier naturel non nul. Il doit être SYMETRIQUE\n",
    "    - nb_vp: Int - Nombre de valeus/vecteurs propres que l'on veut extraire.\n",
    "    - Max_iter: Int - Nombre maximal d'itérations. Defaut: 100\n",
    "    - tol: Float - Tolérence pour la convergence. Defaut: 1e-8\n",
    "    \"\"\"\n",
    "    # on verifie que la matrice est Hermitienne :\n",
    "    if not np.allclose(A.conj().T, A):\n",
    "        raise ValueError(\"La matrice n'est pas Hermitienne.\")\n",
    "    \n",
    "    d = A.shape[0] # taille de la matrice, supposee carree\n",
    "    \n",
    "    if nb_vp > d:\n",
    "        print(\"Le nombre de vecteurs propres demandé est trop grand, on va donc chercher tous les vecteurs propres de la matrice.\")\n",
    "        nb_vp = d\n",
    "    \n",
    "\n",
    "    V = np.empty((d, nb_vp)) # on va stocker les vecteurs propres dans cette matrice, avec V[:, i-1] le i-eme vecteur propre\n",
    "    Lambda = np.empty(nb_vp) # on va stocker les valeurs propres dans ce vecteur, avec Lambda[:, i-1] la i-eme valeur propre\n",
    "    for j in range(min(nb_vp, d)):\n",
    "        # technique de la deflation :\n",
    "        tildeA = A.copy()\n",
    "        for jj in range(j):\n",
    "            matVjj = V[:, jj].reshape((-1, 1)) # On met le jj-eme vecteur propre enregistré aux bonnes dimensions.\n",
    "            # `(-1, 1)` indique qu'on veut que toutes les composantes soient dans la première colonne.\n",
    "            # Pourquoi on fait ça ? `V[:, jj]` retourne un vecteur numpy de taille `d`, i.e. à une seule dimension.\n",
    "            # Pour pouvoir faire le calcul matriciel correctement, il faut que ce soit une matrice de taille `d x 1`.\n",
    "            tildeA -= Lambda[jj] * matVjj @ matVjj.conj().T\n",
    "        \n",
    "        try:\n",
    "            # On applique la methode de la puissance à la matrice `tildeA` :\n",
    "            lambdas, l, v = Puissance(tildeA, Max_iter=Max_iter, tol=tol)\n",
    "\n",
    "            # S'il n'y a pas eu d'erreurs, on enregistre le vecteur propre obtenu et la valeur propre correspondante :\n",
    "            V[:, j] = v.reshape(-1).copy()\n",
    "            Lambda[j] = l\n",
    "        except TimeoutError as te:\n",
    "            # S'il y a eu une erreur durant la `power_iteration`, on retourne une erreur :\n",
    "            raise ValueError(\"Il n'y a pas eu convergence durant la recherche d'un des vecteurs propres.\\n\" +\n",
    "                            f\"Durant la recherche du {j}-ème vecteur propre : \\n\\t{te}\")\n",
    "\n",
    "\n",
    "    return Lambda, V\n",
    "\n",
    "# Test sur la matrice du Laplacien discret\n",
    "d = 5\n",
    "A = 2*np.diag(np.ones(d),0) - np.diag(np.ones(d-1),1) - np.diag(np.ones(d-1),-1)\n",
    "\n",
    "#A = np.random.uniform(size=(d,d))\n",
    "#A += A.conj().T\n",
    "\n",
    "print(\"Test avec la méthode de la puissance et déflation:\")\n",
    "lambdas , V = Puissance_deflation(A ,nb_vp = d , Max_iter = 100 , tol = 1e-14)\n",
    "print(lambdas)\n",
    "print(V)\n",
    "\n",
    "print(\" \")\n",
    "print(\"Test avec la librairie np.linalg.eigh:\")\n",
    "lambdas_bis , V_bis = np.linalg.eigh(A)\n",
    "print(lambdas_bis)\n",
    "print(V_bis)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## II - Méthode QR\n",
    "\n",
    "Dans cette seconde partie, on s'intéresse à l'application de la méthode QR pour la recherche de valeurs propres. Il est également possible (cf. théormème 80 du cours, Chapitre 3), de trouver les vecteurs propres. Pour cela, on suit les étapes suivantes:\n",
    "\n",
    "- On fait la décomposition QR de $A$: $A = Q_0R_0$. On pose $V_0 = Q_0$ et $A_1 = R_0Q_0$.\n",
    "- On fait la décomposition QR de $A_1$: $A_1 = Q_1R_1$. On pose $V_1 = V_0Q_1$ et $A_2 = R_1Q_1$.\n",
    "- $\\vdots$\n",
    "- On fait la décomposition QR de $A_k$: $A_{k} = Q_{k}R_{k}$. On pose $V_{k} = V_{k-1}Q_{k}$ et $A_{k+1} = R_kQ_k$.\n",
    "- On continue avec un nombre assez grand d'itérations.\n",
    "\n",
    "La diagonale de $(A_k)_{k\\in\\mathbb{N}}$ converge vers la diagonale des valeurs propres de $A$, la suite $(V_k)_{k\\in\\mathbb{N}}$ converge vers la liste des vecteurs propres associés $[v_1|\\cdots|v_d]$.\n",
    "\n",
    "**Q3 -** Coder la méthode QR avec recherche de vecteurs propres et la tester sur une matrice symétrique quelconque (par exemple de taille 5 x 5). Pour la décomposition QR, on utilisera la fonction $\\verb|np.linalg.qr|$, et pour la vérification, on comparera soit vec la méthode de la puissance, soit la fonction $\\verb|np.linalg.eigh|$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test avec la méthode QR:\n",
      "[3.73205081 3.         2.         1.         0.26794919]\n",
      "[[ 2.88675135e-01  5.00000000e-01  5.77350269e-01  5.00000000e-01\n",
      "   2.88675135e-01]\n",
      " [-5.00000000e-01 -5.00000000e-01 -1.87056357e-17  5.00000000e-01\n",
      "   5.00000000e-01]\n",
      " [ 5.77350269e-01 -3.29132029e-10 -5.77350269e-01  6.20492449e-19\n",
      "   5.77350269e-01]\n",
      " [-5.00000000e-01  5.00000000e-01  6.89839233e-17 -5.00000000e-01\n",
      "   5.00000000e-01]\n",
      " [ 2.88675134e-01 -5.00000000e-01  5.77350269e-01 -5.00000000e-01\n",
      "   2.88675135e-01]]\n",
      " \n",
      "Test avec la librairie np.linalg.eigh:\n",
      "[0.26794919 1.         2.         3.         3.73205081]\n",
      "[[-2.88675135e-01  5.00000000e-01 -5.77350269e-01 -5.00000000e-01\n",
      "  -2.88675135e-01]\n",
      " [-5.00000000e-01  5.00000000e-01  9.91449050e-17  5.00000000e-01\n",
      "   5.00000000e-01]\n",
      " [-5.77350269e-01 -2.26646689e-16  5.77350269e-01  1.59862670e-16\n",
      "  -5.77350269e-01]\n",
      " [-5.00000000e-01 -5.00000000e-01 -2.33868629e-16 -5.00000000e-01\n",
      "   5.00000000e-01]\n",
      " [-2.88675135e-01 -5.00000000e-01 -5.77350269e-01  5.00000000e-01\n",
      "  -2.88675135e-01]]\n"
     ]
    }
   ],
   "source": [
    "def QR_VP(A , Max_iter = 100):\n",
    "    \"\"\"Méthode QR donnant le spectre d'une matrice ainsi que les vecteurs propres.\n",
    "    Entrées:\n",
    "    - A: Array de taille (d,d) - Matrice étudiée\n",
    "    - Max_iter: Int - Nombre maximal d'itérations. Defaut: 100\"\"\"\n",
    "    \n",
    "    B = A\n",
    "    d = A.shape[0]\n",
    "    V = np.eye(d,d)\n",
    "    for j in range(100):\n",
    "        Q,R = np.linalg.qr(B)\n",
    "        B = R@Q # Matrice dont la diagonale va converger vers les valeurs propres de A\n",
    "        V = V@Q # Matrice dont les colonnes forment une base de vecteurs propres associés\n",
    "    \n",
    "    return np.diag(B) , V\n",
    "\n",
    "    \n",
    "# Test sur la matrice du Laplacien discret\n",
    "\n",
    "d = 5\n",
    "A = 2*np.diag(np.ones(d),0) - np.diag(np.ones(d-1),1) - np.diag(np.ones(d-1),-1)\n",
    "\n",
    "#A = np.random.uniform(size=(d,d))\n",
    "#A += A.conj().T\n",
    "\n",
    "print(\"Test avec la méthode QR:\")\n",
    "lambdas , V = QR_VP(A , Max_iter = 10)\n",
    "print(lambdas)\n",
    "print(V)\n",
    "\n",
    "print(\" \")\n",
    "print(\"Test avec la librairie np.linalg.eigh:\")\n",
    "lambdas_bis , V_bis = np.linalg.eigh(A)\n",
    "print(lambdas_bis)\n",
    "print(V_bis)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## III - Application: Tenseur de déformation\n",
    "\n",
    "En mécanique, le tenseur de déformation d'un matériau va représenter la manière dont une contrainte sur ce matériau va le déformer, dans le plan ou dans l'espace. Il est représenté par une matrice de taille 2 x 2 (déformation dans le plan) ou 3 x 3 (déformation dans l'espace). Dans notre application, nous nous concentrerons sur le cas de la dimension 2.\n",
    "\n",
    "Ainsi, une déformation va avoir des directions principales et, selon ces directions principales, va correspondre à une dilatation. ces directions principales sont données par les vecteurs propres du tenseur, les coefficients de dilatation correspondant aux valeurs propres du tenseur.\n",
    "\n",
    "Ainsi, un tenseur de déformation en dimension 2 appliqué aux points d'un cercle va donner une ellipse, dont l'orientation est donnée par les vecteurs propres de la matrice 2 x 2, et les rayons par les modules des valeurs propres de la matrice.\n",
    "\n",
    "\n",
    "$$T_1 = \\begin{bmatrix}\n",
    "        1 & 2 \\\\\n",
    "        2 & 1\n",
    "      \\end{bmatrix} , T_2 = \\begin{bmatrix}\n",
    "        1 & 2 \\\\\n",
    "        2 & 5\n",
    "      \\end{bmatrix} , T_3 = \\begin{bmatrix}\n",
    "        1 & 2 \\\\\n",
    "        2 & 0\n",
    "      \\end{bmatrix}$$\n",
    "      \n",
    "**Q4 -** En testant les exemples suivants, appliquer la matrice aux points d'un cercle, afficher le cercle, l'ellipse obtenue, les vecteurs propres sur un même graphique. Calculer les valeurs et vecteurs propres des matrices données en exemple. On utilisera au choix la méthode de la puissance (question Q2) ou la méthode QR (question Q3)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Tenseur T_1:\n",
      "[[1 2]\n",
      " [2 1]]\n",
      "Valeurs propres:  3.0  -  -0.9999999999999997\n",
      "Vecteurs propres associés:  [0.70710678 0.70710678]  -  [-0.70710678  0.70710678]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Tenseur T_2:\n",
      "[[1 2]\n",
      " [2 5]]\n",
      "Valeurs propres:  5.828427124746187  -  0.17157287525381001\n",
      "Vecteurs propres associés:  [0.38268343 0.92387953]  -  [-0.92387953  0.38268343]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEGCAYAAABsLkJ6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAwnUlEQVR4nO3deXyM5/7/8deVRSISW0gsQaggsYu1tGjRllYtXWittYXaTtvTo9+e9vR3OEd7etpq7SK2UrSUQ0uLlm6KbJYgiKAidiEJRiS5fn9MpEK2kWTumczn+XjMQ+aae3nPnZjP3Nt1Ka01QgghHI+T0QGEEEIYQwqAEEI4KCkAQgjhoKQACCGEg5ICIIQQDsrF6ACWqFKlivb397f6eq9fv065cuWsvt6isMfMILmtTXJbl1G5IyMjL2mtq97bblcFwN/fn4iICKuvd8eOHXTp0sXq6y0Ke8wMktvaJLd1GZVbKXUqt3Y5BCSEEA5KCoAQQjgoKQBCCOGg7OocgBBCPIjbt2+TkJCAyWQyNEeFChU4fPhwiS3f3d0dPz8/XF1dCzW9FAAhRKmXkJCAl5cX/v7+KKUMy5GSkoKXl1eJLFtrzeXLl0lISKBu3bqFmkcOAQkhSj2TyYS3t7ehH/4lTSmFt7e3RXs5UgCEEA6hNH/432Hpe5QCIIQD+DlhF+uPbDA6hrAxcg5AiFLupwsxdAnrAMCtv9+ijHMZgxMJWyF7AEKUYod0Jt03jsp+7upUuKtDhGOQAiBEKXUaaLl/BbcTdgFQpv5TDnEc3JadO3eOAQMG0Lp1axo0aEDXrl0NzSOHgIQopdzSTTj/+DaU84HrF9B1HzM6ksMbPXo0ISEhvPjiiwAcOHDA0DyyByBEKbUifC43k0+DfxcAegT0MjaQg8vIyOCXX36hc+fO2W1NmzY1MJHsAQhRKqWmpTL91+lQrxvcSqZ+5fpsrNLI6Fi2YfJk2Lu3eJfZogXMmJHvJM7OznTp0oXmzZvTp08fhgwZQseOHYs3h4VkD0CIUmj2ntlcvHEROryBS/wP9GnYR47/24Cvv/6atWvXUqFCBZ588knWr19PfHw8I0aM4LnnnrN6HtkDEKKUSU1L5cOdH1K1/pNcvH6B9Mzb9A/qb3Qs21HAN/WSpJSiU6dOdOrUiaSkJPbv30+fPn0ICwszpADIHoAQpcyc8DlcvnmZi53fw+/wGvzK+9G2ZlujYzm877//nrS0NAAuXLjAr7/+Svfu3Q3NJHsAQpQiN27f4KPfP6LJQz2IqdKQC3HfMa71OJyUfNcz2po1awgJCaF8+fK4ubkxdepUOnToYGgmKQBClCKhkaFcuH6BC4++g3PsetIy0hjYdKDRsQQQGhqaa2+gly9f5u233yY6Oprp06fz1ltvWS2TFAAhSolb6bf4cOeHtK/TmV21O9Hm56mcr1iXNjXaGB1N5MPb25t58+YZsm7ZLxSilPh8/+ecSTlDwiP/B6nn2RO/jYFNBsrVPyJPUgCEKAUyMjP44LcPCK4eTEK97jx18EsydSYvN3vZ6GjChkkBEKIUWHt4LXFX4qjX6S1QiisHVtDctzlBVYOMjiZsmBQAIeyc1pr3f32fht4N+SqwLw9dPsbuM7t5ual8+xf5kwIghJ3bGr+V6HPRvNDxTVBOPLN/OQrFS01fMjqasHFSAISwcx/89gE1vGowrenLoDUbDiznsbqPUbN8TaOjCRsnBUAIOxaRGMGPJ35kfPu/oF3c+EfC78QnxTOo2SCjowk7IAVACDv24c4PKe9Wnujg0QCc3bsUD1cP+gdK3z+iYFIAhLBT8UnxrDm0hrGtx/KVW3l6pZtYfXA1/QL74eXmVfAChMOTAiCEnfr4949xVs4EtJsIwItHNnLt1jWGNBticDKRm9DQUDp27EiLFi1wcnKiRYsWtGjRgtdee42zZ88aMlSkdAUhhB26dOMSi6IXMajZIEZ61QBg9b6l1PSqyWMy9KNNGjVqFAMGDCA5OZmHH36YvXcNStOtWzdGjRpl9aEiDd8DUEo5K6WilVLfGJ1FCHsxJ3wON9NvMqzD6wCsTz3Hd3HfMbjZYJydnA1OJ/ITExOTYyjIjIwMduzYYchQkbawBzAJOAyUNzqIEPbAlG5i1p5Z9AzoyRs+jQGI27+CDJ3B0BZDDU5n+yZ/N5m95/YW6zJbVGvBjCdnFGraAwcO0KRJk+znzs7OdOvWzZChIg3dA1BK+QG9gIVG5hDCnny+73Mu3rjI6x3eIBz4i9Ys2beE9n7taSTj/tq8e/cAADZv3mzIUJFKa11iCy9w5UqtAaYDXsAbWuunc5lmNDAawNfXN3jVqlXWDQmkpqbi6elp9fUWhT1mBsldkEydybDwYbg7u/PPVvM5oxSeKUcIiQrhLwF/oXeN3hYtz1G2d4UKFahfv34JJiqcjIwMunbtyuzZs/M8zDNhwgRq1qzJlClTABg8eDCff/55odcRFxfHtWvXcrR17do1Umvd+r6JtdaGPICngTlZP3cBvilonuDgYG2E7du3G7LeorDHzFpL7oJsPLJR8x56xf4VGq11Da31uG/Gafdp7jrpZpLFy3OU7X3o0KGSCWKhq1evai8vL20ymbLbvvvuO33r1i2ttdbnz5/XjRo10jt37sx+vX///hatI7f3CkToXD5TjTwH0BHorZTqCbgD5ZVSy7XWcgujEHn4787/4lfej8ZBzwOwJd1Ep5gv6NuoLxXdKxobThTo+PHj+Pn54ebmlt22Zs0axo0bh6enp9WHijSsAGit3wLeAlBKdcF8CEg+/IXIQ2RiJD+d+okPu39IV2dXAGJi/8dV01WGtxhucDpRGAEBARw6dChHW2hoaK7TWmOoSFu4CkgIUQif7PoEzzKeDGs1ir8Cc4DFexdTq3wtufa/FLLGUJGG3wcAoLXeoXM5ASyEMEtITmD1wdWMbDmSd90rANDr2mm2HN/C0OZD5dp/8UBkD0AIOzBz90wydSaT2k+iLtAZ+HzfMjSa4S3l8I94MFIAhLBxqWmpzI+cT7/Afhyv6A/AGp1Ju72L6OrflXqV6hkbUNgtmzgEJITI25K9S7h26xqvtX+NblltB0/9QnxSPK+0fMXQbMK+SQEQwoZlZGbw6e5PaVezHYG1zJcGbgbCosMo71aefoH9jA0o7JoUACFs2DdHvyHuShyvdXiN57PaOpiusebQGgY2GYiHq4eh+YR9kwIghA37ZNcn1K5Qm36B/dgGjABWxqzkZvpNRrQcYXQ8YefkJLAQNir6bHT2jV9LnMz/VecAHaPDaOrTlNY17u/aRRTS19XAdL74lufuC/3OFd/yrEQKgBA2asbuGZRzLcfIViOpBHgCsef3E5EYwYwnZqCUMjqi/SrOD/+SWJ6VyCEgIWzQ2ZSzrDywkuEthpOU1cfPTiAsKowyzmUY1Ex6TbE3kZGR9OrVK/t5TEyM1fr8yYsUACFs0NyIuaRnpjOx3UTudPIQkG7i8/2f07dRX7w9vA3NJywXGBhIXFxc9vN3332XqVOnGphIDgEJYXNM6SbmRszl6QZPU887gJPA+8C6w+tIMiUxstVIgxOKB+Hh4YGbmxtXr14lPj6epKQk6tWrx4gRI7h27Rpr1qyxeibZAxDCxnxx4Asu3bjE5PaT+XtW25uYr/33r+gvHb/ZsUaNGhEbG8s777zDtGnTqFevHmFhYYblkQIghA3RWjNj1wya+Tajq39X3gdaACeS4vnhxA+MaDkCJyX/be1VYGAgixcvRmtttXF/8yOHgISwITtO7uDAhQOE9Q5jd9ZVPpuA2dGLcFJODGsxzNB8pYa7b/FfBloIjRo1IiQkhPDw8OJbdxFIARDChszYPYMqHlV4qelLlM1qq5qZzuK9i3my/pP4lfczNF+pYdA1+wMHDmT06NHZz60x6Et+pAAIYSOOXznOxiMbefuRt8lwcQfgS2DTsU0kpiQyu+dsYwOKYmeNQV/yIwVACBsxc89MXJxcGNtmLEOz2p4HekctpJpnNXoF9MpvdiEsJmeThLABybeSWRS9iBcav0ANrxqsBZ4DziSf4dtj3zKs+TBcs8YBFqK4SAEQwgYs2buElLQUJrWbxJdZbUuz2jN1plz7L0qEHAISwmCZOpOZe2bS3q89bWq2oW1Wu7vOZGH0Qh6r+xgPVX7I0IyidJI9ACEMtvnYZuKuxDGp3STOZrX9DmyL38bJqycZ1WqUkfFEKSZ7AEIY7LM9n1HTqyb9A/vTJqutPfB8VCjeZb3p26ivkfFEKSZ7AEIY6PDFw2w5voWxrcfi4uzKPmAKcD71POtj1zO0+VDcXNyMjilKKSkAQhho5p6ZuDm7MTp4NO9ntU0Dlu5bSnpmupz8FSVKCoAQBrlqusrSfUt5qelLVC1Xlf8D/AEnrVkYtZBOtTsRWDXQ4JSiOB08eJA6deowd+5co6MAUgCEMMyi6EXcuH2DCW0nsD+r7UfM/QEdu3KM0a1G5ze7KIJqgCrGR7VCrrdx48asWrWKZcuWFdt7KQopAEIYICMzg1l7ZvFI7UdoWb0ld8aFqgssiFpAJfdKPBf0nJERS7XiHsDRkuX5+Phw8ODBfKeJjIyka9eu2c9LavQwwwqAUqqWUmq7UuqwUuqgUmqSUVmEsLZvj33LiasnmNB2AreAG8BC4OL1i6w9tJYhzYdQ1rVsAUsR9mjKlCncunWLU6dO5TlNYGAgR48ezX5eUqOHGbkHkA68rrUOxHzV26tKqSAD8whhNZ/t/gy/8n70DezLuKy2EZhP/t7OvC3X/pdSW7du5fr16/Tq1St7LyA+Pp4RI0bw3HN/7vF5eHjg7u7O1atXiYqKIikpiW7duuU6bVEYVgC01me11lFZP6cAh4GaRuURwloOXTzEDyd+YFzrcbg4ubAI6I75juC/bv0r9SrVo7FPY6NjimJmMpl49913mTNnDk2bNiUmJgYgz1HBgoKCcowelt+0D8ombgRTSvkDLYHdubw2GhgN4Ovry44dO6yaDSA1NdWQ9RaFPWYGx8j9ydFPcFWuBJmC2LBjB//FPOrXhISvAKioK1ptGzjC9gaoUKECKSkpfzZ4eRV7phzLz8U///lPXnzxRby9valfvz6bNm3KMU96enqO5wEBASxYsIDbt2/TrFmzfKe9m8lkKvy20Vob+gA8gUigX0HTBgcHayNs377dkPUWhT1m1rr0575y44r2+JeHHr5+uNb6zz9urbUesGaA5j305RuXSyRjbkr79r7j0KFDOZ6XxIdZfmJjY3Xbtm31lStXsp+3bNkyxzT9+/fP8XzZsmVaKaUjIiLuW9690+b3XrXWGojILbahVwEppVyBtcAKrfXXRmYRwhoW712cfenn5ay2H/jz5O/EthOpXLaykREdQuEGcCy+5TVs2JDdu3fj4uKS/TwqKgowjwoWEhKSPSrYHYMHDyYzM5Pg4ODstrymfVCGHQJSSikgDDistf7YqBxCWEtGZgazw2fTqXYnWlZvSees9seA/2ad/B3TeoyRER2GMQNC5s6SUcGKewQxI/cAOgKDgceUUnuzHj0NzCNEidoct5n4pHgmtJ2ABn4GxmE+DLsgcgGdanciqKpcCCesx7A9AK31r5hvohPCIczcM5OaXjXp26gvdzoCmAFsP7mdY1eO8W7ndw1MJxyR3AkshBUcuXSELce3ENI6BFdnV14FKgOuwPzI+VRyr0T/wP4GpxSORgqAEFYwO3w2ZZzLMDp4NHFZbb9i7vZ53eF1DGsxTO78FVYnBUCIEpZyK4Ule5fwQuMX8Cnnk33yNxDzVUG3M28zOlg6fhPWJwVAiBK2bN8yUtJSmNB2AhlAIvAx5jt/Q6NC6VynM42qNDI4pXBEUgCEKEFaa2aFz6Jtzba0rdmWv2a1T8Y85m98UjwhrUMMTCgcmU10BSFEafXDiR+IvRTLsj7m/t8/AdpivvxtXsQ8qnhUkTF/hWFkD0CIEjRrzyyqelTl+cbP80tW20YgMSWRDUc2MLzFcBnz1whGjQhjY6QACFFCTl49ycajGxnVahTuLu48mtXuA4RFhZGhM+Tkr1EMGBEmMjKSXr16ZT8vqUFeLCEFQIgSMjd8LgpFSOsQ7vTbuB5Iz0xnQdQCutfrTv3K9Q1MKKwpMDCQuLi47OclNciLJaQACFECbt6+ycLohTzb6FlqVajFS1ntzwKbj20mITlBTv46GA8PD9zc3HIM8pKamsqoUaN49tln2bJli9UzyUlgIUrAqphVXLl5hfFtxgPwDWQXgXmR86juWZ1nGjxjWD5hjEaNGhEbG8vUqVOZNm0aHTt2pE+fPiQlJfHGG2/Qo0cPq+aRPQAhiiozEzIywDy+Rfaln0FVg+ji34XlWZMtxHxeYPOxzYxsNRJXZ1fDIgtjBAYGsnjxYrTWdOzYMbt92rRpvPrqq1bPI3sAQljixAnYvBl++w1iYuDUKbh2jS4Arq7g68vuVj5EtYpijv+rqLQ0Bru54QSUBUIjQ1FKMbLVSEPfhjBGo0aNCAkJITw8HDB/WZgyZQpPPfUUrVq1snoeKQBCFCQtDVauhLlzYXfWqKU1akDLlvDoo1C5MidOn6aujw+cPcsst28ob4LBo2eTOWk5cwYO5JFJk0gLqMfC6IX0CuhF7Qq1jX1Pjs6X4r0SqJAjzAwcOJDRo/+88mvmzJls27aNa9euERcXR0iIdc8LSQEQIi9aw5dfwpQpcPIkBAXBhx9Cnz7w0EOg/uzN/NSOHdTt0oXzqef5asYqxjQfi2eb9vzvq3UMX7wY9/nz+TLkES74XmBs67GGvSWRxUZGhJk4cSITJ040bP1SAITIzYULMGIEfPMNtGgB334LTz2V40M/NwujFpKWkca4oB5kRo+iz8qLvP/rP/jbhpvMvfRf/K8peuy+BAHWeRtC5EdOAgtxr717ITgYtm6Fjz+GiAjo2bPAD//0zHTmRc6jm39nGoUPZGqDcQD8NeE/xL75CjvqaMZcqI3z4CEwYQKkp1vhzQiRN9kDEOJuO3eav+lXqAC//24+zl9IG49sJCE5gZlPfArp+3iv2f+j4bVYnDJNzAufjauTK6/M3gm+H5kLy/nzsGKF+eSxEAaQAiDEHTEx5g9/X1/48Ufw87No9tnhs6lVvhZPN+pNVEogAFuTIrlRfxJLty+lf1B/fCrUgI8+Mp9EfuMN8PSEsLAC9y6EKAlSAIQAuHoVeveGcuVg2zaLP/z/uPEHP5z4gX899i9cnFxo52Xu4qGW/8ssSrrFVdPVnCd/X38dUlLg//0/aNYMJk8uvvciRCHJOQAhAMaPh9On4euvobbll2iuT1yPq5MrI1qOwJRhIt3Jlc8v/ArA3Ii5NK7amEdqP5Jzpn/8w3xF0Ztvwv79xfAmhLCMFAAhtm0zH4t/+21o397i2VPTUtlybgvPN34eX09fRl2OAGCQTyciEiOISIwgpHUI6t7DPEpBaChUrAghIdl3EgthLVIAhGPT2vwN3N8f3nrrgRaxYv8Krmdc59U25lv5l/t04ulLewBzj6Aerh4MbjY495mrVIHp080nnNevf6D1C/GgpAAIx7Z1K0RHQ8N3YYQb9AD+WfjZtdbMDp9Nfc/6dPDrwIZL5juFv6gQSNLNJFbGrOTlpi9Twb1C3gsZOhTq14f33y/aexHCQnISWDi2efNBVYXvX/qzLZ/P6nv9dvo3Dlw4wOsNXkcpxbNV2gHg5erFp5GfcjP9ZsF3/rq4wMSJ5sf+/eaTwqJEVXu9GueTi68vCN/yvpz7qODbiw8ePMiLL77IlClTGDvW+DvCZQ9AOK7r12HzJhg4AMrdNSzjGuBF4EbBi5gdPpsKbhV43OdxLpouAfBT0j601syNmEu7mu1oWb0Q9xIMHAjOzrB69QO9FWGZ4vzwt2R5jRs3ZtWqVSxbtqxY1/+gpAAIx/Xzz2AywfDe8DXm/WF/oC/wJVAO83ive3Kf/VzqOdYeWsuwFsMo61yW3qazADxaqTnbT27nyOUjjGszrnBZqlSBhx+G778v4psSts7Hx4eDBw/mO01kZCRdu3bNfl5Sw0dKARCOa9cucHIyf/D2ANYBX2EuBhr4Imu6dpgLwd+BzD9nXxi1kNuZt7MP8eyq2JTJ538CzJd+Vi5bmRcav1D4PI88Yu6GwmQq2vsSNm3KlCncunWLU6dO5TlNYGAgR48ezX5eUsNHGloAlFJPKqWOKKXilFJTjMwiHNChQ+ZePT08zM+fBlrf9fpAzIUgAWgC/AtwBgIg/UQ68yPn061eNxpWaciF9FQAPqzakcSURNYdXseIliNwd3EvfJ5mzcwDy9z1H1+ULlu3buX69ev06tUrey9g/fr19w0L6eHhgbu7e47hI7t165brtEVhWAFQSjkDs4GngCBgoFIqyKg8wgElJECdOgVPVxM4gPnb/zQgDr7p+Q0JyQkkHEgg8J1ATp+Lx+2zp3BxciE0MpRMncmY4DGW5blzA1pCgmXzCbtgMpl49913mTNnDk2bNiUmJgaAPn36EBoaypIlS1h91zmgoKAgYmNjeeedd5g2bVq+0z6oAguAUmq8UqpSkdd0v7ZAnNY6XmudBqzCPGa2ENZx7Zq507fCUsDbgIa5E+bimubK0ctHiT0XCxm3eaKMO+mZ6SyIWsAT9Z/gocoPWZbn1i3zvxs3WjafsAvTpk1j4MCB+Pv75ygAd79+97CQjRs3znX4yNymfVCFuQy0GhCulIoCFgHfa10styzWBE7f9TwB89HWHJRSo4HRAL6+vuzYsaMYVm2Z1NRUQ9ZbFPaYGaybu83161y/dIlDFq4v4UYCWy5uYVjAMFoFtiItIw0/Tz9GVRvBv9f+m8SURMbVHmfx+6gUGUlz4PzRoxy20jZwlL+TChUqkJKSkv3cx8uHCykXii2Pj5dPjuXf69ixY3z33Xd89913pKSkUK9ePfbv309KSgpaa/7xj3/QtWtXAgICspdTr149QkJC2LFjR3ZbXtPezWQyFX7baK0LfGD+7vME5m/pccC/gYcKM28+y3weWHjX88HAzPzmCQ4O1kbYvn27IestCnvMrLWVc7dpo/WTT1o822vfvaZd/umiE5MT9fELx7XXeC89+4vZWmutH1v6mK7zSR2dnpFueZ49e7QGrTdssHzeB+QofyeHDh0qmSAWSk5Ovq/t008/1a1atdJjxozRc+fOzXf+wkyb23sFInQun6mFuhFMa62VUucwD6SWDlQC1iiltmqt3yxcqblPAlDrrud+QOIDLksIy9WoAcePWzTLzds3Wbx3Mf0C+1Hdqzp4QfQ70cQfiOfwxcP8eOJHpj8+HWcnZ8vz3Dn2X6OG5fMKu2XJsJDFPYRkYc4BTFRKRQL/AX4DmmqtxwLBQP8irDscCFBK1VVKlQEGABuKsDwhLNOwofmKm7S0Qs+yKmYVSaakHHf3PuTzEK7OrsyLmEcZ5zK80vKVB8tz59rwBg0ebH4hLFSYPYAqQD+tdY6LVrXWmUqppx90xVrrdKXUeOB7zBfXLdJa5393hBDFqW1b84d/ZCQU8iabuRFzCaoaROc6nXO038y4yZJ9S3g+6Hl8yvk8WJ7ffoPAQPDyerD5hbBQgXsAWut37/3wv+u1w0VZudZ6k9a6gdb6Ia31v4qyLCEs1qWL+Uawb78t1OQRiRGEJ4YztvXY+7p23nZ+G8m3kgt/5++9rl+HHTuge/cHm1+IByB3AgvH5e0NXbvCF19AZmaBk+fVtbPWmv8l/o/mvs3p4PeAt+t//bX5DuD+RTmqKvKjHWC8BUvfoxQA4dhGjoQTJwrcC7jTtfOgpoPu69p55+mdHL9+nFfbvHr/oC+FoTXMnGk+9t+pk+XziwK5u7tz+fLlUl0EtNZcvnwZd/fC330u3UELx9a/v3kwmPfeg169zIeEcrF031Jz185t7u/Cd3b4bMo5l+Olpi/lMmchbNoE4eEwf36e6xdF4+fnR0JCAhcvXjQ0h8lksugD2lLu7u74WTCetRQA4dhcXWHqVBg8GMLCYNSo+ybRWjMvYh7t/drTolqLHK+dTz3PmkNr6F29N+XKlLN8/Tdvwl/+AgEBMHz4A74JURBXV1fq1q1rdAx27NhBy5aF6B7cSuTrhhAvvWQ+IfzGG7neF3Cna+fcBnYJjQrlduZtetfo/WDrnjIFjh2DOXPMxUgIK5ICIISTEyxZYv63b19ITs7xcl5dO6dn/tkjaG2P2pav9/PP4bPPYNIk6NatCG9AiAcjBUAIMPcKunq1uYvo3r0h1dy989mUs6yPXc/wFsPv69p5w5ENJCQnZA8Gb5ENG+CVV8xXIf3nP8XxDoSwmBQAIe7o0cP8rfyXX+Dxx+HcOcKiw0jPTM+1a+fZ4bOpVb4WTzew8H7IsDDzyedWrWDdOihTppjegBCWkQIgxN0GDjRfkx8TQ0arFiz47TO61etGgHdAjsnu9PsT0joEF6dCXkuRnGz+1j9yJDz2GGzdall31EIUMykAQtzr2Wdh1y42BZXhdNpFxv58E+LickwyJ3wOZZzLMLLVyIKXl55uPscQGAhLl8Lbb5vvOyhfvmTyC1FIUgCEyE3TpswdGkQN7cUzKyPNHcc99xx8+y0pyZdYum8pLzR+If9+f06ehPff//MSz5o14fffYdo0cJErsIXx5K9QiFycSDrBd/FbeKfzO7iOCYEZM8zH7teu5fOOZUjpnsaruzWcmwuVK1M1Nhb++AMSEyE21jzg/JEj5oV17gyffgrPPAMPcqewECVECoAQuQiNCkUpxajgUVC+OnzwAUydit66lTm7hhCcdJN2c7+EtBUANL57Zl9faN0aRo+GPn2gXj0j3oIQBZICIMQ90jLSCIsO45kGz+BX/q7b6suU4afG5TgYcYVFQxehPhoC589DUhLhu3fT5tFHzR/+0p2zsBNSAIS4x/rY9Vy4foGQ1iH3vTZrzyy8y3ozoMkAcHY2j95VowbXL16E+vUNSCvEg5OTwELcY17EPOpWrEuPh3rkaD997TTrY9czstVIyrqWNSidEMVHCoAQd4m9FMv2k9sZHTwaJ5Xzv8f8yPlodK57BkLYIykAQtxlQeQCXJ1cGd4iZ8+ct9JvsSByAc80eAb/iv7GhBOimEkBECLLzds3WbJ3Cf0C++Hr6Zvjta8OfcXFGxcZ33a8QemEKH5SAITIsubQGpJMSbn2+zNzz0waejfk8bqPG5BMiJIhBUCILPMi59HAuwFd/LvkaN9zZg97zuxhfNvxDzbkoxA2SgqAEMCB8wfYeXonY4LH3PchP2vPLLzKeDG0+VCD0glRMqQACIH50k83Z7f7PuQvXL/A6oOrGdp8KF5ucoOXKF2kAAiHdz3tOssPLOf5xs/j7eGd47XQyFDSMtJ4te0DDPoihI2TAiAc3qqYVSTfSr7v5O/tjNvMjZhL93rdaVSlkUHphCg5UgCEw5sfOZ+gqkF0rNUxR/v62PWcSTnDhLYTDEomRMmSAiAcWvTZaMITw3M9+Ttzz0zqVqxLz4CeBqUTomRJARAObUHkAtxd3BncbHCO9r3n9vLLH7/waptXcXZyNiidECXLkAKglPpQKRWrlNqvlFqnlKpoRA7h2FLTUllxYAUvNH6BSmUr5Xht5u6ZeLh68ErLVwxKJ0TJM2oPYCvQRGvdDDgKvGVQDuHAVsWsIiUt5b6Tv5dvXOaLmC8Y1HTQfYVBiNLEkAKgtd6itU7PeroL8MtveiFKwvzI+TTxaUIHvw452hdGLcSUbpJ+f0Spp7TWxgZQaiOwWmu9PI/XRwOjAXx9fYNXrVplzXgApKam4unpafX1FoU9Zgbr5T6acpQxUWOYUH8C/Wr2y27P0Bm8tPslarjX4JMWnxR6ebK9rUtyW6Zr166RWuvW972gtS6RB7ANiMnl8exd07wNrCOrEBX0CA4O1kbYvn27IestCnvMrLX1codsDNHu09z1lRtXcrSvPbRW8x563eF1Fi1Ptrd1SW7LABE6l8/UEhsSUmvdLb/XlVJDgaeBx7MCCmEV+Z38/Wz3Z9SpUIdnGjxjUDohrMeoq4CeBP4G9NZa3zAig3Bcq2NW53ryd//5/fx06ie59FM4DKOuApoFeAFblVJ7lVLzDMohHNCCqAUEVQ267+TvzN0zKetSlhGtRhiUTAjrKrFDQPnRWtc3Yr1C7D23lz1n9jDjiRk57vy9fOMyyw8sZ3CzwVQuW9nAhEJYj9wJLBxKaGQobs5uDG6e887f0KhQTOkmJrabaFAyIaxPCoBwGDdu38ju9vnub/npmenMDp/NY3Ufo4lPEwMTCmFdUgCEw/jy4Jck30pmVKtROdrXHV5HQnICk9pNMiiZEMaQAiAcRmhUKA29G/JI7UdytH+6+1PqVqxLr4BeBiUTwhhSAIRDOHjhIDtP72Rkq5E5Tv5GJkby2+nfmNB2glz6KRyOFADhEBZGLcTVyfW+MX8/2/MZ5VzLMbzlcIOSCWEcKQCi1DOlm1i2fxl9GvWharmq2e3nUs+xKmYVw1oMo6J7ReMCCmEQKQCi1Ft3eB1Xbl657+TvvIh5pGWkyaWfwmFJARCl3sLohdStWJfH6z2e3XYr/RZzI+bSM6AnDbwbGJhOCONIARCl2vErx/nxxI+MaDkCJ/Xnn/vqg6u5cP2CXPopHJoUAFGqLYpehJNyYliLYdltWms+3f0pgVUC6V6vu3HhhDCYFABRaqVnprN472J6BvSkZvma2e2//vErUWejmNx+co5LQoVwNFIARKm16dgmzqaeve/k74zdM6hctjKDmg0yKJkQtkEKgCi1wqLDqOZZjZ4BPbPbTiSdYH3sesYEj8HD1cPAdEIYTwqAKJUSUxL59ui3DGs+DBenP3s9n7VnFk7KiXFtxhmYTgjbIAVAlEpL9y4lQ2fwSstXsttSbqWwMHohzwc9j195PwPTCWEbpACIUkdrTVh0GJ3rdCbAOyC7ffHexSTfSmZy+8nGhRPChkgBEKXOT6d+4njScUa0/HNox4zMDD7d/SkP13qYtjXbGphOCNshBUCUOmHRYZR3K0//oP7ZbRuPbiQ+KZ6/tP+LgcmEsC1SAESpcs10jTWH1vBSk5dyXOXzya5PqFOhDn0a9TEunBA2RgqAKFVWxqzElG5iRKs/D/9EnY3i51M/M7HdxBxXBAnh6KQAiFIlLDqMpj5NCa4enN328e8f41nGM8c5ASGEFABRihw4f4CIxAhGtByR3cXDmeQzrD64mpEtR1LBvYLBCYWwLVIARKmxKHoRrk6uvNzs5ey2WXtmkakzpc9/IXIhBUCUCmkZaSw/sJzeDXtTxaMKAKlpqcyLnEe/wH7UrVTX4IRC2B4pAKJU+OboN1y6cSnHnb9L9i7hqumqXPopRB6kAIhSYfHexdTwqkGPh3oA5hu/Ptn1Ce392vNwrYcNTieEbTK0ACil3lBKaaVUFSNzCPt2LvUcm49tZkizIdmXef7vyP+IT4rn9Q6vG5xOCNtlWAFQStUCugN/GJVBlA7L9y8nQ2fkGPXro98/om7FuvRt1Ne4YELYOCP3AD4B3gS0gRmEndNas3jvYjr4daBhlYYA7ErYxc7TO5ncfjLOTs4GJxTCdhlSAJRSvYEzWut9RqxflB4RiREcuniI4S2GZ7d99PtHVHSvmOOEsBDifkrrkvkCrpTaBlTL5aW3gf8DemitrymlTgKttdaX8ljOaGA0gK+vb/CqVatKJG9+UlNT8fT0tPp6i8IeM4PluWccm8Hmc5tZ22Etni6enLl5hiF7hjCg1gBG1RtV8AKKiaNsb1shuS3TtWvXSK116/te0Fpb9QE0BS4AJ7Me6ZjPA1QraN7g4GBthO3btxuy3qKwx8xaW5bbdNukK71fSQ9cMzC77dVvX9Wu/3TVicmJJZAub46wvW2J5LYMEKFz+Uy1es9YWusDgM+d5wXtAQiRl41HN5JkSmJo86EAXL5xmUXRixjUbBDVvaobnE4I2yf3AQi7tXTfUmp41aBbvW4AzAmfw830m3LppxCFZHgB0Fr7y7d/YanzqefZfGwzg5oOwtnJmZu3bzJzz0x6BfSisU9jo+MJYRcMLwBCPIiVMSvJ0BkMaT4EMO8NXLxxkb8+/FeDkwlhP6QACLv0+f7PCa4eTGOfxmRkZvDR7x/RpkYbHq3zqNHRhLAbUgCE3Tl44SBRZ6Oyv/1/ffhr4q7E8beOf8seB0AIUTApAMLuLN+/HGflzIAmA9Ba88FvHxBQOUDG+xXCQjJAqrArmTqTFQdW8ET9J/Ap58MP8T8QeTaS0GdCpdsHISwkewDCrvxy6hdOJ59mUNNBAEz/dTrVPaszuNlgg5MJYX+kAAi7snz/csq5lqN3w97sObOHH078wGsdXsPNxc3oaELYHSkAwm6kZaSx9vBa+gb2pVyZckz/dTqV3CsxJniM0dGEsEtSAITd+D7ue5JMSQxsMpCYCzGsj13P+Lbj8XLzMjqaEHZJTgILu7EyZiXeZb3pXq87w/43DM8ynkxqN8noWELYLdkDEHbhxu0bbDiygf6B/Tl59SSrYlYxtvVYvD28jY4mhN2SAiDswqZjm7h++zovNH6Bf/3yL8o4l+G1Dq8ZHUsIuyYFQNiFrw59RVWPqtSqUIvl+5cTEhxCNc/cxhsSQhSWFABh80zpJr49+i19G/Vl+q/TcXV25c2ObxodSwi7JwVA2Lxt8du4fvs6TXyasGzfMsa2HisDvghRDKQACJu34cgGvMp4sf3kdtxd3JnSaYrRkYQoFaQACJumtWbTsU14e3izLnYdr3d4HZ9yPgXPKIQokNwHIGxa7KVYzqScAaCqR1XeePgNgxMJUXrIHoCwab+d/i37538//m/Ku5U3MI0QpYsUAGHT/rj2BwCP1H6EV1q+YnAaIUoXOQQkbNrAJgO5arrK3x/9O05Kvq8IUZykAAibFlg1kM+e+szoGEKUSvKVSgghHJQUACGEcFBSAIQQwkFJARBCCAclBUAIIRyUFAAhhHBQUgCEEMJBSQEQQggHpbTWRmcoNKXUReCUAauuAlwyYL1FYY+ZQXJbm+S2LqNy19FaV7230a4KgFGUUhFa69ZG57CEPWYGyW1tktu6bC23HAISQggHJQVACCEclBSAwllgdIAHYI+ZQXJbm+S2LpvKLecAhBDCQckegBBCOCgpAEII4aCkAORCKbVaKbU363FSKbU3j+lOKqUOZE0XYeWY92Z5Tyl15q7cPfOY7kml1BGlVJxSaoq1c+aS50OlVKxSar9Sap1SqmIe09nEti5o+ymzz7Je36+UamVEznsy1VJKbVdKHVZKHVRKTcplmi5KqWt3/f28a0TWexX0e7fR7d3wru24VymVrJSafM80trG9tdbyyOcBfAS8m8drJ4EqRmfMyvIe8EYB0zgDx4F6QBlgHxBkcO4egEvWzx8AH9jqti7M9gN6ApsBBbQHdtvA30Z1oFXWz17A0VxydwG+MTqrpb93W9zeufzNnMN8I5bNbW/ZA8iHUkoBLwArjc5STNoCcVrreK11GrAKeNbIQFrrLVrr9KynuwA/I/MUoDDb71lgmTbbBVRUSlW3dtC7aa3Paq2jsn5OAQ4DNY3MVIxsbnvf43HguNbaiB4MCiQFIH+PAOe11sfyeF0DW5RSkUqp0VbMlZfxWbvBi5RSlXJ5vSZw+q7nCdjWB8ErmL/N5cYWtnVhtp9Nb2OllD/QEtidy8sdlFL7lFKblVKNrZssTwX93m16ewMDyPsLpOHb22EHhVdKbQOq5fLS21rr/2X9PJD8v/131FonKqV8gK1KqVit9c/FnfWO/DIDc4GpmP/DTMV86OqVexeRy7wlfh1wYba1UuptIB1YkcdirLqt81CY7WfINi4MpZQnsBaYrLVOvuflKMyHKVKzzh+tBwKsHDE3Bf3ebXl7lwF6A2/l8rJNbG+HLQBa6275va6UcgH6AcH5LCMx698LSql1mA8RlNiHUkGZ71BKhQLf5PJSAlDrrud+QGIxRMtXIbb1UOBp4HGddYA0l2VYdVvnoTDbz5BtXBCllCvmD/8VWuuv73397oKgtd6klJqjlKqitTa0w7VC/N5tcntneQqI0lqfv/cFW9necggob92AWK11Qm4vKqXKKaW87vyM+WRmjBXz3Zvn7uOeffPIEg4EKKXqZn07GQBssEa+vCilngT+BvTWWt/IYxpb2daF2X4bgCFZV6e0B65prc9aO+jdss5lhQGHtdYf5zFNtazpUEq1xfzZcNl6KXPNVJjfu81t77vkeQTBVra3w+4BFMJ9x+6UUjWAhVrrnoAvsC7rd+gCfKG1/s7qKf/0H6VUC8y7vyeBMZAzs9Y6XSk1Hvge89UJi7TWBw3Ke8cswA3z7j3ALq11iC1u67y2n1IqJOv1ecAmzFemxAE3gOHWzpmLjsBg4ID685Lm/wNqQ3bu54CxSql04CYwIK+9MSvK9fduB9sbpZQH0J2s/4dZbXfntontLV1BCCGEg5JDQEII4aCkAAghhIOSAiCEEA5KCoAQQjgoKQBCCOGgpAAIIYSDkgIghBAOSgqAEEWglGqT1QGfe9adqweVUk2MziVEYciNYEIUkVJqGuAOlAUStNbTDY4kRKFIARCiiLL6BQoHTMDDWusMgyMJUShyCEiIoqsMeGIebcvd4CxCFJrsAQhRREqpDZhHB6sLVNdajzc4khCFIr2BClEESqkhQLrW+gullDOwUyn1mNb6R6OzCVEQ2QMQQggHJecAhBDCQUkBEEIIByUFQAghHJQUACGEcFBSAIQQwkFJARBCCAclBUAIIRzU/wfNkRytO6q7ZwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Tenseur T_3:\n",
      "[[1 2]\n",
      " [2 0]]\n",
      "Valeurs propres:  2.561552812808833  -  -1.5615528128088298\n",
      "Vecteurs propres associés:  [0.78820544 0.61541221]  -  [-0.61541221  0.78820544]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def Deformation(T):\n",
    "    \"\"\"Affiche la déformation d'un cercle en ellipse selon une matrice T.\n",
    "    Entrée:\n",
    "    - T: Array de taille (2,2) - Tenseur de déformation, symétrique\"\"\"\n",
    "    \n",
    "    # Calcul de valeurs et vecteurs propres\n",
    "    \n",
    "    lambdas , P = QR_VP(T)\n",
    "    \n",
    "    print(\"Valeurs propres: \",lambdas[0],\" - \",lambdas[1])\n",
    "    print(\"Vecteurs propres associés: \", P[:,0] , \" - \" , P[:,1])\n",
    "    \n",
    "    # Affichage du tenseur de déformations\n",
    "    \n",
    "    theta = np.linspace(0,2*np.pi,100)\n",
    "    U = np.zeros((2,np.size(theta)))\n",
    "    U[0,:] , U[1,:] = np.cos(theta) , np.sin(theta)\n",
    "\n",
    "    V = T@U\n",
    "\n",
    "    plt.figure()\n",
    "    plt.plot(U[0,:],U[1,:],color=\"red\",label=\"$S_1$\")\n",
    "    plt.plot(V[0,:],V[1,:],color=\"green\",label=\"$T S_1$\")\n",
    "    plt.arrow(0,0,P[0,0],P[1,0], head_length=0.2 , head_width=0.2 , length_includes_head = True , color = \"orange\" , edgecolor = None , label = \"$v_1$\")\n",
    "    plt.arrow(0,0,lambdas[0]*P[0,0],lambdas[0]*P[1,0], head_length=0.2 , head_width=0.2 , length_includes_head = True , color = \"cyan\" , edgecolor = None , label = \"$\\lambda_1v_1$\")\n",
    "    plt.arrow(0,0,P[0,1],P[1,1], head_length=0.2 , head_width=0.2 , length_includes_head = True , color = \"magenta\" , edgecolor = None , label = \"$v_2$\")\n",
    "    plt.arrow(0,0,lambdas[1]*P[0,1],lambdas[1]*P[1,1], head_length=0.2 , head_width=0.2 , length_includes_head = True , color = \"darkgreen\" , edgecolor = None , label = \"$\\lambda_2v_2$\")\n",
    "    plt.legend()\n",
    "    plt.xlabel(\"x\")\n",
    "    plt.ylabel(\"y\")\n",
    "    plt.grid()\n",
    "    plt.axis(\"equal\")\n",
    "    plt.show()\n",
    "    \n",
    "    pass\n",
    "\n",
    "T1 = np.array([[1,2],[2,1]])\n",
    "T2 = np.array([[1,2],[2,5]])\n",
    "T3 = np.array([[1,2],[2,0]])\n",
    "\n",
    "print(\"Tenseur T_1:\")\n",
    "print(T1)\n",
    "Deformation(T1)\n",
    "\n",
    "print(\"Tenseur T_2:\")\n",
    "print(T2)\n",
    "Deformation(T2)\n",
    "\n",
    "print(\"Tenseur T_3:\")\n",
    "print(T3)\n",
    "Deformation(T3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
