{ "cells": [ { "cell_type": "markdown", "id": "34fb6a3c", "metadata": {}, "source": [ "# Matrices y aplicaciones lineales\n", "\n", "#### https://meet.noysi.com/metodosnumericos1" ] }, { "cell_type": "markdown", "id": "340e1c04", "metadata": {}, "source": [ "Para definir un vector o una matriz con Sage, debemos usar las funciones `vector` y `matrix`, respectivamente. La primera entrada (opcional) es un valor con el tipo de dato que queremos usar, como `ZZ` para enteros, `RDF` para reales en doble precisión y `CDF` para complejos en doble precisión. La segunda entrada (o primera si no hemos elegido tipo de datos) es una lista en el caso del vector y una lista con una lista por cada fila de la matrix. Veamos algunos ejemplos." ] }, { "cell_type": "code", "execution_count": 1, "id": "c269cee4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v = vector(ZZ,[1,2,3])\n", "type(v) " ] }, { "cell_type": "code", "execution_count": 2, "id": "46aff7fb", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(1,\\,2,\\,3\\right) \\left(1.0,\\,2.0,\\,3.0\\right)$$" ], "text/plain": [ "(1, 2, 3) (1.0, 2.0, 3.0)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "w = vector(RDF,[1,2,3])\n", "show(v,w)" ] }, { "cell_type": "code", "execution_count": 3, "id": "821a514a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2.0, 4.0, 6.0)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Podemos sumarlos. Para ello convertirá los enteros en números reales.\n", "v+w" ] }, { "cell_type": "code", "execution_count": 4, "id": "b26c6141", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(v+w)" ] }, { "cell_type": "code", "execution_count": 5, "id": "81f84f71", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Si no ponemos tipo, elige el menos general posible\n", "u = vector([1,2,3])\n", "type(u)" ] }, { "cell_type": "markdown", "id": "a73ae277", "metadata": {}, "source": [ "Veamos algunos ejemplos con matrices." ] }, { "cell_type": "code", "execution_count": 6, "id": "72af041a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrr}\n", "1.0 & 2.0 & -3.0 \\\\\n", "3.0 & 1.0 & 1.0 \\\\\n", "1.0 & 1.0 & 2.0\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 1.0 2.0 -3.0]\n", "[ 3.0 1.0 1.0]\n", "[ 1.0 1.0 2.0]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Una matriz de números reales (con saltos de línea visualizarlo mejor)\n", "A = matrix(RDF, [[1,2,-3],\n", " [3,1,1],\n", " [1,1,2]])\n", "show(A)" ] }, { "cell_type": "code", "execution_count": 7, "id": "bcf14972", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrr}\n", "1 & 0 & -1 \\\\\n", "0 & 1 & 2 \\\\\n", "1 & 1 & 1\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 1 0 -1]\n", "[ 0 1 2]\n", "[ 1 1 1]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Otra de enteros (en este caso no hemos incluído saltos de línea)\n", "B = matrix([[1,0,-1],[0,1,2],[1,1,1]])\n", "show(B)" ] }, { "cell_type": "code", "execution_count": 8, "id": "812afe71", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrr}\n", "2.0 & 2.0 & -4.0 \\\\\n", "3.0 & 2.0 & 3.0 \\\\\n", "2.0 & 2.0 & 3.0\n", "\\end{array}\\right) \\left(\\begin{array}{rrr}\n", "-2.0 & -1.0 & 0.0 \\\\\n", "4.0 & 2.0 & 0.0 \\\\\n", "3.0 & 3.0 & 3.0\n", "\\end{array}\\right) \\left(-4.0,\\,8.0,\\,9.0\\right) \\left(7,\\,14,\\,21\\right) \\left(\\begin{array}{rrr}\n", "-2.0 & -4.0 & 6.0 \\\\\n", "-6.0 & -2.0 & -2.0 \\\\\n", "-2.0 & -2.0 & -4.0\n", "\\end{array}\\right) \\left(\\begin{array}{rrr}\n", "-510 & -511 & -512 \\\\\n", "1022 & 1023 & 1024 \\\\\n", "512 & 512 & 512\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 2.0 2.0 -4.0]\n", "[ 3.0 2.0 3.0]\n", "[ 2.0 2.0 3.0] [-2.0 -1.0 0.0]\n", "[ 4.0 2.0 0.0]\n", "[ 3.0 3.0 3.0] (-4.0, 8.0, 9.0) (7, 14, 21) [-2.0 -4.0 6.0]\n", "[-6.0 -2.0 -2.0]\n", "[-2.0 -2.0 -4.0] [-510 -511 -512]\n", "[1022 1023 1024]\n", "[ 512 512 512]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Podemos operar con matrices y vectores\n", "show(A+B,A*B,A*u,7*v,-2*A,B^10)" ] }, { "cell_type": "markdown", "id": "5bd5c668", "metadata": {}, "source": [ "También están definidas las funciones usuales sobre matrices. Se puede consultar https://doc.sagemath.org/html/es/tutorial/tour_linalg.html para una introducción. Veamos cómo calcular el determinante y los autovalores y autovectores.\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "469c1bf4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-15.0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Determinante\n", "A.det()" ] }, { "cell_type": "code", "execution_count": 11, "id": "6b06bab4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(-1.5556218095982448,\n", " [(-0.6412412320435307, 0.7665298768041033, -0.03523677473862972)],\n", " 1),\n", " (2.7778109047991224 + 1.3878807693997999*I,\n", " [(-0.21853271682511885 - 0.4144302768311717*I, -0.6460200641125966, -0.4929033642230452 + 0.34669200686521673*I)],\n", " 1),\n", " (2.7778109047991224 - 1.3878807693997999*I,\n", " [(-0.21853271682511885 + 0.4144302768311717*I, -0.6460200641125966, -0.4929033642230452 - 0.34669200686521673*I)],\n", " 1)]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Autovalores y autovectores\n", "l = A.eigenvectors_right()\n", "l" ] }, { "cell_type": "code", "execution_count": 12, "id": "d9827e83", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-1.5556218095982448,\n", " [(-0.6412412320435307, 0.7665298768041033, -0.03523677473862972)],\n", " 1)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "l[0]" ] }, { "cell_type": "markdown", "id": "21da7204", "metadata": {}, "source": [ "La orden anterior muestra una lista que contiene un elemento por cada autovalor. El elemento (tupla) contiene el autovalor en la primera posición, una base en la segunda posición (lista de vectores) y la multiplicidad de ese autovalor. Vamos a quedarnos con esos valores:" ] }, { "cell_type": "code", "execution_count": 13, "id": "356ca15e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-1.5556218095982448,\n", " 2.7778109047991224 + 1.3878807693997999*I,\n", " 2.7778109047991224 - 1.3878807693997999*I]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autovalores = [l for l,v,m in A.eigenvectors_right()]\n", "autovalores" ] }, { "cell_type": "code", "execution_count": 14, "id": "e65e8fbb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(-0.6412412320435307, 0.7665298768041033, -0.03523677473862972),\n", " (-0.21853271682511885 - 0.4144302768311717*I, -0.6460200641125966, -0.4929033642230452 + 0.34669200686521673*I),\n", " (-0.21853271682511885 + 0.4144302768311717*I, -0.6460200641125966, -0.4929033642230452 - 0.34669200686521673*I)]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Esto es válido si no hay autovalores duplicados\n", "autovectores = [v[0] for l,v,m in A.eigenvectors_right()]\n", "autovectores" ] }, { "cell_type": "markdown", "id": "c7a142e6", "metadata": {}, "source": [ "Vamos a representar los autovalores como vectores en el plano complejo." ] }, { "cell_type": "code", "execution_count": 16, "id": "ebc92bee", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 3 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sum( [ arrow( (0,0) , (k.real(),k.imag()) ) for k in autovalores ] ) .show(figsize=3)" ] }, { "cell_type": "markdown", "id": "f303c70e", "metadata": {}, "source": [ "
\n", "Ejercicio 1. Consideremos la matriz\n", " $$A=\\left(\\begin{array}{rrr}\n", "3 & 1 \\\\\n", "2 & -2 \n", "\\end{array}\\right)$$\n", "\n", "a) Calcula el determinante, los autovalores y los autovectores de la matriz.\n", "\n", "b) Representa los autovectores. Comprueba que son autovectores.\n", "\n", "c) Para cada vector de la base usual, dibuja una flecha cuyo origen sea dicho vector y el destino sea su imagen por $A$.\n", "
" ] }, { "cell_type": "code", "execution_count": 45, "id": "9084c3fc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rr}\n", "3.0 & 1.0 \\\\\n", "2.0 & -2.0\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 3.0 1.0]\n", "[ 2.0 -2.0]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = matrix(RDF,[[3,1],[2,-2]])\n", "show(A)" ] }, { "cell_type": "code", "execution_count": 46, "id": "f7b2ad75", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-8.0,\n", " [(3.3722813232690143, [(0.9371641612794526, 0.3488887140814106)], 1),\n", " (-2.3722813232690143, [(-0.18299737893132018, 0.983113401039914)], 1)])" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.det(), A.eigenvectors_right()" ] }, { "cell_type": "code", "execution_count": 47, "id": "7c21cd4a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.9371641612794526, 0.3488887140814106)" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ll = A.eigenvectors_right()\n", "ll[0][1][0]" ] }, { "cell_type": "code", "execution_count": 48, "id": "7d7d4a46", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(0.9371641612794526, 0.3488887140814106),\n", " (-0.18299737893132018, 0.983113401039914)]" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "autovectores = [ b[0] for l,b,m in A.eigenvectors_right()]\n", "autovectores" ] }, { "cell_type": "code", "execution_count": 49, "id": "0093e71c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3.3722813232690143, -2.3722813232690143)" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "l1,l2 = A.eigenvalues()\n", "l1,l2" ] }, { "cell_type": "code", "execution_count": 50, "id": "3b07bef7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((0.9371641612794526, 0.3488887140814106),\n", " (-0.18299737893132018, 0.983113401039914))" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v1,v2 = [ b[0] for l,b,m in A.eigenvectors_right()]\n", "v1,v2" ] }, { "cell_type": "code", "execution_count": 51, "id": "95a16143", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 2 graphics primitives" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arrow( (0,0) , v1 ) + arrow( (0,0) , v2 )" ] }, { "cell_type": "code", "execution_count": 33, "id": "f928345d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((3.1603811979197682, 1.176550894396084),\n", " (3.1603811979197682, 1.176550894396084))" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A*v1, l1*v1" ] }, { "cell_type": "code", "execution_count": 34, "id": "2831ebbd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((0.43412126424595343, -2.332221559942468),\n", " (0.4341212642459535, -2.332221559942468))" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A*v2, l2*v2" ] }, { "cell_type": "code", "execution_count": 37, "id": "f0c029a2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((1, 0), (0, 1))" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e1,e2 = matrix.identity(2)\n", "e1,e2" ] }, { "cell_type": "code", "execution_count": null, "id": "c258133e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "77a763cd", "metadata": {}, "source": [ "# Normas matriciales " ] }, { "cell_type": "markdown", "id": "3cbf4401", "metadata": {}, "source": [ "Podemos calcular la norma matricial usando la función norm de Sage. Si no se especifica nada, será la norma euclídea." ] }, { "cell_type": "code", "execution_count": 54, "id": "a69d4638", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrr}\n", "1 & 2 & 3 \\\\\n", "4 & 5 & -6 \\\\\n", "0 & 0 & 1\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 1 2 3]\n", "[ 4 5 -6]\n", "[ 0 0 1]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = matrix([[1,2,3],[4,5,-6],[0,0,1]])\n", "show(A)" ] }, { "cell_type": "code", "execution_count": 55, "id": "a7c19c82", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(8.817643599088878, 8.817643599088878, 10.0, 15.0)" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.norm(),A.norm(2),A.norm(1),A.norm(oo)" ] }, { "cell_type": "markdown", "id": "cffff7b3", "metadata": {}, "source": [ "Podemos calcular el número de condición de una matriz usando el método condition. Con la norma 2:" ] }, { "cell_type": "code", "execution_count": 68, "id": "06ae8368", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrr}\n", "-0.10449192886760827 & 0.1467313469837932 & 0.579154779121791 \\\\\n", "0.8045424845279061 & -0.6218747710509598 & -0.989694229179817 \\\\\n", "0.8906375153159667 & 0.7289116277859482 & 0.00887164340097657\n", "\\end{array}\\right)$$" ], "text/plain": [ "[-0.10449192886760827 0.1467313469837932 0.579154779121791]\n", "[ 0.8045424845279061 -0.6218747710509598 -0.989694229179817]\n", "[ 0.8906375153159667 0.7289116277859482 0.00887164340097657]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = random_matrix(RDF, 3)\n", "show(A)" ] }, { "cell_type": "code", "execution_count": 69, "id": "03f70460", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(5.8583262375405445, 0.4552244046278716)" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.condition(2),A.det()" ] }, { "cell_type": "markdown", "id": "f78391ed", "metadata": {}, "source": [ "Las matrices de Hilbert están especialmente mal condicionadas" ] }, { "cell_type": "code", "execution_count": 71, "id": "5d2de886", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrrr}\n", "1.0 & 0.5 & 0.3333333333333333 & 0.25 \\\\\n", "0.5 & 0.3333333333333333 & 0.25 & 0.2 \\\\\n", "0.3333333333333333 & 0.25 & 0.2 & 0.16666666666666666 \\\\\n", "0.25 & 0.2 & 0.16666666666666666 & 0.14285714285714285\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 1.0 0.5 0.3333333333333333 0.25]\n", "[ 0.5 0.3333333333333333 0.25 0.2]\n", "[ 0.3333333333333333 0.25 0.2 0.16666666666666666]\n", "[ 0.25 0.2 0.16666666666666666 0.14285714285714285]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n=4\n", "A = matrix(RDF, [ [1/(i+j+1) for i in range(n)] for j in range(n)])\n", "show(A)" ] }, { "cell_type": "code", "execution_count": 72, "id": "eb865600", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15513.738738929662" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.condition(2)" ] }, { "cell_type": "markdown", "id": "5b4b9083", "metadata": {}, "source": [ "Podemos comparar el número de condición obtenido con el obtenido a partir de la definición." ] }, { "cell_type": "code", "execution_count": 73, "id": "261c03fc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15513.738738931197" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.norm(2)*(A.inverse()).norm(2)" ] }, { "cell_type": "markdown", "id": "33d20e18", "metadata": {}, "source": [ "Si la matriz no es de doble precisión, no calcula el número de condición." ] }, { "cell_type": "code", "execution_count": 77, "id": "3512e8ec", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrr}\n", "1 & 0 & 1 \\\\\n", "1 & -1 & -2 \\\\\n", "2 & -1 & 2\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 1 0 1]\n", "[ 1 -1 -2]\n", "[ 2 -1 2]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = random_matrix(QQ, 3)\n", "show(A)" ] }, { "cell_type": "code", "execution_count": 78, "id": "351f1ef0", "metadata": { "collapsed": true }, "outputs": [ { "ename": "AttributeError", "evalue": "'sage.matrix.matrix_rational_dense.Matrix_rational_dense' object has no attribute 'condition'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn [78], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mA\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcondition\u001b[49m(Integer(\u001b[38;5;241m2\u001b[39m))\n", "File \u001b[0;32m/usr/lib/python3/dist-packages/sage/structure/element.pyx:494\u001b[0m, in \u001b[0;36msage.structure.element.Element.__getattr__ (build/cythonized/sage/structure/element.c:4905)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 492\u001b[0m AttributeError: 'LeftZeroSemigroup_with_category.element_class' object has no attribute 'blah_blah'\n\u001b[1;32m 493\u001b[0m \"\"\"\n\u001b[0;32m--> 494\u001b[0m return self.getattr_from_category(name)\n\u001b[1;32m 495\u001b[0m \n\u001b[1;32m 496\u001b[0m cdef getattr_from_category(self, name):\n", "File \u001b[0;32m/usr/lib/python3/dist-packages/sage/structure/element.pyx:507\u001b[0m, in \u001b[0;36msage.structure.element.Element.getattr_from_category (build/cythonized/sage/structure/element.c:5017)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 505\u001b[0m else:\n\u001b[1;32m 506\u001b[0m cls = P._abstract_element_class\n\u001b[0;32m--> 507\u001b[0m return getattr_from_other_class(self, cls, name)\n\u001b[1;32m 508\u001b[0m \n\u001b[1;32m 509\u001b[0m def __dir__(self):\n", "File \u001b[0;32m/usr/lib/python3/dist-packages/sage/cpython/getattr.pyx:361\u001b[0m, in \u001b[0;36msage.cpython.getattr.getattr_from_other_class (build/cythonized/sage/cpython/getattr.c:2768)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 359\u001b[0m dummy_error_message.cls = type(self)\n\u001b[1;32m 360\u001b[0m dummy_error_message.name = name\n\u001b[0;32m--> 361\u001b[0m raise AttributeError(dummy_error_message)\n\u001b[1;32m 362\u001b[0m attribute = attr\n\u001b[1;32m 363\u001b[0m # Check for a descriptor (__get__ in Python)\n", "\u001b[0;31mAttributeError\u001b[0m: 'sage.matrix.matrix_rational_dense.Matrix_rational_dense' object has no attribute 'condition'" ] } ], "source": [ "A.condition(2)" ] }, { "cell_type": "code", "execution_count": 79, "id": "1974ac68", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "8.880167977688814" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Aunque sí podemos calcularlo con la definición\n", "A.norm(2)*A.inverse().norm(2)" ] }, { "cell_type": "markdown", "id": "dcb590bf", "metadata": {}, "source": [ "
\n", " Ejercicio 1. \n", " \n", "a) Calcula las normas 1,2 e infinito de la matriz\n", "$$A=\\left(\\begin{array}{rrrr} \n", "4 & -1 & 0 & 1 \\\\\n", "-1 & 4 & 0 & 0 \\\\\n", "1 & 0 & 5 & -1 \\\\\n", "-1 & 1 & 1 & 4 \\\\\n", "\\end{array}\n", "\\right)\n", ".$$\n", "\n", "b) Calcula un vector unitario con la norma 1, $u$, tal que $\\|Au\\|_1=\\|A\\|_1\\|u\\|_1$.\n", "\n", "c) Idem para las normas $2$ e $\\infty$.\n", "\n", "d) Calcular los autovectores unitarios (usar la orden de sage eigenvectors_right) con la norma euclídea de $A^tA$. Calcular su imagen por $A$. Comprobar que tanto los autovectores como sus imágenes son ortogonales, es decir, forman una base. Calcular $\\min_{\\|u\\|_2=1} \\|Au\\|_2$. Repetir el proceso cambiando $A$ por $A^{-1}$. ¿Qué relación hay entre la $1/\\|A^{-1}\\|_2$ y $\\min_{\\|u\\|_2=1} \\|Au\\|_2$?\n", "\n", "e) Calcular $\\min_{\\|u\\|_1=1} \\|A u\\|_1$. \n", "\n", "f) Idem para la norma infinito.\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "id": "146fb4b9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrrr}\n", "4 & -1 & 0 & 1 \\\\\n", "-1 & 4 & 0 & 0 \\\\\n", "1 & 0 & 5 & -1 \\\\\n", "-1 & 1 & 1 & 4\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 4 -1 0 1]\n", "[-1 4 0 0]\n", "[ 1 0 5 -1]\n", "[-1 1 1 4]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = matrix([[4,-1,0,1],[-1,4,0,0],[1,0,5,-1],[-1,1,1,4]])\n", "show(A)" ] }, { "cell_type": "code", "execution_count": 2, "id": "acb61b0a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(7.0, 5.469890020958683, 7.0)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.norm(1), A.norm(2), A.norm(oo)" ] }, { "cell_type": "code", "execution_count": 3, "id": "2cc418ee", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4, -1, 1, -1)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e1 = vector([1,0,0,0])\n", "A*e1" ] }, { "cell_type": "code", "execution_count": 4, "id": "9c87f2dd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "7" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eoo = vector([-1,1,1,1])\n", "(A*eoo).norm(oo)" ] }, { "cell_type": "code", "execution_count": 7, "id": "4970fadb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5.469890020958683" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.norm(2)" ] }, { "cell_type": "code", "execution_count": 9, "id": "cdb29231", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(1, 1.061313614664067?, -0.3040629487652186?, -0.2617200798609389?),\n", " (1, -0.2110760161194742?, -0.08523753713346103?, 3.063959508478343?),\n", " (1, -1.905561804862378?, -2.899118553128951?, -0.5383008864844724?),\n", " (1, -0.767332043682216?, 0.9149815390276303?, -0.3537822921329313?)]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B = A.transpose()*A\n", "# u1,u2,u3,u4 autovectores unitarios de B\n", "[ b[0] for l,b,m in B.eigenvectors_right()]" ] }, { "cell_type": "code", "execution_count": 12, "id": "152f9b13", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((0.6612029800113330?, 0.7017437247424805?, -0.2010473278345958?, -0.1730500967328569?),\n", " (0.3094971752943993?, -0.06532743076137235?, -0.02638077697185766?, 0.9482868130904632?),\n", " (0.2739384510137521?, -0.522006649134970?, -0.7941800457493748?, -0.1474613110228860?),\n", " (0.6260829360117611?, -0.4804134988044663?, 0.572854328350979?, -0.2214970561675562?))" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Autovectores unitarios\n", "u1,u2,u3,u4 = [ b[0]/b[0].norm(2) for l,b,m in B.eigenvectors_right()]\n", "u1,u2,u3,u4" ] }, { "cell_type": "code", "execution_count": 14, "id": "6e1407f6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2.914385999284149?,\n", " 4.182675517902756?,\n", " 5.009179864781266?,\n", " 5.469890020958684?)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# La norma se alcanza en u4\n", "(A*u1).norm(2), (A*u2).norm(2), (A*u3).norm(2), (A*u4).norm(2)" ] }, { "cell_type": "code", "execution_count": 15, "id": "1ed222d2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.9143859992841485" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1/A.inverse().norm(2)" ] }, { "cell_type": "code", "execution_count": null, "id": "a3766c3e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "79848842", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a907e045", "metadata": {}, "source": [ "
\n", " Ejercicio 2. \n", " \n", "a) Busca cómo definir en Sage las matrices de Hilbert. Calcula los números de condición de la matriz de Hilbert de dimensión 5 con la norma 1 y con la norma infinito. Calcula también su número de condición con ambas normas. ¿Qué piensas que ocurrirá al resolver un sistema definido por dicha matriz? \n", " \n", "b) Crea varias matrices aleatorias de dimensión 4. Calcula su determinante y su número de condición (con tu norma preferida). ¿Qué relación piensas que puede haber?\n", " \n", "c) Crea muchas matrices aleatorias de dimensión 4 y representa en una gráfica el determinante y el número de condición.\n", "
" ] }, { "cell_type": "code", "execution_count": null, "id": "531fa9a0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "7f6e6de5", "metadata": {}, "source": [ "
\n", " Ejercicio 3. Consideramos el sistema\n", "\n", "$$\\left(\\begin{array}{rr} 1 & 1/30 \\\\ 1 & 1/31 \\end{array}\\right)x=b,$$\n", "\n", "con $b$ un vector unitario con la norma 2. Suponemos que tenemos un pequeño error en el término independiente, es decir, en lugar de $b$, tenemos $b+\\tilde b$ y sabemos que $\\|\\tilde b\\|_2/\\|b\\|_2 = 1\\%$. \n", "\n", " a) Calcular el número de condición de la matriz del sistema con la norma euclídea.\n", " \n", " b) Acotar el error relativo de las soluciones.\n", " \n", " c) Encontrar $b$ y $\\tilde b$ en las condiciones anteriores para que el error sea máximo. \n", " \n", " d) Idem para mínimo.\n", " \n", " e) Repite el ejercicio cambiando la norma 2 por la norma 1.\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 32, "id": "968cc176", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rr}\n", "1.0 & 0.03333333333333333 \\\\\n", "1.0 & 0.03225806451612903\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 1.0 0.03333333333333333]\n", "[ 1.0 0.03225806451612903]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = matrix(RDF,[[1,1/30],[1,1/31]])\n", "show(A)" ] }, { "cell_type": "code", "execution_count": 35, "id": "f5128605", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1862.0005382120437" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# a)\n", "A.condition(2)" ] }, { "cell_type": "code", "execution_count": 36, "id": "91d25857", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "18.620005382120436" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# b)\n", "A.condition(2)*1/100" ] }, { "cell_type": "markdown", "id": "2929f64c", "metadata": {}, "source": [ "
\n", " Ejercicio 4. Consideramos la matriz\n", "\n", "$$A=\\left(\\begin{array}{rr} 2 & 3 \\\\ 4 & 5 \\end{array}\\right)$$\n", "\n", " a) Representa la imagen por $A$ de la bola unidad.\n", " \n", " b) Calcula los ejes de la elipse que has obtenido en el punto anterior y añádelos al gráfico anterior.\n", " \n", " c) Calcula la norma 2 de $A$. Añade al gráfico la circunferencia de centro el origen y radio $\\|A\\|_2$.\n", " \n", " d) Idem para la norma 2 de $A^{-1}$.\n", " \n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 16, "id": "a9721e62", "metadata": { "collapsed": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c(t) = [cos(t),sin(t)]\n", "parametric_plot(c(t),(t,0,2*pi))" ] }, { "cell_type": "code", "execution_count": 28, "id": "e961e5b2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2*cos(t) + 3*sin(t), 4*cos(t) + 5*sin(t))" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = matrix([[2,3],[4,5]])\n", "A*vector([cos(t),sin(t)])" ] }, { "cell_type": "code", "execution_count": 29, "id": "c6d2c430", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdYAAAHWCAYAAADKGqhaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABpI0lEQVR4nO3deZyN5fsH8M/Yxj6JFJG9ELJNsvS1tkibSimERPaiIrIWJluyjLVIlqRQsssSsu/LMMi+E2asxyzP74/Pb7Jkxlmec57nnPN5v17nNdGc51yDc67nvu/rvu4QwzAMiIiIiClSWR2AiIhIIFFiFRERMZESq4iIiImUWEVEREykxCoiImIiJVYRERETKbGKiIiYSIlVRETEREqsIn7AMAzExsZC/VxE7E+JVcQPXLp0CWFhYbh06ZLVoYjIPSixioiImEiJVURExERKrCIiIiZSYhWxscjISBQvXhzh4eFWhyIiTgrRsXEi9hcbG4uwsDDExMQga9asVocjIinQiFVERMRESqwi/iAxkV8dDuDaNSA+3tp4RCRZaawOQCTgGAYQGwucPn374+xZ/n7S49Kl23995QoTZkLCfx9Jcua8+d+pUwMZMgDp0998JP06Uybg/vv5yJ795tdb//uBB4AcOYBUur8WMZMSq4irEhKAEyeAAwf++zhxgknU4bj9OWnTMonddx+QJQuQNSsfDz10878zZQLSpGHCvPNx4wbQti0wdiy/Ly6OI9fr1/m4878vXwbOnweOHgX++Yf/ffHif3+WdOmAhx8G8uThI+m/CxQAChUCChZkshYRp6l4SeRuDAM4dgzYsQOIimLSPHiQXw8dYqJL8vDDTEAFCvC/H3oIePDB2x/ZsgEhIW6HY0rxUnw8cOECk+w///AG4Phx/pzHjt3+39ev3/7zFSoEFC4MFC0KFC/OR758Gu2K3IUSq8jly8CWLcD27UykO3fyERPD/58x483R252P/Pk59eplPq0KNgzg1Clg/37g77/52L8f2LcP2LOHU9YAR7IlSwJlygClS/NryZL88xIJYkqsElzi45k0168H1q3j16goFgelTcsRWcmSQIkSN78+8ojlIzPbbLdJTOSIdvduYNcuYOtWPqKiOEWeKhXw2GNMsmXLApUq8WtoqHUxi/iYEqsEtjNngD//BNauZSLdvJlrkKlTM3E++SRQoQIQ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\n", "text/plain": [ "Graphics object consisting of 2 graphics primitives" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "parametric_plot(A*vector([cos(t),sin(t)]),(t,0,2*pi)) +\\\n", "parametric_plot(A.norm(2)*vector([cos(t),sin(t)]),(t,0,2*pi),color='red')" ] }, { "cell_type": "code", "execution_count": null, "id": "5bd43b6e", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 9.5", "language": "sage", "name": "sagemath" }, "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.11.2" } }, "nbformat": 4, "nbformat_minor": 5 }