{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "*ENSAM-Bordeaux, Mathématiques et informatique. Date : le 09/11/19. Auteur : Éric Ducasse. Version : 0.9*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
*On pourra faire exécuter ce notebook cellule par cellule $\\left(\\mathtt{Maj+Entrée}\\right)$ ou intégralement par $\\mathtt{\\;Kernel\\rightarrow Restart\\;\\&\\;Run\\;All}$.*
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import sympy as sb\n", "sb.init_printing()\n", "print(\"Version de sympy :\",sb.__version__) \n", "from IPython.display import display" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# **Calcul formel : TD n°3, troisième partie

$\\hspace{4cm}$*Calcul matriciel* **
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
**Pour chaque exercice, faire exécuter la partie *exemples* cellule par cellule $\\left(\\mathtt{Maj+Entrée}\\right)$, avant de passer à la partie *Travail à faire*.**
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## *Exercice 18* " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 18.1 Objectifs " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### * Savoir définir des matrices, en extraire des sous-matrices, faire les opérations habituelles du calcul matriciel,
dont la résolution de systèmes linéaires, et, si une matrice est carrée, calculer exactement son déterminant,
sa matrice inverse, ses valeurs propres, ses vecteurs propres.
*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 18.2 Exemples " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Définition d'une matrice" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a,b = sb.symbols(\"a,b\")\n", "M = sb.Matrix([[a-b,-b,0,0],[b,a+b,0,0],[0,0,b,0],[0,0,0,b]])\n", "M" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Dimensions de la matrice" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "M.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Extraction d'une ligne (matrice-ligne)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "R = M.row(2) ; R" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "R.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "R == M[2,:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Extraction d'une colonne (matrice-colonne)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "C = M.col(1) ; C" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "C.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "C == M[:,1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Slicing similaire à celui de $\\mathtt{numpy.ndarray}$" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "M[-3:,:3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Attention :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "[ M[i] for i in range(16) ]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Méthodes similaires à celles de $\\mathtt{numpy.ndarray}$" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "M.det()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "M.trace()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "M.transpose()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "M.transpose() == M.T" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "P = M.inv() ; P" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "P.simplify() ; P # Simplification en place !" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "I = sb.eye(4) ; I" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Attention ! l'opérateur $\\mathtt{*}$ n'a pas la même signification pour les objets de type $\\mathtt{sympy.Matrix}$ et de type $\\mathtt{numpy.ndarray}$. Nous conseillons d'éviter son utilisation et de lui préférer l'opérateur $\\mathtt{@}$." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "(P@M).equals(I)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Valeurs et vecteurs propres" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "M.eigenvals()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "diago = M.eigenvects() ; diago" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "V0 = diago[0][2][0]\n", "V1 = sb.Matrix([[1],[1],[0],[0]]) ; \n", "V2 = diago[1][2][0]\n", "V3 = diago[1][2][1]\n", "LV = [V0,V1,V2,V3] ; LV" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Q = sb.Matrix([ X.T for X in LV ]).T ; Q" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Qm1 = Q.inv() ; Qm1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Q@M@Qm1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 18.3 Travail à faire " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### $a)$ Définir la matrice $\\displaystyle A=\\left(\\begin{array}{ccc}\n", "1 & a^3 & 0 \\\\ 0 & 1 & b^3 \\\\ c^3 & 0 & 1 \\end{array}\\right)$, où $a$, $b$ et $c$ sont des réels strictement positifs." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### $b)$ Déterminer son déterminant ainsi que sa matrice inverse." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### $c)$ Déterminer les valeurs propres et les vecteurs propres de la matrice $A$." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }