{ "cells": [ { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "$\n", "\\renewcommand{\\R}[1][{}]{{\\mathbb{R}}^{#1}}\n", "\\renewcommand{\\Z}[1][{}]{{\\mathbb{Z}}^{#1}}\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\\renewcommand{\\getitemR}[1]{\\getItem{#1}}\n", "\\renewcommand{\\getItem}{\\pmb{\\mid}}\n", "\\renewcommand{\\elemR}[2]{{#1}^{\\phantom{\\T}}_{\\getitemR{#2}}} \n", "\\renewcommand{\\elemRP}[2]{{\\big(#1\\big)}^{\\phantom{\\T}}_{\\getitemR{#2}}} \n", "\\renewcommand{\\elemRPE}[2]{\\big({#1}^{\\phantom{\\T}}_{\\getitemR{#2}}\\big)}\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\\renewcommand{\\Vect}[2][{}]{{\\boldsymbol{#2}}_{#1}}\n", "\\renewcommand{\\eleVR}[2] {\\elemR {\\Vect{#1}}{#2}}\t % con subindices\n", "\\renewcommand{\\eleVRP}[2] {\\elemRP {\\Vect{#1}}{#2}} % con subindices y paréntesis interior\n", "\\renewcommand{\\eleVRPE}[2]{\\elemRPE{\\Vect{#1}}{#2}} % con subindices y paréntesis exterior\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\\renewcommand{\\VectC}[2][{}] {\\elemR {\\Mat{#2}}{#1}} % con subindices\n", "\\renewcommand{\\VectCP}[2][{}] {\\elemRP {\\Mat{#2}}{#1}} % con subindices y paréntesis\n", "\\renewcommand{\\VectCPE}[2][{}]{\\elemRPE{\\Mat{#2}}{#1}} % con subindices y paréntesis exterior\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\\renewcommand{\\mat}[1]{\\mathbf{#1}}\n", "\\renewcommand{\\Mat} [2][{}]{{\\mat{#2}}_{#1}} \n", "\\renewcommand{\\T}{\\intercal}\n", "\\renewcommand{\\MatT}[2][{}]{{\\mat{#2}}^{\\T}_{#1}}\n", "\\renewcommand{\\VectC}[2][{}] {\\elemR {\\Mat{#2}}{#1}} % con subindices\n", "\\renewcommand{\\VectCP}[2][{}] {\\elemRP {\\Mat{#2}}{#1}} % con subindices y paréntesis\n", "\\renewcommand{\\VectCPE}[2][{}] {\\elemRPE {\\Mat{#2}}{#1}} % con subindices y paréntesis exterior\n", "\\renewcommand{\\VectCC}[2][{}] {\\elemRR {\\Mat{#2}}{#1}} % con ()\n", "\\renewcommand{\\VectCCC}[2][{}] {\\elemRRR{\\Mat{#2}}{#1}} % con texto \"col\"\n", "%SELECCIÓNA de FILAS y COlUMNAS DE UNA MATRIZ TRANSPUESTA PARA GENERAR UN VECTOR DE Rn\n", "\\renewcommand{\\VectTC}[2][{}] {\\elemR{\\MatT{#2}\\!}{#1}} % con subindices\n", "\\renewcommand{\\VectTCC}[2][{}] {\\elemRR{ \\MatT{#2}}{#1}} % con ()\n", "\\renewcommand{\\VectTCCC}[2][{}] {\\elemRRR{\\MatT{#2}}{#1}} % con texto \"col\"\n", "$" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "${\\huge\\text{Jupyter notebook de la Lección 4}}$" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "**Índice de contenidos de este notebook** (Requiere ejecutar todo el Notebook para que aparezca el índice)\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: nacal in /home/marcos/.local/lib/python3.9/site-packages (0.1.13)\n", "Requirement already satisfied: sympy>=1.1.0 in /usr/lib/python3/dist-packages (from nacal) (1.7.1)\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "pip install nacal" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "from nacal import *" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Transformaciones elementales\n", "\n", "Consideraremos dos tipos de transformaciones elementales que\n", "denotaremos con tuplas. Para indicar que una tupla en particular es\n", "una abreviatura de una transformación elemental, la escribiremos como\n", "argumento de la clase `T`.\n", "\n", "__Tipo I:__ Las transformaciones elementales del primer tipo suman $a$\n", "veces el vector $i$-ésimo al vector $j$-ésimo:\n", "\n", "$$\n", "\\underset{\\left[\\left(a\\right)\\mathbf{i}+\\mathbf{j}\n", "\\right]}{\\mathbf{\\tau}}\n", "$$\n", "\n", "denotaremos estas transformaciones con una tupla de tres componentes:\n", "`T( (a, i, j) )`.\n", "\n", "Por ejemplo, la abreviatura de la transformación elemental que suma 3\n", "veces el vector segundo al vector primero se escribe" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\underset{\\left[\\left(3\\right)\\mathbf{2}+\\mathbf{1} \\right]}{\\pmb{\\tau}}$
" ], "text/plain": [ "T((3, 2, 1))" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T( (3, 2, 1) )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Fíjese que el índice del vector modificado aparece en último lugar;\n", "que a dicho vector se le suma un múltiplo de otro vector, cuyo índice\n", "apare en segundo lugar; y que el coeficiente por el que se multiplica\n", "aparece en primer lugar." ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "__Tipo II:__ Las Transformaciones Elementales de segundo tipo\n", "multiplican el vector $j$-ésimo por un número $a$.\n", "\n", "$$\n", "\\underset{\\left[\\left(a\\right)\\mathbf{j}\\right]}{\\mathbf{\\tau}}\n", "$$\n", "\n", "denotaremos estas transformaciones con una tupla de dos componentes:\n", "`T( (a, j) )`.\n", "\n", "Por ejemplo, la transformación elemental que multiplica por 5 al\n", "segundo vector se escribe" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\underset{\\left[\\left(5\\right)\\mathbf{2}\\right]}{\\pmb{\\tau}}$
" ], "text/plain": [ "T((5, 2))" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T( (5, 2) )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Nuevamente, el índice del vector modificado aparece en último lugar, y\n", "el coeficiente por el que se multiplica aparece en primer lugar." ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "## Sucesión de transformaciones elementales\n", "\n", "Es posible combinar una sucesión de transformaciones elementales; por\n", "ejemplo una combinación de las dos transformaciones anteriores\n", "$$\n", "\\underset{\\begin{subarray}{c} \\left[\\left(a\\right)\\mathbf\n", "{j}\\right]\\\\\\left[\\left(b\\right)\\mathbf{p}+\\mathbf{q} \\right]\\end\n", "{subarray}}{\\mathbf{\\tau}}\n", "$$\n", "en este caso, el argumento de la clase `T` debe ser ___una lista de\n", "abreviaturas___.\n", "\n", "Por ejemplo, podemos combinar las dos transformaciones de más arriba" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\underset{\\begin{subarray}{c} \\left[\\left(3\\right)\\mathbf{2}+\\mathbf{1} \\right]\\\\\\left[\\left(5\\right)\\mathbf{2}\\right]\\end{subarray}}{\\pmb{\\tau}}$
" ], "text/plain": [ "T([(3, 2, 1), (5, 2)])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T( [(3, 2, 1), (5, 2)] )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Transformaciones elementales de las filas o las columnas de una matriz\n", "## Transformaciones de las columnas\n", "\n", "Cuando aplicamos una transformación elemental por la derecha de una\n", "matriz, modificamos sus columnas. La actuación de una transformación\n", "elemental se indica con el símbolo `&`\n", "\n", "Por ejemplo, considere la matriz $\\Mat{A}$ " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&0&-2\\\\2&3&2\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 2]), Vector([0, 3]), Vector([-2, 2])])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A=Matrix([Vector((1,2)), Vector((0,3)), Vector((-2,2))])\n", "A" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "vamos a sumar el doble (2) de la primera columna (1) de $\\Mat{A}$ a su tercera\n", "columna (3)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&0&0\\\\2&3&6\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 2]), Vector([0, 3]), Vector([0, 6])])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A & T( (2,1,3) )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Cuando aplicamos una transformación elemental sobre una matriz,\n", "modificamos la matriz. Así que ahora la matriz $\\Mat{A}$ ha cambiado:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&0&0\\\\2&3&6\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 2]), Vector([0, 3]), Vector([0, 6])])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Si queremos aplicar transformaciones sobre una matriz y no perder la\n", "matriz original, necesitamos hacer una copia. Por ejemplo, definamos\n", "la siguiente matriz $\\Mat{A}$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&1&-2\\\\1&-2&1\\\\-2&1&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([1, -2, 1]), Vector([-2, 1, 1])])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = Vector((1, 1, -2)); y = Vector((1, -2, 1)); z = Vector((-2, 1, 1))\n", "A = Matrix([x,y,z])\n", "A" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "y hagamos una copia (con `Matrix(A)`) a la que aplicaremos un par de\n", "transformaciones" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&5&0\\\\1&-10&3\\\\-2&5&-3\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([5, -10, 5]), Vector([0, 3, -3])])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B = Matrix(A)\n", "B & T( (2,1,3) ) & T( (5, 2) )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Ahora $\\,\\Mat{B}\\,$ ha cambiado, pero $\\,\\Mat{A}\\,$ se mantiene." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&1&-2\\\\1&-2&1\\\\-2&1&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([1, -2, 1]), Vector([-2, 1, 1])])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "## Composición de transformaciones elementales\n", "\n", "Si aplicamos una transformación elemental a otra transformación\n", "elemental, logramos una transformación que es la composición de\n", "ambas. Por ejemplo" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\underset{\\begin{subarray}{c} \\left[\\left(2\\right)\\mathbf{1}+\\mathbf{3} \\right]\\\\\\left[\\left(5\\right)\\mathbf{2}\\right]\\end{subarray}}{\\pmb{\\tau}}$
" ], "text/plain": [ "T([(2, 1, 3), (5, 2)])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z = T( (2,1,3) ) & T( (5, 2) )\n", "z" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "si aplicamos `z` a una copia de `A`, obtendremos el mismo resultado\n", "que obtuvimos más arriba" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&5&0\\\\1&-10&3\\\\-2&5&-3\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([5, -10, 5]), Vector([0, 3, -3])])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C = Matrix(A)\n", "C & z" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Los objetos de la clase `T` poseen un atributo `t`, donde se almacena\n", "el listado de abreviaturas. Por ejemplo, en el atributo `t` de de `z`\n", "aparece el listado con las abreviaturas de las transformaciones\n", "aplicadas más arriba:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "[(2, 1, 3), (5, 2)]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z.t" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "### Intercambios\n", "\n", "Hay múltiples combinaciones de transformaciones elementales que logran\n", "intercambiar de posición dos vectores. La siguiente es un ejemplo de\n", "secuencia que intercambia los vectores primero y tercero:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}-2&1&1\\\\1&-2&1\\\\1&1&-2\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([-2, 1, 1]), Vector([1, -2, 1]), Vector([1, 1, -2])])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "intercambio = T( [ (-1,3), (-1,3,1), (1,1,3), (-1,3,1) ] )\n", "Matrix(A) & intercambio" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Afortunadamente hay una forma más sencilla de realizar un intercambio.\n", "El conjunto compuesto por los dos índices de los vectores que queremos\n", "intercambiar es una abreviatura del intercambio. Por ejemplo `T( {s, t} )`\n", "intercambia los vectores $s$-ésimo y $t$-ésimo:\n", "\n", "$$\n", "\\underset{\\left[\\mathbf{s}\\rightleftharpoons\\mathbf{t}\\right]}{\\mathbf{\\tau}}\n", "$$\n", "\n", "Así, para intercambiar las columnas primera y tercera de una copia de\n", "$\\Mat{A}$ basta con escribir" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}-2&1&1\\\\1&-2&1\\\\1&1&-2\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([-2, 1, 1]), Vector([1, -2, 1]), Vector([1, 1, -2])])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Matrix(A) & T( {1,3} )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Si el conjunto solo contiene un índice, el intercambio no hace nada" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&1&-2\\\\1&-2&1\\\\-2&1&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([1, -2, 1]), Vector([-2, 1, 1])])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Matrix(A) & T( {1,1} ) " ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "## Transformaciones de las filas\n", "\n", "Cuando las transformaciones elementales actuan por la izquierda de la\n", "matriz realizan operaciones con las filas.\n", "\n", "Por ejemplo, podemos intercabiar las dos primeras filas `C` del\n", "siguiente modo" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&-10&3\\\\1&5&0\\\\-2&5&-3\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([-10, 5, 5]), Vector([3, 0, -3])])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T( {1,2} ) & C" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Tenga en cuenta que cuando actuan varias transformaciones por la\n", "izquierda, las primeras en actuar son las más próximas a la matriz;\n", "así, tanto" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}2&-4&2\\\\1&1&-2\\\\-2&1&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([2, 1, -2]), Vector([-4, 1, 1]), Vector([2, -2, 1])])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T({1,2}) & T((2,2)) & Matrix(A)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "como" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}2&-4&2\\\\1&1&-2\\\\-2&1&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([2, 1, -2]), Vector([-4, 1, 1]), Vector([2, -2, 1])])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T([ {1,2}, (2,2) ]) & Matrix(A)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "es equivalente a (y fíjese en los paréntesis)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}2&-4&2\\\\1&1&-2\\\\-2&1&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([2, 1, -2]), Vector([-4, 1, 1]), Vector([2, -2, 1])])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T({1,2}) & ( T((2,2)) & Matrix(A) )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "es decir, primero se multipica por 2 la segunda fila (operación dentro\n", "del paréntesis) y luego se intercambian las dos primeras filas." ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "## Transformaciones de las filas y de las columnas\n", "\n", "Si tenemos transformaciones actuando a izquierda y derecha,\n", "operamos tanto con las filas como con las columnas." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}20&14&-4\\\\10&-5&1\\\\-20&-2&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([20, 10, -20]), Vector([14, -5, -2]), Vector([-4, 1, 1])])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T( {1,2} ) & T( (2,2) ) & Matrix(A) & T( [(-3,2,3), (10,1), {2,3}] )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Transposición de una secuencia de transformaciones elementales\n", "\n", "Diremos que transponemos una secuencia de transformaciones al invertir el orden de las transformaciones en la secuencia. Al igual que con las matrices, transponemos con el operador `~` actuando por la izquierda de `T`. " ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\underset{\\begin{subarray}{c} \\left[\\left(-2\\right)\\mathbf{1}+\\mathbf{2} \\right]\\\\\\left[\\left(-3\\right)\\mathbf{1}+\\mathbf{3} \\right]\\\\\\left[\\left(-4\\right)\\mathbf{1}+\\mathbf{4} \\right]\\\\\\left[\\left(-5\\right)\\mathbf{1}+\\mathbf{5} \\right]\\\\\\left[\\left(-2\\right)\\mathbf{2}+\\mathbf{3} \\right]\\\\\\left[\\left(4\\right)\\mathbf{2}+\\mathbf{4} \\right]\\\\\\left[\\left(5\\right)\\mathbf{2}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}$
" ], "text/plain": [ "T([(-2, 1, 2), (-3, 1, 3), (-4, 1, 4), (-5, 1, 5), (-2, 2, 3), (4, 2, 4), (5, 2, 5)])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h=T([ (-2, 1, 2), (-3, 1, 3), (-4, 1, 4), (-5, 1, 5), (-2, 2, 3), (4, 2, 4), (5, 2, 5) ])\n", "h" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\underset{\\begin{subarray}{c} \\left[\\left(5\\right)\\mathbf{2}+\\mathbf{5} \\right]\\\\\\left[\\left(4\\right)\\mathbf{2}+\\mathbf{4} \\right]\\\\\\left[\\left(-2\\right)\\mathbf{2}+\\mathbf{3} \\right]\\\\\\left[\\left(-5\\right)\\mathbf{1}+\\mathbf{5} \\right]\\\\\\left[\\left(-4\\right)\\mathbf{1}+\\mathbf{4} \\right]\\\\\\left[\\left(-3\\right)\\mathbf{1}+\\mathbf{3} \\right]\\\\\\left[\\left(-2\\right)\\mathbf{1}+\\mathbf{2} \\right]\\end{subarray}}{\\pmb{\\tau}}$
" ], "text/plain": [ "T([(5, 2, 5), (4, 2, 4), (-2, 2, 3), (-5, 1, 5), (-4, 1, 4), (-3, 1, 3), (-2, 1, 2)])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "~h" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Considere la matriz obtenida tras aplicar una suceción de transformaciones sobre las _columnas de la matriz identidad_ de orden $n$ obtenemos una matriz. Pues bien, la transpuesta de dicha sucesión aplicada sobre las _filas de la matriz identidad_ de orden $n$ será la transpuesta de la anterior matriz." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccccc}1&-2&1&-12&-15\\\\0&1&-2&4&5\\\\0&0&1&0&0\\\\0&0&0&1&0\\\\0&0&0&0&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0, 0, 0]), Vector([-2, 1, 0, 0, 0]), Vector([1, -2, 1, 0, 0]), Vector([-12, 4, 0, 1, 0]), Vector([-15, 5, 0, 0, 1])])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "I(5) & h" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\-2&1&0&0&0\\\\1&-2&1&0&0\\\\-12&4&0&1&0\\\\-15&5&0&0&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, -2, 1, -12, -15]), Vector([0, 1, -2, 4, 5]), Vector([0, 0, 1, 0, 0]), Vector([0, 0, 0, 1, 0]), Vector([0, 0, 0, 0, 1])])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(~h) & I(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fíjese que aplicar una suceción de transformaciones es como _multiplicar_ por una matriz, de manera que si aplicamos sobre las columnas de " ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&5&0\\\\1&-10&3\\\\-2&5&-3\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([5, -10, 5]), Vector([0, 3, -3])])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "usa sucesión de transformaciones" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&3&-9\\\\1&-12&24\\\\-2&9&-15\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([3, -12, 9]), Vector([-9, 24, -15])])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Matrix(B) & h" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "la transpuesta de dicha matriz resultante" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&1&-2\\\\3&-12&9\\\\-9&24&-15\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 3, -9]), Vector([1, -12, 24]), Vector([-2, 9, -15])])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "~(Matrix(B)&h)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "se puede calcular con una operación que recuerda a la transpuesta del producto... pues es la transpuesta de la transformación actuando sobre la transpuesta de `B` " ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&1&-2\\\\3&-12&9\\\\-9&24&-15\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 3, -9]), Vector([1, -12, 24]), Vector([-2, 9, -15])])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "~h & ~Matrix(B)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Matrices elementales, matrices intercambio y matrices permutación\n", "\n", "La aplicación de una _única_ transformación elemental sobre la matriz\n", "identidad da como resultado una matriz elemental.\n", "\n", "__Matrices elementales Tipo I__: Veamos como la aplicación de la\n", "transformación `T(-5,1,3)` sobre las _columnas_ de la matriz identidad\n", "de orden 4 nos da una matriz parecida a la identidad, salvo porque\n", "aparece un -5 en la posición (1,3)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{cccc}1&0&-5&0\\\\0&1&0&0\\\\0&0&1&0\\\\0&0&0&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0, 0]), Vector([0, 1, 0, 0]), Vector([-5, 0, 1, 0]), Vector([0, 0, 0, 1])])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "I(4) & T( (-5,1,3) )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Pero la misma transformación elemental aplicada sobre las _filas_ de\n", "la matriz identidad nos da otra matriz elemental distinta: la versión\n", "transpuesta de la matriz elemental de más arriba:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{cccc}1&0&0&0\\\\0&1&0&0\\\\-5&0&1&0\\\\0&0&0&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, -5, 0]), Vector([0, 1, 0, 0]), Vector([0, 0, 1, 0]), Vector([0, 0, 0, 1])])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T( (-5,1,3) ) & I(4)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Por tanto, las transformaciones elementales de __Tipo I__ están\n", "asociadas a matrices elementales distintas en función de si actuan\n", "sobre las columnas (por la derecha) o sobre las filas (por la\n", "izquierda). Fíjese que una matriz elemental es la transpuesta de la otra." ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "__Matrices elementales Tipo II__: Y ahora veamos como la aplicación de\n", "la transformación `T(100,2)` sobre las _columnas_ de la matriz\n", "identidad de orden 3 nos da una matriz parecida a la identidad, salvo\n", "porque aparece un 100 en la segunda posición de la diagonal, i.e.,\n", "posición (2,2)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&0&0\\\\0&100&0\\\\0&0&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0]), Vector([0, 100, 0]), Vector([0, 0, 1])])" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "I(3) & T( (100,2) )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Las matrices elementales __Tipo II__ son simétricas; así que obtenemos identica matriz elemental cuando actuamos por la izquierda de la matriz identidad." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&0&0\\\\0&100&0\\\\0&0&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0]), Vector([0, 100, 0]), Vector([0, 0, 1])])" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T( (100,2) ) & I(3)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Tenga en cuenta que la aplicación de __una sucesión de\n", "transformaciones elementales _NO_ suele ser una matriz elemental__" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}-9&-18&2\\\\0&5&0\\\\-5&-10&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([-9, 0, -5]), Vector([-18, 5, -10]), Vector([2, 0, 1])])" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "I(3) & T( (2,1,3) ) & T( (5, 2) ) & T( (-5,3,1) ) & T ( (2,1,2) )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "__Matrices intercambio__: La aplicación de ___un único intercambio___\n", "entre las columnas (o entre las filas) de la matriz identidad da como\n", "resultado una matriz intercambio." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{cccc}1&0&0&0\\\\0&0&0&1\\\\0&0&1&0\\\\0&1&0&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0, 0]), Vector([0, 0, 0, 1]), Vector([0, 0, 1, 0]), Vector([0, 1, 0, 0])])" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "I(4) & T( {2,4} )" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{cccc}1&0&0&0\\\\0&0&0&1\\\\0&0&1&0\\\\0&1&0&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0, 0]), Vector([0, 0, 0, 1]), Vector([0, 0, 1, 0]), Vector([0, 1, 0, 0])])" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T( {2,4} ) & I(4)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "__Matrices permutación__: La aplicación de una ___sucesión de\n", "intercambios___ entre las columnas (y/o entre las filas) de la matriz\n", "identidad da como resultado una reordenación de las columnas de la\n", "matriz identidad que denominamos matriz permutación." ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{cccc}0&0&1&0\\\\0&1&0&0\\\\0&0&0&1\\\\1&0&0&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([0, 0, 0, 1]), Vector([0, 1, 0, 0]), Vector([1, 0, 0, 0]), Vector([0, 0, 1, 0])])" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T( [ {1,2}, {3,4} ] ) & I(4) & T({3,1}) & T({2,3})" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "## Producto de una matriz por una matriz elemental\n", "\n", "Compruebe con ejemplos que aplicar una transformación elemental sobre\n", "las columnas de una matriz es equivalente a multiplicar dicha matriz\n", "por la correspondiente matriz elemental; es decir, que $$\n", "{\\Mat{A}}_{\\mathbf{\\tau}}=\\Mat{A}\\big({\\Mat{I}}_{\\mathbf{\\tau}}\\big)\n", "$$" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&1&0\\\\1&-2&3\\\\-2&1&-3\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([1, -2, 1]), Vector([0, 3, -3])])" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Primero aplicamos la transformación sobre las columnas\n", "Matrix(A) & T( (2,1,3) )" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&1&0\\\\1&-2&3\\\\-2&1&-3\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([1, -2, 1]), Vector([0, 3, -3])])" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# y ahora multiplicamos por la derecha por la correspondiente matriz elemental\n", "A * ( I(A.n) & T((2,1,3)) )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Compruebe que también ocurre actuado por la izquierda para transformar\n", "las filas. Primero aplicamos la trasformación sobre las filas" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&1&-2\\\\1&-2&1\\\\0&3&-3\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, 0]), Vector([1, -2, 3]), Vector([-2, 1, -3])])" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Primero aplicamos la transformación sobre las filas\n", "T( (2,1,3) ) & Matrix(A) " ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}-3&3&0\\\\1&-2&1\\\\-2&1&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([-3, 1, -2]), Vector([3, -2, 1]), Vector([0, 1, 1])])" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# y ahora multiplicamos por la izquierda por la correspondiente matriz elemental\n", "( I(A.m) & T((2,1,3)) ) * A \n" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "## Las transformaciones son asociativas respecto al producto de matrices\n", "\n", "Compruebe con ejemplos que en general\n", "$$\n", "{\\big(\\Mat{A}\\Mat{B}\\big)}_{\\mathbf{\\tau}}=\\Mat{A}\\big({\\Mat{B}}_{\\mathbf{\\tau}}\\big)\n", "$$\n", "\n", "Recuerde emplear una copia de las matrices originales si no quiere que éstas cambien" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}81&-15&9\\\\-153&30&-9\\\\72&-15&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([81, -153, 72]), Vector([-15, 30, -15]), Vector([9, -9, 0])])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# primero el lado izquierdo de la igualdad\n", "( A * Matrix(B) ) & T((-5,2,1))\n", "# recuerde que si no queremos modificar las matrices originales, debemos actuar sobre copias de las mismas" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}81&-15&9\\\\-153&30&-9\\\\72&-15&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([81, -153, 72]), Vector([-15, 30, -15]), Vector([9, -9, 0])])" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# ahora el lado derecho de la igualdad\n", "A * ( Matrix(B) & T((-5,2,1)) )\n", "# recuerde que si no queremos modificar las matrices originales, debemos actuar sobre copias de las mismas" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Esto es cierto incluso cuando se aplica una sucesión de\n", "transformaciones elementales (tanto por la derecha como por la izquierda).\n", "\n", "Veamos un ejemplo de trasformación de las columnas:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\underset{\\begin{subarray}{c} \\left[\\left(2\\right)\\mathbf{1}+\\mathbf{3} \\right]\\\\\\left[\\left(5\\right)\\mathbf{2}\\right]\\\\\\left[\\left(-5\\right)\\mathbf{3}+\\mathbf{1} \\right]\\\\\\left[\\left(2\\right)\\mathbf{1}+\\mathbf{2} \\right]\\\\\\left[\\mathbf{2}\\rightleftharpoons\\mathbf{3}\\right]\\end{subarray}}{\\pmb{\\tau}}$
" ], "text/plain": [ "T([(2, 1, 3), (5, 2), (-5, 3, 1), (2, 1, 2), {2, 3}])" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# definimos una sucesión de transformaciones elmentales\n", "st = T([(2, 1, 3), (5, 2), (-5, 3, 1), (2, 1, 2), {2,3}])\n", "st " ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}-99&21&-273\\\\72&-15&294\\\\27&-6&-21\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([-99, 72, 27]), Vector([21, -15, -6]), Vector([-273, 294, -21])])" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "( A * Matrix(B) ) & st" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}-99&21&-273\\\\72&-15&294\\\\27&-6&-21\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([-99, 72, 27]), Vector([21, -15, -6]), Vector([-273, 294, -21])])" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A * ( Matrix(B) & st )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "y ahora un ejemplo de transformación de las filas..." ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}21&-165&54\\\\45&-225&90\\\\39&-300&99\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([21, 45, 39]), Vector([-165, -225, -300]), Vector([54, 90, 99])])" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "st & ( Matrix(A) *B ) " ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}21&-165&54\\\\45&-225&90\\\\39&-300&99\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([21, 45, 39]), Vector([-165, -225, -300]), Vector([54, 90, 99])])" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "( st & Matrix(A) ) * B" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Las transformaciones elementales son operadores lineales\n", "\n", "## Propiedad asociativa\n", "\n", "Compruebe con ejemplos que en general\n", "$$\n", "{\\big(\\lambda\\Mat{B}\\big)}_{\\mathbf{\\tau}}=\\lambda\\big({\\Mat{B}}_{\\mathbf{\\tau}}\\big)\n", "$$\n", "\n", "Recuerde emplear una copia de las matrices originales para que éstas no cambien." ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}5&0&35\\\\-70&15&-190\\\\65&-15&155\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([5, -70, 65]), Vector([0, 15, -15]), Vector([35, -190, 155])])" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# primero el lado izquierdo de la igualdad\n", "( 5 * Matrix(A) ) & st" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}5&0&35\\\\-70&15&-190\\\\65&-15&155\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([5, -70, 65]), Vector([0, 15, -15]), Vector([35, -190, 155])])" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# y luego el lado derecho\n", "5 * ( Matrix(A) & st )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Compruebe, usando los dos recuadros de más abajo, la propiedad asociativa cuando se transforman las filas" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "## Propiedad distributiva\n", "\n", "Compruebe con ejemplos que en general\n", "$$\n", "{\\big(\\Mat{A}+\\Mat{B}\\big)}_{\\mathbf{\\tau}}={\\Mat{A}}_{\\mathbf{\\tau}} + {\\Mat{B}}_{\\mathbf{\\tau}}\n", "$$" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}-8&2&14\\\\-38&8&-136\\\\46&-10&122\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([-8, -38, 46]), Vector([2, 8, -10]), Vector([14, -136, 122])])" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# primero el lado izquierdo de la igualdad\n", "( Matrix(A) + Matrix(B) ) & st" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}-8&2&14\\\\-38&8&-136\\\\46&-10&122\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([-8, -38, 46]), Vector([2, 8, -10]), Vector([14, -136, 122])])" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# y luego el lado derecho de la igualdad\n", "( Matrix(A) & st ) + ( Matrix(B) & st )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Esto también es cierto con las transformaciones de las filas" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}-8&66&-22\\\\0&90&-30\\\\-14&120&-40\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([-8, 0, -14]), Vector([66, 90, 120]), Vector([-22, -30, -40])])" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "st & ( Matrix(A) + Matrix(B) ) " ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}-8&66&-22\\\\0&90&-30\\\\-14&120&-40\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([-8, 0, -14]), Vector([66, 90, 120]), Vector([-22, -30, -40])])" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "( st & Matrix(A) ) + ( st & Matrix(B) )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Escalonando una matriz por el método de eliminación gaussiana\n" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "La siguiente función `ppivote` de nuestra librería devuelve la posición del\n", "primer componente no negativo de un vector (cuando el vector es el\n", "único argumento)." ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "ppivote = lambda v, k=0: ( [i for i,c in enumerate(v.lista, 1) if (c!=0 and i>k)] + [0] )[0]" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ppivote(Vector([0,4,0,0,3,0]))" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Si a la función se le da como segundo argumento una posición desde la\n", "que empezar a buscar, entonces devuelve la posición del primer\n", "componente no negativo a partir de la posición siguiente a la\n", "indicada." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ppivote(Vector([0,4,0,0,3,0]), 2)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Cuando la función `ppivote` no encuentra un componente no nulo devuelve el valor cero" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ppivote(Vector([0,4,0,0,0,0]), 2)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&1&-2\\\\1&-2&1\\\\-2&1&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([1, -2, 1]), Vector([-2, 1, 1])])" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = Vector((1, 1, -2)); y = Vector((1, -2, 1)); z = Vector((-2, 1, 1))\n", "A = Matrix([x,y,z])\n", "A" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Usando la función `ppivote` y las transformaciones elementales vamos a escalonar la matriz `A`." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&0&0\\\\1&-3&0\\\\-2&3&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([0, -3, 3]), Vector([0, 0, 0])])" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = Matrix(A) # Hacemos una copia de A para no perder la matriz original\n", "r = 0 # Contador de pivotes\n", "for i in range(1,M.m+1): # En cada una de las filas: \n", " p = ppivote((i|M),r) # buscamos la posición del primer componente no nulo a la derecha de la columna r \n", " if p > 0: # si hemos econtrado alguno (si la fila no está llena de ceros por la derecha)\n", " r += 1 # el contador añade un nuevo pivote a la cuenta\n", " M & T( {r, p} ) # intercambiamos la columna $r$-ésima con la columna donde encontramos el pivote \n", " M & T( [(fracc(-(i|M|j),(i|M|r)), r, j) for j in range(1,M.n+1) if j > r] ) # con el pivote anulamos todos\n", " # los componentes a su derecha\n", "\n", "M # por último mostramos el resultado (fíjese que M ya no es una copia de A)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Para la matriz\n", "$$\n", "\\qquad\\begin{bmatrix}1&1&-2\\\\1&-2&1\\\\-2&1&1\\end{bmatrix}\\qquad\n", "$$\n", "los pasos dados por el algoritmo han sido:\n", "$$\n", "\\quad\n", "\\underset{\\begin{subarray}{c} \\left[\\left(-1\\right)\\mathbf{1}+\\mathbf{2} \\right]\\\\\\left[\\left(2\\right)\\mathbf{1}+\\mathbf{3} \\right]\\\\\\left[\\left(1\\right)\\mathbf{2}+\\mathbf{3} \\right]\\end{subarray}}{\\mathbf{\\tau}}\\quad\n", "$$\n", "es decir,\n", "$$\n", "\\begin{bmatrix}1&1&-2\\\\1&-2&1\\\\-2&1&1\\end{bmatrix}\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(-1\\right)\\mathbf{1}+\\mathbf{2} \\right]\\\\\\left[\\left(2\\right)\\mathbf{1}+\\mathbf{3} \\right]\\end{subarray}}{\\mathbf{\\tau}}}\\begin{bmatrix}1&0&0\\\\1&-3&3\\\\-2&3&-3\\end{bmatrix}\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(1\\right)\\mathbf{2}+\\mathbf{3} \\right]\\end{subarray}}{\\mathbf{\\tau}}}\\begin{bmatrix}1&0&0\\\\1&-3&0\\\\-2&3&0\\end{bmatrix}\n", "$$\n", "(donde hemos excluido del esquema los intercambios `T({r,p})` cuando `p==r`, pues no modifican la matriz)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(Pruebe a realizar modificaciones del anterior código para lograr nuevas variantes del mismo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El código de más arriba está implementado en nuestra librería en la\n", "clase `ElimG` (__Elim__inación __G__aussiana)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&0&0\\\\1&-3&0\\\\-2&3&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([0, -3, 3]), Vector([0, 0, 0])])" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ElimG(A)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "... y posee algunos añadidos interesantes. Veámoslo con la siguiente matriz `B`" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\1&3&5&0&0\\\\0&1&0&1&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 1, 0]), Vector([2, 0, 3, 1]), Vector([3, -3, 5, 0]), Vector([4, -5, 0, 1]), Vector([5, 7, 0, 0])])" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B = Matrix([[1,2,3,4,5],[0,0,-3,-5,7],[1,3,5,0,0],[0,1,0,1,0]])\n", "B" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si le damos un segundo argumento no nulo, nos muestra los pasos dados:" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\1&3&5&0&0\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(-2\\right)\\mathbf{1}+\\mathbf{2} \\right]\\\\\\left[\\left(-3\\right)\\mathbf{1}+\\mathbf{3} \\right]\\\\\\left[\\left(-4\\right)\\mathbf{1}+\\mathbf{4} \\right]\\\\\\left[\\left(-5\\right)\\mathbf{1}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&-5&7\\\\1&1&2&-4&-5\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(3\\right)\\mathbf{4}\\right]\\\\\\left[\\left(-5\\right)\\mathbf{3}+\\mathbf{4} \\right]\\\\\\left[\\left(3\\right)\\mathbf{5}\\right]\\\\\\left[\\left(7\\right)\\mathbf{3}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\1&1&2&-22&-1\\\\0&1&0&3&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(-2\\right)\\mathbf{2}+\\mathbf{3} \\right]\\\\\\left[\\left(22\\right)\\mathbf{2}+\\mathbf{4} \\right]\\\\\\left[\\left(1\\right)\\mathbf{2}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\1&1&0&0&0\\\\0&1&-2&25&1\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(25\\right)\\mathbf{5}\\right]\\\\\\left[\\left(-1\\right)\\mathbf{4}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\1&1&0&0&0\\\\0&1&-2&25&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\mathbf{2}\\rightleftharpoons\\mathbf{3}\\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&-3&0&0&0\\\\1&0&1&0&0\\\\0&-2&1&25&0\\\\ \\end{array} \\right]$" ], "text/plain": [ "$\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\1&3&5&0&0\\\\0&1&0&1&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 1, 0]), Vector([2, 0, 3, 1]), Vector([3, -3, 5, 0]), Vector([4, -5, 0, 1]), Vector([5, 7, 0, 0])])" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "El método de más arriba no usa fracciones para escalonar si la matriz es \"entera\" (si sus componentes son enteros), pero se dan menos pasos usando solo transformaciones Tipo I. Con `ElimrG` obtenemos una forma escalonada con menos transformaciones elementales (todas de Tipo I o intercambios)." ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\1&3&5&0&0\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(-2\\right)\\mathbf{1}+\\mathbf{2} \\right]\\\\\\left[\\left(-3\\right)\\mathbf{1}+\\mathbf{3} \\right]\\\\\\left[\\left(-4\\right)\\mathbf{1}+\\mathbf{4} \\right]\\\\\\left[\\left(-5\\right)\\mathbf{1}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&-5&7\\\\1&1&2&-4&-5\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(- \\frac{5}{3}\\right)\\mathbf{3}+\\mathbf{4} \\right]\\\\\\left[\\left(\\frac{7}{3}\\right)\\mathbf{3}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\1&1&2&- \\frac{22}{3}&- \\frac{1}{3}\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(-2\\right)\\mathbf{2}+\\mathbf{3} \\right]\\\\\\left[\\left(\\frac{22}{3}\\right)\\mathbf{2}+\\mathbf{4} \\right]\\\\\\left[\\left(\\frac{1}{3}\\right)\\mathbf{2}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\1&1&0&0&0\\\\0&1&-2&\\frac{25}{3}&\\frac{1}{3}\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(- \\frac{1}{25}\\right)\\mathbf{4}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\1&1&0&0&0\\\\0&1&-2&\\frac{25}{3}&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\mathbf{2}\\rightleftharpoons\\mathbf{3}\\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&-3&0&0&0\\\\1&0&1&0&0\\\\0&-2&1&\\frac{25}{3}&0\\\\ \\end{array} \\right]$" ], "text/plain": [ "$\\left[\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\1&3&5&0&0\\\\0&1&0&1&0\\\\ \\end{array} \\right];\\;\\left[ \\begin{array}{ccccc}5&4&3&2&1\\\\7&-5&-3&0&0\\\\0&0&5&3&1\\\\0&1&0&1&0\\\\ \\end{array} \\right];\\right]$
" ], "text/plain": [ "Sistema([Matrix([Vector([1, 0, 1, 0]), Vector([2, 0, 3, 1]), Vector([3, -3, 5, 0]), Vector([4, -5, 0, 1]), Vector([5, 7, 0, 0])]); Matrix([Vector([5, 7, 0, 0]), Vector([4, -5, 0, 1]), Vector([3, -3, 5, 0]), Vector([2, 0, 3, 1]), Vector([1, 0, 1, 0])]);])" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Sistema( [B, reversed(B)] )" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Así que es muy fácil invertir el orden de las filas (que son las columnas de la transpuesta):" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\1&3&5&0&0\\\\0&1&0&1&0\\\\ \\end{array} \\right];\\;\\left[ \\begin{array}{ccccc}0&1&0&1&0\\\\1&3&5&0&0\\\\0&0&-3&-5&7\\\\1&2&3&4&5\\\\ \\end{array} \\right];\\right]$
" ], "text/plain": [ "Sistema([Matrix([Vector([1, 0, 1, 0]), Vector([2, 0, 3, 1]), Vector([3, -3, 5, 0]), Vector([4, -5, 0, 1]), Vector([5, 7, 0, 0])]); Matrix([Vector([0, 1, 0, 1]), Vector([1, 3, 0, 2]), Vector([0, 5, -3, 3]), Vector([1, 0, -5, 4]), Vector([0, 0, 7, 5])]);])" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Sistema( [B, ~reversed(~B)])" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Así, si también queremos invertir el orden de las columnas basta aplicar `reversed` de nuevo" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccccc}0&1&0&1&0\\\\0&0&5&3&1\\\\7&-5&-3&0&0\\\\5&4&3&2&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([0, 0, 7, 5]), Vector([1, 0, -5, 4]), Vector([0, 5, -3, 3]), Vector([1, 3, 0, 2]), Vector([0, 1, 0, 1])])" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reversed(~reversed(~B))" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Así pues, realizando ciertas operaciones de reordenamiento de la matriz, aplicando `Elim` (o `ElimG`) y deshaciendo las operaciones de reordenamiento, podemos lograr otras formas de eliminación:" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccccc}0&0&0&0&5\\\\0&0&0&-53&7\\\\0&0&1325&0&0\\\\0&1515&-180&5&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([0, 0, 0, 0]), Vector([0, 0, 0, 1515]), Vector([0, 0, 1325, -180]), Vector([0, -53, 0, 5]), Vector([5, 7, 0, 0])])" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reversed(ElimG(reversed(B))) # Por Columnas pero de derecha a izquierda (y de arriba a abajo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... Puede investigar más variantes que traten de dejar los ceros en otra de las esquinas de la matriz (y operando con las filas o con las columnas)..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Eliminación Gauss-Jordan\n", "Podemos reducir más aún una matriz, por ejemplo elimando los componentes que están tanto a la derecha como a la izquierda de cada pivote y que normalicen todos los pivotes al valor $1$. Estudie el siguiente código:" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&1&0&0&0\\\\0&0&1&0&0\\\\0&0&0&1&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0, 0]), Vector([0, 1, 0, 0]), Vector([0, 0, 1, 0]), Vector([0, 0, 0, 1]), Vector([0, 0, 0, 0])])" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = Matrix(B)\n", "r = 0 # Contador de pivotes\n", "for i in range(1,M.m+1): # En cada una de las filas \n", " p = ppivote(i|M, r) # posición del primer componente no nulo\n", " if p > 0: # si la fila no está llena de ceros por la izquierda\n", " r += 1 # el contador añade un nuevo pivote a la cuenta\n", " M & T( {p, r} ) # intercambiamos las columnas\n", " M & T( [ (fracc(-(i|M|j),(i|M|r)), r, j ) for j in range(1,M.n+1) if j != r ] ) # Eliminamos componentes\n", " M & T( [ (fracc(1,(i|M|r)), j ) for j in range(1,M.n+1) if j == r ]) # Normalizamos cada pivote\n", " \n", "M " ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Aunque obtenemos el mismo resultado con `ElimGJ` (__Elim__inación __G__auss-__J__ordan por columnas)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\1&3&5&0&0\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(-2\\right)\\mathbf{1}+\\mathbf{2} \\right]\\\\\\left[\\left(-3\\right)\\mathbf{1}+\\mathbf{3} \\right]\\\\\\left[\\left(-4\\right)\\mathbf{1}+\\mathbf{4} \\right]\\\\\\left[\\left(-5\\right)\\mathbf{1}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&-5&7\\\\1&1&2&-4&-5\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(3\\right)\\mathbf{4}\\right]\\\\\\left[\\left(-5\\right)\\mathbf{3}+\\mathbf{4} \\right]\\\\\\left[\\left(3\\right)\\mathbf{5}\\right]\\\\\\left[\\left(7\\right)\\mathbf{3}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\1&1&2&-22&-1\\\\0&1&0&3&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(-2\\right)\\mathbf{2}+\\mathbf{3} \\right]\\\\\\left[\\left(22\\right)\\mathbf{2}+\\mathbf{4} \\right]\\\\\\left[\\left(1\\right)\\mathbf{2}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\1&1&0&0&0\\\\0&1&-2&25&1\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(25\\right)\\mathbf{5}\\right]\\\\\\left[\\left(-1\\right)\\mathbf{4}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\1&1&0&0&0\\\\0&1&-2&25&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\mathbf{2}\\rightleftharpoons\\mathbf{3}\\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&-3&0&0&0\\\\1&0&1&0&0\\\\0&-2&1&25&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(-1\\right)\\mathbf{3}+\\mathbf{1} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&-3&0&0&0\\\\0&0&1&0&0\\\\-1&-2&1&25&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(25\\right)\\mathbf{1}\\right]\\\\\\left[\\left(1\\right)\\mathbf{4}+\\mathbf{1} \\right]\\\\\\left[\\left(25\\right)\\mathbf{2}\\right]\\\\\\left[\\left(2\\right)\\mathbf{4}+\\mathbf{2} \\right]\\\\\\left[\\left(25\\right)\\mathbf{3}\\right]\\\\\\left[\\left(-1\\right)\\mathbf{4}+\\mathbf{3} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}25&0&0&0&0\\\\0&-75&0&0&0\\\\0&0&25&0&0\\\\0&0&0&25&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(\\frac{1}{25}\\right)\\mathbf{1}\\right]\\\\\\left[\\left(- \\frac{1}{75}\\right)\\mathbf{2}\\right]\\\\\\left[\\left(\\frac{1}{25}\\right)\\mathbf{3}\\right]\\\\\\left[\\left(\\frac{1}{25}\\right)\\mathbf{4}\\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&1&0&0&0\\\\0&0&1&0&0\\\\0&0&0&1&0\\\\ \\end{array} \\right]$" ], "text/plain": [ "$\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&1&0&0&0\\\\0&0&1&0&0\\\\0&0&0&1&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0, 0]), Vector([0, 1, 0, 0]), Vector([0, 0, 1, 0]), Vector([0, 0, 0, 1]), Vector([0, 0, 0, 0])])" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ElimGJ(B,1)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "_Puede intentar programar otras formas de escalonar una matriz, por ejemplo,\n", "evitando usar fracciones, o escalonando de derecha a izquierda, o con\n", "transformaciones de las filas de arriba a abajo (o de abajo a arriba),\n", "etc._" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "## Eliminación con operaciones sobre las filas\n", "\n", "En los libros de Álgebra Lineal se suele aplicar la eliminación por filas. Es fácil hacerlo usando la eliminación por columnas de la transpuesta, y transponiendo el resultado después." ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&3&0&-22&-1\\\\0&0&-3&-5&7\\\\0&0&0&25&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0, 0]), Vector([2, 3, 0, 0]), Vector([3, 0, -3, 0]), Vector([4, -22, -5, 25]), Vector([5, -1, 7, 1])])" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = Matrix(B)\n", "~ElimG(~M)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "pero obtenemos lo mismo con `ElimF` (__Elim__inación __Gaussiana__ por __F__ilas que obtiene una matriz triangular superior)." ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\1&3&5&0&0\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow[\\underset{\\begin{subarray}{c} \\left[\\left(-1\\right)\\mathbf{1}+\\mathbf{3} \\right]\\end{subarray}}{\\pmb{\\tau}}]{}\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\0&1&2&-4&-5\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow[\\underset{\\begin{subarray}{c} \\left[\\left(-1\\right)\\mathbf{3}+\\mathbf{4} \\right]\\end{subarray}}{\\pmb{\\tau}}]{}\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\0&1&2&-4&-5\\\\0&0&-2&5&5\\\\ \\end{array} \\right]\\xrightarrow[\\underset{\\begin{subarray}{c} \\left[\\left(-2\\right)\\mathbf{2}+\\mathbf{4} \\right]\\\\\\left[\\left(3\\right)\\mathbf{4}\\right]\\\\\\left[\\left(2\\right)\\mathbf{2}+\\mathbf{3} \\right]\\\\\\left[\\left(3\\right)\\mathbf{3}\\right]\\end{subarray}}{\\pmb{\\tau}}]{}\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\0&3&0&-22&-1\\\\0&0&0&25&1\\\\ \\end{array} \\right]\\xrightarrow[\\underset{\\begin{subarray}{c} \\left[\\mathbf{2}\\rightleftharpoons\\mathbf{3}\\right]\\end{subarray}}{\\pmb{\\tau}}]{}\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&3&0&-22&-1\\\\0&0&-3&-5&7\\\\0&0&0&25&1\\\\ \\end{array} \\right]$" ], "text/plain": [ "$\\left[ \\begin{array}{ccc}1&1&-2\\\\1&-2&1\\\\-2&1&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([1, -2, 1]), Vector([-2, 1, 1])])" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = Vector((1, 1, -2)); y = Vector((1, -2, 1)); z = Vector((-2, 1, 1))\n", "A = Matrix([x,y,z])\n", "A" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&0&0\\\\1&-3&0\\\\-2&3&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([0, -3, 3]), Vector([0, 0, 0])])" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Elim(A)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "El número de pivotes es el número de pivotes de la forma escalonada y se guarda en el atributo `.rango`" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Elim(A).rango" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "el método `rango()` de la clase `Matrix` hace lo mismo" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.rg()" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Los pasos dados en el proceso de eliminación se guardan en el atributo `.pasos`, que contiene una `lista` con dos sublistas. La primera con las transformaciones aplicadas a las filas y la segunda con las aplicadas a las columnas. Cada una de estas sublistas incluye las trasnformaciones dadas en cada paso (en este ejemplo se dieron dos pasos) " ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "[[], [T([(-1, 1, 2), (2, 1, 3)]), T([(1, 2, 3)])]]" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p=Elim(A).pasos\n", "p" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Así, los pasos correspondientes a las filas han sido" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p[0]" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "y los pasos correspondientes a las columnas" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "[T([(-1, 1, 2), (2, 1, 3)]), T([(1, 2, 3)])]" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos visualizar las transformaciones aplicadas sobre las columnas en cada uno de los dos pasos dados:" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\underset{\\begin{subarray}{c} \\left[\\left(-1\\right)\\mathbf{1}+\\mathbf{2} \\right]\\\\\\left[\\left(2\\right)\\mathbf{1}+\\mathbf{3} \\right]\\end{subarray}}{\\pmb{\\tau}}$
" ], "text/plain": [ "T([(-1, 1, 2), (2, 1, 3)])" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(p[1][0])" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\underset{\\begin{subarray}{c} \\left[\\left(1\\right)\\mathbf{2}+\\mathbf{3} \\right]\\end{subarray}}{\\pmb{\\tau}}$
" ], "text/plain": [ "T([(1, 2, 3)])" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(p[1][1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por comodidad también se guardan todas las tranformaciones aplicadas a las filas en el atributo `.TrF` (que es un objeto de la clase `T` con la composición de todas las transformaciones aplicadas a las filas) y todas las transformaciones aplicadas a las columnas en `.TrC`. Así" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\underset{\\begin{subarray}{c} \\left[\\left(-1\\right)\\mathbf{1}+\\mathbf{2} \\right]\\\\\\left[\\left(2\\right)\\mathbf{1}+\\mathbf{3} \\right]\\\\\\left[\\left(1\\right)\\mathbf{2}+\\mathbf{3} \\right]\\end{subarray}}{\\pmb{\\tau}}$
" ], "text/plain": [ "T([(-1, 1, 2), (2, 1, 3), (1, 2, 3)])" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Elim(A).TrC" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Podemos aplicar dicha secuencia de transformaciones a las columnas de la matriz identidad de orden 3" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&-1&1\\\\0&1&1\\\\0&0&1\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0]), Vector([-1, 1, 0]), Vector([1, 1, 1])])" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E = I(3) & T(p[1])\n", "E" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "y sabemos que el producto de `A` por `E` debe darnos la misma forma escalonada" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&0&0\\\\1&-3&0\\\\-2&3&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([0, -3, 3]), Vector([0, 0, 0])])" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A*E" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "Que también deberíamos obtener directamente si aplicamos las transformaciones sobre las columnas de `A` (aunque ahora si estaremos modificando la matriz original)... lo haremos sobre una copia de `A`" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccc}1&0&0\\\\1&-3&0\\\\-2&3&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 1, -2]), Vector([0, -3, 3]), Vector([0, 0, 0])])" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Matrix(A) & T(p[1])" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "### Encadenando escalonamientos\n", "\n", "Fíjese que si queremos obtener una matriz diagonal, podemos secillamente encadenar a un método de eliminación que nos dé una matriz triangular superior, un método que nos dé una triangular inferior:" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\1&3&5&0&0\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow[\\underset{\\begin{subarray}{c} \\left[\\left(-1\\right)\\mathbf{1}+\\mathbf{3} \\right]\\end{subarray}}{\\pmb{\\tau}}]{}\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\0&1&2&-4&-5\\\\0&1&0&1&0\\\\ \\end{array} \\right]\\xrightarrow[\\underset{\\begin{subarray}{c} \\left[\\left(-1\\right)\\mathbf{3}+\\mathbf{4} \\right]\\end{subarray}}{\\pmb{\\tau}}]{}\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\0&1&2&-4&-5\\\\0&0&-2&5&5\\\\ \\end{array} \\right]\\xrightarrow[\\underset{\\begin{subarray}{c} \\left[\\left(-2\\right)\\mathbf{2}+\\mathbf{4} \\right]\\\\\\left[\\left(3\\right)\\mathbf{4}\\right]\\\\\\left[\\left(2\\right)\\mathbf{2}+\\mathbf{3} \\right]\\\\\\left[\\left(3\\right)\\mathbf{3}\\right]\\end{subarray}}{\\pmb{\\tau}}]{}\\left[ \\begin{array}{ccccc}1&2&3&4&5\\\\0&0&-3&-5&7\\\\0&3&0&-22&-1\\\\0&0&0&25&1\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(-2\\right)\\mathbf{1}+\\mathbf{2} \\right]\\\\\\left[\\left(-3\\right)\\mathbf{1}+\\mathbf{3} \\right]\\\\\\left[\\left(-4\\right)\\mathbf{1}+\\mathbf{4} \\right]\\\\\\left[\\left(-5\\right)\\mathbf{1}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&-5&7\\\\0&3&0&-22&-1\\\\0&0&0&25&1\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(3\\right)\\mathbf{4}\\right]\\\\\\left[\\left(-5\\right)\\mathbf{3}+\\mathbf{4} \\right]\\\\\\left[\\left(3\\right)\\mathbf{5}\\right]\\\\\\left[\\left(7\\right)\\mathbf{3}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\0&3&0&-66&-3\\\\0&0&0&75&3\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(22\\right)\\mathbf{2}+\\mathbf{4} \\right]\\\\\\left[\\left(1\\right)\\mathbf{2}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\0&3&0&0&0\\\\0&0&0&75&3\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\left(25\\right)\\mathbf{5}\\right]\\\\\\left[\\left(-1\\right)\\mathbf{4}+\\mathbf{5} \\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&0&-3&0&0\\\\0&3&0&0&0\\\\0&0&0&75&0\\\\ \\end{array} \\right]\\xrightarrow{\\underset{\\begin{subarray}{c} \\left[\\mathbf{2}\\rightleftharpoons\\mathbf{3}\\right]\\end{subarray}}{\\pmb{\\tau}}}\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&-3&0&0&0\\\\0&0&3&0&0\\\\0&0&0&75&0\\\\ \\end{array} \\right]$" ], "text/plain": [ "$\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&-3&0&0&0\\\\0&0&3&0&0\\\\0&0&0&75&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0, 0]), Vector([0, -3, 0, 0]), Vector([0, 0, 3, 0]), Vector([0, 0, 0, 75]), Vector([0, 0, 0, 0])])" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T(p[0]) & Matrix(B) & T(p[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una vez más, podemos obtener el mismo resultado vía producto de matrices. Aplicamos la lista de operaciones realizadas sobre las filas a la matriz identidad de orden 4" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [], "source": [ "F = T(p[0]) & I(4) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Y aplicamos la lista correspondiente a las transformaciones de las columnas a las columnas de la identidad de orden 5" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [], "source": [ "C = I(5) & T(p[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ahora el producto `F*B*C` debe arrojar el mismo resultado" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "data": { "text/html": [ "$\\left[ \\begin{array}{ccccc}1&0&0&0&0\\\\0&-3&0&0&0\\\\0&0&3&0&0\\\\0&0&0&75&0\\\\ \\end{array} \\right]$
" ], "text/plain": [ "Matrix([Vector([1, 0, 0, 0]), Vector([0, -3, 0, 0]), Vector([0, 0, 3, 0]), Vector([0, 0, 0, 75]), Vector([0, 0, 0, 0])])" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F*B*C" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A continuacion puede ver un resumen de procedimientos (pero puede encontrar más en la documentación de la librería)" ] }, { "cell_type": "raw", "metadata": { "collapsed": true }, "source": [ "M = Matrix([[2,-1,0],[-1,2,-1],[0,-1,2]])\n", "\n", "K=Elim(M,1) # Eliminación (evitando fracciones si es posible)\n", "K=Elimr(M,1) # Eliminación (solo con trasformaciones elementales Tipo I)\n", "L=ElimG(M,1) # Eliminación Gaussiana (evitando fracciones si es posible)\n", "L=ElimrG(M,1) # Eliminación Gaussiana\n", "R=ElimGJ(M,1) # Eliminación Gauss-Jordan (Fracciones solo al normalizar pivotes)\n", "R=ElimrGJ(M,1) # Eliminación Gauss-Jordan\n", "\n", "K=ElimF(M,1) # Eliminación con las filas (evitando fracciones si es posible)\n", "U=ElimGF(M,1) # Eliminación Gaussiana con las filas (evitando fracciones si es posible)\n", "R=ElimGJF(M,1) # Elimnación Gauss-Jordan con las filas (Fracciones solo al normalizar pivotes)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "\n", "---- FIN DE LA LECCIÓN -----\n", "\n", "\n", "\n", "Lo que sigue es sólo para crear un índice de contenidos de este notebook (y se muestra al principio de la página)" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "autoscroll": false, "ein.hycell": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "application/javascript": [ "$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')\n", "$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')\n" ], "text/plain": [ "