diff --git "a/Chapitre 8 - Valeurs propres, vecteurs propres, diagonalisation /8.1 Valeurs propres et vecteurs propres, d\303\251finitions, exemples.ipynb" "b/Chapitre 8 - Valeurs propres, vecteurs propres, diagonalisation /8.1 Valeurs propres et vecteurs propres, d\303\251finitions, exemples.ipynb" index 05a9aa7..cf301a8 100644 --- "a/Chapitre 8 - Valeurs propres, vecteurs propres, diagonalisation /8.1 Valeurs propres et vecteurs propres, d\303\251finitions, exemples.ipynb" +++ "b/Chapitre 8 - Valeurs propres, vecteurs propres, diagonalisation /8.1 Valeurs propres et vecteurs propres, d\303\251finitions, exemples.ipynb" @@ -1,221 +1,223 @@ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Concept(s)-clé(s) et théorie\n", "\n", "#### Définition: Valeur propre et vecteur propre d'une application linéaire\n", "\n", "Soient $V$ un $\\mathbb{R}$-espace vectoriel et $T: V \\rightarrow V$ une transformation linéaire. On dit que $\\lambda \\in \\mathbb{R}$ est une valeur propre de $T$ s'il existe $v \\in V$ non-nul tel que $T(v)=\\lambda v$. Aussi, si $\\lambda \\in \\mathbb{R}$ est une valeur propre de $T$, alors tout vecteur non-nul $v \\in V$ tel que $T(v)=\\lambda v$ s'appelle un vecteur propre de $T$ correspondant à la valeur propre $\\lambda$.\n", "\n", "#### Définition: Valeur propre et vecteur propre d'une matrice\n", "Soit $A \\in M_{n \\times n} \\ (\\mathbb{R})$ . On dit que $\\lambda \\in \\mathbb{R}$ est une valeur propre de $A$ s'il existe $X \\in M_{n \\times 1} (\\mathbb{R})$ non-nul tel que $A X=\\lambda X$. Aussi, si $\\lambda \\in \\mathbb{R}$ est une valeur propre de $A$, alors toute solution non-nulle de $A X=\\lambda X$ s'appelle un vecteur propre de $A$ correspondant à la valeur propre $\\lambda$." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import plotly\n", "import plotly.graph_objects as go\n", "import sympy as sp\n", - "from IPython.display import display\n" + "from IPython.display import display, Latex\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def vector_plot_3D(v, b):\n", " fig = go.Figure()\n", "\n", " fig.add_trace(go.Scatter3d(x=[0, v[0]], y=[0, v[1]], z=[0, v[2]],\n", " line=dict(color='red', width=4),\n", " mode='lines+markers',\n", " name='$v$'))\n", "\n", " fig.add_trace(go.Scatter3d(x=[0, b[0]], y=[0, b[1]], z=[0, b[2]],\n", " line=dict(color='royalblue', width=4, dash='dash'),\n", " mode='lines+markers',\n", " name='$A \\ v$'))\n", "\n", " fig.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def CheckEigenVector(A, v):\n", " # Check Dimensions\n", " if A.shape[0] != A.shape[1] or v.shape[0] != A.shape[1]:\n", " raise ValueError('Dimension problem, A should be square (n x n) and v (n x 1)')\n", "\n", " if v==sp.zeros(v.shape[0],1):\n", - " print(\"v est le vecteur nul, il ne peut pas être un vecteur propre par définition\")\n", - "\n", - " # Matrix Multiplication\n", - " b = A * v\n", - " \n", - " # Print some explanation about the method\n", - " print(\"On voit que b = A * v donne:\")\n", - " display(b)\n", - " print(\"On cherche alors un nombre lambda tel que b = lambda * v\")\n", - " \n", - " # Symbol for lambda\n", - " l = sp.symbols('l', real=True)\n", - "\n", - " # Check if there is a solution lambda of eq: A*v = lambda * v\n", - " eq = sp.Eq(b, l*v)\n", - " sol = sp.solve(eq, l)\n", + " display(Latex(\"$v$ est le vecteur nul, il ne peut pas être un vecteur propre par définition.\"))\n", " \n", - " # If there is l st b = l*v\n", - " if sol:\n", - " print(\"Il existe bien une solution lambda.\")\n", - " print(\"Le vecteur v est donc un vecteur propre de la matrice A.\")\n", - " print(\"La valeur propre associée est lambda = \", sol[l])\n", - " # Otherwise\n", " else:\n", - " print(\"L'equation b = lambda * v n'a pas de solution.\")\n", - " print(\"Le vecteur v n'est donc pas un vecteur propre de la matrice A.\")\n", - " " + " # Matrix Multiplication\n", + " b = A * v\n", + "\n", + " # Print some explanation about the method\n", + " display(Latex(\"On voit que $ b = A v = \" + sp.latex(b) + \"$\"))\n", + " display(Latex(\"On cherche alors un nombre $\\lambda \\in \\mathbb{R}$ tel que $b = \\lambda v\" \\\n", + " + \"\\Leftrightarrow\" + sp.latex(b) + \" = \\lambda\" + sp.latex(v) + '$'))\n", + "\n", + "\n", + " # Symbol for lambda\n", + " l = sp.symbols('\\lambda', real=True)\n", + "\n", + " # Check if there is a solution lambda of eq: A*v = lambda * v\n", + " eq = sp.Eq(b, l*v)\n", + " sol = sp.solve(eq, l)\n", + "\n", + " # If there is l st b = l*v\n", + " if sol:\n", + " display(Latex(\"Il existe bien une solution pour $\\lambda$. Le vecteur $v$ est donc un vecteur \\\n", + " propre de la matrice $A$.\"))\n", + " display(Latex(\"La valeur propre associée est $\\lambda = \" + sp.latex(sol[l]) + \"$.\"))\n", + " # Otherwise\n", + " else:\n", + " display(Latex(\"L'equation $b = \\lambda v$ n'a pas de solution.\"))\n", + " display(Latex(\"Le vecteur $v$ n'est donc pas un vecteur propre de la matrice $A$.\"))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Exemple 1**\n", "\n", "Pour savoir si un vecteur $v \\in M_{n \\times 1} \\ (\\mathbb{R})$ est un vecteur propre de la matrice $A\\in M_{n \\times n} \\ (\\mathbb{R})$, il suffit de vérifier que les vecteurs $v$ et $b = A \\ v$ sont colinéaires. Il est possible de visualiser cela graphiquement pour des vecteurs de dimension $n=2$ où $n=3$." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Definition de la matrice A et du vecteur v (3D)\n", + "# On utilise des numpy array pour les plots\n", "v = np.array([1, 1, 1])\n", "A = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])\n", "\n", "# Multiplication de v par A\n", "b = A@v\n", "\n", "# Plot\n", "vector_plot_3D(v, b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Exercice 1**\n", "Etant donné une matrice carrée $A \\in M_{n \\times n} \\ (\\mathbb{R})$ et un vecteur $v \\in M_{n \\times 1} \\ (\\mathbb{R})$. Déterminez si $v$ est un vecteur propre de la matrice $A$. Si tel est le cas, trouvez la valeur propre $\\lambda \\in \\mathbb{R}$ associée. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# Les matrices ou vecteurs peuvent dépendre du paramètre x\n", + "# Les matrices ou/et vecteurs peuvent dépendre du paramètre x\n", "x = sp.symbols('x')\n", "\n", "# a)\n", "A_1 = sp.Matrix([[1, 1, 1], [1, 1, 1], [1, 1, 1]])\n", "v_1 = sp.Matrix([1, 1, 1])\n", "\n", - "display(A_1, v_1)" + "display(Latex(\" $A =\" + sp.latex(A_1) + \"\\hspace{20mm} v= \" + sp.latex(v_1) + \"$\"))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# Print the solution for A_1 and v_1\n", + "# Affiche la solution pour A_1 et v_1\n", "CheckEigenVector(A_1, v_1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# b)\n", "A_2 = sp.Matrix([[4*x, 8*x], [1, 2]])\n", "v_2 = sp.Matrix([2, -1])\n", "\n", - "display(A_2, v_2)" + "display(Latex(\" $A =\" + sp.latex(A_2) + \"\\hspace{20mm} v= \" + sp.latex(v_2) + \"$\"))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Print the solution for A_2 and v_2\n", "CheckEigenVector(A_2, v_2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# c)\n", "A_3 = sp.Matrix([[1, 2], [1, 2]])\n", "v_3 = sp.Matrix([0, 0])\n", "\n", - "display(A_3, v_3)" + "display(Latex(\" $A =\" + sp.latex(A_3) + \"\\hspace{20mm} v= \" + sp.latex(v_3) + \"$\"))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Print the solution for A_3 and v_3\n", "CheckEigenVector(A_3, v_3)" ] } ], "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.7.2" } }, "nbformat": 4, "nbformat_minor": 2 }