{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Más Álgebra lineal con Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Esta notebook fue creada originalmente como un blog post por [Raúl E. López Briega](http://relopezbriega.com.ar/) en [Matemáticas, análisis de datos y python](http://relopezbriega.github.io). El contenido esta bajo la licencia BSD.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"Algebra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introducción\n", "\n", "El [Álgebra lineal](http://relopezbriega.github.io/tag/algebra.html) constituye la base de gran parte de las matemáticas modernas, ya sea en su fase teórica, aplicada, o computacional. Es un área activa que tiene conexiones con muchas áreas dentro y fuera de las matemáticas, como ser: el [análisis funcional](https://es.wikipedia.org/wiki/An%C3%A1lisis_funcional), las [ecuaciones diferenciales](http://relopezbriega.github.io/tag/ecuaciones-diferenciales.html), la [investigación operativa](https://es.wikipedia.org/wiki/Investigaci%C3%B3n_de_operaciones), la [econometría](https://es.wikipedia.org/wiki/Econometr%C3%ADa) y la [ingeniería](https://es.wikipedia.org/wiki/Ingenier%C3%ADa). Es por esto, que se vuelve sumamente importante conocer sus métodos en profundidad. \n", "\n", "La idea de este artículo, es profundizar alguno de los temas que ya vimos en mi artículo anterior ([Álgebra lineal con Python](http://relopezbriega.github.io/blog/2015/06/14/algebra-lineal-con-python/)), presentar algunos nuevos, e ilustrar la utilidad de esta rama de la matemáticas con alguna de sus aplicaciones.\n", "\n", "\n", "## Campos\n", "\n", "Un Campo, $F$, es una [estructura algebraica](https://es.wikipedia.org/wiki/Estructura_algebraica) en la cual las operaciones de adición y [multiplicación](https://es.wikipedia.org/wiki/Multiplicaci%C3%B3n) se pueden realizar y cumplen con las siguientes propiedades: \n", "\n", "1. La [propiedad conmutativa](https://es.wikipedia.org/wiki/Conmutatividad) tanto para la adición como para la [multiplicación](https://es.wikipedia.org/wiki/Multiplicaci%C3%B3n); es decir: $a + b = b + a$; y $a \\cdot b = b \\cdot a$; para todo $a, b \\in F$ \n", "\n", "2. La propiedad asociativa, tanto para la adición como para la [multiplicación](https://es.wikipedia.org/wiki/Multiplicaci%C3%B3n); es decir: $(a + b) + c = a + (b + c)$; y $(a \\cdot b) \\cdot c = a \\cdot (b \\cdot c)$; para todo $a, b, c \\in F$ \n", "\n", "3. La [propiedad distributiva](https://es.wikipedia.org/wiki/Distributividad) de la [multiplicación](https://es.wikipedia.org/wiki/Multiplicaci%C3%B3n) sobre la adición; es decir: $a \\cdot (b + c) = a \\cdot b + a \\cdot c$; para todo $a, b, c \\in F$ \n", "\n", "4. La existencia de un *[elemento neutro](https://es.wikipedia.org/wiki/Elemento_neutro)* tanto para la adición como para la [multiplicación](https://es.wikipedia.org/wiki/Multiplicaci%C3%B3n); es decir: $a + 0 = a$; y $a \\cdot 1 = a$; para todo $a \\in F$.\n", "\n", "5. La existencia de un *[elemento inverso](https://es.wikipedia.org/wiki/Elemento_sim%C3%A9trico)* tanto para la adición como para la [multiplicación](https://es.wikipedia.org/wiki/Multiplicaci%C3%B3n); es decir: $a + (-a) = 0$; y $a \\cdot a^{-1} = 1$; para todo $a \\in F$ y $a \\ne 0$.\n", "\n", "Dos de los Campos más comunes con los que nos vamos a encontrar al trabajar en problemas de [Álgebra lineal](http://relopezbriega.github.io/tag/algebra.html), van a ser el [conjunto](http://relopezbriega.github.io/blog/2015/10/11/conjuntos-con-python/) de los [números reales](https://es.wikipedia.org/wiki/N%C3%BAmero_real), $\\mathbb{R}$; y el [conjunto](http://relopezbriega.github.io/blog/2015/10/11/conjuntos-con-python/) de los [números complejos](http://relopezbriega.github.io/blog/2015/10/12/numeros-complejos-con-python/), $\\mathbb{C}$.\n", "\n", "## Vectores\n", "\n", "Muchas nociones físicas, tales como las fuerzas, velocidades y aceleraciones, involucran una magnitud (el valor de la fuerza, velocidad o aceleración) y una dirección. Cualquier entidad que involucre magnitud y dirección se llama [vector](http://es.wikipedia.org/wiki/Vector). Los [vectores](http://es.wikipedia.org/wiki/Vector) se representan por flechas en las que la longitud de ellas define la magnitud; y la dirección de la flecha representa la dirección del [vector](http://es.wikipedia.org/wiki/Vector). Podemos pensar en los [vectores](http://es.wikipedia.org/wiki/Vector) como una serie de números. Éstos números tienen una orden preestablecido, y podemos identificar cada número individual por su índice en ese orden. Los [vectores](http://es.wikipedia.org/wiki/Vector) identifican puntos en el espacio, en donde cada elemento representa una coordenada del eje en el espacio. La típica forma de representarlos es la siguiente:\n", "\n", "$$v = \\left[ \\begin{array}{c} x_1 \\\\ x_2 \\\\ \\vdots \\\\ x_n \\end{array} \\right]$$\n", "\n", "Geométricamente podemos representarlos del siguiente modo en el plano de 2 dimensiones:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "hide_input": false }, "outputs": [], "source": [ "# \n", "# importando modulos necesarios\n", "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import scipy.sparse as sp\n", "import scipy.sparse.linalg\n", "import scipy.linalg as la\n", "import sympy\n", "\n", "# imprimir con notación matemática.\n", "sympy.init_printing(use_latex='mathjax')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "hide_input": false }, "outputs": [ { "data": { "image/png": "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\nXly6oOa4uZiLLOu9CN70ARchx4UlxAtw1nDiBXJc+IRMF8Ez1NIlx4WPyHSDgl4MTxhy3FzMRZb1\nXgR7EhFa5LiwingBzhooXiDHhQFkugiefEuXHBdGkOkGBb0YWNhy3FzMRZb1XoRnKhF45LhwAfEC\nnJUbL5DjwhgyXQRPz9Ilx4VBZLpBQS/6CnOOm4u5yLLeCyeW7tGjR/0uwYww9aKpqUlTp07VDTfc\noPXr1+c9pyfH3bo13DlumOZiKNZ74cTS/eyzz/wuwYyw9KKrq0srVqxQU1OT/vrXv6qxsVHvv/9+\nv/N+85t9uueeufrWt77lQ5V2hGUuhsN6L5xYugifw4cP6xvf+IZisZgKCwt19913a8eOHb33p1Ip\nSaWaMEFavXqFf4UCl8iJpdvS0uJ3CWaEpRft7e366le/2ntcVlam9vZ2SdkcV8qEOsfNFZa5GA7r\nvRj06oVIJMLVCzBqrKRzfhcBDCiTyeS9gmHQpwiX8+utgZHw5ptv6le/+pWampokSevWrVM0GtVD\nDz0kqXs2o9EoMwqr3L5kDOFz880368MPP1RLS4u++OIL/fa3v9X8+fN7749EBpxpwDQnlq716+68\nFJZeFBQU6KmnntLtt9+uadOm6a677lJ5ebnfZZkVlrkYDuu94BUImDVv3jzNmzfP7zKAEeXEM91E\nIiFJ2rRpk6LRqD799FN/C/LRH//4R5WXl2vWrFlauHChzpw543dJnut504SkAd80EQatra2aM2eO\npk+frhUrVqi+vt7vknzX1dWlVatWqbq62u9SBuTE0pW6B6y5uVnXX3+936X46rbbbtOxY8f0l7/8\nRTfeeKPWrVvnd0meyn3ThKQB3zQRBoWFhdqyZYuOHTumN998U08//XRoe9Gjrq5O06ZNM535O7F0\nk8mkVq9erQ0bNvhdiu8KCwsVjXb/b6usrFRbW5vPFXkr900Tkvq9aSJMJk2apHg8Lkl66623VF5e\nrhMnTvhclX/a2tq0e/du3XzzzaavanFi6R44cEBlZWWaOXOm36WY8vzzz+uOO+7wuwxPDfamiTBL\npVJ65513VFlZ6Xcpvlm1apWeeOIJ089yJUMvpFVVVf3rrZ19rV27Vq+99pr27NnTe5vlR7GRMFAv\nHnvssd6sau3atRozZoyWLFnidXm+sv4F5Yd0Oq2NGzeqrq5ORUVFfpfji9dee02lpaWqqKjQmTNn\n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\nPMTSBQAP/T9RXoOlGh+wXwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# \n", "# graficando vector en R^2 [2, 4]\n", "def move_spines():\n", " \"\"\"Crea la figura de pyplot y los ejes. Mueve las lineas de la izquierda \n", " y de abajo para que se intersecten con el origen. Elimina las lineas de\n", " la derecha y la de arriba. Devuelve los ejes.\"\"\"\n", " fix, ax = plt.subplots()\n", " for spine in [\"left\", \"bottom\"]:\n", " ax.spines[spine].set_position(\"zero\")\n", " \n", " for spine in [\"right\", \"top\"]:\n", " ax.spines[spine].set_color(\"none\")\n", " \n", " return ax\n", "\n", "def vect_fig(vector, color): \n", " \"\"\"Genera el grafico de los vectores en el plano\"\"\"\n", " v = vector\n", " ax.annotate(\" \", xy=v, xytext=[0, 0], color=color,\n", " arrowprops=dict(facecolor=color,\n", " shrink=0,\n", " alpha=0.7,\n", " width=0.5))\n", " ax.text(1.1 * v[0], 1.1 * v[1], v)\n", "\n", "ax = move_spines()\n", "ax.set_xlim(-5, 5)\n", "ax.set_ylim(-5, 5)\n", "ax.grid()\n", "vect_fig([2, 4], \"blue\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Combinaciones lineales\n", "\n", "Cuando trabajamos con [vectores](http://es.wikipedia.org/wiki/Vector), nos vamos a encontrar con dos operaciones fundamentales, la *suma* o *adición*; y la *multiplicación por escalares*. Cuando *sumamos* dos vectores $v$ y $w$, sumamos elemento por elemento, del siguiente modo:\n", "\n", "$$v + w\n", "=\n", "\\left[\n", "\\begin{array}{c}\n", " v_1 \\\\\n", " v_2 \\\\\n", " \\vdots \\\\\n", " v_n\n", "\\end{array}\n", "\\right]\n", "+\n", "\\left[\n", "\\begin{array}{c}\n", " w_1 \\\\\n", " w_2 \\\\\n", " \\vdots \\\\\n", " w_n\n", "\\end{array}\n", "\\right] =\n", "\\left[\n", "\\begin{array}{c}\n", " v_1 + w_1 \\\\\n", " v_2 + w_2 \\\\\n", " \\vdots \\\\\n", " v_n + w_n\n", "\\end{array}\n", "\\right]$$\n", "\n", "Geométricamente lo podemos ver representado del siguiente modo:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "hide_input": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# \n", "# graficando suma de vectores en R^2\n", "# [2, 4] + [2, -2]\n", "\n", "ax = move_spines()\n", "ax.set_xlim(-5, 5)\n", "ax.set_ylim(-5, 5)\n", "ax.grid()\n", "vecs = [[2, 4], [2, -2]] # lista de vectores\n", "for v in vecs:\n", " vect_fig(v, \"blue\")\n", "\n", "v = np.array([2, 4]) + np.array([2, -2])\n", "vect_fig(v, \"red\")\n", "\n", "ax.plot([2, 4], [-2, 2], linestyle='--')\n", "a =ax.plot([2, 4], [4, 2], linestyle='--' )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cuando *multiplicamos [vectores](http://es.wikipedia.org/wiki/Vector) por escalares*, lo que hacemos es tomar un número $\\alpha$ y un [vector](http://es.wikipedia.org/wiki/Vector) $v$; y creamos un nuevo [vector](http://es.wikipedia.org/wiki/Vector) $w$ en el cada elemento de $v$ es *multiplicado* por $\\alpha$ del siguiente modo:\n", "\n", "$$\\begin{split}\\alpha v\n", "=\n", "\\left[\n", "\\begin{array}{c}\n", " \\alpha v_1 \\\\\n", " \\alpha v_2 \\\\\n", " \\vdots \\\\\n", " \\alpha v_n\n", "\\end{array}\n", "\\right]\\end{split}$$\n", "\n", "Geométricamente podemos representar a esta operación en el plano de 2 dimensiones del siguiente modo:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "hide_input": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# \n", "# graficando multiplicación por escalares en R^2\n", "# [2, 3] * 2\n", "\n", "ax = move_spines()\n", "ax.set_xlim(-6, 6)\n", "ax.set_ylim(-6, 6)\n", "ax.grid()\n", "\n", "v = np.array([2, 3])\n", "vect_fig(v, \"blue\")\n", "\n", "v = v * 2\n", "vect_fig(v, \"red\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cuando combinamos estas dos operaciones, formamos lo que se conoce en [Álgebra lineal](http://relopezbriega.github.io/tag/algebra.html) como [combinaciones lineales](https://es.wikipedia.org/wiki/Combinaci%C3%B3n_lineal). Es decir que una [combinación lineal](https://es.wikipedia.org/wiki/Combinaci%C3%B3n_lineal) va a ser una expresión matemática construida sobre un conjunto de [vectores](http://es.wikipedia.org/wiki/Vector), en el que cada vector es *multiplicado por un escalar* y los resultados son luego *sumados*. Matemáticamente lo podemos expresar de la siguiente forma:\n", "\n", "$$w = \\alpha_1 v_1 + \\alpha_2 v_2 + \\dots + \\alpha_n v_n = \\sum_{i=1}^n \\alpha_i v_i\n", "$$\n", "\n", "en donde, $v_n$ son [vectores](http://es.wikipedia.org/wiki/Vector) y $\\alpha_n$ son escalares.\n", "\n", "## Matrices, combinaciones lineales y Ax = b\n", "\n", "Una matriz es un arreglo bidimensional de números ordenados en filas y columnas, donde una fila es cada una de las líneas horizontales de la matriz y una columna es cada una de las líneas verticales. En una matriz cada elemento puede ser identificado utilizando dos índices, uno para la fila y otro para la columna en que se encuentra. Las podemos representar de la siguiente manera:\n", "\n", "$$A=\\begin{bmatrix}a_{11} & a_{12} & \\dots & a_{1n}\\\\a_{21} & a_{22} & \\dots & a_{2n}\n", "\\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ \n", "a_{n1} & a_{n2} & \\dots & a_{nn}\\end{bmatrix}$$\n", "\n", "Las matrices se utilizan para múltiples aplicaciones y sirven, en particular, para representar los coeficientes de los [sistemas de ecuaciones lineales](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales) o para representar [combinaciones lineales](https://es.wikipedia.org/wiki/Combinaci%C3%B3n_lineal).\n", "\n", "Supongamos que tenemos los siguientes 3 vectores:\n", "\n", "$$x_1\n", "=\n", "\\left[\n", "\\begin{array}{c}\n", " 1 \\\\\n", " -1 \\\\\n", " 0\n", "\\end{array}\n", "\\right]\n", "\\\n", "x_2 =\n", "\\left[\n", "\\begin{array}{c}\n", " 0 \\\\\n", " 1 \\\\\n", " -1 \n", "\\end{array}\n", "\\right] \\ \n", "x_3 =\n", "\\left[\n", "\\begin{array}{c}\n", " 0 \\\\\n", " 0 \\\\\n", " 1\n", "\\end{array}\n", "\\right]$$\n", "\n", "su [combinación lineal](https://es.wikipedia.org/wiki/Combinaci%C3%B3n_lineal) en el espacio de 3 dimensiones va a ser igual a $\\alpha_1 x_1 + \\alpha_2 x_2 + \\alpha_3 x_3$; lo que es lo mismo que decir:\n", "\n", "$$\\alpha_1\n", "\\left[\n", "\\begin{array}{c}\n", " 1 \\\\\n", " -1 \\\\\n", " 0\n", "\\end{array}\n", "\\right]\n", "+ \\alpha_2\n", "\\left[\n", "\\begin{array}{c}\n", " 0 \\\\\n", " 1 \\\\\n", " -1 \n", "\\end{array}\n", "\\right] + \\alpha_3\n", "\\left[\n", "\\begin{array}{c}\n", " 0 \\\\\n", " 0 \\\\\n", " 1\n", "\\end{array}\n", "\\right] = \\left[\n", "\\begin{array}{c}\n", " \\alpha_1 \\\\\n", " \\alpha_2 - \\alpha_1 \\\\\n", " \\alpha_3 - \\alpha_2\n", "\\end{array}\n", "\\right]$$\n", "\n", "Ahora esta [combinación lineal](https://es.wikipedia.org/wiki/Combinaci%C3%B3n_lineal) la podríamos reescribir en forma matricial. Los vectores $x_1, x_2$ y $x_3$, pasarían a formar las columnas de la matriz $A$ y los escalares $\\alpha_1, \\alpha_2$ y $\\alpha_3$ pasarían a ser los componentes del [vector](http://es.wikipedia.org/wiki/Vector) $x$ del siguiente modo:\n", "\n", "$$\\begin{bmatrix}1 & 0 & 0\\\\-1 & 1 & 0\n", "\\\\ 0 & -1 & 1\\end{bmatrix}\\begin{bmatrix} \\alpha_1 \\\\ \\alpha_2 \\\\ \\alpha_3\\end{bmatrix}=\n", "\\begin{bmatrix}\\alpha_1 \\\\ \\alpha_2 - \\alpha_1 \\\\ \\alpha_3 - \\alpha_2 \\end{bmatrix}$$\n", "\n", "De esta forma la matriz $A$ multiplicada por el [vector](http://es.wikipedia.org/wiki/Vector) $x$, nos da como resultado la misma [combinación lineal](https://es.wikipedia.org/wiki/Combinaci%C3%B3n_lineal) $b$. De esta forma, arribamos a una de las ecuaciones más fundamentales del [Álgebra lineal](http://relopezbriega.github.io/tag/algebra.html):\n", "\n", "$$Ax = b$$\n", "\n", "Esta ecuación no solo nos va a servir para expresar [combinaciones lineales](https://es.wikipedia.org/wiki/Combinaci%C3%B3n_lineal), sino que también se vuelve de suma importancia a la hora de resolver [sistemas de ecuaciones lineales](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales), en dónde $b$ va a ser conocido y la incógnita pasa a ser $x$. Por ejemplo, supongamos que queremos resolver el siguiente [sistemas de ecuaciones](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales) de 3 incógnitas:\n", "\n", "$$ 2x_1 + 3x_2 + 5x_3 = 52 \\\\\n", "3x_1 + 6x_2 + 2x_3 = 61 \\\\\n", "8x_1 + 3x_2 + 6x_3 = 75\n", "$$\n", "\n", "Podemos ayudarnos de [SymPy](http://www.sympy.org/es/) para expresar a la matriz $A$ y $b$ para luego arribar a la solución del [vector](http://es.wikipedia.org/wiki/Vector) $x$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}2 & 3 & 5\\\\3 & 6 & 2\\\\8 & 3 & 6\\end{matrix}\\right]$$" ], "text/plain": [ "⎡2 3 5⎤\n", "⎢ ⎥\n", "⎢3 6 2⎥\n", "⎢ ⎥\n", "⎣8 3 6⎦" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Resolviendo sistema de ecuaciones con SymPy\n", "A = sympy.Matrix(( (2, 3, 5), (3, 6, 2), (8, 3, 6) ))\n", "A" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}52\\\\61\\\\75\\end{matrix}\\right]$$" ], "text/plain": [ "⎡52⎤\n", "⎢ ⎥\n", "⎢61⎥\n", "⎢ ⎥\n", "⎣75⎦" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b = sympy.Matrix(3,1,(52,61,75))\n", "b" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}3\\\\7\\\\5\\end{matrix}\\right]$$" ], "text/plain": [ "⎡3⎤\n", "⎢ ⎥\n", "⎢7⎥\n", "⎢ ⎥\n", "⎣5⎦" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Resolviendo Ax = b\n", "x = A.LUsolve(b)\n", "x" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}52\\\\61\\\\75\\end{matrix}\\right]$$" ], "text/plain": [ "⎡52⎤\n", "⎢ ⎥\n", "⎢61⎥\n", "⎢ ⎥\n", "⎣75⎦" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Comprobando la solución\n", "A*x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## La matriz identidad , la matriz transpuesta y la matriz invertible\n", "\n", "Tres matrices de suma importancia en problemas de [Álgebra lineal](http://relopezbriega.github.io/tag/algebra.html). Son la [matriz identidad](https://es.wikipedia.org/wiki/Matriz_identidad), la [matriz transpuesta](http://es.wikipedia.org/wiki/Matriz_transpuesta) y la [matriz invertible](https://es.wikipedia.org/wiki/Matriz_invertible).\n", "\n", "La [matriz identidad](https://es.wikipedia.org/wiki/Matriz_identidad) es el elemento neutro en la [multiplicación de matrices](https://es.wikipedia.org/wiki/Multiplicaci%C3%B3n_de_matrices), es el equivalente al número 1. Cualquier matriz multiplicada por la [matriz identidad](https://es.wikipedia.org/wiki/Matriz_identidad) nos da como resultado la misma matriz. La [matriz identidad](https://es.wikipedia.org/wiki/Matriz_identidad) es una [matriz cuadrada](https://es.wikipedia.org/wiki/Matriz_cuadrada) (tiene siempre el mismo número de filas que de columnas); y su diagonal principal se compone de todos elementos 1 y el resto de los elementos se completan con 0. Suele representase con la letra $I$.\n", "\n", "Por ejemplo la [matriz identidad](https://es.wikipedia.org/wiki/Matriz_identidad) de 3x3 sería la siguiente:\n", "\n", "$$I=\\begin{bmatrix}1 & 0 & 0 & \\\\0 & 1 & 0\\\\ 0 & 0 & 1\\end{bmatrix}$$\n", "\n", "La [matriz transpuesta](http://es.wikipedia.org/wiki/Matriz_transpuesta) de una matriz $A$ de $m \\times n$ va a ser igual a la matriz $n \\times m$ $A^T$, la cual se obtiene al transformar las filas en columnas y las columnas en filas, del siguiente modo:\n", "\n", "$$\\begin{bmatrix}a & b & \\\\c & d & \\\\ e & f & \\end{bmatrix}^T=\n", "\\begin{bmatrix}a & c & e &\\\\b & d & f & \\end{bmatrix}$$\n", "\n", "Una [matriz cuadrada](https://es.wikipedia.org/wiki/Matriz_cuadrada) va a ser *[simétrica](https://es.wikipedia.org/wiki/Matriz_sim%C3%A9trica)* si $A^T = A$, es decir si $A$ es igual a su propia [matriz transpuesta](http://es.wikipedia.org/wiki/Matriz_transpuesta).\n", "\n", "Algunas de las propiedades de las [matrices transpuestas](http://es.wikipedia.org/wiki/Matriz_transpuesta) son:\n", "\n", "a. $(A^T)^T = A$\n", "\n", "b. $(A + B)^T = A^T + B^T$\n", "\n", "c. $k(A)^T = k(A^T)$\n", "\n", "d. $(AB)^T = B^T A^T$\n", "\n", "e. $(A^r)^T = (A^T)^r$ para todos los $r$ no negativos.\n", "\n", "f. Si $A$ es una [matriz cuadrada](https://es.wikipedia.org/wiki/Matriz_cuadrada), entonces $A + A^T$ es una [matriz simétrica](https://es.wikipedia.org/wiki/Matriz_sim%C3%A9trica).\n", "\n", "g. Para cualquier matriz $A$, $A A^T$ y $A^T A$ son [matrices simétricas](https://es.wikipedia.org/wiki/Matriz_sim%C3%A9trica).\n", "\n", "Veamos algunos ejemplos en [Python](http://python.org/)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}2 & -3 & -8 & 7\\\\-2 & -1 & 2 & -7\\\\1 & 0 & -3 & 6\\end{matrix}\\right]$$" ], "text/plain": [ "⎡2 -3 -8 7 ⎤\n", "⎢ ⎥\n", "⎢-2 -1 2 -7⎥\n", "⎢ ⎥\n", "⎣1 0 -3 6 ⎦" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Matriz transpuesta\n", "A = sympy.Matrix( [[ 2,-3,-8, 7],\n", " [-2,-1, 2,-7],\n", " [ 1, 0,-3, 6]] )\n", "A" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}2 & -2 & 1\\\\-3 & -1 & 0\\\\-8 & 2 & -3\\\\7 & -7 & 6\\end{matrix}\\right]$$" ], "text/plain": [ "⎡2 -2 1 ⎤\n", "⎢ ⎥\n", "⎢-3 -1 0 ⎥\n", "⎢ ⎥\n", "⎢-8 2 -3⎥\n", "⎢ ⎥\n", "⎣7 -7 6 ⎦" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.transpose()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}2 & -3 & -8 & 7\\\\-2 & -1 & 2 & -7\\\\1 & 0 & -3 & 6\\end{matrix}\\right]$$" ], "text/plain": [ "⎡2 -3 -8 7 ⎤\n", "⎢ ⎥\n", "⎢-2 -1 2 -7⎥\n", "⎢ ⎥\n", "⎣1 0 -3 6 ⎦" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# transpuesta de transpuesta vuelve a A.\n", "A.transpose().transpose()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}126 & -66 & 68\\\\-66 & 58 & -50\\\\68 & -50 & 46\\end{matrix}\\right]$$" ], "text/plain": [ "⎡126 -66 68 ⎤\n", "⎢ ⎥\n", "⎢-66 58 -50⎥\n", "⎢ ⎥\n", "⎣68 -50 46 ⎦" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# creando matriz simetrica\n", "As = A*A.transpose()\n", "As" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}126 & -66 & 68\\\\-66 & 58 & -50\\\\68 & -50 & 46\\end{matrix}\\right]$$" ], "text/plain": [ "⎡126 -66 68 ⎤\n", "⎢ ⎥\n", "⎢-66 58 -50⎥\n", "⎢ ⎥\n", "⎣68 -50 46 ⎦" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# comprobando simetria.\n", "As.transpose()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La [matriz invertible](https://es.wikipedia.org/wiki/Matriz_invertible) es muy importante, ya que esta relacionada con la ecuación $Ax = b$. Si tenemos una [matriz cuadrada](https://es.wikipedia.org/wiki/Matriz_cuadrada) $A$ de $n \\times n$, entonces la [matriz inversa](https://es.wikipedia.org/wiki/Matriz_invertible) de $A$ es una matriz $A'$ o $A^{-1}$ de $n \\times n$ que hace que la multiplicación $A A^{-1}$ sea igual a la [matriz identidad](https://es.wikipedia.org/wiki/Matriz_identidad) $I$. Es decir que es la matriz recíproca de $A$.\n", "\n", "$A A^{-1} = I$ o $A^{-1} A = I$\n", "\n", "En caso de que estas condiciones se cumplan, decimos que la [matriz es invertible](https://es.wikipedia.org/wiki/Matriz_invertible). \n", "\n", "Que una matriz sea [invertible](https://es.wikipedia.org/wiki/Matriz_invertible) tiene importantes implicaciones, como ser:\n", "\n", "a. Si $A$ es una [matriz invertible](https://es.wikipedia.org/wiki/Matriz_invertible), entonces su [matriz inversa](https://es.wikipedia.org/wiki/Matriz_invertible) es única.\n", "\n", "b. Si $A$ es una [matriz invertible](https://es.wikipedia.org/wiki/Matriz_invertible) de $n \\times n$, entonces el [sistemas de ecuaciones lineales](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales) dado por $Ax = b$ tiene una única solución $x = A^{-1}b$ para cualquier $b$ en $\\mathbb{R}^n$.\n", "\n", "c. Una matriz va a ser [invertible](https://es.wikipedia.org/wiki/Matriz_invertible) si y solo si su determinante es distinto de cero. En el caso de que el determinante sea cero se dice que la matriz es singular.\n", "\n", "d. Si $A$ es una [matriz invertible](https://es.wikipedia.org/wiki/Matriz_invertible), entonces el [sistema](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales) $Ax = 0$ solo tiene una solución *trivial*. Es decir, en las que todas las incógnitas son ceros.\n", "\n", "e. Si $A$ es una [matriz invertible](https://es.wikipedia.org/wiki/Matriz_invertible), entonces su [forma escalonada](https://es.wikipedia.org/wiki/Matriz_escalonada) va a ser igual a la [matriz identidad](https://es.wikipedia.org/wiki/Matriz_identidad).\n", "\n", "f. Si $A$ es una [matriz invertible](https://es.wikipedia.org/wiki/Matriz_invertible), entonces $A^{-1}$ es [invertible](https://es.wikipedia.org/wiki/Matriz_invertible) y:\n", "\n", "$$(A^{-1})^{-1} = A$$\n", "\n", "g. Si $A$ es una [matriz invertible](https://es.wikipedia.org/wiki/Matriz_invertible) y $\\alpha$ es un escalar distinto de cero, entonces $\\alpha A$ es [invertible](https://es.wikipedia.org/wiki/Matriz_invertible) y:\n", "\n", "$$(\\alpha A)^{-1} = \\frac{1}{\\alpha}A^{-1}$$.\n", "\n", "h. Si $A$ y $B$ son [matrices invertibles](https://es.wikipedia.org/wiki/Matriz_invertible) del mismo tamaño, entonces $AB$ es [invertible](https://es.wikipedia.org/wiki/Matriz_invertible) y:\n", "\n", "$$(AB)^{-1} = B^{-1} A^{-1}$$.\n", "\n", "i. Si $A$ es una [matriz invertible](https://es.wikipedia.org/wiki/Matriz_invertible), entonces $A^T$ es [invertible](https://es.wikipedia.org/wiki/Matriz_invertible) y:\n", "\n", "$$(A^T)^{-1} = (A^{-1})^T$$.\n", "\n", "Con [SymPy](http://www.sympy.org/es/) podemos trabajar con las [matrices invertibles](https://es.wikipedia.org/wiki/Matriz_invertible) del siguiente modo:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 2\\\\3 & 9\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 2⎤\n", "⎢ ⎥\n", "⎣3 9⎦" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Matriz invertible\n", "A = sympy.Matrix( [[1,2],\n", " [3,9]] )\n", "A" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}3 & - \\frac{2}{3}\\\\-1 & \\frac{1}{3}\\end{matrix}\\right]$$" ], "text/plain": [ "⎡3 -2/3⎤\n", "⎢ ⎥\n", "⎣-1 1/3 ⎦" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A_inv = A.inv()\n", "A_inv" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 0\\\\0 & 1\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 0⎤\n", "⎢ ⎥\n", "⎣0 1⎦" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# A * A_inv = I\n", "A*A_inv" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left ( \\left[\\begin{matrix}1 & 0\\\\0 & 1\\end{matrix}\\right], \\quad \\left [ 0, \\quad 1\\right ]\\right )$$" ], "text/plain": [ "⎛⎡1 0⎤, [0, 1]⎞\n", "⎜⎢ ⎥ ⎟\n", "⎝⎣0 1⎦ ⎠" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# forma escalonada igual a indentidad.\n", "A.rref()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 2\\\\3 & 9\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 2⎤\n", "⎢ ⎥\n", "⎣3 9⎦" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# la inversa de A_inv es A\n", "A_inv.inv()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Espacios vectoriales\n", "\n", "Las Matemáticas derivan su poder en gran medida de su capacidad para encontrar las características comunes de los diversos problemas y estudiarlos de manera abstracta. Existen muchos problemas que implican los conceptos relacionados de *adición*, *multiplicación por escalares*, y la [linealidad](https://es.wikipedia.org/wiki/Lineal). Para estudiar estas propiedades de manera abstracta, debemos introducir la noción de [espacio vectorial](https://es.wikipedia.org/wiki/Espacio_vectorial).\n", "\n", "Para alcanzar la definición de un [espacio vectorial](https://es.wikipedia.org/wiki/Espacio_vectorial), debemos combinar los conceptos que venimos viendo hasta ahora de Campo, [vector](http://es.wikipedia.org/wiki/Vector) y las operaciones de *adición*; y *multiplicación por escalares*. De esta forma un [espacio vectorial](https://es.wikipedia.org/wiki/Espacio_vectorial), $V$, sobre un Campo, $F$, va a ser un [conjunto](http://relopezbriega.github.io/blog/2015/10/11/conjuntos-con-python/) en el que están definidas las operaciones de *adición* y *multiplicación por escalares*, tal que para cualquier par de elementos $x$ e $y$ en $V$, existe un elemento único $x + y$ en $V$, y para cada elemento $\\alpha$ en $F$ y cada elemento $x$ en $V$, exista un único elemento $\\alpha x$ en $V$, de manera que se cumplan las siguientes condiciones:\n", "\n", "1. Para todo $x, y$ en $V$, $x + y = y + x$ ([conmutatividad](https://es.wikipedia.org/wiki/Conmutatividad) de la adición).\n", "\n", "2. Para todo $x, y, z$ en $V$, $(x + y) + z = x + (y + z)$. (asociatividad de la adición).\n", "\n", "3. Existe un elemento en $V$ llamado $0$ tal que $x + 0 = x$ para todo $x$ en $V$.\n", "\n", "4. Para cada elemento $x$ en $V$, existe un elemento $y$ en $V$ tal que $x + y = 0$.\n", "\n", "5. Para cada elemento $x$ en $V$, $1 x = x$.\n", "\n", "6. Para cada par, $\\alpha, \\beta$ en $F$ y cada elemento $x$ en $V$, $(\\alpha \\beta) x = \\alpha (\\beta x)$.\n", "\n", "7. Para cada elemento $\\alpha$ en $F$ y cada para de elementos $x, y$ en $V$, $\\alpha(x + y) = \\alpha x + \\alpha y$.\n", "\n", "8. Para cada par de elementos $\\alpha, \\beta$ en $F$ y cada elemento $x$ en $V$, $(\\alpha + \\beta)x = \\alpha x + \\beta x$.\n", "\n", "Los [espacios vectoriales](https://es.wikipedia.org/wiki/Espacio_vectorial) más comunes son $\\mathbb{R}^2$, el cual representa el plano de 2 dimensiones y consiste de todos los pares ordenados de los [números reales](https://es.wikipedia.org/wiki/N%C3%BAmero_real):\n", "\n", "$$\\mathbb{R}^2 = \\{(x, y): x, y \\in \\mathbb{R}\\}$$\n", "\n", "y $\\mathbb{R}^3$, que representa el espacio ordinario de 3 dimensiones y consiste en todos los tríos ordenados de los [números reales](https://es.wikipedia.org/wiki/N%C3%BAmero_real):\n", "\n", "$$\\mathbb{R}^3 = \\{(x, y, z): x, y, z \\in \\mathbb{R}\\}$$\n", "\n", "Una de las grandes bellezas del [Álgebra lineal](http://relopezbriega.github.io/tag/algebra.html) es que podemos fácilmente pasar a trabajar sobre espacios de $n$ dimensiones, $\\mathbb{R}^n$!\n", "\n", "Tampoco tenemos porque quedarnos con solo los [números reales](https://es.wikipedia.org/wiki/N%C3%BAmero_real), ya que la definición que dimos de un [espacio vectorial](https://es.wikipedia.org/wiki/Espacio_vectorial) reside sobre un Campo; y los campos pueden estar representados por [números complejos](http://relopezbriega.github.io/blog/2015/10/12/numeros-complejos-con-python/). Por tanto también podemos tener [espacios vectoriales](https://es.wikipedia.org/wiki/Espacio_vectorial) $\\mathbb{C}^2, \\mathbb{C}^3, \\dots, \\mathbb{C}^n$.\n", "\n", "### Subespacios\n", "\n", "Normalmente, en el estudio de cualquier estructura algebraica es interesante examinar subconjuntos que tengan la misma estructura que el [conjunto](http://relopezbriega.github.io/blog/2015/10/11/conjuntos-con-python/) que esta siendo considerado. Así, dentro de los [espacios vectoriales](https://es.wikipedia.org/wiki/Espacio_vectorial), podemos tener [subespacios vectoriales](https://es.wikipedia.org/wiki/Subespacio_vectorial), los cuales son un subconjunto que cumplen con las mismas *propiedades* que el [espacio vectorial](https://es.wikipedia.org/wiki/Espacio_vectorial) que los contiene. De esta forma, $\\mathbb{R}^3$ representa un [subespacio](https://es.wikipedia.org/wiki/Subespacio_vectorial) del [espacio vectorial](https://es.wikipedia.org/wiki/Espacio_vectorial) $\\mathbb{R}^n$.\n", "\n", "\n", "## Independencia lineal\n", "\n", "La [independencia lineal](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal) es un concepto aparentemente simple con consecuencias que se extienden profundamente en muchos aspectos del análisis. Si deseamos entender cuando una matriz puede ser [invertible](https://es.wikipedia.org/wiki/Matriz_invertible), o cuando un [sistema de ecuaciones lineales](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales) tiene una única solución, o cuando una estimación por [mínimos cuadrados](https://es.wikipedia.org/wiki/M%C3%ADnimos_cuadrados) se define de forma única, la idea fundamental más importante es la de [independencia lineal](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal) de [vectores](http://es.wikipedia.org/wiki/Vector).\n", "\n", "Dado un conjunto finito de [vectores](http://es.wikipedia.org/wiki/Vector) $x_1, x_2, \\dots, x_n$ se dice que los mismos son *[linealmente independientes](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal)*, si y solo si, los únicos escalares $\\alpha_1, \\alpha_2, \\dots, \\alpha_n$ que satisfacen la ecuación:\n", "\n", "$$\\alpha_1 x_1 + \\alpha_2 x_2 + \\dots + \\alpha_n x_n = 0$$\n", "\n", "son todos ceros, $\\alpha_1 = \\alpha_2 = \\dots = \\alpha_n = 0$.\n", "\n", "En caso de que esto no se cumpla, es decir, que existe una solución a la ecuación de arriba en que no todos los escalares son ceros, a esta solución se la llama *no trivial* y se dice que los [vectores](http://es.wikipedia.org/wiki/Vector) son *[linealmente dependientes](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal)*.\n", "\n", "Para ilustrar la definición y que quede más clara, veamos algunos ejemplos. Supongamos que queremos determinar si los siguientes [vectores](http://es.wikipedia.org/wiki/Vector) son *[linealmente independientes](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal)*: \n", "\n", "$$\\begin{split}x_1\n", "=\n", "\\left[\n", "\\begin{array}{c}\n", " 1.2 \\\\\n", "1.1 \\\\\n", "\\end{array}\n", "\\right] \\ \\ \\ x_2 =\n", "\\left[\n", "\\begin{array}{c}\n", " -2.2 \\\\\n", "1.4 \\\\\n", "\\end{array}\n", "\\right]\\end{split}$$\n", "\n", "Para lograr esto, deberíamos resolver el siguiente [sistema de ecuaciones](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales) y verificar si la única solución es aquella en que los escalares sean ceros.\n", "\n", "$$\\begin{split}\\alpha_1\n", "\\left[\n", "\\begin{array}{c}\n", " 1.2 \\\\\n", "1.1 \\\\\n", "\\end{array}\n", "\\right] + \\alpha_2\n", "\\left[\n", "\\begin{array}{c}\n", " -2.2 \\\\\n", "1.4 \\\\\n", "\\end{array}\n", "\\right]\\end{split} = 0\n", "$$\n", "\n", "Para resolver este [sistema de ecuaciones](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales), podemos recurrir a la ayuda de [Python](http://python.org/)." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0., 0.])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Resolviendo el sistema de ecuaciones.\n", "A = np.array([[1.2, -2.2],\n", " [1.1, 1.4]])\n", "\n", "b = np.array([0., 0.])\n", "\n", "x = np.linalg.solve(A, b)\n", "x" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# \n", "# Solución gráfica.\n", "x_vals = np.linspace(-5, 5, 50) # crea 50 valores entre 0 y 5\n", "\n", "ax = move_spines()\n", "ax.set_xlim(-5, 5)\n", "ax.set_ylim(-5, 5)\n", "ax.grid()\n", "\n", "ax.plot(x_vals, (1.2 * x_vals) / -2.2) # grafica 1.2x_1 - 2.2x_2 = 0\n", "a = ax.plot(x_vals, (1.1 * x_vals) / 1.4) # grafica 1.1x + 1.4x_2 = 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como podemos ver, tanto por la solución numérica como por la solución gráfica, estos vectores son *[linealmente independientes](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal)*, ya que la única solución a la ecuación $\\alpha_1 x_1 + \\alpha_2 x_2 + \\dots + \\alpha_n x_n = 0$, es aquella en que los escalares son cero.\n", "\n", "Determinemos ahora si por ejemplo, los siguientes [vectores](http://es.wikipedia.org/wiki/Vector) en $\\mathbb{R}^4$ son *[linealmente independientes](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal)*: $\\{(3, 2, 2, 3), (3, 2, 1, 2), (3, 2, 0, 1)\\}$. Aquí, ahora deberíamos resolver la siguiente ecuación:\n", "\n", "$$\\alpha_1 (3, 2, 2, 3) +\\alpha_2 (3, 2, 1, 2) + \\alpha_3 (3, 2, 0, 1) = (0, 0, 0, 0)$$\n", "\n", "Para resolver este sistema de ecuaciones que no es cuadrado (tiene 4 ecuaciones y solo 3 incógnitas); podemos utilizar [SymPy](http://www.sympy.org/es/)." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}3 & 3 & 3 & 0\\\\2 & 2 & 2 & 0\\\\2 & 1 & 0 & 0\\\\3 & 2 & 1 & 0\\end{matrix}\\right]$$" ], "text/plain": [ "⎡3 3 3 0⎤\n", "⎢ ⎥\n", "⎢2 2 2 0⎥\n", "⎢ ⎥\n", "⎢2 1 0 0⎥\n", "⎢ ⎥\n", "⎣3 2 1 0⎦" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sympy para resolver el sistema de ecuaciones lineales\n", "a1, a2, a3 = sympy.symbols('a1, a2, a3')\n", "A = sympy.Matrix(( (3, 3, 3, 0), (2, 2, 2, 0), (2, 1, 0, 0), (3, 2, 1, 0) ))\n", "A" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left \\{ a_{1} : a_{3}, \\quad a_{2} : - 2 a_{3}\\right \\}$$" ], "text/plain": [ "{a₁: a₃, a₂: -2⋅a₃}" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.solve_linear_system(A, a1, a2, a3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como vemos, esta solución es *no trivial*, ya que por ejemplo existe la solución $\\alpha_1 = 1, \\ \\alpha_2 = -2 , \\ \\alpha_3 = 1$ en la que los escalares no son ceros. Por lo tanto este sistema es *[linealmente dependiente](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal)*.\n", "\n", "Por último, podríamos considerar si los siguientes [polinomios](https://es.wikipedia.org/wiki/Polinomio) son *[linealmente independientes](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal)*: $1 -2x -x^2$, $1 + x$, $1 + x + 2x^2$. En este caso, deberíamos resolver la siguiente ecuación:\n", "\n", "$$\\alpha_1 (1 − 2x − x^2) + \\alpha_2 (1 + x) + \\alpha_3 (1 + x + 2x^2) = 0$$\n", "\n", "y esta ecuación es equivalente a la siguiente:\n", "\n", "$$(\\alpha_1 + \\alpha_2 + \\alpha_3 ) + (−2 \\alpha_1 + \\alpha_2 + \\alpha_3 )x + (−\\alpha_1 + 2 \\alpha_2 )x^2 = 0$$\n", "\n", "Por lo tanto, podemos armar el siguiente [sistema de ecuaciones](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales):\n", "\n", "$$\\alpha_1 + \\alpha_2 + \\alpha_3 = 0, \\\\\n", "-2 \\alpha_1 + \\alpha_2 + \\alpha_3 = 0, \\\\\n", "-\\alpha_1 + 2 \\alpha_2 = 0.\n", "$$\n", "\n", "El cual podemos nuevamente resolver con la ayuda de [SymPy](http://www.sympy.org/es/)." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 1 & 1 & 0\\\\-2 & 1 & 1 & 0\\\\-1 & 2 & 0 & 0\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 1 1 0⎤\n", "⎢ ⎥\n", "⎢-2 1 1 0⎥\n", "⎢ ⎥\n", "⎣-1 2 0 0⎦" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = sympy.Matrix(( (1, 1, 1, 0), (-2, 1, 1, 0), (-1, 2, 0, 0) ))\n", "A" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left \\{ a_{1} : 0, \\quad a_{2} : 0, \\quad a_{3} : 0\\right \\}$$" ], "text/plain": [ "{a₁: 0, a₂: 0, a₃: 0}" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.solve_linear_system(A, a1, a2, a3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como vemos, todos los escalares son ceros, por lo tanto estos [polinomios](https://es.wikipedia.org/wiki/Polinomio) son *[linealmente independientes](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal)*.\n", "\n", "### Espacio nulo, espacio columna y espacio fila\n", "\n", "Un termino particularmente relacionado con la [independencia lineal](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal) es el de espacio nulo o núcleo. El espacio nulo de una matriz $A$, el cual lo vamos a expresar como $N(A)$, va a consistir de todas las soluciones a la ecuación fundamental $Ax = 0$. Por supuesto, una solución inmediata a esta ecuación es el caso de $x = 0$, que ya vimos que establece la [independencia lineal](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal). Esta solución solo va a ser la única que exista para los casos de [matrices invertibles](https://es.wikipedia.org/wiki/Matriz_invertible). Pero en el caso de las matrices singulares (aquellas que no son [invertibles](https://es.wikipedia.org/wiki/Matriz_invertible), que tienen determinante igual a cero), van a existir soluciones que no son cero para la ecuación $Ax = 0$. El conjunto de todas estas soluciones, va a representar el espacio nulo.\n", "\n", "Para encontrar el espacio nulo también nos podemos ayudar de [SymPy](http://www.sympy.org/es/)." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 5 & 7\\\\0 & 0 & 9\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 5 7⎤\n", "⎢ ⎥\n", "⎣0 0 9⎦" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Espacio nulo de un matriz\n", "A = sympy.Matrix(((1, 5, 7), (0, 0, 9)))\n", "A" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left [ \\left[\\begin{matrix}-5\\\\1\\\\0\\end{matrix}\\right]\\right ]$$" ], "text/plain": [ "⎡⎡-5⎤⎤\n", "⎢⎢ ⎥⎥\n", "⎢⎢1 ⎥⎥\n", "⎢⎢ ⎥⎥\n", "⎣⎣0 ⎦⎦" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Calculando el espacio nulo\n", "x = A.nullspace()\n", "x" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left \\{ a_{1} : - 5 a_{2}, \\quad a_{3} : 0\\right \\}$$" ], "text/plain": [ "{a₁: -5⋅a₂, a₃: 0}" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Comprobando la solución\n", "A_aum = sympy.Matrix(((1, 5, 7, 0), (0, 0, 9, 0)))\n", "sympy.solve_linear_system(A_aum, a1, a2, a3)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[0],\n", " [0]])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Comprobación con numpy\n", "A = np.array([[1, 5, 7],\n", " [0, 0, 9]])\n", "x = np.array([[-5],\n", " [1], \n", " [0]])\n", "\n", "A.dot(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Otro espacio de suma importancia es el [espacio columna](https://es.wikipedia.org/wiki/Subespacios_fundamentales_de_una_matriz). El [espacio columna](https://es.wikipedia.org/wiki/Subespacios_fundamentales_de_una_matriz), $C(A)$, consiste en todas las [combinaciones lineales](https://es.wikipedia.org/wiki/Combinaci%C3%B3n_lineal) de las columnas de una matriz $A$. Estas combinaciones son los posibles vectores $Ax$. Este espacio es fundamental para resolver la ecuación $Ax = b$; ya que para resolver esta ecuación debemos expresar a $b$ como una combinación de columnas. El sistema $Ax = b$, va a tener solución solamente si $b$ esta en el espacio columna de $A$. Como las matrices tienen la forma $m \\times n$, sus columnas tienen $m$ componentes ($n$ son las filas). Por lo tanto el [espacio columna](https://es.wikipedia.org/wiki/Subespacios_fundamentales_de_una_matriz) es un *subespacio* de $\\mathbb{R}^m$ y no $\\mathbb{R}^n$.\n", "\n", "Por último, el otro espacio que conforma los [espacios fundamentales](https://es.wikipedia.org/wiki/Subespacios_fundamentales_de_una_matriz) de una matriz, es el [espacio fila](https://es.wikipedia.org/wiki/Subespacios_fundamentales_de_una_matriz), el cual esta constituido por las [combinaciones lineales](https://es.wikipedia.org/wiki/Combinaci%C3%B3n_lineal) de las filas de una matriz.\n", "\n", "Para obtener estos espacios, nuevamente podemos recurrir a [SymPy](http://www.sympy.org/es/). Para poder obtener estos espacios, primero vamos a tener que obtener la [forma escalonada](https://es.wikipedia.org/wiki/Matriz_escalonada) de la matriz, la cual es la forma a la que arribamos luego del proceso de [eliminación](https://es.wikipedia.org/wiki/Eliminaci%C3%B3n_de_Gauss-Jordan)." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left ( \\left[\\begin{matrix}1 & 0 & 0 & 0\\\\0 & 1 & 0 & 3\\\\0 & 0 & 1 & -2\\end{matrix}\\right], \\quad \\left [ 0, \\quad 1, \\quad 2\\right ]\\right )$$" ], "text/plain": [ "⎛⎡1 0 0 0 ⎤, [0, 1, 2]⎞\n", "⎜⎢ ⎥ ⎟\n", "⎜⎢0 1 0 3 ⎥ ⎟\n", "⎜⎢ ⎥ ⎟\n", "⎝⎣0 0 1 -2⎦ ⎠" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# A.rref() forma escalonada.\n", "A = sympy.Matrix( [[2,-3,-8, 7],\n", " [-2,-1,2,-7],\n", " [1 ,0,-3, 6]])\n", "\n", "A.rref() # [0, 1, 2] es la ubicación de las pivot." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left [ \\left[\\begin{matrix}2\\\\-2\\\\1\\end{matrix}\\right], \\quad \\left[\\begin{matrix}-3\\\\-1\\\\0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}-8\\\\2\\\\-3\\end{matrix}\\right]\\right ]$$" ], "text/plain": [ "⎡⎡2 ⎤, ⎡-3⎤, ⎡-8⎤⎤\n", "⎢⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎥\n", "⎢⎢-2⎥ ⎢-1⎥ ⎢2 ⎥⎥\n", "⎢⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎥\n", "⎣⎣1 ⎦ ⎣0 ⎦ ⎣-3⎦⎦" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Espacio columna\n", "[ A[:,c] for c in A.rref()[1] ]" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left [ \\left[\\begin{matrix}1 & 0 & 0 & 0\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0 & 1 & 0 & 3\\end{matrix}\\right], \\quad \\left[\\begin{matrix}0 & 0 & 1 & -2\\end{matrix}\\right]\\right ]$$" ], "text/plain": [ "[[1 0 0 0], [0 1 0 3], [0 0 1 -2]]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Espacio fila\n", "[ A.rref()[0][r,:] for r in A.rref()[1] ]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Rango\n", "\n", "Otro concepto que también esta ligado a la [independencia lineal](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal) es el de rango. Los números de columnas $m$ y filas $n$ pueden darnos el tamaño de una matriz, pero esto no necesariamente representa el verdadero tamaño del [sistema lineal](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales), ya que por ejemplo si existen dos filas iguales en una matriz $A$, la segunda fila desaparecía en el proceso de [eliminación](https://es.wikipedia.org/wiki/Eliminaci%C3%B3n_de_Gauss-Jordan). El verdadero tamaño de $A$ va a estar dado por su rango. El rango de una matriz es el número máximo de columnas (filas respectivamente) que son [linealmente independientes](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal). Por ejemplo si tenemos la siguiente matriz de 3 x 4:\n", "\n", "$$A = \\begin{bmatrix}1 & 1 & 2 & 4\\\\1 & 2 & 2 & 5\n", "\\\\ 1 & 3 & 2 & 6\\end{bmatrix}$$\n", "\n", "Podemos ver que la tercer columna $(2, 2, 2)$ es un múltiplo de la primera y que la cuarta columna $(4, 5, 6)$ es la suma de las primeras 3 columnas. Por tanto el rango de $A$ va a ser igual a 2; ya que la tercer y cuarta columna pueden ser eliminadas.\n", "\n", "Obviamente, el rango también lo podemos calcular con la ayuda de [Python](http://python.org/)." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 1 & 2 & 4\\\\1 & 2 & 2 & 5\\\\1 & 3 & 2 & 6\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 1 2 4⎤\n", "⎢ ⎥\n", "⎢1 2 2 5⎥\n", "⎢ ⎥\n", "⎣1 3 2 6⎦" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Calculando el rango con SymPy\n", "A = sympy.Matrix([[1, 1, 2, 4],\n", " [1, 2, 2, 5],\n", " [1, 3, 2, 6]])\n", "A" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$2$$" ], "text/plain": [ "2" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rango con SymPy\n", "A.rank()" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rango con numpy\n", "A = np.array([[1, 1, 2, 4],\n", " [1, 2, 2, 5],\n", " [1, 3, 2, 6]])\n", "np.linalg.matrix_rank(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una útil aplicación de calcular el rango de una matriz es la de determinar el número de soluciones al [sistema de ecuaciones lineales](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales), de acuerdo al enunciado del [Teorema de Rouché–Frobenius](https://es.wikipedia.org/wiki/Teorema_de_Rouch%C3%A9%E2%80%93Frobenius). El sistema tiene por lo menos una solución si el rango de la matriz de coeficientes equivale al rango de la [matriz aumentada](https://es.wikipedia.org/wiki/Matriz_aumentada). En ese caso, ésta tiene exactamente una solución si el rango equivale al número de incógnitas.\n", "\n", "## La norma y la Ortogonalidad\n", "\n", "Si quisiéramos saber cual es el *largo* del un [vector](http://es.wikipedia.org/wiki/Vector), lo único que necesitamos es el famoso [teorema de Pitágoras](https://es.wikipedia.org/wiki/Teorema_de_Pit%C3%A1goras). En el plano $\\mathbb{R}^2$, el *largo* de un [vector](http://es.wikipedia.org/wiki/Vector) $v=\\begin{bmatrix}a \\\\ b \\end{bmatrix}$ va a ser igual a la distancia desde el origen $(0, 0)$ hasta el punto $(a, b)$. Esta distancia puede ser fácilmente calculada gracias al [teorema de Pitágoras](https://es.wikipedia.org/wiki/Teorema_de_Pit%C3%A1goras) y va ser igual a $\\sqrt{a^2 + b^2}$, como se puede ver en la siguiente figura:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAgGg32PeVFvRkYGHnmkDD09p7Bq1dN9Q9nv6zfocZth9QzxOBQKoba2FkD4+VhWVvaE1roKg9Fa\nx/WnqalJSya5P9t7O3/+vJ4zZ46urKyM+Pnw09p7zc3Netq0edpx5ukzZ84k7Pvavn7RlFSWeF1C\nUgFwdJT5yoyZrKK1RklJCW644QZUVlZGPMeEjJnxBQ0iasbMwUxW2b17N77yla9g6tSpUCr8/K6o\nqMDXvva1vnO8HswcyhRF8l78659zSSS5P5t7+/KXv4yenh7s3bsXra2taG1tvWIoey0VQ9nm9YuF\n9P64VwZRCvFKmRKFUQaJ40WUwaFM14D3MRMlG4dyYnGvDGbMriT3J7m3VPNiKEtfP+6VwStmorjx\nSpmShRkziZOKjJlDOXm4VwavmImuGYcyJRszZheS+5PcW7KZMJTFr1+b1wUkFzNmogQyYSj7QUle\nidcleI4ZM4mTjIyZQ5kSiBkz0VBxKFOqMWN2Ibk/yb0lmolDWfr6Se+PGTPREJg4lMkfmDGTOInI\nmDmUKYmYMRNdKw5lb3GvDGbMriT3J7m3obJhKEtfP+6VwStmoj42DGXyB2bMJE48GTOHsjm4Vwav\nmIk4lMk4zJhdSO5Pcm/XysahLH79uFcGr5jJv2wcyn7AvTKYMZNAsWTMHMrkIWbMRFfjUCbTMWN2\nIbk/yb1FI2EoS18/6f0xYybqR8JQJn9gxkziRMqYOZTJIMyYiTiU7cK9Mpgxu5Lcn+TeriZxKEtf\nP+6VMYTBvHfv3ni/1AqS+7O9t4aGBtxyyy24+eab8eKLL7qeJ3EoA/avX1THvC4g6fKinRD3YD59\n+nS8X2oFyf3Z3NulS5fw2GOPoaGhAQcPHsTWrVtx6NChAedJHcqA3esXk8+8LiDpvhDtBGbMZJX3\n3nsPN910E4LBIAKBABYvXozt27cPOE/qUCZ/iHswt7e3J7AM80juz+bejh49inHjxvUdZ2Vl4ejR\no33HLS0tAP5e9FC2ef1iIvwHAgDBaCfEfbucUoq3y5Gh/gbAp14XQeRKaz3oLXPpQ/jG8X4pUdz2\n7NmDtWvXoqGhAQBQUVGBtLQ0rF69uu+cRPzOP6Ik4n3MJMv06dPx0Ucfob29HefPn8dPf/pT3Hvv\nvV6XRZRQvI/ZheT+bO4tPT0dGzduxF133YUpU6bgG9/4BrKzs70uK6VsXr9YSO8vlvuY444yiLwy\n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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# \n", "# Calculando largo de un vector\n", "# forma un triángulo rectángulo\n", "\n", "ax = move_spines()\n", "ax.set_xlim(-6, 6)\n", "ax.set_ylim(-6, 6)\n", "ax.grid()\n", "v = np.array([4, 6])\n", "\n", "vect_fig(v, \"blue\")\n", "\n", "a = ax.vlines(x=v[0], ymin=0, ymax = 6, linestyle='--', color='g')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En esta definición podemos observar que $a^2 + b^2 = v \\cdot v$, por lo que ya estamos en condiciones de poder definir lo que en [Álgebra lineal](http://relopezbriega.github.io/tag/algebra.html) se conoce como [norma](https://es.wikipedia.org/wiki/Norma_vectorial).\n", "\n", "El *largo* o [norma](https://es.wikipedia.org/wiki/Norma_vectorial) de un [vector](http://es.wikipedia.org/wiki/Vector) $v = \\begin{bmatrix} v_1 \\\\ v_2 \\\\ \\vdots \\\\ v_n \\end{bmatrix}$, en $\\mathbb{R}^n$ va a ser igual a un número no negativo $||v||$ definido por:\n", "\n", "$$||v|| = \\sqrt{v \\cdot v} = \\sqrt{v_1^2 + v_2^2 + \\dots + v_n^2}$$\n", "\n", "Es decir que la [norma](https://es.wikipedia.org/wiki/Norma_vectorial) de un [vector](http://es.wikipedia.org/wiki/Vector) va a ser igual a la raíz cuadrada de la suma de los cuadrados de sus componentes.\n", "\n", "### Ortogonalidad\n", "\n", "El concepto de [perpendicularidad](https://es.wikipedia.org/wiki/Perpendicularidad) es fundamental en [geometría](https://es.wikipedia.org/wiki/Geometr%C3%ADa). Este concepto llevado a los [vectores](http://es.wikipedia.org/wiki/Vector) en $\\mathbb{R}^n$ se llama ortogonalidad.\n", "\n", "Dos [vectores](http://es.wikipedia.org/wiki/Vector) $v$ y $w$ en $\\mathbb{R}^n$ van a ser ortogonales el uno al otro si su [producto interior](https://es.wikipedia.org/wiki/Producto_escalar) es igual a cero. Es decir, $v \\cdot w = 0$.\n", "\n", "Geométricamente lo podemos ver de la siguiente manera:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nznAwExHpzP8Bxh1HDpz42+sAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# \n", "# Vectores ortogonales\n", "\n", "ax = move_spines()\n", "ax.set_xlim(-6, 6)\n", "ax.set_ylim(-6, 6)\n", "ax.grid()\n", "vecs = [np.array([4, 6]), np.array([-3, 2])]\n", "\n", "for v in vecs:\n", " vect_fig(v, \"blue\")\n", "\n", "a = ax.plot([-3, 4], [2, 6], linestyle='--', color='g')" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# comprobando su producto interior.\n", "v = np.array([4, 6])\n", "w = np.array([-3, 2])\n", "v.dot(w)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Un [conjunto](http://relopezbriega.github.io/blog/2015/10/11/conjuntos-con-python/) de [vectores](http://es.wikipedia.org/wiki/Vector) en $\\mathbb{R}^n$ va a ser ortogonal si todo los pares de los distintos [vectores](http://es.wikipedia.org/wiki/Vector) en el [conjunto](http://relopezbriega.github.io/blog/2015/10/11/conjuntos-con-python/) son ortogonales entre sí. O sea:\n", "\n", "$v_i \\cdot v_j = 0$ para todo $i, j = 1, 2, \\dots, k$ y donde $i \\ne j$.\n", "\n", "Por ejemplo, si tenemos el siguiente [conjunto](http://relopezbriega.github.io/blog/2015/10/11/conjuntos-con-python/) de [vectores](http://es.wikipedia.org/wiki/Vector) en $\\mathbb{R}^3$:\n", "\n", "$$v1 = \\begin{bmatrix} 2 \\\\ 1 \\\\ -1\\end{bmatrix} \\ \n", "v2 = \\begin{bmatrix} 0 \\\\ 1 \\\\ 1\\end{bmatrix} \\\n", "v3 = \\begin{bmatrix} 1 \\\\ -1 \\\\ 1\\end{bmatrix}$$\n", "\n", "En este caso, deberíamos combrobar que:\n", "\n", "$$v1 \\cdot v2 = 0 \\\\\n", "v2 \\cdot v3 = 0 \\\\\n", "v1 \\cdot v3 = 0 $$" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(0, 0, 0)" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# comprobando ortogonalidad del conjunto\n", "\n", "v1 = np.array([2, 1, -1])\n", "v2 = np.array([0, 1, 1])\n", "v3 = np.array([1, -1, 1])\n", "\n", "v1.dot(v2), v2.dot(v3), v1.dot(v3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como vemos, este conjunto es ortogonal. Una de las principales ventajas de trabajar con [conjuntos](http://relopezbriega.github.io/blog/2015/10/11/conjuntos-con-python/) de [vectores](http://es.wikipedia.org/wiki/Vector) ortogonales es que los mismos son necesariamente [linealmente independientes](https://es.wikipedia.org/wiki/Dependencia_e_independencia_lineal).\n", "\n", "El concepto de ortogonalidad es uno de los más importantes y útiles en [Álgebra lineal](http://relopezbriega.github.io/tag/algebra.html) y surge en muchas situaciones prácticas, sobre todo cuando queremos calcular distancias.\n", "\n", "## Determinante\n", "\n", "El determinante es un número especial que puede calcularse sobre las [matrices cuadradas](https://es.wikipedia.org/wiki/Matriz_cuadrada). Este número nos va a decir muchas cosas sobre la matriz. Por ejemplo, nos va decir si la matriz es [invertible](https://es.wikipedia.org/wiki/Matriz_invertible) o no. Si el determinante es igual a cero, la matriz no es [invertible](https://es.wikipedia.org/wiki/Matriz_invertible). Cuando la matriz es [invertible](https://es.wikipedia.org/wiki/Matriz_invertible), el determinante de $A^{-1}= 1/(\\det \\ A)$. El determinante también puede ser útil para calcular áreas.\n", "\n", "Para obtener el determinante de una matriz debemos calcular la suma de los productos de las diagonales de la matriz en una dirección menos la suma de los productos de las diagonales en la otra dirección. Se represente con el símbolo $|A|$ o $\\det A$.\n", "\n", "Algunas de sus propiedades que debemos tener en cuenta son:\n", "\n", "a. El determinante de la [matriz identidad](https://es.wikipedia.org/wiki/Matriz_identidad) es igual a 1. $\\det I = 1$.\n", "\n", "b. Una matriz $A$ es *singular* (no tiene [inversa](https://es.wikipedia.org/wiki/Matriz_invertible)) si su determinante es igual a cero. \n", "\n", "c. El determinante cambia de signo cuando dos columnas(o filas) son intercambiadas.\n", "\n", "d. Si dos filas de una matriz $A$ son iguales, entonces el determinante es cero.\n", "\n", "e. Si alguna fila de la matriz $A$ son todos ceros, entonces el determinante es cero.\n", "\n", "f. La [matriz transpuesta](http://es.wikipedia.org/wiki/Matriz_transpuesta) $A^T$, tiene el mismo determinante que $A$.\n", "\n", "g. El determinante de $AB$ es igual al determinante de $A$ multiplicado por el determinante de $B$. $\\det (AB) = \\det A \\cdot \\det B$.\n", "\n", "h. El determinante es una [función lineal](https://es.wikipedia.org/wiki/Funci%C3%B3n_lineal) de cada una de las filas en forma separada. Si multiplicamos solo una fila por $\\alpha$, entonces el determinante también es multiplicado por $\\alpha$.\n", "\n", "Veamos como podemos obtener el determinante con la ayuda de [Python](http://python.org/)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$2$$" ], "text/plain": [ "2" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Determinante con sympy\n", "A = sympy.Matrix( [[1, 2, 3],\n", " [2,-2, 4],\n", " [2, 2, 5]] )\n", "A.det()" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$2.0$$" ], "text/plain": [ "2.0" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Determinante con numpy\n", "A = np.array([[1, 2, 3],\n", " [2,-2, 4],\n", " [2, 2, 5]] )\n", "np.linalg.det(A)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$10.0$$" ], "text/plain": [ "10.0" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Determinante como funcion lineal de fila\n", "A[0] = A[0:1]*5\n", "np.linalg.det(A)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$-2$$" ], "text/plain": [ "-2" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# cambio de signo de determinante\n", "A = sympy.Matrix( [[2,-2, 4],\n", " [1, 2, 3],\n", " [2, 2, 5]] )\n", "A.det()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Eigenvalores y Eigenvectores\n", "\n", "Cuando estamos resolviendo [ecuaciones lineales](https://es.wikipedia.org/wiki/Sistema_de_ecuaciones_lineales) del tipo $Ax = b$, estamos trabajando con problemas *estáticos*. ¿Pero qué pasa si quisiéramos trabajar con problemas *dinámicos*?. Es en este tipo de situaciones donde los [Eigenvalores y Eigenvectores](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio) tienen su mayor importancia.\n", "\n", "Supongamos que tenemos una [matriz cuadrada](https://es.wikipedia.org/wiki/Matriz_cuadrada) $A$ de $n \\times n$. Una pregunta natural que nos podríamos hacer sobre $A$ es: ¿Existe algún [vector](http://es.wikipedia.org/wiki/Vector) $x$ distinto de cero para el cual $Ax$ es un escalar múltiplo de $x$?. Si llevamos esta pregunta al lenguaje matemático nos vamos a encontrar con la siguiente ecuación:\n", "\n", "$$Ax = \\lambda x$$\n", "\n", "Cuando esta ecuación es válida y $x$ no es cero, decimos que $\\lambda$ es el [Eigenvalor o valor propio](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio) de $A$ y $x$ es su correspondiente [Eigenvector o vector propio](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio).\n", "\n", "Muchos problemas en ciencia derivan en problemas de [Eigenvalores](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio), en los cuales la principal pregunta es: ¿Cuáles son los [Eigenvalores](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio) de una matriz dada, y cuáles son sus correspondientes [Eigenvectores](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio). Un área donde nos va a ser de mucha utilidad esta teoría, es en problemas con sistemas de [ecuaciones diferenciales lineales](https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_diferencial_lineal).\n", "\n", "### Calculando Eigenvalores \n", "\n", "Hasta aquí todo muy bien, pero dada una [matriz cuadrada](https://es.wikipedia.org/wiki/Matriz_cuadrada) $A$ de $n \\times n$, ¿cómo podemos obtener sus [Eigenvalores](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio)?. \n", "\n", "Podemos comenzar por observar que la ecuación $Ax = \\lambda x$ es equivalente a $(A - \\lambda I)x = 0$. Dado que estamos interesados en soluciones a esta ecuación que sean distintas de cero, la matriz $A - \\lambda I$ debe ser *singular*, no [invertible](https://es.wikipedia.org/wiki/Matriz_invertible), por lo tanto su determinante debe ser cero, $\\det (A - \\lambda I) = 0$. De esta forma, podemos utilizar esta ecuación para encontrar los [Eigenvalores](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio) de $A$. Particularmente, podríamos formar el [polinomio característico](https://es.wikipedia.org/wiki/Polinomio_caracter%C3%ADstico) de la matriz $A$, el cual va a tener *grado* $n$ y por lo tanto va a tener $n$ soluciones, es decir que vamos a encontrar $n$ [Eigenvalores](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio). \n", "Algo que debemos tener en cuenta es, que a pesar de que la matriz $A$ sea [real](https://es.wikipedia.org/wiki/N%C3%BAmero_real), debemos estar preparados para encontrar [Eigenvalores](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio) que sean [complejos](http://relopezbriega.github.io/blog/2015/10/12/numeros-complejos-con-python/).\n", "\n", "Para que quede más claro, veamos un ejemplo de como podemos calcular los [Eigenvalores](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio). Supongamos que tenemos la siguiente matriz:\n", "\n", "$$A = \\begin{bmatrix} 3 & 2 \\\\ 7 & -2 \\end{bmatrix}$$\n", "\n", "Su [polinomio característico](https://es.wikipedia.org/wiki/Polinomio_caracter%C3%ADstico) va a ser igual a:\n", "\n", "$$p(\\lambda) = \\det (A - \\lambda I) = \\det \\begin{bmatrix}3 - \\lambda & 2 \\\\ 7 & -2-\\lambda\\end{bmatrix} = (3 - \\lambda)(-2-\\lambda) - 14 \\\\ =\\lambda^2 - \\lambda - 20 = (\\lambda - 5) (\\lambda + 4)$$\n", "\n", "Por lo tanto los [Eigenvalores](https://es.wikipedia.org/wiki/Vector_propio_y_valor_propio) de $A$ van a ser $5$ y $-4$.\n", "\n", "Obviamente, también los podemos obtener mucho más fácilmente con la ayuda de [Python](http://python.org/)." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([ 5., -4.]), array([[ 0.70710678, -0.27472113],\n", " [ 0.70710678, 0.96152395]]))" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Eigenvalores con numpy\n", "A = np.array([[3, 2],\n", " [7, -2]])\n", "\n", "x, v = np.linalg.eig(A)\n", "\n", "# x Eigenvalor, v Eigenvector\n", "x, v" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left \\{ -4 : 1, \\quad 5 : 1\\right \\}$$" ], "text/plain": [ "{-4: 1, 5: 1}" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Eigenvalores con SymPy\n", "A = sympy.Matrix([[3, 2],\n", " [7, -2]])\n", "\n", "# Eigenvalor\n", "A.eigenvals()" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left [ \\left ( -4, \\quad 1, \\quad \\left [ \\left[\\begin{matrix}- \\frac{2}{7}\\\\1\\end{matrix}\\right]\\right ]\\right ), \\quad \\left ( 5, \\quad 1, \\quad \\left [ \\left[\\begin{matrix}1\\\\1\\end{matrix}\\right]\\right ]\\right )\\right ]$$" ], "text/plain": [ "⎡⎛-4, 1, ⎡⎡-2/7⎤⎤⎞, ⎛5, 1, ⎡⎡1⎤⎤⎞⎤\n", "⎢⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟⎥\n", "⎣⎝ ⎣⎣ 1 ⎦⎦⎠ ⎝ ⎣⎣1⎦⎦⎠⎦" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Eigenvector\n", "A.eigenvects()" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left ( \\left[\\begin{matrix}\\frac{8}{7}\\\\-4\\end{matrix}\\right], \\quad \\left[\\begin{matrix}\\frac{8}{7}\\\\-4\\end{matrix}\\right]\\right )$$" ], "text/plain": [ "⎛⎡8/7⎤, ⎡8/7⎤⎞\n", "⎜⎢ ⎥ ⎢ ⎥⎟\n", "⎝⎣-4 ⎦ ⎣-4 ⎦⎠" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# comprobando la solución Ax = λx\n", "# x eigenvector, v eigenvalue\n", "x = A.eigenvects()[0][2][0]\n", "v = A.eigenvects()[0][0]\n", "\n", "# Ax == vx\n", "A*x, v*x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Con esto termino con este recorrido por los principales conceptos del [Álgebra lineal](http://relopezbriega.github.io/tag/algebra.html), muchos de los cuales veremos en próximos artículos que tienen muchas aplicaciones interesantes. Espero que les sea de utilidad y les sirva de referencia.\n", "\n", "Saludos!\n", "\n", "*Este post fue escrito utilizando Jupyter notebook. Pueden descargar este [notebook](https://github.com/relopezbriega/relopezbriega.github.io/blob/master/downloads/pyLinearAlgrebra.ipynb) o ver su version estática en [nbviewer](http://nbviewer.ipython.org/github/relopezbriega/relopezbriega.github.io/blob/master/downloads/pyLinearAlgrebra.ipynb).*" ] } ], "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.4.3+" } }, "nbformat": 4, "nbformat_minor": 0 }