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" new file mode 100644 index 0000000..05a9aa7 --- /dev/null +++ "b/Chapitre 8 - Valeurs propres, vecteurs propres, diagonalisation /8.1 Valeurs propres et vecteurs propres, d\303\251finitions, exemples .ipynb" @@ -0,0 +1,221 @@ +{ + "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" + ] + }, + { + "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", + " \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", + " " + ] + }, + { + "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", + "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", + "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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Print the solution for A_1 and 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)" + ] + }, + { + "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)" + ] + }, + { + "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 +}