{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Matrices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "NB : le module numpy n'est pas présent dans toutes les distributions de Python." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from numpy import array,eye,zeros,ones,random,diag,dot" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A = array([[1, 2],[3, 5]])\n", "print(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Matrice unité ou identité :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "I = eye(2)\n", "print(I)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print( 2*A + 3*I)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remarque :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ " print(2*A + 3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(zeros((2,3)))\n", "print(diag(array([1,2,3])))\n", "print(ones((1,4)))\n", "print(random.rand(5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Addition de matrices" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "B = array([[0,5],[2,-1]])\n", "print(A , \" = A\")\n", "print(B , \" = B\")\n", "print(A+B, \" = A+B\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Produit de matrices" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(A , \" = A\")\n", "print(B , \" = B\")\n", "print(dot(A,B), \" = AxB\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Comparer avec :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(A*B)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inverse" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from numpy import linalg\n", "linalg.inv(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "vérification : " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dot(A,linalg.inv(A))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Puissance de matrice" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "linalg.matrix_power(A,3)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Résolution de systèmes linéaires" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Le système $$\\left\\lbrace \\begin{array}{l} 2x+y=7\\\\3x+4y=8 \\end{array} \\right. $$\n", "s'écrit sous forme matricielle : $$AX=C$$\n", "avec $A=\\begin{pmatrix}2&1\\\\3&4 \\end{pmatrix}$, $X=\\begin{pmatrix} x\\\\y \\end{pmatrix}$ et $C=\\begin{pmatrix} 7\\\\8 \\end{pmatrix}$.\n", "\n", "\n", "En multipliant (à gauche !) les deux membres de $AX=C$ par $A^{-1}$, on obtient $$A^{-1} \\times AX=A^{-1} \\times C$$\n", "soit \n", "$$I_2 X=A^{-1} \\times C$$\n", "$$X=A^{-1} \\times C$$\n", "\n", "Dans notre exemple, $$X=\\begin{pmatrix}0,8&-0,2\\\\-0,6&0,4 \\end{pmatrix} \\times \\begin{pmatrix} 7\\\\8 \\end{pmatrix} = \\begin{pmatrix} 4\\\\-1 \\end{pmatrix}$$" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A = array([[2,1],[3,4]])\n", "C = array([[7],[8]])\n", "dot(linalg.inv(A) , C)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problèmes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Deux systèmes très semblables :\n", "\n", " $$\\left\\lbrace \\begin{array}{l} x-y=1\\\\x-1.00001*y=0 \\end{array} \\right. $$\n", " et \n", " $$\\left\\lbrace \\begin{array}{l} x-y=1\\\\x-0.99999*y=0 \\end{array} \\right. $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mais des solutions très différentes.\n", "\n", "Solution du premier :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A1 = array([[1,-1],[1,-1.00001]])\n", "C1 = array([[1],[0]])\n", "dot(linalg.inv(A1) , C1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "solution du second :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A2 = array([[1,-1],[1,-0.99999]])\n", "dot(linalg.inv(A2) , C1)" ] }, { "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.3" } }, "nbformat": 4, "nbformat_minor": 2 }