0% encontró este documento útil (0 votos)
3 vistas430 páginas

Algebra Python

El documento aborda la importancia del Álgebra Lineal en matemáticas y su aplicación en tecnología moderna, destacando su relevancia en la programación con Python. Se presenta una introducción a conceptos fundamentales de Álgebra Lineal y se propone el uso de la librería SciPy para facilitar su aprendizaje a través de ejemplos prácticos. El texto está diseñado como un recurso educativo para estudiantes de matemáticas e ingeniería, combinando teoría y práctica en programación.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas430 páginas

Algebra Python

El documento aborda la importancia del Álgebra Lineal en matemáticas y su aplicación en tecnología moderna, destacando su relevancia en la programación con Python. Se presenta una introducción a conceptos fundamentales de Álgebra Lineal y se propone el uso de la librería SciPy para facilitar su aprendizaje a través de ejemplos prácticos. El texto está diseñado como un recurso educativo para estudiantes de matemáticas e ingeniería, combinando teoría y práctica en programación.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Álgebra Lineal en Python

Jorge Mario García Usuga

30 de julio de 2014
A Gabriel, mi hijo amado. El
ángel que envió Dios del cielo
para salvarme de la oscuridad.
4
Prefacio

El Álgebra Lineal es una de los espacios académicos que más relevancia tiene en las
matemáticas actuales. Muchos de los problemas que se presentan en áreas aplicadas
y teóricos, conllevan algún tipo de proceso, en que el Álgebra Lineal tiene un papel
preponderante. La solución de Sistemas de ecuaciones lineas, los valores y vectores propios,
y las transformaciones lineales, parecen temas muy ajenos a nuestra realidad; pero hoy en
día, subyacen ocultos en una gran cantidad de aplicaciones, desde las redes de celulares,
hasta los vídeo juegos. En verdad, le debemos muchísimo al Álgebra lineal, gracias a ella
tenemos muchas de las bondades tecnológicas actuales.

Nunca pensamos en las matemáticas que aparecen bajo los productos básicos que usamos
a diario. En nuestros hogares, encendemos la televisión y no tenemos en cuenta que la
pantalla del televisor, es en realidad una matriz de puntos; que a su vez, es controlada por
un software, que alguien, en alguna parte implemento, después de incontables horas de
depuración progresiva, hasta obtener el software que usted usa, cuando cambia el canal
con el control remoto. Tampoco nos detenemos a pensar, ¿cómo saber que tipo de onda
usar para que el control remoto manipule el televisor? La verdad, pocas personas saben
la cantidad de matemáticas bajo su teléfono celular, de su computador y de muchos otros
artefactos presentes en su hogar.

De otro lado, y desde mi punto de vista como profesor de Matemáticas y como


programador; he comprobado, que la manipulación de algún tipo de lenguaje de
programación, ofrece al estudiante la posibilidad, de poner en practica muchos de los
conocimientos que se imparten en las aulas de clase1 . Muchos de mis estudiantes, han
manifestado, que cuando implementan rutinas en algún lenguaje de programación y
usan conceptos de álgebra lineal, es cuando verdaderamente lo entienden. Mejor aún,
dichos conceptos pocas veces son olvidados. Entonces, la combinación de Álgebra lineal
y la Programación de computadores, puede potencializar el aprendizaje de conceptos tan
complejos como las transformaciones lineales y los valores y vectores propios.

Cuando nos enfrentamos a la tarea de programar una rutina en un lenguaje de


programación, aquello que vamos a implementar debe estar completamente claro para
1 Esta información no es obtenida por ningún medio estadístico, es fruto de la observación de varios
años tanto de profesor de matemáticas como de programador.
6

el programador (estudiante); de otro modo, la ejecución de ese programa no dará los


resultados esperados. El estudiante tiene la posibilidad de corregir los errores, de ver
en forma real, como se aplica un concepto y sobre todo, de volver sobre sus pasos
para corroborar sus resultados. La programación de computadores hoy en día, es una
herramienta poderosa para fomentar valores como el espíritu autocrítico, la perseverancia,
la determinación, y sobre todo es una herramienta que permite al estudiante, manipular
los objetos matemáticos tan abstractos como las matrices.

Este texto tiene la intensión, de reunir estas dos ideas; por una parte, recoge los primeros
conceptos en el estudio del Álgebra lineal, desde el concepto de matriz y vector, hasta los
valores y vectores propios. De otro lado, utiliza la metodología de la manipulación de un
lenguaje de programación, para establecer un vínculo entre los conceptos abstractos de
Álgebra lineal y el aprendizaje de los mismos.

¿Por qué Python?


Algunos autores como González [21], Aranda [14], Marzal [22] y Bahit [23], nos muestran
las ventajas del uso de este lenguaje de programación, a continuación cito algunas de ellas
y otras que yo, como usuario continuo del lenguaje, he visto con respecto a la enseñanza
de conceptos:

Python es un lenguaje de programación con tipeado dinámico: En Python, no es


necesario declarar el tipo de una variable, el lenguaje lo autoinfiere.

Es fuertemente tipeado, es decir, Python permite modificar el tipo de una variable.

Es multi plataforma, Python esta diseñado para correr en: Unix, Solaris, Linux,
OS/2, MacOS y Windows.

Orientado a objetos: En realidad Python maneja tres paradigmas de programación:


Programación orientada a objetos, Programación funcional y Programación
estructurada.

Tiene una sintaxis muy simple y clara: algunos usuarios manifiestan que programar
en Python es como programar en pseudocódigo; con pocas palabras reservadas y en
algunos casos, apegadas a los conceptos matemáticos que se implementen en él.

Su simplicidad hace que se hagan programas muy complejos en cuestión de minutos.

Python exige al programador que sea ordenado y que formatee correctamente el


código programado.

Como hemos visto, Python es el lenguaje ideal para que un estudiante aprenda a
programar. Pero, para implementar rutinas que tengan que ver con Álgebra lineal
7

necesitamos una librería especial llamada SciPy, que en realidad se compone de las
librerías SciPy, Numpy y Mathplolib2 .

SciPy en realidad es un “ecosistema” 3 implementado en Python, de código abierto


(Licencia GNU); diseñado para matemáticas, ciencias e ingeniería. SciPy consta de los
siguientes paquetes:

NumPy: Una librería diseñada para manejar arreglos N-dimensiones y rutinas de


álgebra lineal.

SciPy: Librería con rutinas para ciencias en general, entre ellas: Optimización,
integración, interpolación, procesamiento de señales, Ecuaciones diferenciales
ordinarias, entre otras.

Matplotlib: Es una librería que permite la generación de gráficos 2D y 3D a partir de


listas o arreglos. Los gráficos generados son similares a Mathlab o Scilab.

IPython: Es una consola iterativa para el manejo de las librerías de SciPy.

SymPy: Es una librería hecha en Python para el manejo de matemáticas simbólicas.

Pandas: Es una librería de alto rendimiento hecha para el análisis de datos.

El paquete Scipy, es ideal para el manejo rápido de rutinas en álgebra lineal; razón por
la cual, lo escogí como el paquete principal para elaborar las rutinas que presento en este
texto.

Con este libro, pretendo hacer una introducción al Álgebra lineal, abordando los temas
que están presenten en el microcurrículo del programa de Licenciatura en Matemáticas
y de otras carreras como Ingeniería de sistemas, Ingeniería Civil, Electrónica, etc
de la Universidad del Quindío. Entre los temas a tratar están: Matrices y vectores,
Factorización de matrices, Solución de sistemas de ecuaciones lineales, Determinantes,
Espacios vectoriales, vectores, transformaciones lineales y Valores y vectores propios.

Este texto, fue concebido desde un punto de vista práctico, como complemento del libro
“Introducción al Álgebra Lineal ”[11] , que escribí en colaboración con los docentes Liliana
Ospina y Adrian Alonso, docentes de la Universidad del Quindío. Razón por la cual, no
incluyo las demostraciones de los teoremas, sin embargo, estos se pueden encontrar en
[11, 18, 19, 13, 24, 20, 15]; en algunas ocasiones, propongo dichas demostraciones como
ejercicios.

2 Para más información, consultar: [Link] y [Link]


3 Según dice su pagina web
8

Por otra parte, el libro trae diferentes ejemplos de los temas tratados; así como los
algoritmos4, tanto en su implementación como en su ejecución; es por eso que obtenemos
un cuadro donde aparece el código fuente del scrip y otro donde aparece el programa
cuando se ejecuta. Aunque Python y ScyPy traen algunas rutinas pre programadas,
(como por ejemplo la inversa de una matriz), por lo general, muestro como se podrían
implementar dichas subrutinas.

Como docente de Matemáticas, siempre espero que este trabajo sirva a todos aquellos que
están interesados en el Álgebra lineal y en la programación de computadores. Si usted
como usuario de este texto, encuentra algún error o tiene alguna sugerencia, no dude
en comunicármela; siempre tendré en cuenta todas las inquietudes y las incluiré en las
futuras actualizaciones del libro, el cual, estará disponible en la web con una licencia CC
(creative commons)5 .

Siempre he estado de acuerdo con las políticas de software libre, razón por la cual,
aprovecho para promover y recomendar esta práctica, en estudiantes y docentes de
matemáticas. Este texto fue diseñado enteramente en LATEX versión Texlive6 , usando
como editor LYX 2.17 , con la ayuda de los paquetes gráficos PSTricks8 , Pgfplots9 y el
software LaTexDraw10. Para los Algoritmos uso Python versión 2.7.711 y las librerías
NumPy versión 1.6.1, SciPy versión 0.9.0 y Matplotlib versión 1.1.1rc, además del editor
Spyder12 2.1.9 para la implementación del código. En cuanto a software externo y de
apoyo, utilicé Scilab13 versión 5.3 y Geogebra 4.41214 . Todo compilado en Linux Ubuntu15
12.04.3 LTS (Precise Pangolin).

Jorge Mario García Usuga


Armenia, Quindío Colombia
30 de julio de 2014

4 Todos los programas hechos en Python son llamados Algoritmos, debido a que en lo posible, se hacen

de la forma más general, sin usar “trucos” raros de programación. Siempre procuro que el estudiante tenga
una explicación de dichos algoritmos al final de cada uno de ellos.
5 Para más información ver [Link]
6 [Link]
7 [Link]
8 [Link]
9 [Link]
10 [Link]
11 [Link]
12 [Link]
13 [Link]
14 [Link]
15 [Link]
Índice general

1. Matrices y vectores 15
1.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1.1. Vectores fila y columna . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1.2. Manipulación de arreglos y matrices . . . . . . . . . . . . . . . . . 25
1.2. Solución de sistemas de ecuaciones lineales . . . . . . . . . . . . . . . . . . 28
1.2.1. Operaciones elementales por filas o renglones . . . . . . . . . . . . 29
1.2.2. Solución de un sistema de ecuaciones lineales . . . . . . . . . . . . 34
1.3. Operaciones entre matrices . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.3.1. Suma de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.3.2. Multiplicación por escalar . . . . . . . . . . . . . . . . . . . . . . 44
1.3.3. Diferencia entre matrices . . . . . . . . . . . . . . . . . . . . . . . 46
1.3.4. Multiplicación de matrices y vectores . . . . . . . . . . . . . . . . . 50
1.3.5. Producto escalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
1.3.6. Multiplicación de matrices . . . . . . . . . . . . . . . . . . . . . . 53
[Link]. Ley Asociativa en el producto de matrices . . . . . . . . . 55
[Link]. Ley distributiva de la multiplicación de matrices . . . . . 55
1.4. La transpuesta de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . 59
1.4.1. Propiedades de la matriz transpuesta . . . . . . . . . . . . . . . . 60
1.5. La inversa de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
1.5.1. ¿Cómo hallar la inversa de una matriz? . . . . . . . . . . . . . . . 67
1.6. Sistemas de ecuaciones lineales y la inversa de una matriz . . . . . . . . . 74

2. Factorización de matrices 79
2.1. Matrices elementales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.2. Factorización A = LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.3. Factorización P A = LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.4. Factorización QR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
2.5. Factorización de Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

3. Solución de sistemas de ecuaciones lineales 117


3.1. Usando la factorización A = LU . . . . . . . . . . . . . . . . . . . . . . . 118
3.2. Usando la factorización A = QR . . . . . . . . . . . . . . . . . . . . . . . 124
3.3. Usando la factorización de Cholesky . . . . . . . . . . . . . . . . . . . . . 128

9
10 ÍNDICE GENERAL

3.4. Método de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134


3.5. Método de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
3.6. Método de Relajación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
3.7. ¿Qué método usar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

4. Determinantes 169
4.1. Definición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
4.2. Determinante de matrices 2 × 2 . . . . . . . . . . . . . . . . . . . . . . . . 169
4.3. Determinante de matrices 3 × 3 . . . . . . . . . . . . . . . . . . . . . . . . 170
4.4. Determinantes de matrices de tamaño n × n . . . . . . . . . . . . . . . . 171
4.5. Propiedades de los determinantes . . . . . . . . . . . . . . . . . . . . . . 178
4.6. Determinante de matrices especiales . . . . . . . . . . . . . . . . . . . . . 182
4.6.1. Determinante de matrices elementales . . . . . . . . . . . . . . . . 186
4.7. La Inversa, el Determinante y la Adjunta de una matriz . . . . . . . . . . 189
4.8. La factorización de matrices en el cálculo del determinante . . . . . . . . . 194
4.9. Regla de Cramer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

5. Vectores y Espacios vectoriales 209


5.1. Nociones básicas de vectores en R2 . . . . . . . . . . . . . . . . . . . . . . 209
5.1.1. Suma de vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
5.1.2. Multiplicación por escalar . . . . . . . . . . . . . . . . . . . . . . 216
5.1.3. Diferencia de vectores . . . . . . . . . . . . . . . . . . . . . . . . . 218
5.1.4. Vector Unitario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
5.1.5. Ángulo entre vectores . . . . . . . . . . . . . . . . . . . . . . . . . 222
5.1.6. Vectores ortogonales . . . . . . . . . . . . . . . . . . . . . . . . . . 223
5.1.7. Vector proyección . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
5.2. Vectores en Rn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
5.2.1. Norma de un vector en Rn . . . . . . . . . . . . . . . . . . . . . . 232
5.2.2. Multiplicación por escalar en un vector en Rn . . . . . . . . . . . . 234
5.2.3. Vectores unitarios . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
5.2.4. Ángulos directores en R3 . . . . . . . . . . . . . . . . . . . . . . . 236
5.2.5. Ángulo entre dos vectores en R3 . . . . . . . . . . . . . . . . . . . 237
5.2.6. Producto cruz entre vectores de R3 . . . . . . . . . . . . . . . . . . 240
5.3. Espacio vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
5.3.1. Propiedades de los espacio vectoriales . . . . . . . . . . . . . . . . 260
5.4. Subespacio vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
5.5. Combinación lineal de vectores . . . . . . . . . . . . . . . . . . . . . . . . 266
5.5.1. Conjunto generador . . . . . . . . . . . . . . . . . . . . . . . . . . 268
5.5.2. Espacio generado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
5.6. Dependencia e independencia lineal de vectores . . . . . . . . . . . . . . . 276
5.7. Bases y dimensión de un espacio vectorial . . . . . . . . . . . . . . . . . . 281
5.8. Dimensión de un espacio vectorial . . . . . . . . . . . . . . . . . . . . . . 282
5.9. Subespacios asociados con una matriz . . . . . . . . . . . . . . . . . . . . 285
ÍNDICE GENERAL 11

5.9.1. Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

6. Transformaciones Lineales 293


6.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
6.2. La multiplicación de matrices como una transformación lineal . . . . . . 297
6.3. Transformaciones lineales uno a uno y sobre . . . . . . . . . . . . . . . . . 301
6.4. Transformaciones en el plano . . . . . . . . . . . . . . . . . . . . . . . . . 305
6.4.1. Transformación de reflexión . . . . . . . . . . . . . . . . . . . . . . 305
[Link]. Reflexión sobre los ejes x y y . . . . . . . . . . . . . . . . 305
[Link]. Reflexión sobre la recta y = x . . . . . . . . . . . . . . . 310
6.4.2. Transformación de rotación . . . . . . . . . . . . . . . . . . . . . . 315
6.4.3. Transformación de traslación . . . . . . . . . . . . . . . . . . . . . 319
6.4.4. Transformación de escalado . . . . . . . . . . . . . . . . . . . . . . 322

7. Vectores y valores propios 329


7.1. Vectores y valores propios . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
7.1.1. Propiedades de los valores propios . . . . . . . . . . . . . . . . . . 337
7.2. Métodos numéricos para hallar los valores propios . . . . . . . . . . . . . 342
7.2.1. Método de la potencia . . . . . . . . . . . . . . . . . . . . . . . . 342
7.2.2. Método de factorización QR para hallar los valores propios . . . . 346
7.3. Teorema de Cayley - Hamilton . . . . . . . . . . . . . . . . . . . . . . . . 351
7.4. Diagonalización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354

A. Introducción a Python 365


A.1. Instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
A.1.1. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
A.1.2. Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
A.1.3. MacOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
A.1.4. El IDE (Integrated Development Environment) . . . . . . . . . . . 367
A.2. Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
A.2.1. Ventajas de usar Python . . . . . . . . . . . . . . . . . . . . . . . . 368
A.3. La indentación en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
A.4. Mi primer programa en Python . . . . . . . . . . . . . . . . . . . . . . . . 371
A.5. La instrucción print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
A.6. Decisiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
A.7. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
A.7.1. Índices en listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
A.7.2. Operadores y funciones con listas . . . . . . . . . . . . . . . . . . 383
A.8. Ciclos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
A.8.1. El ciclo for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
A.8.2. Ciclo while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
A.9. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
A.9.1. Listas con un número indeterminado de argumentos . . . . . . . . 392
12 ÍNDICE GENERAL

[Link] de Diccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393


[Link]ón orientada a objetos . . . . . . . . . . . . . . . . . . . . . . 395

B. Ejemplo de solución de un sistema de tamaño 100 × 100 399


Índice de figuras

3.1. Aplicación de los métodos de Relajación con w = 0,85, Gauss-Seidel y


Jacobi, al ejemplo 3.10 (Iteraciones vs Error) . . . . . . . . . . . . . . . . 165
3.2. Tamaño de la matriz vs cantidad de operaciones necesarias para resolver
el sistema Ax = b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
−−→ −−→
5.1. Segmentos dirigidos P Q y QP . . . . . . . . . . . . . . . . . . . . . . . . . 211
−−→
5.2. Los vectores P Q y (4, 3) . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
5.3. La magnitud de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
5.4. Dirección de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
5.5. El vector v = (2, 5) con su magnitud y dirección . . . . . . . . . . . . . . 214
5.6. Suma de vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
5.7. El vector w = v1 + v2 = (3, 3) . . . . . . . . . . . . . . . . . . . . . . . . 216
5.8. Los vectores v, k1 v y k2 v . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
5.9. Los vectores v2 − v1 y v1 − v2 . . . . . . . . . . . . . . . . . . . . . . . . . 218
5.10. Los vectores v1 − v2 y v2 − v1 . . . . . . . . . . . . . . . . . . . . . . . . . 219
5.11. Los vectores v y su vector unitario u . . . . . . . . . . . . . . . . . . . . . 222
5.12. Ángulo entre los vectores v1 y v2 . . . . . . . . . . . . . . . . . . . . . . . 223
5.13. Los vectores ortogonales v1 y v2 . . . . . . . . . . . . . . . . . . . . . . . . 225
5.14. Los vectores u , v y proyv u . . . . . . . . . . . . . . . . . . . . . . . . . . 226
5.15. Los vectores v1 , v2 , proyv u y proyu v . . . . . . . . . . . . . . . . . . . . . 227
5.16. El espacio R3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
5.17. Los vectores u, v y w en R3 . . . . . . . . . . . . . . . . . . . . . . . . . . 231
5.18. Los vectores u, v, u + v y u − v . . . . . . . . . . . . . . . . . . . . . . . . 233
5.19. Los vectores v y kv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
5.20. Representación gráfica de los ángulos directores en R3 . . . . . . . . . . . 236
5.21. Los vectores u y v y el ángulo θ . . . . . . . . . . . . . . . . . . . . . . . 239
5.22. Los vectores u y v y el vector proyv u . . . . . . . . . . . . . . . . . . . . 240
5.23. Los vectores u, v, u × v y v × u . . . . . . . . . . . . . . . . . . . . . . . 242

6.1. Transformación de un objeto 3D en 2D. . . . . . . . . . . . . . . . . . . . 294


6.2. Reflexión eje x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
6.3. Reflexión eje y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
6.4. El triángulo ABC y las reflexiones sobre los ejes x y y . . . . . . . . . . . 308

13
14 ÍNDICE DE FIGURAS

6.5. El triángulo ABC y las reflexiones sobre y a lo largo de la recta y=x . . 313
6.6. Rotación en el plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
π
6.7. El triángulo ABC rotado . . . . . . . . . . . . . . . . . . . . . . . . . 317
3
6.8. Traslación de un punto en el plano . . . . . . . . . . . . . . . . . . . . . . 320
6.9. Traslación del triángulo ABC con h = 2 y k = −3 . . . . . . . . . . . . . 321
6.10. Escalado de un punto en el plano . . . . . . . . . . . . . . . . . . . . . . . 323
6.11. Triángulo ABC escalado con con Dx = 2 y Dy = 2 . . . . . . . . . . . . . 324

7.1. Ax = λx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
“Comienza haciendo lo que es necesario, después lo que es
posible y de repente estarás haciendo lo imposible”
San Francisco de Asís

Matrices y vectores
1
1.1. Matrices
Para comenzar, nos enfocaremos en el concepto principal del Álgebra Lineal, el concepto
de matriz.

.:Definición 1.1 (Definición de Matriz)


Una Matriz es un arreglo rectangular de números, determinados por filas o
renglones y columnas. Las matrices se denotarán con letras mayúsculas. A, B...
etc.

Los elementos en la matriz se ubican de acuerdo a filas y columnas, donde primero se


ubican las filas y posteriormente las columnas. Por ejemplo:
 
9 5 6
A= 4 1 0 
2 6 2

En la matriz A, la posición A32 o A3,2 hace referencia de la fila tres y la columna dos,
que en este caso es un 6. La posición A22 o A2,2 hace referencia a la fila dos y la columna
2, en cuyo caso es el 1.

15
16 1.1. Matrices

1.1.1. Vectores fila y columna


.:Definición 1.2 (Vector Fila y Columna)

Un vector fila de n componentes es un arreglo ordenado de números de la siguiente


forma:

a = (a1 , a2 . . . an )
Un vector Columna de n componentes es un arreglo ordenado de la siguiente forma:
 
b1
 b2 
 
b= . 
 .. 
bn

Los siguientes, son ejemplos de vectores fila y columna

.:Ejemplo 1.1

a = (5, 9, 6, 4, 7)
Es un vector fila de cinco componentes, donde, por ejemplo, la tercera componente a3 = 6.
Ahora bien,
 
1
 6 
b=  0 

4
Es un vector columna, donde b3 = 0.

.:Definición 1.3 (Definición formal de matriz)

Una matriz es una arreglo rectangular de m · n componentes ordenados en m filas


y n columnas de la siguiente forma:
 
a11 a12 ··· a1n
 a21
 a22 ··· a2n 

A= . .. .. ..
 ..

. . . 
am1 am2 ··· amn
1. Matrices y vectores 17

Las matrices se denotan con letras mayúsculas, así por ejemplo, tendremos la matriz
A. los componentes internos de la matriz, se harán con la misma letra pero minúscula
A = (aij ) que se lee “La matriz A de componentes aij ”.

.:Ejemplo 1.2

 
2 3 4 5  
 2 2 3 0  2 −8 4 5
A=
 9
, B=
3 4 1  3 0 1 2
6 4 −1 0
A es una matriz de 4 × 4, es decir, tiene 16 componentes en 4 filas y 4 columnas, de los
cuales a34 = 1 y a13 = 4. La matriz B tiene dos filas y cuatro columnas, donde b22 =0.

Podemos hablar de la i−ésima fila, por ejemplo la tercera fila


 de Asería (9, 3, 4, 1) o de
−8
la j−ésima columna, por ejemplo la segunda fila de B sería .
0
Bien, ahora que ya sabemos qué es una matriz y qué es un vector, veremos como
implementarlo en Python:

Primero debemos hacer un llamado de la librería Numpy. En este caso, la librería, queda
“cargada” en la variable np, y es por medio de esta variable que podemos utilizar los
nuevos tipos de matrices. Los siguientes ejemplos muestran cómo podemos crear tipos
básicos como numéricos, vectores y matrices.

.:Algoritmo 1.1

1 i m p o rt numpy a s np
2
3 p r i n t "Dato numerico "
4 num = np . f l o a t 3 2 ( 5 . 2 1 4 7 5 6 )
5 p r i n t num
6
7
8 p r i n t "Dato t i p o v e c t o r "
9 v e c = np . a r r a y ( [ 1 , 2 , 3 ] )
10 p r i n t vec
11
12 p r i n t "Dato t i p o M a tri z "
13 A = np . a r r a y ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] )
14 print A
18 1.1. Matrices

Si corremos este programa obtendremos la siguiente salida:

1 >>>
2 Dato numerico
3 5.21476
4 Dato t i p o v e c t o r
5 [1 2 3]
6 Dato t i p o M a tri z
7 [ [1 2 3]
8 [4 5 6]
9 [7 8 9]]
10 >>>

En este caso, hemos creado tres tipos de datos diferentes, el primero es una variable de
tipo numérica llamada num, se le ha asignado el valor de 5.214756, pero al imprimirlo
en pantalla muestra el valor de 5.21476. Posteriormente tenemos un vector de tres
componentes enteros, en este caso el vector [1 2 3] asociado a la variable vec, los valores
separados por espacios en blanco representan el vector fila vec = (1, 2, 3), y finalmente,
una matriz de enteros asociado a la variable A, la cual representa la matriz de enteros:
 
1 2 3
A= 4 5 6 
7 8 9
Los vectores y las matrices fueron creados con la función array de Numpy, las matrices
son básicamente arreglos de arreglos. Existen muchas formas de crear matrices y vectores,
y sobre todo de implementarlas con diferentes tipos numéricos, como real, entero largo
o complejo. El siguiente algoritmo muestra diversas formas de declarar un vector o una
matriz de diferentes tipos:

.:Algoritmo 1.2

1 i m p o rt numpy a s np
2
3 z1=np . a r r a y ( [ 1 , 2 , 3 ] , dtype= ’ f ’ )
4 p r i n t z1
5
6
7 z2=np . int_ ( [ 1 , 2 , 4 ] )
8 p r i n t z2
9
10
11 z3=np . bool_ ( [ 0 , 1 , 4 ] )
1. Matrices y vectores 19

12 p r i n t z3
13
14 z4=np . a r r a y ( [ 4 . j , 1 . + 3 . j , 9. −8. j , 1.+0. j ] )
15 p r i n t z4

El programa anterior produce la siguiente salida:

1 >>>
2 [ 1. 2. 3.]
3 [1 2 4]
4 [ F a l s e True True ]
5 [ 0.+4. j 1.+3. j 9. −8. j 1.+0. j ]
6 >>>

El Algoritmo 1.2 muestra cuatro arreglos distintos, el primero de ellos genera un vector de
tres componentes de tipo real, sin necesidad de ponerles el punto decimal para determinar
que son enteros, sólo se debe poner la opción dtype=’f ’ para que Python le asigne los
valores reales. El segundo arreglo (z2 ) genera un vector de enteros, en este caso usando el
comando int_(), el cual convierte los componentes del vector en enteros. Luego tenemos
un vector de valores booleanos, (usando el comando bool_) para convertir los enteros del
vector en valores de Falso o Verdadero; Observemos que en la salida del algoritmo sólo
el cero se convirtió en un valor de Falso, los demás valores toman valores de Verdadero.
Finalmente, creamos un vector de números complejos.

Según [12] para construir un arreglo con Numpy, se puede hacer de cinco formas diferentes:

1. Convirtiendo otras estructuras de Python (listas o tuplas) en formato de arreglo de


Numpy.

2. Directamente usando Numpy.

3. Leyendo archivos, generalmente de tipo texto u otros objetos.

4. Creando arreglos por filas usando buffers.

5. Usando otras librerías especiales.

Ya hemos visto que para crear un arreglo o una matriz con Numpy podemos usar la
función array, la cual nos permite generar la estructura que se comporta como un vector
o como una matriz, recordemos que una matriz se puede ver como un arreglo de arreglos.
20 1.1. Matrices

.:Definición 1.4 (Matriz y vector nulo)


Se dice que a es un vector nulo (bien sea fila o columna) si todos sus componentes
son cero:
 
0
 0 
 
a = (0, 0, . . . , 0) o a= . 
 .. 
0
De igual manera, una matriz es nula si todos sus componentes son cero:
 
0 0 0 ··· 0
 0
 0 0 ··· 0  
A= 0
 0 0 ··· 0  
 .. .. .. . . . 
 . . . . .. 
0 0 0 ··· 0

Estos vectores generalmente se denotan con un cero, es decir, podemos denotarlos usando
el símbolo 0, pero este no se debe confundir con la magnitud escalar cero, que es un
número real. En Numpy es fácil crear una matriz o un vector nulo, sólo basta usar la
instrucción zeros, con un tamaño específico.

.:Algoritmo 1.3

1 i m p o rt numpy a s np
2
3 x=np . z e r o s ( ( 3 , 3 ) , dtype=np . f l o a t )
4 print x
5
6 y=np . o n e s ( ( 3 , 3 ) , dtype=np . f l o a t )
7 print y
8
9 z=np . a r r a y ( [ [ 0. , 0. , 0.] , [ 0. , 0. , 0.]])
10 print z
11
12 w1=np . a ra n g e ( 1 0 )
13 p r i n t w1
14
15 w2=np . a ra n g e ( −4 , 4 , dtype=np . f l o a t )
16 p r i n t w2
17
18 w3=np . a ra n g e ( 0 , 1 , 0 . 1 )
19 p r i n t w3
1. Matrices y vectores 21

El programa anterior produce la siguiente salida:

1 >>>
2 [ [ 0. 0. 0.]
3 [ 0. 0. 0.]
4 [ 0. 0. 0.]]
5
6 [ [ 1. 1. 1.]
7 [ 1. 1. 1.]
8 [ 1. 1. 1.]]
9
10 [ [ 0. 0. 0.]
11 [ 0. 0. 0.]]
12
13 [0 1 2 3 4 5 6 7 8 9]
14
15 [ − 4 . −3. −2. −1. 0. 1. 2. 3.]
16
17 [ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
18 >>>

El Algoritmo 1.3 muestra el uso de la función zeros, el cual genera en este caso una matriz
nula cuadrada de tamaño tres, posteriormente tenemos la función ones, la cual genera
una matriz o un vector con unos. Luego tenemos un array creado de forma normal y por
último tenemos la función arange, la cual genera vectores con un valor que se incrementa
dependiendo de un valor específico. En este caso, w1 representa un vector de cero a nueve,
w2 un vector de -4 a 3 y w3 un vector de cero a uno con un incremento de 0.1.

Además, con la función arange, podemos determinar la forma del vector, inclusive
podemos convertirlo en una matriz con la función reshape, la cual recibe los parámetros
de filas y columnas.

.:Algoritmo 1.4

1 i m p o rt numpy a s np
2 a = np . a ra n g e ( 1 5 ) . r e s h a p e ( 3 , 5 ) p r i n t a

El programa anterior produce la siguiente salida:


22 1.1. Matrices

1 >>>
2 [ [ 0 1 2 3 4]
3 [ 5 6 7 8 9]
4 [ 1 0 11 12 13 1 4 ] ]
5 >>>

Como podemos ver, la función convierte el vector de salida en una matriz de tamaño
3 × 5.

.:Algoritmo 1.5

1 i m p o rt numpy a s np
2
3 x=np . l i n s p a c e ( 0 . , 1 0 . , 5 )
4 print x
5
6 y=np . i n d i c e s ( ( 3 , 4 ) )
7 print y

El programa anterior produce la siguiente salida:

1 >>>
2 [ 0. 2.5 5. 7.5 10. ]
3
4 [ [ [ 0 0 0 0]
5 [1 1 1 1]
6 [2 2 2 2]]
7
8 [ [ 0 1 2 3]
9 [0 1 2 3]
10 [0 1 2 3 ] ] ]
11
12 >>>

El programa 1.5 muestra el funcionamiento de los comandos linspace e indices. El primero


toma un intervalo, en este caso el intervalo [1, 10] y lo divide en cinco partes iguales. El
comando indices, genera dos matrices con valores incrementales iguales.

De igual forma podemos crear una matriz o un vector a partir de un archivo de texto. En
muchas de las aplicaciones científicas, se requiere almacenar gran cantidad de información
1. Matrices y vectores 23

en forma de matrices o vectores, muchas veces de tamaños que no podríamos manipular,


por esta razón, se hace necesario almacenar muchos datos en archivos de texto para su
posterior manipulación.

Para la manipulación de matrices cargadas bien sea por archivos o por variables tipo
string, se usa el comando StringIO, el cual permite crear matrices y arreglos con el
formato CSV, el cual usa comas o puntos y comas para separar los valores. El Algoritmo
1.6 muestra dos ejemplos de uso de esta función y de la función genfromtxt, la cual permite
cargar una cadena como una variable de tipo arreglo o matriz. En la primera parte del
ejemplo se puede ver como una cadena se convierte en una matriz de tamaño 4 × 2 y en
la segunda se crea una matriz de tamaño 2 × 2, pero usando el parámetro comments, el
cual permite agregar un carácter especial para los comentarios.

.:Algoritmo 1.6

1 i m p o rt numpy a s np
2 from S t r i n g I O i m p o rt S t r i n g I O
3
4
5 l i n e a = " 4 . 0 , 6 . 2 \n 8 . 7 , 3 . 9 \ n 1 . 0 , 5 . 2 \ n 4 . 0 , 6.9 "
6 x=np . g e n f ro m tx t ( S t r i n g I O ( l i n e a ) , d e l i m i t e r=" , " )
7 print x
8
9 print
10 p r i n t " ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ \ n"
11 print
12
13 d a t o s M a t r i z = """
14 % e s t o e s un c o m e n ta ri o
15 1.2 , 5.9
16 % esto es otro cometario
17 4.65 ,5.75
18 """
19
20 y = np . g e n f ro m tx t ( S t r i n g I O ( d a t o s M a t r i z ) , comments=" %" ,
21 d e l i m i t e r=" , " )
22
23 print y

El programa anterior produce la siguiente salida:

1 >>>
2 [ [ 4. 6.2]
3 [ 8.7 3.9]
24 1.1. Matrices

4 [ 1. 5.2]
5 [ 4. 6.9]]
6
7 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
8
9 [ [ 1.2 5.9 ]
10 [ 4.65 5.75]]
11 >>>

La instrucción y = [Link](StringIO(datosMatriz), comments=" %",


delimiter=","), contiene dos parámetros que son importantes cuando se va a crear una
matriz, el primero: comments=" %" implementa los comentarios que puede llevar el texto
de donde se va a cargar la matriz. El segundo, delimiter="," implementa el delimitador,
el cual me permite diferenciar entre los componentes de las filas de la matriz.

Otra forma de introducir matrices y arreglos es usando el comando matrix, el cual permite
convertir una cadena en un arreglo o matriz:

.:Algoritmo 1.7

1 i m p o rt numpy a s np
2
3 A = np . m a tri x ( ’ 3 9 8 ; 8 5 1 ; 9 8 7 ’ )
4 print A
5 print
6
7 B = np . m a tri x ( ’ 3 , 9 , 8 ; 8 , 5 , 1 ; 9 , 8 , 7 ’ )
8 print B
9 print
10
11
12 C = np . m a tri x ( ’ [ 3 , 9 , 8 ; 8 , 5 , 1 ; 9 , 8 , 7 ] ’ )
13 print C

El programa anterior produce la siguiente salida:

1 >>>
2 [ [3 9 8]
3 [8 5 1]
4 [9 8 7]]
5
6 [ [3 9 8]
7 [8 5 1]
1. Matrices y vectores 25

8 [9 8 7]]
9
10 [ [3 9 8]
11 [8 5 1]
12 [9 8 7]]
13 >>>

Como vemos, se puede hacer de varias formas, usando como separadores espacios en
blanco o comas, al final se obtiene el mismo resultado.

1.1.2. Manipulación de arreglos y matrices


Los arreglos y matrices son convenientes, en el momento en que podemos tener acceso a
los valores internos de los mismos. En Numpy se puede tener acceso a los valores internos
de un arreglo o una matriz simplemente llamando la variable y el índice entre corchetes
“[]”.

.:Algoritmo 1.8

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 2 , 3 ] ,
4 [4 ,5 ,6] ,
5 [7 ,8 ,9]])
6
7 B = np . a r r a y ( [ 0 . 2 1 , 0 . 5 4 , 0 . 9 8 , 0 . 1 4 , 0 . 1 4 7 , 0 . 9 ] )
8
9 p r i n t A[ 0 , 0 ]
10 print B[ 4 ]
11
12 p r i n t A. shape
13 p r i n t B . shape

El programa anterior produce la siguiente salida:

1 >>>
2 0.147
3 1
4 (3 , 3)
5 (6 ,)
6 >>>
26 1.1. Matrices

En el Algoritmo 1.8, vemos como se puede llamar el valor de la matriz A que se encuentra
en la posición 0,0 y en el vector B el valor de la posición 4, que en este caso es 0.147.
Además, usamos la opción shape, tanto para la matriz como para el vector; en la matriz
aparece la tupla (3,3) y en el vector (6,) indicando que es un vector fila.

De igual manera podemos acceder a filas y columnas de una matriz. El siguiente algoritmo
permite construir vectores fila o columna a partir de las filas o las columnas de una matriz.

.:Algoritmo 1.9

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 2 , 3 ] ,
4 [4 ,5 ,6] ,
5 [7 ,8 ,9]])
6
7 print A
8 p r i n t " ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ "
9 b=A [ 1 , : ]
10 print b
11 p r i n t " ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ "
12 c=A [ : , 1 ]
13 print c

El programa anterior produce la siguiente salida:

1 >>>
2 [ [1 2 3]
3 [4 5 6]
4 [7 8 9]]
5 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
6 [4 5 6]
7 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
8 [2 5 8]
9 >>>

La salida del Algoritmo 1.9 muestra la matriz A y los vectores b y c. El vector b fue creado
con la instrucción b=A[1,:], es decir, tomando la segunda fila de A (o fila 1, recuerde que
se inicia desde cero). El vector b se creó con la columna de uno de A. En este caso el
vector c sigue siendo un vector fila.
1. Matrices y vectores 27

.:Ejercicios 1.1

1. Dada la siguiente matriz:


 
7 −8 1 6 5

 4 −8 −9 −3 2 

A=
 5 7 5 1 −6 

 1 9 6 4 2 
8 1 1 1 2

realice las siguientes operaciones en la consola de python (recuerde cargar las


librerías necesarias) y describa su comportamiento.

a) A[2][1]
b) 2*A[3][2]
c) 7.0214*A[2][:]
d ) A[1][:]=(0.5)*A[1][:]
e) A[4][:]=A[2][:]

2. Haga un programa en Python que permita, dada una matriz, obtener un vector con
la diagonal de dicha matriz.

3. Haga un programa en Python que permita obtener la traza de una matriz de tamaño
n. Recuerde que la traza de una matriz es la suma de los elementos de la Diagonal
principal.

4. Cree una matriz de tamaño 3 × 3 aleatoria con el comando:


A=[Link]((3,3))

a) compárelo con los siguientes comandos anotando sus diferencias:


b) B=[Link]([Link]((3,3)))
c) B=[Link]([Link]((3,3)))
d ) B=[Link]([Link]((3,3)))
e) Ahora escriba el comando B=10*[Link]((3,3)) y repita las
ordenes anteriores:
f ) B=[Link]([Link]((3,3)))
g) B=[Link]([Link]((3,3)))
h) B=[Link]([Link]((3,3)))
i) Qué puede decir de los comandos [Link], [Link], [Link]?
28 1.2. Solución de sistemas de ecuaciones lineales

1.2. Solución de sistemas de ecuaciones lineales


Uno de los objetivos del álgebra lineal, es precisamente resolver sistemas de ecuaciones
lineales, es decir, un conjunto simultaneo de ecuaciones lineales con variables en común.

.:Definición 1.5 (Sistema de ecuaciones lineales)


Un sistema de ecuaciones lineales es un conjunto de ecuaciones de primer grado,
en los cuales la solución satisface todas y cada una de las ecuaciones del sistema.

Para representar un sistema de ecuaciones lineales en forma matricial, debemos construir


una matriz de coeficientes, la cual está compuesta por los coeficientes de las variables de
las ecuaciones del sistema:

.:Definición 1.6 (Matriz de Coeficientes)


Una matriz que se construye con los coeficientes de un sistema de ecuaciones
lineales se llama Matriz de coeficientes

.:Ejemplo 1.3 Dado el sistema de ecuaciones lineales:

2x + 3y − 9z = 1
x − 4y + 3z = 2
7x − 2y + 4z = −7

encuentre la matriz de coeficientes.

La matriz se forma tomado los coeficientes de las ecuaciones y ubicandolos en el mismo


orden; cada ecuación representará una fila en la matriz, y cada coeficiente se ubicará en
el mismo orden.

 
2 3 −9
 1 −4 3 
7 −2 4
Ahora bien, en este punto no se representan los valores constantes. Para ello usamos la
matriz de coeficientes aumentada.

.:Definición 1.7 (Matriz de coeficientes aumentada)


Una matriz que se construye con los coeficientes de un sistema de ecuaciones
lineales junto con una columna (separada por una línea vertical) con los elementos
de los términos constantes, se llama Matriz de coeficientes aumentada.
1. Matrices y vectores 29

En este caso el sistema estaría representado en la forma de una matriz de coeficientes


aumentada de la siguiente forma:
 
2 3 −9 1
A =  1 −4 3 2 
7 −2 4 −7

1.2.1. Operaciones elementales por filas o renglones


Las siguientes son las operaciones elementales por fila para matrices:

Operaciones elementales por fila:

1. Multiplicar una fila o renglón por un escalar diferente de cero.


Notación: fi → kfi
2. Sumar un múltiplo de una fila a otra fila.
Notación: fj → fj + kfi
3. Permutar dos filas o renglones.
Notación: fi ⇄ fj

.:Ejemplo 1.4 Resuelva el siguiente sistema de ecuaciones usando notación matricial y


teniendo en cuenta las operaciones elementales por fila.

x1 + x2 + 2x3 = 1
x1 − 4x2 + 6x3 = 2
−2x1 + x2 − 3x3 = 2
Recuerde que la matriz de coeficientes aumentada es la siguiente:
 
1 1 2 1
 1 −4 6 2 
−2 1 −3 2
Por eliminación Gaussiana

Aplicamos la operación elemental f2 → f2 + (−1)f1 , esto es:


   
1 1 2 1 1 1 2 1
 1 −4 6 2  f2 → f2 + (−1)f1  0 −5 4 1 
−2 1 −3 2 −−−−−−−−−−−−→ −2 1 −3 2
Ahora procederemos de la misma manera para la tercera fila, aplicamos la operación
elemental f3 → f3 + (2)f1 :
30 1.2. Solución de sistemas de ecuaciones lineales

   
1 1 2 1 1 1 2 1
 0 −5 4 1  f3 → f3 + (2)f1  0 −5 4 1 
−2 1 −3 2 −−−−−−−−−−−→ 0 3 1 4

Ahora multiplicamos la segunda fila por − 51 , esto es f2 → − 51 f2
 
  1 1 2 1
1 1 2 1    
1  
 0 −5 4 1  f2 → −  0 1
f2  − 54 − 51 
5 
0 3 1 4 −−−−−−−−−−−→  
0 3 1 4

Ahora, procederemos a eliminar la componente de la fila 3 y columna 2:


   
1 1 2 1 1 1 2 1
   
   
 0 1 − 54 − 15  f → f
 −3−−−−− 3 + (−3)f 2 0
 1 − 45 − 51 

  −−−−−−→  

17 23
0 3 1 4 0 0 5 5

5 5

Finalmente multiplicamos la última fila por 17 , es decir f3 → 17 f3
   
1 1 2 1 1 1 2 1
     
 f3 → 5 f3  0
   
 0 1 − 45 − 15 1 − 54 − 51 


 17
 −−−−−−−
 
−−−→  
17 23 23
0 0 5 5 0 0 1 17

Como usamos eliminación Gaussiana, podemos  realizar la sustitución regresiva para


44 15 23
obtener los valores. En este caso − 17 , 17 , 17 .

Por Gauss-Jordan

Retomamos donde quedamos en la eliminación Gaussiana:


 
1 1 2 1
 
 
 0
 1 − 54 − 51 

 
23
0 0 1 17

4

Procedemos de la misma manera dejando sólo los elementos de diagonal : f2 → f2 + 5 f3
1. Matrices y vectores 31

   
1 1 2 1 1 1 2 1
     
 f2 → f2 + 4 f3  0
   
 0 1 − 54 − 51 1 0 15
17



 5 
 −−−−−−−−−−−−−→ 


23 23
0 0 1 17 0 0 1 17

Ahora f1 → f1 + (−2) f3
   
1 1 2 1 1 1 0 − 29
17
   
 15
  15

 0 1 0  f1 → f1 + (−2) f3  0 1 0 
 17  −−−−−−−−−−−−−→  17 
   
23 23
0 0 1 17 0 0 1 17

Finalmente, eliminamos el 1 de la primera fila y segunda columna usando f1 → f1 +(−1) f2


 29
  44

1 1 0 − 17 1 0 0 − 17
   
 15
  15

 0 1 0  f1 → f1 + (−1) f2  0 1 0 
 17  −−−−−−−−−−−−−→  17 
   
23 23
0 0 1 17 0 0 1 17

La solución es la misma, sólo que esta esta en forma explícita:

Para implementar las operaciones elementales por fila, tendremos en cuenta las
operaciones entre vectores de Python.

Multiplicar una fila o renglón por un escalar diferente de cero fi → kfi

.:Algoritmo 1.10

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 1 , 2 ] ,
4 [1 , −4 ,6] ,
5 [ −2 ,1 , −3]])
6 print A
7
8 A[ 1 , : ] = 2 ∗A [ 1 , : ]
9 p r i n t " ∗∗∗∗∗∗∗∗∗∗∗∗∗"
10 p r i n t "A con l a segunda f i l a m u l t i p l i c a d a por 2 "
11 print A
32 1.2. Solución de sistemas de ecuaciones lineales

El programa anterior produce la siguiente salida:

1 >>>
2 [ [ 1 1 2]
3 [ 1 −4 6 ]
4 [ −2 1 − 3 ] ]
5 ∗∗∗∗∗∗∗∗∗∗∗∗∗
6 A con l a segunda f i l a m u l t i p l i c a d a por 2
7 [ [ 1 1 2]
8 [ 2 −8 1 2 ]
9 [ −2 1 − 3 ] ]
10 >>>

El Algoritmo 1.10, muestra como implementar la operación elemental de cambiar una fila,
por otra fila que es múltiplo de la primera. En este caso, la segunda fila fue cambiada por
la segunda fila de la matriz multiplicada por 2.

Sumar un múltiplo de una fila a otra fila fj → fj + kfi

.:Algoritmo 1.11

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 1 , 2 ] ,
4 [1 , −4 ,6] ,
5 [ −2 ,1 , −3]])
6 print A
7
8 A[ 1 , : ] =A [ 1 , : ] + ( −1) ∗A [ 0 , : ]
9 p r i n t " ∗∗∗∗∗∗∗∗∗∗∗∗∗"
10 p r i n t "La nueva m a t r i z A"
11 print A

El programa anterior produce la siguiente salida:

1 >>>
2 [ [ 1 1 2]
3 [ 1 −4 6 ]
4 [ −2 1 − 3 ] ]
5 ∗∗∗∗∗∗∗∗∗∗∗∗∗
1. Matrices y vectores 33

6 La nueva m a t r i z A
7 [ [ 1 1 2]
8 [ 0 −5 4 ]
9 [ −2 1 − 3 ] ]
10 >>>

El Algoritmo 1.11 cambia una fila por la misma fila, más el múltiplo escalar de otra. En
este caso, tomamos la segunda fila y la cambiamos por la segunda fila más la primera fila
multiplicada por (−1) ; lo anterior, con el fin de convertir la posición 2,1 en un cero.

Permutar dos filas o renglones fi ⇄ fj

.:Algoritmo 1.12

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 1 , 2 ] ,
4 [1 , −4 ,6] ,
5 [ −2 ,1 , −3]])
6
7 print A
8 a=np . a r r a y ( [ 0 , 0 , 0 ] )
9 b=A [ 0 , : ]
10 c=A [ 1 , : ]
11
12 A = np . a r r a y ( [ c ,
13 b,
14 [ −2 ,1 , −3]])
15
16 print A

El programa anterior produce la siguiente salida:

1 >>>
2 [ [ 1 1 2]
3 [ 1 −4 6 ]
4 [ −2 1 − 3 ] ]
5
6 [ [ 1 −4 6 ]
7 [ 1 1 2]
8 [ −2 1 − 3 ] ]
9 >>>
34 1.2. Solución de sistemas de ecuaciones lineales

En este caso, se intercambiaron las filas primera y segunda, pero hemos vuelto a crear la
matriz A, para no recurrir a los paquetes de copiado de objetos en Python. Es importante
resaltar que en la salida del Algoritmo 1.12, se muestra la matriz A antes del intercambio
y después de él.

Con las operaciones elementales por fila, tenemos la posibilidad de encontrara la solución
a un sistema de ecuaciones lineales, sin recurrir a las funciones de Python para hallar la
solución.

1.2.2. Solución de un sistema de ecuaciones lineales


Los sistemas de ecuaciones lineales, son el punto culminante de muchos problemas en
Matemáticas. Muchas técnicas y métodos resuelven problemas, llevando todo a la solución
de un sistema de ecuaciones lineales. Métodos como la interpolación directa, la solución
de ciertos sistemas de ecuaciones diferenciales y algunos problemas de optimización son
ejemplos de la importancia de este tema.

Para resolver un sistema de ecuaciones lineales, podemos recurrir a varios métodos,


algunos más eficientes que otros. Dentro de esta categoría de algoritmos podemos
encontrar los métodos directos y los indirectos o iterativos.

Métodos directos: Estos métodos van desde los más simples hasta los mas complejos,
entre ellos tenemos:

1. Sustitución.

2. Igualación.

3. Eliminación Gaussiana y Gauss - Jordan.

4. Usando Determinantes.

5. Usando la Inversa de una matriz.

6. Factorizando la matriz (LU, LDU, etc ).

Métodos Indirectos: Estos métodos, también llamados métodos iterativos, utilizan una
descomposición especial de la matriz de coeficientes; este proceso termina con un ciclo
que hace referencia a un proceso iterativo de suma y multiplicación de la matriz y otros
vectores. Entre los más reconocidos tenemos el método de Jacobi y el método de Gauss
1. Matrices y vectores 35

- Seidel. Estos métodos, por su naturaleza iterativa no entregan una solución exacta del
problema, en su lugar, entregan una solución aproximada, la ventaja radica en su relativa
baja complejidad.

Para esta sección, implementaremos el método de Gauss - Jordan y más adelante, los
métodos iterativos de Jacobi y Gauss - Seidel. Antes que nada, Numpy ya trae una
herramienta eficiente para resolver sistemas de ecuaciones lineales.

Supongamos que debemos resolver el siguiente sistema:

x + y + 2z = −4
x − 4y + 6z = 2
−2x + y − 3z = −1

De donde la matriz A de coeficientes y el vector b de términos independientes esta dada


por:
   
1 1 2 −4
A =  1 −4 6  y b= 2 
−2 1 −3 −1
Para resolverlo utilizaremos el Algoritmo 1.13, dado a continuación.

.:Algoritmo 1.13

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 1 , 2 ] ,
4 [1 , −4 ,6] ,
5 [ −2 ,1 , −3]])
6
7 b = np . a r r a y ( [ [ − 4 ] ,
8 [2] ,
9 [ −1]])
10
11 x = np . l i n a l g . s o l v e (A, b )
12
13 print x

El programa anterior produce la siguiente salida:


36 1.2. Solución de sistemas de ecuaciones lineales

1 >>>
2 [ [ 1.64705882]
3 [ −2.47058824]
4 [ −1.58823529]]
5 >>>

La solución está dada por la rutina solve, que está en la librería linalg, la solución al
sistema está dado por el vector x:
 
1.64705882
x =  −2.47058824 
−1.58823529
La instrucción solve, sólo necesita dos parámetros, el primero es la matriz de coeficientes
y el segundo es el vector de constantes. Sin embargo, en esta sección implementaremos el
algoritmo de eliminación Gauss - Jordan, Los demás métodos los implementaremos más
adelante.

Tomemos como ejemplo el siguiente sistema:

3x + 5y − 9z = −1
6x − 2y + 4z = 1
−7x + 2y − 3z = −5

De donde la matriz A de coeficientes y el vector b de términos independientes está dada


por1 :
   
3 5 −9 −1
A =  6 −2 4  y b= 1 
−7 2 −3 −5
El Algoritmo 1.14 implementará el método de Gauss - Jordan usando la matriz aumentada
A′ :
 
3 5 −9 −1
A′ =  6 −2 4 1 
−7 2 −3 −5

.:Algoritmo 1.14

1 Como los valores obtenidos son de tipo real, hemos creado la matriz de A y A′ de tipo real (float)
1. Matrices y vectores 37

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 3 , 5 , − 9 , − 1 ] ,
4 [6 , −2 ,4 ,1] ,
5 [ − 7 , 2 , − 3 , − 5 ] ] , dtype=f l o a t )
6
7
8 p r i n t "La m a t r i z aumentada A="
9 print A
10
11
12 # R e a l i z a m o s l o s Cambios
13 #h a c i e n d o o p e r a c i o n e s e l e m e n t a l e s
14 #por f i l a a l a m a t r i z aumentada
15
16 # c o n v e r t i m o s e l p ri m e r p i v o t e en 1
17 A[ 0 , : ] = ( 1 . 0 / A[ 0 , 0 ] ) ∗A [ 0 , : ]
18 p r i n t "La nueva m a t r i z A: "
19 print A
20
21
22 #Hacemos l o s e l e m n t o s b a j o e s t e p i v o t e cero
23 A[ 1 , : ] =A [ 1 , : ] + (−1∗A [ 1 , 0 ] ) ∗A [ 0 , : ]
24 A[ 2 , : ] =A [ 2 , : ] + (−1∗A [ 2 , 0 ] ) ∗A [ 0 , : ]
25 p r i n t "La nueva m a t r i z A: "
26 print A
27
28
29 # c o n v e r t i m o s e l segundo p i v o t e en 1
30 A[ 1 , : ] = ( 1 . 0 / A[ 1 , 1 ] ) ∗A [ 1 , : ]
31 p r i n t "La nueva m a t r i z A: "
32 print A
33
34 #Hacemos l o s e l e m n t o s b a j o y s o b r e este pivote cero
35 A[ 0 , : ] =A [ 0 , : ] + (−1∗A [ 0 , 1 ] ) ∗A [ 1 , : ]
36 A[ 2 , : ] =A [ 2 , : ] + (−1∗A [ 2 , 1 ] ) ∗A [ 1 , : ]
37 p r i n t "La nueva m a t r i z A: "
38 print A
39
40 # c o n v e r t i m o s e l t e r c e r p i v o t e en 1
41 A[ 2 , : ] = ( 1 . 0 / A[ 2 , 2 ] ) ∗A [ 2 , : ]
42 p r i n t "La nueva m a t r i z A: "
43 print A
44
45
46 #Hacemos l o s e l e m n t o s s o b r e este pivote cero
47 A[ 1 , : ] =A [ 1 , : ] + (−1∗A [ 1 , 2 ] ) ∗A [ 2 , : ]
48 A[ 0 , : ] =A [ 0 , : ] + (−1∗A [ 0 , 2 ] ) ∗A [ 2 , : ]
49 p r i n t "La nueva m a t r i z A: "
50 print A
38 1.2. Solución de sistemas de ecuaciones lineales

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z aumentada A=
3 [ [ 3. 5 . −9. − 1 . ]
4 [ 6 . −2. 4 . 1.]
5 [ −7. 2 . −3. − 5 . ] ]
6 La nueva m a t r i z A:
7 [ [ 1. 1 . 6 6 6 6 6 6 6 7 −3. −0.33333333]
8 [ 6. −2. 4. 1. ]
9 [ −7. 2. −3. −5. ]]
10 La nueva m a t r i z A:
11 [[ 1. 1.66666667 −3. −0.33333333]
12 [ 0. −12. 22. 3. ]
13 [ 0. 1 3 . 6 6 6 6 6 6 6 7 −24. −7.33333333]]
14 La nueva m a t r i z A:
15 [[ 1. 1.66666667 −3. −0.33333333]
16 [ −0. 1. −1.83333333 −0.25 ]
17 [ 0. 1 3 . 6 6 6 6 6 6 6 7 −24. −7.33333333]]
18 La nueva m a t r i z A:
19 [ [ 1. 0. 0.05555556 0.08333333]
20 [ −0. 1. −1.83333333 −0.25 ]
21 [ 0. 0. 1.05555556 −3.91666667]]
22 La nueva m a t r i z A:
23 [ [ 1. 0. 0.05555556 0.08333333]
24 [ −0. 1. −1.83333333 −0.25 ]
25 [ 0. 0. 1. −3.71052632]]
26 La nueva m a t r i z A:
27 [ [ 1. 0. 0. 0.28947368]
28 [ 0. 1. 0. −7.05263158]
29 [ 0. 0. 1. −3.71052632]]
30 >>>

En el Algoritmo 1.14, hemos implementado los pasos necesarios para encontrar la solución
al sistema, el cual como podemos ver, es la ultima columna de la matriz A′ .

  −−−−−−−−−−−→  
3 5 −9 −1 Operaciones 1 0 0 0.28947368
A′ =  6 −2 4 1  elementales  0 1 0 −7.05263158 
−7 2 −3 −5 por fila 0 0 1 −3.71052632

El problema de resolver un sistema de ecuaciones lineales, se puede abordar usando otras


operaciones entre matrices, como la inversa y los determinantes.
1. Matrices y vectores 39

El siguiente algoritmo, proporciona una versión más general para resolver sistemas de
ecuaciones lineales, ofreciendo como parámetro una matriz aumentada [A b], donde la
última columna es el vector b de términos independientes.

.:Algoritmo 1.15

1 i m p o rt numpy a s np
2
3 A=np . random . rand ( 3 , 4 )
4
5 p r i n t "La m a t r i z A aumentada : \ n A= " , A
6
7 f i l a s , columnas= np . shape (A)
8
9 f o r i i n ra n g e ( f i l a s ) :
10 A[ i , : ] =A[ i , : ] / A[ i , i ]
11 f o r j i n ra n g e ( i +1 , columnas −1) :
12 A[ j , : ] =A[ j , : ] −A[ i , : ] ∗ A[ j , i ]
13
14
15 f o r i i n r e v e r s e d ( ra n g e ( f i l a s ) ) :
16 f o r j i n r e v e r s e d ( ra n g e ( 0 , i ) ) :
17 A[ j , : ] =A[ j , : ] −A[ i , : ] ∗ A[ j , i ]
18
19 p r i n t " l a nueva m a t r i z : \n" , A
20 p r i n t " El v e c t o r s o l u c i o n e s : \n" , A [ : , f i l a s ]

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A aumentada :
3 A= [ [ 0 . 2 6 4 7 1 6 3 8 0.11290115 0.69901363 0.03481052]
4 [ 0.14554075 0.87124262 0.42543185 0.2109904 ]
5 [ 0.98181314 0.99841436 0.154905 0.41569269]]
6
7 l a nueva m a t r i z :
8 [ [ 1. 0. 0. 0.18870122]
9 [ 0. 1. 0. 0.24016856]
10 [ −0. −0. 1. −0.06045246]]
11
12 El v e c t o r s o l u c i o n e s :
13 [ 0.18870122 0.24016856 −0.06045246]
14
15 >>>
40 1.2. Solución de sistemas de ecuaciones lineales

En el Algoritmo 1.15, usamos comandos como filas, columnas= [Link](A), el cual


devuelve el tamaño de la matriz en una tupla y lo almacenamos en las variables filas
y columnas. Además, en las líneas 15 y 16 usamos el comando reversed(range(filas)), el
cual devuelve un arreglo en sentido inverso.

.:Ejercicios 1.2

1. Dada la matriz A y el vector b:

   
5 8 −9 3 0
A= 4 6 5 −1  y b =  −1 
−2 3 3 0 −2

Resuelva el sistema Ax = b encontrando todas las soluciones en forma general.

2. Dada la matriz A:

 
9 −1 −3
A= 7 1 9 
9 0 4

Resuelva el sistema Ax = b escogiendo el vector b aleatoriamente y encontrando


todas las soluciones en forma general.

3. Utilice el método de eliminación de Gauss-Jordan para hallar todas las soluciones,


si existen, para los sistemas dados:

a) c)
3.021x + 4.3914y − 9.002z = 34
5x + 9y − 7z = 7
0.3258x + 0.258y − 9.0214z = 52.07
6x + y − 7z = 2
0.1478x − 0.0231y − 6.0298z = 4.011
3x − 10y − 15z = 0
b)
π π π π d)
x+ y+ z =
3 8 3 32
6π 7π 5π π
x− y− z = x + y − 4z + 2w = 2
5 8 8 5
π π 7π π x − y − 7z + w = 3
x− y+ z = −x + y − z − 4w = 3
3 8 12 11
1. Matrices y vectores 41

4. Considere el siguiente sistema:

x − y + 2z = a
3x + 8y − z = b
7x + 9y − 4z = c

encuentre las condiciones sobre a, b y c para que el sistema tenga única solución.
¿cómo podría implementar este ejercicio en Python?

5. Haga un programa en Python, donde se implemente el método de eliminación


Gaussiana. Valide el programa para que, en caso de que un pivote se haga cero,
se realice un intercambio de filas. Muestre la matriz aumentada resultante y los
pivotes.

1.3. Operaciones entre matrices


1.3.1. Suma de matrices
Esta es la primera operación elemental que se puede realizar con matrices.

.:Definición 1.8 (Suma de Matrices):

Si tenemos dos matrices A = (aij ) y B = (bij ) ambas de tamaño m × n, la suma


de A y B denotada como (A + B) también de tamaño m × n, se define como:

A+B = (aij + bij )


 
a11 + b11 a12 + b12 a13 + b13 ··· a1n + b1n

 a21 + b21 a22 + b22 a23 + b23 ··· a2n + b2n 

=  .. .. .. .. .. 
 . . . . . 
am1 + bm1 am2 + bm2 am3 + bm3 ··· amn + bmn

En la suma de matrices, la matriz resultante es la suma término a término de los elementos


de ambas matrices.

.:Ejemplo 1.5

 
    1 −2
1 3 5 −1
A= , B= , C = 1 4 
2 4 1 −6
9 −1
42 1.3. Operaciones entre matrices

La operación A + B
 
6 2
A+B =
3 −2
Pero, A + C y B + C no están definidas, debido a que tiene tamaños diferentes.

Python y Numpy implementan la suma de matrices con el operador binario “+”, si A y


B son matrices, entonces la suma A + B se implementa simplemente usando el operador
suma. El Algoritmo 1.16 muestra como hacerlo:

.:Algoritmo 1.16

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 6 , 5 ] ,
4 [1 , −2] ,
5 [4 , −1]])
6
7
8 B = np . a r r a y ( [ [ 7 , 1 ] ,
9 [0 , −8] ,
10 [4 ,1]])
11
12 C=A+B
13
14 p r i n t "La m a t r i z A="
15 print A
16
17 p r i n t "La m a t r i z B="
18 print B
19
20 p r i n t "La m a t r i z C=A+B"
21 print C

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A=
3 [ [ 6 5]
4 [ 1 −2]
5 [ 4 −1]]
6 La m a t r i z B=
7 [ [ 7 1]
8 [ 0 −8]
9 [ 4 1]]
1. Matrices y vectores 43

10 La m a t r i z C=A+B
11 [ [ 13 6]
12 [ 1 −10]
13 [ 8 0]]
14 >>>

No es difícil implementar la suma de matrices en Python. De igual manera, podemos


hacer el algoritmo que sume término a término los elementos de la matriz. Veamos el
Algoritmo 1.17:

.:Algoritmo 1.17

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 3 , − 2 ] ,
4 [5 ,1] ,
5 [ − 7 , 9 ] ] , dtype=f l o a t )
6
7
8 B = np . a r r a y ( [ [ 6 , 6 ] ,
9 [ −8 ,7] ,
10 [ − 1 , 4 ] ] , dtype=f l o a t )
11
12 C = np . z e r o s ( ( 3 , 2 ) )
13
14 f o r i i n ra n g e ( 3 ) :
15 f o r j i n ra n g e ( 2 ) :
16 C [ i , j ]=A[ i , j ]+B [ i , j ]
17
18
19 p r i n t "La m a t r i z A="
20 print A
21
22 p r i n t "La m a t r i z B="
23 print B
24
25 p r i n t "La m a t r i z C="
26 print C

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A=
44 1.3. Operaciones entre matrices

3 [ [ 3 . −2.]
4 [ 5. 1.]
5 [ −7. 9.]]
6 La m a t r i z B=
7 [ [ 6. 6.]
8 [ −8. 7.]
9 [ −1. 4.]]
10 La m a t r i z C=
11 [[ 9. 4.]
12 [ −3. 8.]
13 [ −8. 13.]]
14 >>>

En el Algoritmo 1.17 usamos dos ciclos for para recorrer las matrices, recuerde que estas
matrices no son cuadradas y por tanto los contadores i y j tienen límites diferentes.

1.3.2. Multiplicación por escalar


.:Definición 1.9 (Producto de una matriz por un escalar)
Sea A = (aij ) una matriz de tamaño m × n y α un escalar (un número real) , el
producto escalar αA se define como:
 
αa11 αa12 . . . αa1n
 αa21 αa22 . . . αa2n 
 
αA = (αaij ) =  .. .. . . .. 
 . . . . 
αam1 αam2 . . . αamn

En la multiplicación por escalar, se multiplica la constante por cada uno de los


componentes de la matriz.

.:Ejemplo 1.6
Sea α = 5, realice el producto αA sí:
 
1 4 −1
A =  6 2 −2 
−1 1 4
Multiplicando aαA se tiene que:
 
5 20 −5
αA =  30 10 −10 
−5 5 20
1. Matrices y vectores 45

La multiplicación por escalar es la más simple de las operaciones, ya la hemos trabajado


en las operaciones elementales por fila en el Algoritmo 1.10. Sin embargo, sólo o hemos
hecho para una fila y no para la matriz completa. En el Algoritmo 1.18, se implementa
dos maneras diferentes de hacer la multiplicación por escalar.

.:Algoritmo 1.18

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 3 , − 2 , 7 ] ,
4 [5 ,1 ,6] ,
5 [ − 7 , 9 , 3 ] ] , dtype=f l o a t )
6
7 B = np . a r r a y ( [ [ 1 , 7 , − 4 ] ,
8 [ −3 ,2 ,7] ,
9 [ 2 , 0 , − 4 ] ] , dtype=f l o a t )
10
11 p r i n t "La m a t r i z A="
12 print A
13
14 A= 4∗A
15
16 p r i n t "La m a t r i z 4A="
17 print A
18
19 B = np . a r r a y ( [ [ 1 , 7 , − 4 ] ,
20 [ −3 ,2 ,7] ,
21 [ 2 , 0 , − 4 ] ] , dtype=f l o a t )
22
23 p r i n t "La m a t r i z B="
24 print B
25
26 f o r i i n ra n g e ( 3 ) :
27 f o r j i n ra n g e ( 3 ) :
28 B [ i , j ]=5∗B [ i , j ]
29
30 p r i n t "La m a t r i z 5B="
31 print B

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A=
3 [ [ 3 . −2. 7.]
4 [ 5. 1. 6.]
5 [ −7. 9. 3.]]
46 1.3. Operaciones entre matrices

6 La m a t r i z 4A=
7 [ [ 12. −8. 28.]
8 [ 20. 4. 24.]
9 [ −28. 36. 12.]]
10 La m a t r i z B=
11 [ [ 1. 7 . −4.]
12 [ −3. 2. 7.]
13 [ 2. 0. −4.]]
14 La m a t r i z 5B=
15 [[ 5. 35. −20.]
16 [ −15. 10. 35.]
17 [ 10. 0. −20.]]
18 >>>

El Algoritmo 1.18, muestra dos formas distintas de trabajar con la multiplicación por
escalar, la primera de ellas se hace normalmente, simplemente multiplicamos la matriz
por el escalar, en este caso 4A. La segunda forma, implementa la multiplicación de la
matriz B por el escalar 5, pero en esta ocasión, se hace término a término con la matriz
B.

1.3.3. Diferencia entre matrices


.:Definición 1.10 (Diferencia de matrices)

Sea A = (aij ) y B = (bij ) matrices de tamaño m × n, la diferencia entre A y B


se define de la siguiente forma:

A − B = A + (−1)B

.:Ejemplo 1.7

Sea

   
5 3
a= 6  y b= 2 
−1 −1

Realice la operación: a − b:
1. Matrices y vectores 47


  
5 3
a−b =  6  + (−1)  2 
−1 −1
     
5 −3 2
=  6  +  −2  =  4 
−1 1 0
El siguiente teorema recoge las principales propiedades de la suma, resta y multiplicación
por escalar en matrices.

.:Teorema 1.1 Sean A, B y C matrices de tamaño m × n y α,β escalares. Entonces:


1. A + B = B + A Ley asociativa de la suma de matrices
2. A + 0 = 0 + A = A, elemento neutro de la suma de matrices
3. 0A = 0
4. (A + B) + C = A + (B + C), propiedad asociativa de la suma de matrices.
5. α(A + B) = αA + αB, propiedad distributiva de la multiplicación por escalar frente
a la suma de matrices.
6. 1A = A, elemento neutro de la multiplicación por escalar.
7. (α + β)A = αA + βA

.:Ejemplo 1.8

Sea A y B definidas como:


   
4 2 −9 3 1 4
A =  9 4 −1  y B= 9 8 −7 
2 3 4 −4 2 1
Es fácil ver que A + B = B + A

   
4 2 −9 3 1 4
A+B =  9 4 −1  +  9 8 −7 
2 3 4 −4 2 1
 
7 3 −5
=  18 12 −8 
−2 5 5
48 1.3. Operaciones entre matrices

De igual manera

   
3 1 4 4 2 −9
B+A =  9 8 −7  +  9 4 −1 
−4 2 1 2 3 4
 
7 3 −5
=  18 12 −8 
−2 5 5

.:Ejemplo 1.9

Dada las matrices A, B y C:


     
4 2 −9 2 5 −1 2 9 0
A= 9 4 −1  , B= 1 0 −7  y C= 1 2 8 
2 3 4 7 1 2 0 3 2
y los escalares α = −3 y β = 0.8, teniendo en cuenta el teorema 1.1, realice un programa
en Python que calcule las siguientes operaciones: (ver Algoritmo 1.19)
1. A + αB − βC
2. 2αβA + βB − C
     
β 2α
3. αβ A − α C − 3β B

.:Algoritmo 1.19

1 i m p o rt numpy a s np
2
3 ## d e c l a ra m o s la s matrices y la s constantes
4 a=−3.0
5 b=0.8
6
7 A = np . a r r a y ( [ [ 4 , 2 , − 9 ] ,
8 [9 ,4 , −1] ,
9 [ 2 , 3 , 4 ] ] , dtype=f l o a t )
10
11 B = np . a r r a y ( [ [ 2 , 5 , − 1 ] ,
12 [1 ,0 , −7] ,
13 [ 7 , 1 , 2 ] ] , dtype=f l o a t )
14
15 C = np . a r r a y ( [ [ 2 , 9 , 0 ] ,
16 [1 ,2 ,8] ,
17 [ 0 , 3 , 2 ] ] , dtype=f l o a t )
18
19 p r i n t "La m a t r i z A="
1. Matrices y vectores 49

20 print A
21
22 p r i n t "La m a t r i z B="
23 print B
24
25 p r i n t "La m a t r i z C="
26 print C
27
28 ## Los c a l c u l o s
29
30 p r i n t "A+aB−bC="
31 p r i n t (A+a ∗B+(−1∗b ) ∗C)
32
33 p r i n t " 2abA+bB−C="
34 p r i n t ( ( 2 ∗ a ∗b ) ∗A+b∗B−C)
35
36 p r i n t " ( a /b )A+(b/ a )C−((2 a ) / (3 b ) )B="
37 p r i n t ( ( a /b ) ∗A+(b/ a ) ∗C−((2∗ a ) / (3 ∗ b ) ) ∗B)

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A=
3 [ [ 4. 2 . −9.]
4 [ 9. 4 . −1.]
5 [ 2. 3. 4.]]
6 La m a t r i z B=
7 [ [ 2. 5 . −1.]
8 [ 1. 0 . −7.]
9 [ 7. 1. 2.]]
10 La m a t r i z C=
11 [ [ 2. 9. 0.]
12 [ 1. 2. 8.]
13 [ 0. 3. 2.]]
14 A+aB−bC=
15 [ [ −3.6 −20.2 −6. ]
16 [ 5.2 2.4 13.6]
17 [ −19. −2.4 −3.6]]
18 2abA+bB−C=
19 [ [ − 1 9 . 6 −14.6 42.4]
20 [ − 4 3 . 4 −21.2 −8.8]
21 [ −4. −16.6 − 1 9 . 6 ] ]
22 ( a /b )A+(b/ a )C−((2 a ) / (3 b ) )B=
23 [[ −10.53333333 2.6 31.25 ]
24 [ − 3 1 . 5 1 6 6 6 6 6 7 −15.53333333 − 1 5 . 8 8 3 3 3 3 3 3 ]
25 [ 10. −9.55 −10.53333333]]
26 >>>
50 1.3. Operaciones entre matrices

Como vemos, es relativamente fácil hacer cálculos con matrices en Python, en el algoritmo
anterior, podemos apreciar, que una vez declaradas las matrices y las constantes, es posible
hacer las operaciones de forma muy similar a como se declaran las operaciones.

1.3.4. Multiplicación de matrices y vectores


Antes de ver el algoritmo de la multiplicación de matrices, debemos conocer el concepto
de producto escalar.

1.3.5. Producto escalar


El producto escalar o producto punto, es la primera etapa para aproximarnos al concepto
de multiplicación de matrices.

.:Definición 1.11 (Producto escalar)


   
u1 v1
 u2   v2 
   
Sea u =  .  y v =  .  vectores de tamaño n, el producto escalar esta
 ..   .. 
un vn
definido como:

u·v = u1 v1 + u2 v2 + u3 v3 + · · · + un vn

n
X
= ui vi
i=0

La definición de producto escalar, nos pone de manifiesto que el producto escalar se puede
ver como una función Rn × Rn −→ R, es decir, se toman dos vectores en Rn y genera un
número real. De otro lado, la definición no distingue entre vector fila o columna, es decir,
se pueden multiplicar dos vectores fila o dos vectores columna o un vector fila y un vector
columna.

.:Ejemplo 1.10
1. Matrices y vectores 51



3
 2 
Sea u = 
 9  y v = (5, 1, 3, −3), entonces:

0
 
3
 2 
u·v =   9  · (5, 1, 3, −3)

= 3 · 5 + 2 · 1 + 9 · 3 + 0 · (−3)
= 15 + 2 + 27 + 0
= 44

.:Teorema 1.2 Sean u,v y w vectores de tamaño n y α un escalar.


1. u · v = v · u
2. u · 0 = 0
3. u · (v + w) = u · v + u · w
4. (αu) · v = α (u · v)

.:Algoritmo 1.20

1 i m p o rt numpy a s np
2
3 p r i n t " El v e c t o r u="
4 u = np . a r r a y ( [ 5 , 7 , −2])
5 print u
6
7 p r i n t " El v e c t o r v="
8 v = np . a r r a y ([ − 3 , 6 , 4 ] )
9 print v
10
11 p r i n t " El p ro d u c to u . v="
12 uv=v . dot ( u )
13 p r i n t uv
14
15 p r i n t " El v e c t o r w="
16 w= np . a r r a y ( [ [ − 3 ] , [ 6 ] , [4]])
17 print w
18
19 p r i n t " El p ro d u c to u . w="
20 uw=u . dot (w)
21 p r i n t uw
52 1.3. Operaciones entre matrices

El programa anterior produce la siguiente salida:

1 >>>
2 El v e c t o r u=
3 [ 5 7 −2]
4 El v e c t o r v=
5 [ −3 6 4 ]
6 El p ro d u c to u . v=
7 19
8 El v e c t o r w=
9 [[ −3]
10 [ 6]
11 [ 4]]
12 El p ro d u c to u .w=
13 [19]
14 >>>

El Algoritmo 1.20 muestra que los vectores en SciPy y Numpy poseen una función llamada
dot, la cual, multiplica vectores bien sea filas o vectores columna. Sin embargo, debemos
tener cuidado, pues si los dos vectores son fila (el producto de u y v), el resultado es un
número, en nuestro ejemplo es el 19; pero si multiplicamos un vector fila como u y un
vector columna como w, el resultado es el mismo 19, pero para Python es como un objeto
matriz, es decir ma matriz [19].

Implementar el algoritmo de producto escalar, es relativamente fácil, el siguiente algoritmo


muestra cómo hacerlo.

.:Algoritmo 1.21

1 i m p o rt numpy a s np
2
3 u = np . a r r a y ( [ 3 , − 2 , 5 , 1 , − 7 , 9 ] , dtype=f l o a t )
4
5 v = np . a r r a y ( [ 6 , 6 , − 8 , 7 , − 1 , 4 ] , dtype=f l o a t )
6 sum=0.0
7
8 f o r i i n ra n g e ( np . s i z e ( u ) ) :
9 sum= sum + u [ i ] ∗ v [ i ]
10
11 p r i n t sum
1. Matrices y vectores 53

El programa anterior produce la siguiente salida:

1 >>>
2 16.0
3 >>>

Sólo es cuestión de guardar los productos individuales en una variable, en este caso sum.
Sin embargo, en este algoritmo usamos la función [Link](u), la cual devuelve el número
total de elementos de un vector o una matriz

1.3.6. Multiplicación de matrices


El producto entre matrices se define de la siguiente forma:

.:Definición 1.12 (Producto entre matrices)

Sea A = (aij ) una matriz de tamaño m × n y B = (bij ) una matriz de tamaño


n × p, el producto entre A y B es una matriz C = (cij ) de tamaño m × p tal que:

cij = (fila i de A) · (Columna j de B)


de igual manera

cij = ai1 b1j + ai2 b2j + · · · + ain bnj

n
X
= aik bkj
k=1

Recuerde que:
1. El número de columnas de la primera matriz debe coincidir con el número de
columnas de la segunda matriz.
2. La definición de multiplicación de matrices nos dice que la componente ij-esima de
C es el producto escalar entre la la fila i de A y la columna j de B.

.:Ejemplo 1.11
   
1 3 1 −7
Sea A = yB= ,
1 2 2 4
54 1.3. Operaciones entre matrices

C = AB
   
1 3 1 −7
= ·
1 2 2 4
 
7 5
=
5 1
.:Ejemplo 1.12
Multiplicación de matrices de tamaños diferentes:
 
  8 9
5 6 9 8  5 4 
sea A = yB=  , el producto AB es:
5 2 2 3 2×4  7 3 
2 1 4×2
 
  8 9
5 6 9 8  5 4 
AB =  
5 2 2 3  7 3 
2 1
 
149 104
=
70 62
Una de las dificultades que presenta la multiplicación de matrices, a diferencia de la
multiplicación de números reales, es que la multiplicación de matrices no es conmutativa,
es decir, si A y B son matrices cuyos tamaños permitan calcular el producto AB y el
producto BA, entonces AB 6= BA.

.:Ejemplo 1.13
 
  8 9
5 6 9 8  5 4 
Si tenemos A = yB=  , como en el ejemplo anterior,
5 2 2 3 2×4
 7 3 
2 1
  4×2
149 104
ya hemos visto que el producto, AB = . Sin embargo, el producto BA es
70 62
una matriz de tamaño 4 × 4:
 
85 66 90 91
 45 38 53 52 
BA =  50 48 69 65 

15 14 20 19
Es fácil ver que ambos productos son completamente distintos.
1. Matrices y vectores 55

[Link]. Ley Asociativa en el producto de matrices


.:Teorema 1.3 Sean A = (aij ) de tamaño n × m y B = (bij ) de tamaño m × p, y
C = (cij ) una matriz de p × q, entonces se cumple que

A(BC) = (AB)C
Teniendo en cuenta que el tamaño de la matriz resultante es de n × q.

El siguiente ejemplo ilustra el teorema anterior.

.:Ejemplo 1.14
     
1 4 2 3 3 3
Sea A = ,B= yC= , comprobemos :
2 8 4 −1 5 −2
Veamos (AB) C

    
1 4 2 3 3 3
(AB) C =
2 8 4 −1 5 −2
=  
49 56
=
98 112

Veamos A (BC)

    
1 4 2 3 3 3
A (BC) =
2 8 4 −1 5 −2
=  
49 56
=
98 112

[Link]. Ley distributiva de la multiplicación de matrices


.:Teorema 1.4 Sean A = (aij ), B = (bij ) y C = (cij ) matrices en los cuales las
siguientes sumas y productos están definidos

A(B + C) = AB + AC
(A + B)C = AC + BC
     
1 4 2 3 3 3
.:Ejemplo 1.15 Sea A = ,B= yC = , comprobemos
2 8 4 −1 5 −2
que A(B + C) = AB + AC
56 1.3. Operaciones entre matrices

Tomemos la primera parte del teorema A(B + C)

     
1 4 2 3 3 3
A(B + C) = +
2 8 4 −1 5 −2
=  
41 −6
=
82 −12

de otro lado,

     
1 4 2 3 1 4 3 3
AB + AC = +
2 8 4 −1 2 8 5 −2
=  
41 −6
=
82 −12

En Python es muy fácil multiplicar matrices, la librería ScyPy, en especial Numpy tienen
la función dot, la cual ya hemos usado antes. Recordemos que los tamaños de las matrices
deben ser compatibles.

.:Algoritmo 1.22

1 i m p o rt numpy a s np
2
3
4 A=np . a r r a y ( [ [ 5 , − 6 , 9 ] ,
5 [ −7 ,2 ,2] ,
6 [2 ,7 , −1]])
7
8 B=np . a r r a y ( [ [ 4 , 5 , 8 , − 1 , 3 ] ,
9 [4 , 6 ,8 , 1 ,4] ,
10 [ 2 , 4 ,6 ,3 , −1]])
11
12 p r i n t " l a m a t r i z A=\n" , A
13 p r i n t " l a m a t r i z B=\n" , B
14
15 C=A. dot (B)
16 print " El p ro d u c to AxB=\n" , C

El programa anterior produce la siguiente salida:


1. Matrices y vectores 57

1 >>>
2 l a m a t r i z A=
3 [ [ 5 −6 9 ]
4 [ −7 2 2 ]
5 [ 2 7 −1]]
6 l a m a t r i z B=
7 [ [ 4 5 8 −1 3 ]
8 [ 4 6 8 1 4]
9 [ 2 4 6 3 −1]]
10 El p ro d u c to AxB=
11 [ [ 14 25 46 16 −18]
12 [ −16 −15 −28 15 −15]
13 [ 34 48 66 2 35]]
14 >>>

En el siguiente algoritmo, implementaremos el algoritmo de la multiplicación en la forma


tradicional, usando ciclos for.

.:Algoritmo 1.23

1
2 i m p o rt numpy a s np
3
4
5 A=np . a r r a y ( [ [ 5 , − 6 , 9 ] ,
6 [ −7 ,2 ,2] ,
7 [ 2 , 7 , − 1 ] ] , dtype=f l o a t )
8
9 B=np . a r r a y ( [ [ 4 , 5 , 8 , − 1 , 3 ] ,
10 [4 , 6 ,8 , 1 ,4] ,
11 [ 2 , 4 , 6 , 3 , − 1 ] ] , dtype=f l o a t )
12
13
14
15 p r i n t " l a m a t r i z A=\n" , A
16 p r i n t " l a m a t r i z B=\n" , B
17
18 p r i n t "__________________________________"
19
20 d e f m u l t i p l i c a r M a t r i c e s (A, B) :
21
22 filasA = A. shape [0]
23 ColumnasA= A. shape [1]
24 filasB = B . shape [0]
25 ColumnasB= B . shape [1]
26
27
28
58 1.3. Operaciones entre matrices

29 C=np . z e r o s ( ( f i l a s A , ColumnasB ) )
30
31
32 i f ( ColumnasA==f i l a s B ) :
33 f o r i i n ra n g e ( f i l a s A ) :
34 f o r j i n ra n g e ( ColumnasB ) :
35 f o r k i n ra n g e ( f i l a s B ) :
36 C [ i ] [ j ]+=A[ i ] [ k ] ∗B [ k ] [ j ]
37
38 return C
39
40 p r i n t " l a m u l t i p l i c a c i o n AxB=\n " , m u l t i p l i c a r M a t r i c e s (A, B)

El programa anterior produce la siguiente salida:

1 >>>
2 l a m a t r i z A=
3 [ [ 5 . −6. 9.]
4 [ −7. 2. 2.]
5 [ 2. 7. −1.]]
6 l a m a t r i z B=
7 [ [ 4. 5. 8 . −1. 3.]
8 [ 4. 6. 8. 1. 4.]
9 [ 2. 4. 6. 3. −1.]]
10
11 __________________________________
12 l a m u l t i p l i c a c i o n AxB=
13 [ [ 14. 25. 46. 16. −18.]
14 [ − 1 6 . −15. −28. 1 5 . − 1 5 . ]
15 [ 34. 48. 66. 2. 35.]]
16 >>>

La multiplicación de matrices no es un concepto muy complejo, se trata de una suma


anidada, que recoge el producto punto entre los vectores de las matrices. En el algoritmo
1.23, implementamos una función llamada multiplicarMatrices(A,B), la cual, realiza el
cálculo; el resultado se muestra en la salida del comando print "la multiplicacion AxB=\n
", multiplicarMatrices(A, B). (línea 40 Algoritmo 1.23)

.:Ejercicios 1.3
1. Dadas las siguientes matrices:
     
1 3 9 1 2 9 1 0 0
A =  −8 5 0  , B =  8 −7 −2  y C = 2 0 3 
1 4 −9 1 0 0 9 8 0
1. Matrices y vectores 59

realice las siguientes operaciones:

a) 3A + 4B − 5C
b) A2 + B 2 + C 2
π π π
c) A − B + C 2
3 8 11
d ) A(B − C) − B(4AC − 3BC)
e) ABC − 3BCA − 5BBCABCA

2. Implemente un programa en Python, para comprobar los ejercicios anteriores.

1.4. La transpuesta de una matriz


.:Definición 1.13 (Matriz transpuesta)
Sea A una matriz de tamaño m × n. La matriz transpuesta, denotada con At está
dada por

(At )ij = Aji con 1 ≤ i ≤ n y 1≤j≤m

   
a11 a12 ... a1n a11 a21 ... an1
 a21 a22 ... a2n   a12 a22 ... an2 
At = 
   
A= .. .. .. ..  y .. .. .. .. 
 . . . .   . . . . 
am1 am2 . . . amn a1m a2m . . . anm

Es decir, es la matriz que se obtiene al intercambiar las filas por las columnas de
A. La matriz At tiene tamaño n × m.

.:Ejemplo 1.16 Encuentre la transpuesta de A


 
3 2 −1
A =  0 −6 3 
−1 3 7

 
3 0 −1
At =  2 −6 3 
−1 3 7
60 1.4. La transpuesta de una matriz

1.4.1. Propiedades de la matriz transpuesta


.:Teorema 1.5 Sea A = (aij ) una de tamaño n × m y B = (bij ) de tamaño m × p,
entonces
t
1. (At ) = A.

2. (A + B)t = At + B t si A y B son del mismo tamaño.


t
3. (kA) = kAt con k ∈ R.
t
4. (AB) = B t At .

5. Si A es invertible, entonces At es invertible y además (At )−1 = (A−1 )t .

.:Definición 1.14 (Matriz Simétrica)


Sea A una matriz de n × n, se dice que A es simétrica cuando aij = aji para todo
i, j = 1, 2, 3 . . . n. Es decir, cuando A = At

.:Ejemplo 1.17 Determínese si A es simétrica:


 
3 1 2
A= 1 5 2 
2 2 7

Simplemente, calculamos At :  
3 1 2
At =  1 5 2 
2 2 7

.:Definición 1.15 (Matriz Antisimétrica)


Sea A una matriz de n × n, se dice que A es antisimétrica o hemisimétrica cuando
aij = −aji para todo i, j = 1, 2, 3 . . . n. Es decir, cuando A = −At

.:Ejemplo 1.18

La matriz A es antisimétrica
   
0 3 4 0 −3 −4
A =  −3 0 6  ⇒ −A =  3 0 −6 
−4 −6 0 4 6 0

calculamos At :
1. Matrices y vectores 61

 
0 3 4
At =  −3 0 6 
−4 −6 0
Podemos ver que A = −At .

El siguiente algoritmo, muestra los comando de Python y Numpy para obtener la


traspuesta de una matriz:

.:Algoritmo 1.24

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ − 4 , 2 , 5 , 4 ] ,
4 [ 1 , −2 , 0 , 5 ] ,
5 [ 6 , −9, 4 , − 9 ] ] , dtype=f l o a t )
6
7 p r i n t "La m a t r i z A: \ n" , A
8
9 p r i n t "La m a t r i z A t r a s p u e s t a de A= \n" , A.T
10
11 p r i n t " \n La t r a s p u e s t a de una m a t r i z usando l a f u n c i o n t r a n s p o s e : \ n"
12
13 p r i n t "La m a t r i z A t r a s p u e s t a : A= \n" , A. t r a n s p o s e ( )

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A:
3 [[ −4. 2. 5. 4.]
4 [ 1 . −2. 0. 5.]
5 [ 6 . −9. 4. −9.]]
6 La m a t r i z A t r a s p u e s t a de A=
7 [[ −4. 1. 6.]
8 [ 2 . −2. −9.]
9 [ 5. 0. 4.]
10 [ 4. 5. −9.]]
11
12 La t r a s p u e s t a de una m a t r i z usando l a f u n c i o n t r a n s p o s e :
13
14 La m a t r i z A t r a s p u e s t a : A=
15 [[ −4. 1. 6.]
16 [ 2 . −2. − 9 . ]
17 [ 5. 0. 4.]
18 [ 4. 5. −9.]]
62 1.4. La transpuesta de una matriz

19 >>>

Como vemos en el algoritmo 1.24, ambas funciones traspose() y T calculan la traspuesta


de una matriz.

.:Ejercicios 1.4

1. Encuentre la traspuesta de las matrices dadas:

a) c)
   
3 5 4 7 8 1 α α−1
 5 4 7 8 2   α−3 2 α−2 
 

 1 0 2 3 6 
 α−4 α−2 3
 9 5 4 8 9 
1 2 5 4 0 d)  
3 3 8
 0 5 2 
b) 0 0 5
 
0 a b c e)  
 d 0 e f  1 0 0
 
 g h 0 i   2 1 0 
j k l 0 4 4 1

2. Dadas las siguientes matrices:


     
2 3 5 3 6 5 4 6 2
A =  9 −1 −7  , B =  9 8 −4  y C = 2 2 2 
3 9 −7 7 −4 1 −7 8 9

realice las siguientes operaciones:


2
a) At + B − 5 (C t )
t 2
b) A2 + (B t ) + At AC
c) At B t − BC t + BC t
d ) A(B 2 − At ) − C(4At C t − 4AB t )
e) A2 B 2 C t + At − B 3
1. Matrices y vectores 63

3. Sea A una matriz de tamaño n × n.


1
a) Muestre que la matriz (A + At ) es simétrica.
2
1
b) Muestre que la matriz (A − At ) es antisimétrica.
2
4. Con base en el ejercicio anterior, muestre que cualquier matriz cuadrada, se puede
escribir como la suma de una matriz simétrica y una antisimétrica.

5. Implemente un programa en Python que descomponga una matriz cuadrada, en dos


matrices, una simétrica y otra antisimétrica.

6. Usando los ciclos for de Python, implemente la función transpuestaMatriz(A), tal


que dada una matriz A, devuelva la traspuesta en la matriz B como se muestra en
el siguiente código:
1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ − 4 , 2 , 5 , 4 ] ,
4 [ 1 , −2 , 0 , 5 ] ,
5 [ 6 , −9, 4 , − 9 ] ] , dtype=f l o a t )
6
7
8 d e f t r a n s p u e s t a M a t r i z (A) :
9 .
10 .
11 .
12 .
13 r e t u r n B # donde B e s l a t r a n s p u e s t a de A
14
15 B=t r a s p u e s t a M a t r i z (A)
16 print B

1.5. La inversa de una matriz


En álgebra lineal, se presenta la siguiente situación:

Ax = b (1.1)
En cuyo caso, la matriz A es una matriz cuadrada llamada matriz de coeficientes de
tamaño n × n, X es un vector de variables tamaño n × 1 que representa las incógnitas.
Finalmente el vector b de tamaño n × 1 que representa los términos independientes de un
sistema de ecuaciones lineales.
64 1.5. La inversa de una matriz

Para solucionar el sistema 1.1 necesitamos de alguna manera “despejar” el vector x,


para éste fin, usaremos el concepto de inversa de una matriz. Sin embargo, para ellos
necesitamos un concepto previo llamado matriz identidad.

.:Definición 1.16 (Matriz Identidad)


Una matriz Identidad de tamaño n×n, es una matriz en la que todos los elementos
de la diagonal principal son unos, los elementos por fuera de la diagonal son cero.

.:Ejemplo 1.19 Matrices identidad

 
1 0 0 ... 0
   0 1 0 ... 0 
  1 0 0  
1 0  0 0 1 ... 0 
I2 = , I3 =  0 1 0  , . . . , In =  
0 1 .. .. .. .. . 
. .. 

0 0 1  . . .
0 0 0 ... 1

.:Teorema 1.6 Sea A una matriz cuadrada de tamaño n × n e In la matriz identidad de


tamaño n × n. Entonces

AIn = A
y

In A = A

De igual forma podemos demostrar que In A = A

Esto quiere decir que el producto de cualquier matriz por la matriz identidad (siempre
que esté definido el producto), es la misma matriz.

.:Algoritmo 1.25

1 i m p o rt numpy a s np
2
3 I = np . e y e ( 3 , 3 )
4
5 p r i n t "La m a t r i z I d e n t i c a I \n " , I

El programa anterior produce la siguiente salida:


1. Matrices y vectores 65

1 >>>
2 La m a t r i z I d e n t i c a I
3 [ [ 1. 0. 0.]
4 [ 0. 1. 0.]
5 [ 0. 0. 1.]]
6 >>>

El comando I = [Link](3,3) en el algoritmo 1.25, genera una matriz identidad de tamaño


3, pero podemos cambiar ese número por cualquier otro, para obtener el tamaño deseado.

.:Definición 1.17 (La inversa de una Matriz)


Sean A y B dos matrices de tamaño n × n, y suponga que

AB = BA = In
Luego B es la inversa de A (también podemos decir que A es la inversa de B) y
la denotaremos como A−1 , tendríamos que

AA−1 = A−1 A = In
Diremos que si A tiene inversa entonces se dice que A es invertible o no singular.
Si A no tiene inversa se le llama singular.

Cuando hablamos de matrices invertibles, nos referimos a todas aquellas matrices a las
cuales podemos obtenerle su inversa.

La siguiente es una definición más formal de la inversa de una matriz

.:Definición 1.18 (Matriz invertible)


Sea A una matriz cuadrada de orden n. Decimos que A es invertible si existe una
matriz B de orden n tal que AB = BA = In , en tal caso decimos que B es la
inversa de A y B = A−1 .

.:Teorema 1.7 Sea A una matriz cuadrada de tamaño n × n invertible, entonces su


inversa es única.

.:Teorema 1.8 Sean A y B dos matrices invertibles de n × n. Entonces

i) AB es invertible

ii) (AB)−1 = B −1 A−1


66 1.5. La inversa de una matriz

Los teoremas anteriores muestran propiedades importantes. El primero de ellos muestra la


unicidad de la matriz inversa, propiedad que usamos frecuentemente, sobre todo, cuando
buscamos la solución de sistemas de ecuaciones. El segundo teorema nos muestra que
el producto de matrices invertibles da como resultado otra matriz invertible, además, la
inversa de un producto, es la multiplicación de las inversas de las matrices, pero en orden
inverso.

.:Ejemplo 1.20 Sea A definida de la siguiente forma:

 
2 4 7
A =  −2 3 1 
−6 2 9

Determinar si la inversa de A es la matriz A−1 definida de la siguiente forma:


 25 11 17

195 − 98 − 196
 
−1
 3 15 4

A =
 49 49 − 49 

 
1
14 − 71 1
− 14

Para determinar si A y A−1 son inversas entre si, sólo debemos usar la propiedad principal
de las matrices invertible, es decir:

AA−1 = A−1 A = In

Entonces:

 25

  195 − 11
98
17
− 196
2 4 7 



−1  −2 3 1   3 15 4
AA =  49 49 − 49 

−6 2 9  
1
14 − 71 1
− 14
 
1 0 0
=  0 1 0 
0 0 1

Además:
1. Matrices y vectores 67

 25 11 17

195 − 98 − 196  



 2 4 7
A−1 A = 

3
49
15
49
4
− 49   −2 3 1 

  −6 2 9
1
14− 17 1
− 14
 
1 0 0
=  0 1 0 
0 0 1

1.5.1. ¿Cómo hallar la inversa de una matriz?


Inicialmente, unimos nuestra matriz con la matriz identidad del mismo tamaño, luego
procedemos ha hacer operaciones elementales por fila a la matriz, teniendo cuidado de
hacer las mismas operaciones a la matriz identidad. De esta forma, la matriz original se
convierte en una matriz identidad y la matriz identidad se convierte en la inversa de la
matriz.

.:Ejemplo 1.21

tomemos
 
1 5
A=
7 9
Ubicamos ambas matrices
 
1 5 | 1 0
7 9 | 0 1
Aplicamos operaciones elementales por fila a la nueva matriz, cuando hallamos convertido
la matriz A en la identidad, la matriz identidad se convertirla en A−1 .
 
1 5 | 1 0
 
7 9 | 0 1
Al realizar una operación elemental, ésta se ejecuta en ambas matrices: f2 → (−7) f1 + f2
 
1 5 | 1 0
 | 
0 −26 | −7 1
1

Ahora aplicamos f2 → − 26 f2
68 1.5. La inversa de una matriz

 
1 5 | 1 0
 | 
7 1
0 1 | 26 − 26

aplicamos f1 → (−5) f2 + f1
 9 5

1 0 | − 26 26
 | 
7 1
0 1 | 26 − 26
 9 5

− 26 26
Entonces A−1 =  
7 1
26 − 26
Y podemos ver que AA−1 = I = A−1 A

−1
.:Teorema 1.9 Si A es invertible, entonces A−1 es invertible y además A−1 =A

El siguiente ejemplo, muestra que la inversa de la inversa de una matriz es la matriz


original.

.:Ejemplo 1.22

Veamos, sí:
 
1 5
A=
7 9
y
 9 5

− 26 26
A−1 =  
7 1
26 − 26

Observemos que:
 

−1 −1 1 5
A =
7 9

.:Teorema 1.10 Si A es invertible de tamaño n × n, entonces At es invertible y además


(At )−1 = (A−1 )t .

.:Ejemplo 1.23
1. Matrices y vectores 69

Este ejemplo tomado de [11], muestra cómo la inversa y la transpuesta están relacionadas.
Sea:
 1 3 11

  62 − 62 62
2 3 −7 
 13


A= 2 1 5  y A−1 =   62
23
62 − 6 
31 
6 0 2  
3 9 1
− 62 62 − 31

y verifiquemos que (At )−1 = (A−1 )t . primero (At )−1

 −1
2 2 6
(At )−1 =  3 1 0 
−7 5 2
 1 13 3

62 62 − 62
 
 
=  −3 23 9 
 62 62 62 
 
11 6 1
62 − 31 − 31

Ahora (A−1 )t :

 1 3 11
t
62 − 62 62
 
−1 t
 13 23 6

(A ) = 
 62 62 − 31 

 
3 9 1
− 62 62 − 31
 1 13 3

62 62 − 62
 
 3 23 9

 − 62
=  
62 62 
 
11 6 1
62 − 31 − 31

luego (At )−1 = (A−1 )t .

El siguiente algoritmo, muestra como obtener la inversa con la librería Numpy, además
muestra que AA−1 = I.

.:Algoritmo 1.26
70 1.5. La inversa de una matriz

1 i m p o rt numpy a s np
2
3
4 A = np . a r r a y ( [ [ 1 , − 2 , 4 ] ,
5 [0 ,1 ,2] ,
6 [2 ,0 , −1]])
7
8 B = np . l i n a l g . i n v (A)
9
10 p r i n t "La m a t r i z de A \n " , A
11 p r i n t " \n________________________\n"
12 p r i n t "La m a t r i z i n v e r s a de A ( l l a m a d a B) \n " , B
13 I=A. dot (B)
14 p r i n t " \n A m u l t i p l i c a d a por B e s l a m a t r i z i d e n t i d a d \n" , I

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z de A
3 [ [ 1 −2 4 ]
4 [ 0 1 2]
5 [ 2 0 −1]]
6
7 ________________________
8
9 La m a t r i z i n v e r s a de A ( l l a m a d a B)
10 [ [ 0.05882353 0.11764706 0.47058824]
11 [ −0.23529412 0.52941176 0.11764706]
12 [ 0.11764706 0.23529412 −0.05882353]]
13
14 A m u l t i p l i c a d a por B e s l a m a t r i z i d e n t i d a d
15 [[ 1 . 0 0 0 0 0 0 0 0 e+00 −2.77555756 e −17 0 . 0 0 0 0 0 0 0 0 e +00]
16 [ 0 . 0 0 0 0 0 0 0 0 e+00 1 . 0 0 0 0 0 0 0 0 e+00 0 . 0 0 0 0 0 0 0 0 e +00]
17 [ 0 . 0 0 0 0 0 0 0 0 e+00 0 . 0 0 0 0 0 0 0 0 e+00 1.00000000 e +00]]
18 >>>

El algoritmo 1.26, demuestra el funcionamiento del comando (línea 8) [Link](A), el


cual, se usa para obtener la inversa de una matriz. En el mismo algoritmo comprobamos
que A |{z}
B = I, sin embargo, la matriz Identidad obtenida en el proceso, tiene en la
A−1
posición (1, 2) el número -2.77555756e-17 que equivale a −2.77555756 × 10−17 el cual, no
es cero, pero es un número muy pequeño o cercano a cero, como para que tenga un error
significativo. Para solucionar el problema, podemos usar el comando [Link](I).
1. Matrices y vectores 71

El siguiente algoritmo, se basa en la técnica más simple para hallar la inversa de una
matriz. El método esta expuesto en la sección 1.5.1, donde básicamente, tomamos la
matriz original de tamaño n× n, la ampliamos con la matriz identidad del mismo tamaño,
obteniendo una nueva matriz de tamaño n × 2n. A esta nueva matriz le aplicamos
la eliminación Gauss-Jordan de forma muy similar al Algoritmo 1.15, para finalmente
obtener una matriz de tamaño n × 2n, que tiene como submatriz la matriz inversa en
lugar de la identidad.

.:Algoritmo 1.27

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 7 , 2 ] ,
4 [6 , 2 , 2] ,
5 [ 7 , 5 , 2 ] ] , dtype=f l o a t )
6
7 p r i n t "La m a t r i z A= \n" , A
8 p r i n t "__________________________ \n"
9
10 n=np . shape (A) [ 0 ]
11
12 ## para c o n c a t e n a r l a m a t r i z A con l a m a t r i z i d e n t i d a d
13 A = np . c o n c a t e n a t e ( (A, np . e y e ( n ) ) , a x i s =1)
14
15 p r i n t "La m a t r i z A aumentada con l a i d e n t i d a d : A= \n" , A
16 p r i n t "__________________________ \n"
17
18 f i l a s , columnas= np . shape (A)
19
20 f o r i i n ra n g e ( f i l a s ) :
21 A[ i , : ] =A[ i , : ] / A[ i , i ]
22 f o r j i n ra n g e ( i +1 , columnas− f i l a s ) :
23 A[ j , : ] =A[ j , : ] −A[ i , : ] ∗ A[ j , i ]
24
25 f o r i i n r e v e r s e d ( ra n g e ( f i l a s ) ) :
26 f o r j i n r e v e r s e d ( ra n g e ( 0 , i ) ) :
27 A[ j , : ] =A[ j , : ] −A[ i , : ] ∗ A[ j , i ]
28
29 ## para o b t e n e r l a s u b m a tri z con l a i n v e r s a
30 B=A [ 0 : columnas , f i l a s : columnas ]
31
32 print " la m a t r i z i n v e r s a de A: \n" , B

El programa anterior produce la siguiente salida:


72 1.5. La inversa de una matriz

1 >>>
2 La m a t r i z A=
3 [ [ 1. 7. 2.]
4 [ 6. 2. 2.]
5 [ 7. 5. 2.]]
6 __________________________
7
8 La m a t r i z A aumentada con l a i d e n t i d a d : A=
9 [ [ 1. 7. 2. 1. 0. 0.]
10 [ 6. 2. 2. 0. 1. 0.]
11 [ 7. 5. 2. 0. 0. 1.]]
12 __________________________
13
14 la m a t r i z i n v e r s a de A:
15 [ [ − 0 . 1 5 −0.1 0.25]
16 [ 0 . 0 5 −0.3 0.25]
17 [ 0.4 1.1 −1. ]]
18 >>>

El algoritmo 1.27, toma la matriz A:


 
1 7 2
A= 6 2 2 
7 5 2

Luego, se genera la matriz aumentada:


 
1 7 2 1 0 0
[A|I] =  6 2 2 0 1 0 
7 5 2 0 0 1

Posteriormente, aplicamos la eliminación Gauss-Jordan (Operaciones elementales por


filas) y obtenemos:
 
  1 0 0 −0.15 −0.1 0.25
I|A−1 =  0 1 0 0.05 −0.3 0.25 
0 0 1 0.4 1.1 −1
Finalmente, en lugar de la matriz original, obtendremos la matriz identidad, y en lugar
de la identidad obtendremos la matriz inversa.

.:Ejercicios 1.5

1. Encuentre la inversa (si es posible) de las siguientes matrices


1. Matrices y vectores 73

a)   d)
1 5 9  
 6 −7 3  1 0 0
1 2 3  11 1 0 
3 −5 1
b)  
0 3 7
 5 0 2  e)
1 2 0  
2 5 8 7
c)  4

1 5 6

 5 3 2 

 0  10 2 2 2 
2 3 
0 0 1 5 1 1 1

2. Sea la matriz A definida como:


 
2 0 0
A= 0 4 0 
0 0 π

Encuentre la inversa de dicha matriz. ¿Qué puede concluir del ejercicio?, ¿es posible
generalizar para matrices diagonales de mayor tamaño?.
3. Dada las matrices:
   
2 −4 9 11
A= , y B=
1 9 2 −2

Calcule:
 t −1
a) A−1 + B −1
 −1 
b) At B A + B 2
t
c) B t At A + B −1

d ) A At B −1 B

4. Use el algoritmo 1.27 para encontrar la inversa de las siguientes matrices:

a) b)
   
1 2 −6 2 8 −7
 −2 −4 5   3 12 1 
2 4 −12 3 12 0
74 1.6. Sistemas de ecuaciones lineales y la inversa de una matriz

c)   e)  
3 −8 9 3 7 6 0
 0 7 0   7 4 0 0 
 
0 0 1  6 0 5 1 
d) 0 0 1 9
 
1 0 0
 2 1 0 
3 −8 1

5. Usando los ciclos for de Python, implemente la función inversaMatriz(A), tal que
dada una matriz A, devuelva la inversa en la matriz B como se muestra en el
siguiente código:
1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ − 4 , 2 , 5 , 4 ] ,
4 [ 1 , −2 , 0 , 5 ] ,
5 [ 6 , −9, 4 , − 9 ] ] , dtype=f l o a t )
6
7
8 d e f i n v e r s a M a t r i z (A) :
9 .
10 .
11 .
12 .
13 r e t u r n B # donde B e s l a i n v e r s a de A
14
15 B=i n v e r s a M a t r i z (A)
16 print B

Nota: Tenga en cuenta, al implementar la función si es necesario la permutación


de filas en la matriz A.

1.6. Sistemas de ecuaciones lineales y la inversa de una


matriz
Para solucionar el sistema Ax = b debemos encontrar A−1 . Tomemos de nuevo la ecuación
(1.1);

Ax = b

Si A es invertible, entonces multiplicamos por la izquierda A−1 a cada lado de la ecuación.


1. Matrices y vectores 75

A−1 Ax = A−1 b

A−1 A x = A−1 b
In x = A−1 b
x = A−1 b (1.2)
El vector x obtenido en (1.2) es la solución al sistema.

.:Teorema 1.11 Sea A una matriz de tamaño n × n e invertible, entonces el sistema


Ax = b tiene solución única.
El teorema anterior, muestra que al igual que la inversa es única, también lo son las
soluciones dadas por la matriz de coeficientes de un sistema de ecuaciones lineales. El
siguiente teorema expone la relación existente entre la inversa de una matriz y la cantidad
de soluciones de un sistema de ecuaciones lineales.
.:Teorema 1.12 Sea A una matriz de tamaño n × n, entonces
1. A es invertible si y sólo si es posible convertirla en In por medio de operaciones
elementales por fila, es decir si I es la FERR de A.
2. A es invertible si y sólo si su FERR tiene n pivotes

.:Ejemplo 1.24 Encuentre la forma matricial del siguiente sistema, halle la solución
utilizando la inversa de la matriz de coeficientes:
x + 9y + 3z = 5
11x − 2y + z = −2
x − 4y − 3z = 1
Solución:
La matriz de cofactores
 
1 9 3
A =  11 −2 1 
1 −4 −3
cuya inversa es:
 1 3 3

19 38 38
 
−1
 17 3 16

A =
 95 − 95 95


 
− 21
95
13
190
101
− 190
76 1.6. Sistemas de ecuaciones lineales y la inversa de una matriz

Aplicamos X = A−1 b, y multiplicamos A−1 por b:


X = A−1 b
 1 3 3

  19 38 38  
x 


 5
17 3 16
 y  = 
 95 − 95 95
  −2 

z   1
21 13
− 95 190 − 101
190
 7

38
 
 107

= 
 95


 
337
− 190
En los Algoritmos 1.13 y 1.15, se muestra la forma de encontrar la solución a un sistema
de ecuaciones lineales. Ahora que hemos revisado el tema de la inversa de una matriz,
podemos implementar un algoritmo, para solucionar un sistema de ecuaciones lineales
usando la inversa de la matriz de coeficientes.

El Algoritmo 1.28, toma la matriz A de coeficientes y el vector b de términos


independientes y encuentra la solución al sistema Ax = b.

.:Algoritmo 1.28

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 4 , 3 , 1] ,
4 [11 , 1 , 7] ,
5 [ 2 , 1 , − 1 ] ] , dtype=f l o a t )
6
7 p r i n t "La m a t r i z de c o e f i c i e n t e s A \n " , A
8 p r i n t " \n________________________\n"
9
10 b = np . a r r a y ( [ [ − 5 ] ,
11 [4] ,
12 [ 1 ] ] , dtype=f l o a t )
13
14 p r i n t " El v e c t o r b de t e r m i n o s i n d e p e n d i e n t e s : b= \n" , b
15 B = np . l i n a l g . i n v (A)
16 X=B . dot ( b )
17
18 p r i n t " \n________________________\n"
19 p r i n t " \n La s o l u c i o n e s X=\n" , X
1. Matrices y vectores 77

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z de c o e f i c i e n t e s A
3 [[ 4. 3. 1.]
4 [ 11. 1. 7.]
5 [ 2. 1. −1.]]
6
7 ________________________
8
9 El v e c t o r b de t e r m i n o s i n d e p e n d i e n t e s : b=
10 [[ −5.]
11 [ 4.]
12 [ 1.]]
13
14 ________________________
15
16
17 La s o l u c i o n e s X=
18 [ [ 1.46153846]
19 [ −3.19230769]
20 [ −1.26923077]]
21 >>>

El Algoritmo 1.28 toma la inversa de la matriz A y la almacena en la matriz B, luego


la multiplica por el vector b. De esta forma, obtenemos la matriz X que almacena la
solución.

.:Ejercicios 1.6

1. Implemente la función solucionSistema(A,b), para resolver el sistema AX = b,


donde A es la matriz de coeficientes y b es el vector de términos independientes. La
función debe devolver un vector X con la solución del sistema:
1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 1 , 3 , 3 , 7 ] ,
4 [ 3 , 5 , 5 , 8] ,
5 [ 3 , −1 , 1 , 7 ] ,
6 [ 6 , 3 , 3 , 6 ] ] , dtype=f l o a t )
7 b=np . a r r a y ( [ [ 1 ] ,
8 [ −4] ,
9 [0] ,
10 [ 1 ] ] , dtype=f l o a t )
11
78 1.6. Sistemas de ecuaciones lineales y la inversa de una matriz

12 d e f s o l u c i o n S i s t e m a (A, b ) :
13 .
14 .
15 .
16 .
17 r e t u r n X # donde X e s l a s o l u c i o n a l s i e t m a AX=b
18
19 X=s o l u c i o n S i s t e m a (A, b )
20 print X

2. Valide el algoritmo del punto anterior, para ver las múltiples soluciones si el sistema
dado es singular.

3. Use el Algoritmo anterior, para implementar una nueva función, que resuelva el
sistema con matrices de coeficientes que tengan más filas que columnas (obviamente
no podemos usar la inversa). ¿Es posible que tengan solución única, sistemas que
tengan matrices de coeficientes con más columnas que filas?
4. Con el algoritmo anterior, determine si los siguientes sistemas tienen solución única,
múltiples soluciones o no tienen solución:

a) d)
x − 2y + 4z = 6
x + y − 9z = 11 x+y+z = 0
2y − 7z = −3 −11x + 3y + 3z = 1
7x − 2y − 11z = 11
b)
4x − 2z = −6
4x + 11y + 3z = 1
3x − 9y − z = 3
e)
6x − 18y − 2z = 6
c) 4x + z = 1
4x + 11y + 3z = 1 x − 9y + 6z = 4
3x − 9y − z = 3 x − 5y + 3z = 1
6x − 18y − 2z = 6 x − 4y − z = 1
“Ama de veras a su enemigo el que no se duele de la injuria
que se le hace, sino que, por el amor de Dios, se requema por el
pecado que hay en su alma. Y muéstrele su amor con obras.”
San Francisco de Asís

Factorización de matrices
2
2.1. Matrices elementales
Para empezar, recordemos las operaciones elementales por fila que vimos en la sección
1.2.1, estas operaciones son clave para entender el proceso de factorización de una matriz.

Multiplicar la fila i por un número k 6= 0: fi −→ kfi

Sumar un múltiplo de la fila i a la fila j: fj −→ fj + kfi

Permutar o intercambiar dos filas: fi ⇆ fj

Al igual que en la aritmética, los números primos son la base de los números naturales, de
igual forma ocurre para las matrices. Sin embargo, en este caso hablaremos de matrices
elementales y no de números.

.:Definición 2.1 Matriz Elemental:


Sea E una matriz cuadrada de orden n. Decimos que E es una matriz elemental si se
puede obtener de aplicarle una sola operación elemental a la matriz identidad de tamaño
n.

.:Ejemplo 2.1

79
80 2.1. Matrices elementales

Tomemos por ejemplo:


     
1 0 0 1 0 0 1 0 0
E1 =  0 1 0 , E2 =  0 1 0 , E3 =  0 0 1 
0 0 4 9 0 1 0 1 0

E1 se obtuvo de tomar la matriz I3 y la operación elemental f3 −→ 4f3 .

E2 se obtuvo de tomar I3 y aplicarle la operación f3 −→ f3 + (9)f1 .

E3 se obtuvo de realizar la operación elemental f2 ⇆ f3

Veamos el siguiente ejemplo:

.:Ejemplo 2.2

Sea
 
1 −4 6
A =  0 1 −4 
9 0 9
Aplicamos la operación elemental f3 → f3 + (−9)f1
 
1 −4 6
A= 0 1 −4  (2.1)
0 36 −45
Bien, Ahora tomaremos la matriz I3 y le aplicaremos la misma operación elemental
f3 → f3 + (−9)f1 , tenemos
 
1 0 0
E= 0 1 0 
−9 0 1
Ahora consideremos el producto EA
    
1 0 0 1 −4 6 1 −4 6
 0 1 0   0 1 −4  =  0 1 −4  (2.2)
−9 0 1 9 0 9 0 36 −45
Las ecuaciones (2.1) y (2.2), muestran que es posible reemplazar las operaciones
elementales por fila, por la multiplicación de matrices elementales.
2. Factorización de matrices 81

.:Ejemplo 2.3

Sea  
6 3 2
B= 4 5 8 
4 8 9
La operación elemental f1 ⇆ f3 podemos reemplazarla por la matriz elemental E, la cual
obtenemos al aplicarle a la matriz I3 dicha operación:
 
0 0 1
E= 0 1 0 
1 0 0
Ahora multiplicamos por la izquierda y obtenemos
    
0 0 1 6 3 2 4 8 9
 0 1 0  4 5 8 = 4 5 8 
1 0 0 4 8 9 6 3 2
La multiplicación de E por B, aplicó el mismo efecto que la operación elemental f1 ⇆ f3 .

.:Ejemplo 2.4

Sea A,
 
1 4 2
A= 5 9 3 
4 2 1
Queremos realizar la operación f3 → (2)f3 . De nuevo, tomamos E que se obtiene al
aplicarle a la matriz I3 la operación elemental f3 → (2)f3
 
1 0 0
E= 0 1 0 
0 0 2
    
1 0 0 1 4 2 1 4 2
 0 1 0  5 9 3 = 5 9 3 
0 0 2 4 2 1 8 4 2
Los ejemplos anteriores, muestran que las operaciones elementales por fila, se pueden
reemplazar por matrices elementales.
82 2.1. Matrices elementales

.:Teorema 2.1 Sea A una matriz de tamaño n × n y E una matriz elemental de tamaño
n×n. La matriz EA es la misma que se obtiene al realizar sobre las filas de A la operación
elemental correspondiente a la matriz E.

El teorema 2.1 nos muestra que las operaciones elementales por fila, se pueden visualizar
como la multiplicación de matrices elementales. El siguiente ejemplo tomado de [11],
muestra que podemos convertir una matriz invertible, en una matriz identidad del mismo
tamaño usando matrices elementales.

.:Ejemplo 2.5 Sea  


1 3
A=
5 7

multiplicaremos por matrices elementales, hasta convertirla en la matriz In


    
1 0 1 3 1 3
=
−5 1 5 7 0 −8
| {z }
E1

Ahora
    
1 0 1 3 1 3
=
0 −1 0 −8 0 1
| {z 8 }
E2

Luego
    
1 −3 1 3 1 0
=
0 1 0 1 0 1
| {z }
E3

Podemos decir que


      
1 −3 1 0 1 0 1 3 1 0
=
0 1 0 − 81 −5 1 5 7 0 1
| {z }| {z }| {z } | {z } | {z }
E3 E2 E1 A I2

Es decir

E3 E2 E1 A = I
El siguiente teorema, muestra una de las características más importantes de las matrices
elementales.
2. Factorización de matrices 83

.:Teorema 2.2 Toda matriz elemental de orden n, es invertible y su inversa es una


matriz elemental del mismo tipo.

.:Ejemplo 2.6 Sea  


1 0
E1 =
5 1
La inversa es:  
1 0
E1−1 =
−5 1

Es fácil ver que E1 E1−1 = I. De igual manera:


 
6 0
E2 =
0 1
y su inversa:  
1
0
E2−1 = 6
0 1

De igual forma E2 E2−1 = I. Finalmente:


 
0 1
E3 =
1 0
Su inversa sería:
 
0 1
E3−1 =
1 0

Luego E3 E3−1 = I

Las matrices elementales inversas, se construyen fácilmente, sólo debemos tener en cuenta
los siguiente aspectos:

Si la matriz elemental es de la forma: fi −→ kfi , su inversa es de la forma fi −→ k1 fi ,


con k 6= 0.

Si la matriz es de la forma: fj −→ fj + kfi , entonces la matriz inversa es de la forma


fj −→ fj + (−k)fi , con k 6= 0.

Si la matriz elemental es de la forma: fi ⇆ fj , su inversa es ella misma.

Esto nos dice que este tipo de procesos sólo es posible para matrices invertibles.
84 2.1. Matrices elementales

.:Teorema 2.3 Una matriz cuadrada es invertible si y sólo si es el producto de matrices


elementales
.:Ejemplo 2.7
De nuevo, usaremos la matriz A del ejemplo 2.5 (tomado de [11])
 
1 3
A=
5 7
Esta matriz, la escribiremos como producto de matrices elementales, multiplicando por
la inversa de cada matriz elemental, partiendo de la siguiente factorización:
      
1 −3 1 0 1 0 1 3 1 0
=
0 1 0 − 81 −5 1 5 7 0 1
| {z }| {z }| {z } | {z } | {z }
E3 E2 E1 A I2
Ahora multiplicamos por la inversa de E3 a ambos lados de la ecuación:
        
1 3 1 −3 1 0 1 0 1 3 1 3 1 0
1 =
0 1 0 1 0 −8 −5 1 5 7 0 1 0 1
| {z }| {z }| {z }| {z }| {z } | {z }| {z }
E3
−1 E3 E2 E1 A E3
−1 I2
     
1 0 1 0 1 3 1 3
=
0 − 81 −5 1 5 7 0 1
| {z }| {z }| {z } | {z }
E2 E1 A E3
−1

De igual manera para E2


       
1 0 1 0 1 0 1 3 1 0 1 3
=
0 8 0 1 −5 1 5 7 0 −8 0 1
| {z } | {z 8 } | {z } | {z } | {z } | {z }
E2−1 E2 E1 A E2−1 E3−1
     
1 0 1 3 1 0 1 3
=
−5 1 5 7 0 −8 0 1
| {z } | {z } | {z } | {z }
E1 A E2−1 E3−1

Finalmente
       
1 0 1 0 1 3 1 0 1 0 1 3
=
5 1 −5 1 5 7 5 1 0 −8 0 1
| {z }| {z } | {z } | {z } | {z } | {z }
E1−1 E1 A E1−1 E2−1 E3−1
    
1 3 1 0 1 0 1 3
=
5 7 5 1 0 −8 0 1
| {z } | {z }| {z } | {z }
A E1−1 E2−1 E3−1
2. Factorización de matrices 85

Al final, obtenemos que A se puede expresar como el producto de matrices elementales,


en este caso A = E1−1 E2−1 E3−1 .

.:Algoritmo 2.1

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 5 , − 9 ] ,
4 [6 , −2 ,4] ,
5 [ 7 , 2 , − 5 ] ] , dtype=f l o a t )
6
7
8 p r i n t "La m a t r i z A= "
9 print A
10
11
12 d e f O p e ra c i o n E l e m e n t a l 1 (A, i , k ) :
13 A[ i , : ] = k∗A[ i , : ]
14 return A
15
16
17 d e f O p e ra c i o n E l e m e n t a l 2 (A, i , j , k ) :
18 A[ i , : ] =A[ i , : ] + k ∗A[ j , : ]
19 return A
20
21
22 d e f O p e ra c i o n E l e m e n t a l 3 (A, i , j ) :
23 f o r k i n ra n g e ( np . shape (A[ i , : ] ) [ 0 ] ) :
24 c=A[ i , k ]
25 A[ i , k ]=A[ j , k ]
26 A[ j , k ]= c
27 return A
28
29
30 print " "
31 print " O p e ra c i o n e l e m e n t a l que m u l t i p l i c a una f i l a por un e s c a l a r "
32 print "En e s t e c a s o , l a f i l a 1 por −3.5 "
33 print O p e ra c i o n E l e m e n ta l 1 (A, 1 , − 3 . 5 )
34
35 print " "
36 print " O p e ra c i o n e l e m e n t a l que "
37 print "suma a una f i l a e l p ro d u c to de un e s c a l a r por o t r a f i l a "
38 print "En e s t e c a s o , l a u l t i m a f i l a mas l a p ri m e ra m u l t i p l i c a d a por −7"
39 print O p e ra c i o n E l e m e n ta l 2 (A, 2 , 0 , − 7 )
40
41 print " "
42 print " O p e ra c i o n e l e m e n t a l que "
43 print " i n t e r c a m b i a dos f i l a s "
44 print "En e s t e c a s o , l a u l t i m a f i l a y l a p ri m e ra "
45 print O p e ra c i o n E l e m e n ta l 3 (A, 0 , 2 )
86 2.1. Matrices elementales

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A=
3 [ [ 1. 5 . −9.]
4 [ 6 . −2. 4.]
5 [ 7. 2. −5.]]
6
7 O p e ra c i o n e l e m e n t a l que m u l t i p l i c a una f i l a por un e s c a l a r
8 En e s t e c a s o , l a f i l a 1 por −3.5
9 [[ 1. 5. −9.]
10 [ −21. 7 . −14.]
11 [ 7. 2. −5.]]
12
13 O p e ra c i o n e l e m e n t a l que
14 suma a una f i l a e l p ro d u c to de un e s c a l a r por o t r a f i l a
15 En e s t e c a s o , l a u l t i m a f i l a mas l a p ri m e ra m u l t i p l i c a d a por −7
16 [[ 1. 5. −9.]
17 [ −21. 7 . −14.]
18 [ 0 . −33. 58.]]
19
20 O p e ra c i o n e l e m e n t a l que
21 i n t e r c a m b i a dos f i l a s
22 En e s t e c a s o , l a u l t i m a f i l a y l a p ri m e ra
23 [[ 0 . −33. 58.]
24 [ −21. 7 . −14.]
25 [ 1. 5. −9.]]
26 >>>

En el Algoritmo 2.1, implementamos las tres operaciones elementales por fila. En la


línea 12, definimos la función OperacionElemental1(A,i,k), la cual, toma la matriz A
y reemplaza la fila i por la misma fila i multiplicada por el escalar k. De igual manera,
en la línea 17 implementamos la función OperacionElemental2(A,i,j,k):, la cual, cambia
la fila i, por la misma fila i más la fila j multiplicada por el escalar k. Finalmente, en la
línea 22, tenemos la función OperacionElemental3(A,i,j):, la cual, intercambia las filas i
y j.

Ahora implementaremos el algoritmo para las matrices elementales:

.:Algoritmo 2.2

1 i m p o rt numpy a s np
2
3 d e f O p e ra c i o n E l e m e n t a l 1 (A, i , k ) :
2. Factorización de matrices 87

4 A[ i , : ] = k∗A[ i , : ]
5 return A
6
7
8 d e f O p e ra c i o n E l e m e n t a l 2 (A, i , j , k ) :
9 A[ i , : ] =A[ i , : ] + k ∗A[ j , : ]
10 return A
11
12
13 d e f O p e ra c i o n E l e m e n t a l 3 (A, i , j ) :
14 f o r k i n ra n g e ( np . shape (A[ i , : ] ) [ 0 ] ) :
15 c=A[ i , k ]
16 A[ i , k ]=A[ j , k ]
17 A[ j , k ]= c
18 return A
19
20
21 d e f M a tri z E l e m e n ta l 1 ( n , i , k ) :
22 I=np . e y e ( n )
23 A=O p e ra c i o n E l e m e n ta l 1 ( I , i , k )
24 return A
25
26
27 p r i n t ""
28 p r i n t M a tri z E l e m e n t a l 1 ( 3 , 0 , 0 . 5 )
29
30
31 d e f M a tri z E l e m e n ta l 2 ( n , i , j , k ) :
32 I=np . e y e ( n )
33 A=O p e ra c i o n E l e m e n ta l 2 ( I , i , j , k )
34 return A
35
36 p r i n t ""
37 p r i n t M a tri z E l e m e n t a l 2 ( 4 , 2 , 0 , − 2 . 0 )
38
39 d e f M a tri z E l e m e n ta l 3 ( n , i , j ) :
40 I=np . e y e ( n )
41 A=O p e ra c i o n E l e m e n ta l 3 ( I , i , j )
42 return A
43
44 p r i n t ""
45 p r i n t M a tri z E l e m e n t a l 3 ( 5 , 0 , 4 )

El programa anterior produce la siguiente salida:

1 >>>
2 [ [ 0.5 0. 0. ]
3 [ 0. 1. 0. ]
4 [ 0. 0. 1. ] ]
88 2.1. Matrices elementales

5
6 [ [ 1. 0. 0. 0.]
7 [ 0. 1. 0. 0.]
8 [ −2. 0. 1. 0.]
9 [ 0. 0. 0. 1.]]
10
11 [ [ 0. 0. 0. 0. 1.]
12 [ 0. 1. 0. 0. 0.]
13 [ 0. 0. 1. 0. 0.]
14 [ 0. 0. 0. 1. 0.]
15 [ 1. 0. 0. 0. 0.]]
16 >>>

El Algoritmo 2.2, implementa tres funciones que retornan los tres tipos de matrices
elementales, de acuerdo a cada una de las operaciones elementales por fila:
MatrizElemental1(n,i,k): Esta función, retorna la matriz elemental, que resulta de
reemplazar una fila por ella misma multiplicada por un escalar. El parámetro n es
el tamaño de la matriz, i es la fila y k es el escalar.

MatrizElemental2(n,i,j,k): Esta función, entrega la matriz elemental, que resulta de


reemplazar una fila por ella misma, más la multiplicación de otra fila por un escalar.
El parámetro n es el tamaño de la matriz, i es la primera fila, j es la segunda fila
y k es el escalar.

MatrizElemental3(n,i,k): Esta función, retorna la matriz elemental, que resulta de


intercambiar dos filas. El parámetro n es el tamaño de la matriz, i y j son las filas
a intercambiar.

En la salida del Algoritmo 2.2, vemos los tres tipos de matrices elementales:
 
0.5 0 0
I3 =  0 1 0 
0 0 1
 
1 0 0 0
 0 1 0 0 
I4 = 
 −2 0 1 0 

0 0 0 1
 
0 0 0 0 1
 0 1 0 0 0 
 
I5 =  0 0 1 0 0 

 0 0 0 1 0 
1 0 0 0
2. Factorización de matrices 89

El siguiente Algoritmo, toma la matriz del ejemplo 2.5 y la convierte en la matriz


identidad, usando las funciones definidas en los Algoritmos 2.1 y 2.2. Recuerde que la
multiplicación de matrices no es conmutativa, por lo tanto, el orden es importante, tenga
en cuenta que la multiplicación de la matriz elemental es por la izquierda.

.:Algoritmo 2.3

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 3 ] ,
4 [ 5 , 7 ] ] , dtype=f l o a t )
5
6 p r i n t "La m a t r i z A= "
7 print A
8
9 d e f O p e ra c i o n E l e m e n t a l 1 (A, i , k ) :
10 A[ i , : ] = k∗A[ i , : ]
11 return A
12
13 d e f O p e ra c i o n E l e m e n t a l 2 (A, i , j , k ) :
14 A[ i , : ] =A[ i , : ] + k ∗A[ j , : ]
15 return A
16
17 d e f O p e ra c i o n E l e m e n t a l 3 (A, i , j ) :
18 f o r k i n ra n g e ( np . shape (A[ i , : ] ) [ 0 ] ) :
19 c=A[ i , k ]
20 A[ i , k ]=A[ j , k ]
21 A[ j , k ]= c
22 return A
23
24 d e f M a tri z E l e m e n ta l 1 ( n , i , k ) :
25 I=np . e y e ( n )
26 A=O p e ra c i o n E l e m e n ta l 1 ( I , i , k )
27 return A
28
29
30 d e f M a tri z E l e m e n ta l 2 ( n , i , j , k ) :
31 I=np . e y e ( n )
32 A=O p e ra c i o n E l e m e n ta l 2 ( I , i , j , k )
33 return A
34
35 d e f M a tri z E l e m e n ta l 3 ( n , i , j ) :
36 I=np . e y e ( n )
37 A=O p e ra c i o n E l e m e n ta l 3 ( I , i , j )
38 return A
39
40
41 p r i n t ""
42
43 p r i n t " M u l t i p l i c a m o s por l a s M a t r i c e s E l e m e n t a l e s "
44 p r i n t " Para c o n v e r t i r l a m a t r i z A en l a m a t r i z i d e n t i d a d "
90 2.1. Matrices elementales

45
46 E1=M a tri z E l e m e n t a l 2 ( 2 , 1 , 0 , − 5 )
47 p r i n t "La m a t r i z e l e m e n t a l E1\n" , E1
48 p r i n t " a l m u l t i p l i c a r E1 por A obtenemos : "
49 A=E1 . dot (A)
50 print A
51
52 print " "
53
54 E2=M a tri z E l e m e n t a l 1 ( 2 , 1 , − 1 . 0 / 8 . 0 )
55 p r i n t "La m a t r i z e l e m e n t a l E2\n" , E2
56 p r i n t " a l m u l t i p l i c a r E2 por A obtenemos : "
57 A=E2 . dot (A)
58 print A
59
60 print " "
61
62 E3=M a tri z E l e m e n t a l 2 ( 2 , 0 , 1 , − 3 . 0 )
63 p r i n t "La m a t r i z e l e m e n t a l E3\n" , E3
64 p r i n t " a l m u l t i p l i c a r E3 por A obtenemos : "
65 A=E3 . dot (A)
66 print A

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A=
3 [ [ 1. 3.]
4 [ 5. 7.]]
5
6 M u l t i p l i c a m o s por l a s M a t r i c e s E l e m e n t a l e s
7 Para c o n v e r t i r l a m a t r i z A en l a m a t r i z i d e n t i d a d
8 La m a t r i z e l e m e n t a l E1
9 [ [ 1. 0.]
10 [ −5. 1.]]
11 a l m u l t i p l i c a r E1 por A obtenemos :
12 [ [ 1. 3.]
13 [ 0. −8.]]
14
15 La m a t r i z e l e m e n t a l E2
16 [ [ 1. 0. ]
17 [ −0. −0.125]]
18 a l m u l t i p l i c a r E2 por A obtenemos :
19 [ [ 1. 3.]
20 [ 0. 1.]]
21
22 La m a t r i z e l e m e n t a l E3
23 [ [ 1 . −3.]
24 [ 0. 1.]]
2. Factorización de matrices 91

25 a l m u l t i p l i c a r E3 por A obtenemos :
26 [ [ 1. 0.]
27 [ 0. 1.]]
28 >>>

El Algoritmo 2.3, muestra como convertimos la matriz A en la matriz identidad de tamaño


2 × 2 (ver líneas 26 y 27).

2.2. Factorización A = LU
Esta factorización requiere del concepto de matriz Triangular:

.:Definición 2.2 Diremos que una matriz cuadrada de tamaño n × n es


i) Triangular superior cuando todas las componentes debajo de la diagonal principal
son cero.
ii) Triangular inferior cuando todas las componentes arriba de la diagonal principal
son cero.

.:Ejemplo 2.8

Tomemos las siguientes matrices:

   
4 5 2 1 0 0  
1 0
A =  0 −1 2 , B= 9 1 0 , C=
0 1
0 0 −9 −4 2 1
Las matrices A, B y C son matrices triangulares, en el caso de A es triangular superior,
B es triangular inferior y C es una matriz identidad que es superior e inferior.

El siguiente teorema, muestra como están relacionadas las matrices elementales con las
matrices triangulares.

.:Teorema 2.4 Sea A una matriz de n×n, entonces A se puede escribir como el producto
de matrices elementales E1 , E2 . . . Ek y una matriz triangular superior U , teniendo en
cuenta que las matrices elementales están a la izquierda y la matriz U está a la derecha.
92 2.2. Factorización A = LU

El teorema nos dice que es posible obtener la representación de una matriz, por medio del
producto de matrices elementales y una matriz triangular superior; un ejemplo de dicha
representación lo podemos ver en la matriz del ejemplo 2.5:
 
1 3
A=
5 7
Ahora bien, en el ejemplo 2.7, vemos que A se puede obtener como el producto de matrices
elementales por U .
      
1 3 1 0 1 0 1 3
=
5 7 5 1 0 −8 0 1
| {z } | {z } | {z } | {z }
A E1−1 E2−1 E3−1 =U
| {z } | {z }
Matrices elementales Matriz Triangular Superior

La matriz U es una matriz elemental (sólo en este caso).

Pero, para continuar, necesitamos saber un poco más sobre el producto de matrices
triangulares:

.:Teorema 2.5 Sea A y B matrices triangulares inferiores con unos en la diagonal.


Entonces el producto AB también es una matriz triangular inferior con unos en la
diagonal.

.:Ejemplo 2.9

Observe el producto de las matrices triangulares inferiores con unos en la diagonal:


   
1 0 0 1 0 0
A= 2 1 0  y B =  −7 1 0 
4 9 1 2 −8 1
AB sería:
    
1 0 0 1 0 0 1 0 0
AB =  2 1 0   −7 1 0  =  −5 1 0 
4 9 1 2 −8 1 −57 1 1

.:Teorema 2.6 Sea A y B matrices triangulares superiores. Entonces, el producto AB


también es una matriz triangular superior.

.:Ejemplo 2.10
2. Factorización de matrices 93

Observe el producto de las matrices triangulares superiores:


   
3 5 −9 5 6 −7
A= 0 2 3  y B =  0 4 −9 
0 0 3 0 0 11
AB sería:
    
3 5 −9 5 6 −7 15 38 −165
AB =  0 2 3  0 4 −9  =  0 8 15 
0 0 3 0 0 11 0 0 33
El siguiente teorema, muestra como podemos expresar una matriz invertible en el producto
de dos matrices, una triangular inferior con unos en la diagonal y una matriz triangular
superior.

.:Teorema 2.7 Sea A una matriz cuadrada de n × n. Si A puede ser reducida a su


forma escalonada reducida por renglones (sin permutar renglones), entonces, A tiene
factorización LU , es decir:

A = LU
Donde L es una matriz triangular inferior con unos en la diagonal y U es una matriz
triangular superior.

.:Ejemplo 2.11

Dada la matriz A
 
4 2
A=
−7 5
expresemos A como el producto LU :

primero multiplicamos A por matrices elementales hasta convertirla en la matriz


identidad:

    
1 0 4 2 4 2
=
1.75 1 −7 5 0 8.5
| {z }| {z }
E1 A

Ahora, obtenemos la inversa de E1 :


 
1 0
E1−1 =
−1.75 0
94 2.2. Factorización A = LU

Ahora multiplicamos E1−1 por izquierda:


      
1 0 1 0 4 2 1 0 4 2
=
−1.75 1 1.75 1 −7 5 −1.75 1 0 8.5
| {z }| {z }| {z }
E1−1 E1 A

  
 
4 2 1 0 4 2
=
−7 5 −1.75 1 0 8.5
| {z } | {z }| {z }
A L U

En el ejemplo anterior, sólo fue necesario encontrar una matriz elemental y su inversa,
pero para matrices de mayor tamaño es necesario obtener más matrices elementales.

El siguiente algoritmo, implementa la factorización A = LU :

.:Algoritmo 2.4

1 i m p o rt numpy a s np
2 i m p o rt copy
3
4 A = np . a r r a y ( [ [ 6 , 5, 7] ,
5 [4 , 2 , −3] ,
6 [7 , 2, 9 ] ] , dtype=f l o a t )
7
8 p r i n t "La m a t r i z A: \ n" , A
9 print " "
10
11 n=np . shape (A) [ 0 ]
12
13 U=copy . copy (A)
14
15 f o r i i n ra n g e ( n−1) :
16 f o r j i n ra n g e ( i +1 , n ) :
17 TEMP=−1∗U[ j , i ] /U[ i , i ]
18 U[ j , : ] =U[ j , : ] + TEMP∗U[ i , : ]
19
20 p r i n t "La M a tri z U: \ n" , U
21
22 print " "
23
24 L=np . e y e ( n )
25
26 L [ 1 : n , 0 ] =A [ 1 : n , 0 ] / U[ 0 , 0 ]
27 f o r i i n ra n g e ( 1 , n ) :
28 f o r j i n ra n g e ( i +1 ,n ) :
29 TEMP=0
30 f o r l i n ra n g e ( i ) :
31 TEMP = TEMP + L [ j : n , 0 ] ∗ U[ l , i ]
2. Factorización de matrices 95

32 L [ j : n , i ]=(A[ j : n , i ]−TEMP) /U[ i , i ]


33
34 p r i n t " l a M a tri z L : \ n" , L
35 print " "
36
37 p r i n t "La m u l t i p l i c a c i o n LU: \ n" , L . dot (U)

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A:
3 [ [ 6. 5. 7.]
4 [ 4. 2 . −3.]
5 [ 7. 2. 9.]]
6
7 La M a tri z U:
8 [[ 6 . 0 0 0 0 0 0 0 0 e+00 5 . 0 0 0 0 0 0 0 0 e+00 7 . 0 0 0 0 0 0 0 0 e +00]
9 [ 0 . 0 0 0 0 0 0 0 0 e+00 −1.33333333 e+00 −7.66666667 e +00]
10 [ 0 . 0 0 0 0 0 0 0 0 e+00 −4.44089210 e −16 2.28750000 e +01]]
11
12 la M a tri z L :
13 [[ 1. 0. 0. ]
14 [ 0.66666667 1. 0. ]
15 [ 1.16666667 2.875 1. ]]
16
17 La m u l t i p l i c a c i o n LU :
18 [ [ 6. 5. 7.]
19 [ 4. 2 . −3.]
20 [ 7. 2. 9.]]
21 >>>

El Algoritmo 2.4, muestra como convertimos la matriz A en su correspondiente


factorización en matrices L y U . Este Algoritmo inicialmente encuentra la matriz U ,
tomando como base la matriz A (linea 13), para ello usamos el comando U=[Link](A),
este comando permite copiar un objeto de Python, sin embargo, debemos instalar la
librería correspondiente, en este caso import copy. Posteriormente, modificamos la matriz
U (líneas 15 a 18), los cambios consisten en hacer el pivoteo, tomando una variable
temporal TEMP donde se calcula el cociente de la componente sobre el valor de la diagonal
-1*U[j,i]/U[i,i], luego recalculamos el valor para la columna.

Una vez calculamos la matriz U , seguimos con la matriz L. El proceso es muy similar, sólo
que antes de empezar el ciclo, tomamos L como la matriz identidad (línea 22) y calculamos
los valores para la primera columna (línea 26): L[1:n,0]=A[1:n,0]/U[0,0]; luego, en el ciclo
96 2.2. Factorización A = LU

for, calculamos cada valor, teniendo en cuenta que las listas sólo representan los vectores
de la matriz L de la diagonal hacia abajo; el valor se almacena en una variable temporal,
y luego se actualiza cada columna.

Este Algoritmo toma la matriz A y devuelve las matrices L y U , al final comprueba que
la multiplicación de L por U es A.
    
6 5 7 1 0 0 6.00000000e + 00 5.00000000e + 00 7.00000000e + 00
 4 2 −3  =  0.66666667 1 0   0.00000000e + 00 −1.33333333e + 00 −7.66666667e + 00 
7 2 9 1.16666667 2.875 1 0.00000000e + 00 −4.44089210e − 16 2.28750000e + 01
| {z } | {z }| {z }
A L U

En este caso, la matriz U , tiene en su componente 3,2 el valor −4.44089210e − 16, que
debería ser un cero, pero Python toma este valor muy cercano a cero.

.:Ejercicios 2.1

1. Encuentre la Factorización A = LU de las siguientes matrices:

a)   e)
1 7  
8 −1 3 2 5 8 7
 5 −5 6 9 8 
b)  
   −8 5 1 0 4 
6 3
2 −9 9 5 4 9 8
c)  
8 4 f)
0 2
d)  

8 8 6
 1.25 5.214 4.698
 −4 5  8.325 0.2145 0.2544 
6 
3.32 5.62 0.214
1 2 3

2. Con base a los algoritmos 2.1, 2.2 y 2.4, implemente la función FactorizacionLU(A):
en Python, con las siguientes características:
1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 3 , 5] ,
4 [ 4 , −2, 9 ] ,
5 [ − 1 , 7 , 6 ] ] , dtype=f l o a t )
6
7
8 d e f F a c t o r i z a c i o n L U (A) :
2. Factorización de matrices 97

9 .
10 .
11 .
12 return Lista

La función debe recibir como parámetro la matriz A de tamaño n × n, y debe


devolver una lista que contenga las dos matrices L y U .

2.3. Factorización P A = LU
En la factorización A = LU , conlleva operaciones elementales por fila, que no requieren
matrices elementales de permutación. Por esta razón, se hace necesario tener en
cuenta, aquellas matrices que durante su proceso de eliminación, requieren una o más
permutaciones. El siguiente teorema ilustra la situación.

.:Teorema 2.8 Sea A una matriz cuadrada de n × n. Entonces existe una matriz de
permutación P tal que

P A = LU
donde L es una matriz triangular inferior con unos en la diagonal y U es una matriz
triangular superior.

Cada vez que hacemos una permutación, a una matriz de tamaño n × n, tenemos n − 1
posibles filas para hacer el intercambio. Esto genera que tengamos una matriz P , una
matriz L y una matriz U , diferentes por cada una delas filas con que se haga el intercambio.

.:Ejemplo 2.12

Encontrar la factorización P A = LU de la matriz (Ejemplo tomado de [11])


 
0 2 −1
A= 2 5 0 
1 −3 1
Como podemos observar, la matriz A debe ser permutada para realizar la factorización
LU . Para empezar, multiplicaremos por la matriz P :
 
0 0 1
P = 0 1 0 
1 0 0
98 2.3. Factorización P A = LU

observemos que al hacer la multiplicación P A tenemos como resultado la matriz

  
0 0 1 0 2 −1
PA =  0 1 0  2 5 0 
1 0 0 1 −3 1
 
1 −3 1
=  2 5 0 
0 2 −1

Ahora realizaremos la factorización LU a la matriz, Este proceso lo podemos simplificar


usando las propiedades de L y U . Recordemos que L es triangular inferior con unos en la
diagonal y la matriz U es triangular superior.

     
0 0 1 0 2 −1 1 0 0 d e f
 0 1 0  2 5 0  =  a 1 0  0 g h 
1 0 0 1 −3 1 b c 1 0 0 i
| {z }| {z } | {z }| {z }
P A L U
   
1 −3 1 1 0 0 d e f
 2 5 0  =  a 1 0  0 g h 
0 2 −1 b c 1 0 0 i
| {z } | {z }| {z }
PA L U

En este ejemplo mostraremos una forma alternativa de encontrar la factorización LU .


Como podemos ver la componente a11 de P A es 1, lo que implica que es el resultado de
multiplicar la fila o renglón 1 de L por la columna 1 de U .

 
 d
1 = 1 0 0 · 0 
0
1 = d+0+0

1 = d

Ya tenemos el valor de d, las demás ecuaciones, permiten encontrar rápidamente los


valores de a, b, c y e, f, g, h e i.
2. Factorización de matrices 99

   
 e  f
−3 = 1 0 0 · g  1 = 1 0 0 · h 
0 i
= e+0+0 = f +0+0
−3 = e 1 = f

Posteriormente, procedemos con la segunda fila:

 
 d
2 = a 1 0 · 0 
0
= ad + 0 + 0
2 = a(1)
2 = a

Luego,

   
 e  f
5 = a 1 0 · g  0 = a 1 0 · h 
0 i
= ae + g + 0 = af + h + 0
5 = (2)(−3) + g = (2)(1) + h
11 = g −2 = h

Por último, hacemos la tercera fila

 
 d
0 = b c 1 · 0 
0
0 = bd + 0 + 0
0 = b
100 2.3. Factorización P A = LU

 
 e
2 = b c 1 · g 
0
= be + cg + 0
2 = (0)(−3) + c(11)
2
= c
11

 
 f
−1 = b c 1 · h 
i
= bf + ch + i
 
2
= (0)(1) + (−2) + i
11
4
1 = − +i
11
7
− = i
11
Luego, La factorización P A = LU es la siguiente
     
0 0 1 0 2 −1 1 0 0 1 −3 1
 0 1 0  2 5 0 = 2 1 0  0 11 −2 
2 7
1 0 0 1 −3 1 0 11 1 0 0 − 11
| {z }| {z } | {z }| {z }
P A L U

Esta forma de encontrar la factorización P A = LU , puede funcionar para matrices de


tamaño 3 × 3, 4 × 4 y hasta de 5 × 5, de ahí en adelante se vuelve muy complejo, por la
cantidad de variables relacionadas con el proceso.

En Python, es posible realizar la factorización P A = LU , esto se logra con las librerías


[Link] y [Link], en ellas está implementada la función lu(A). El siguiente
algoritmo muestra su uso:

.:Algoritmo 2.5

1 i m p o rt numpy a s np
2 from numpy . l i n a l g i m p o rt ∗
3 from s c i p y . l i n a l g i m p o rt ∗
2. Factorización de matrices 101

4
5 A = np . a r r a y ( [ [ 0 , −4, 5 ] ,
6 [ 1 6 , 21 , 9 ] ,
7 [ 3 7 , 4 2 , 2 1 ] ] , dtype=f l o a t )
8
9
10 P , L ,U=l u (A)
11
12 print "La m a t r i z de p e rm u ta c i o n P : \ n" ,P
13 print " "
14 print "La m a t r i z L t r i a n g u l a r i n f e r i o r con unos en l a d i a g o n a l : \ n" , L
15 print " "
16 print "La m a t r i z U t r i a n g u l a r s u p e r i o r : \ n" ,U

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z de p e rm u ta c i o n P :
3 [ [ 0. 1. 0.]
4 [ 0. 0. 1.]
5 [ 1. 0. 0.]]
6
7 La matriz L t r i a n g u l a r i n f e r i o r con unos en l a d i a g o n a l :
8 [[ 1. 0. 0. ]
9 [ 0. 1. 0. ]
10 [ 0 . 4 3 2 4 3 2 4 3 −0.70945946 1 . ]]
11
12 La m a t r i z U t r i a n g u l a r s u p e r i o r :
13 [ [ 37. 42. 21. ]
14 [ 0. −4. 5. ]
15 [ 0. 0. 3.46621622]]
16 >>>

El Algoritmo 2.5, usa la función lu(A), la cual, devuelve como resultado tres matrices
P , L y U , razón por la cual, usamos la instrucción P,L,U=lu(A); donde en la matriz P
se almacena la matriz de permutación, en L la matriz triangular inferior con unos en la
diagonal y en U la matriz triangular superior; luego:

     
0 1 0 0 −4 5 1 0 0 37 42 21
 0 0 1   16 21 9 = 0 1 0  0 −4 0 
1 0 0 37 42 21 0.43243243 −0.70945946 1 0 0 3.46621622
| {z }| {z } | {z }| {z }
P A L U
102 2.3. Factorización P A = LU

.:Ejercicios 2.2

1. Para cada una de las matrices dadas a continuación, encuentre: una matriz de
permutación P , una triangular inferior L con unos en la diagonal y una matriz
escalonada U , tales que P A = LU

a)   d)
0 1 −1
A=
1 −1 2 
0 0 −1 2

b)  −1 −1 1 2 
A= 
   2 1 −3 6 
0 0 3 −2
0 1 −1 4
 0 0 2 −1 
A=
 3 −4 0

2 
4 −5 −2 4 e)
c)
 
  0 −1 2 1 3
5 −5 10 0 5  −1 1
 −3 3 2 2 1  3 1 4 
A= A=
 1 −1

 −2 2
 −3 6 2 
0 −1 0 
2 −2 −4 1 0
1 −1 10 2 5

2. Implemente un programa en Python con base en el Algoritmo 2.4, que permita


desarrollar la factorización P A = LU :

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 3 , 5] ,
4 [ 4 , −2, 9 ] ,
5 [ − 1 , 7 , 6 ] ] , dtype=f l o a t )
6
7
8 d e f FactorizacionPALU (A) :
9 .
10 .
11 .
12 return Lista

El algoritmo debe recibir como parámetros la matriz A, y debe devolver una lista
con las matrices P , L y U .
2. Factorización de matrices 103

2.4. Factorización QR.


Para empezar, debemos tener en cuenta la siguiente definición:

.:Definición 2.3 Matriz ortogonal:


Una matriz ortogonal es una matriz cuadrada cuya matriz inversa coincide con su matriz
traspuesta.

.:Ejemplo 2.13

Compruebe que la matriz  


1 0 0
A= 0 0 −1 
0 1 0
es simétrica:

Veamos A−1 :
 
1 0 0
A−1 = 0 0 1 
0 −1 0
y At
 
1 0 0
At =  0 0 1 
0 −1 0
Luego A−1 = At .

El siguiente teorema, garantiza la existencia de la factorización QR:

.:Teorema 2.9 Sea A (en el campo de los R) una matriz de tamaño n × n con n pivotes.
Entonces existen matrices Q de tamaño n × n ortogonal y R de tamaño n × n triangular
superior e invertible tales que A = QR.1

El siguiente Algoritmo, muestra como podemos encontrar la factorización QR de una


matriz A en Python.

.:Algoritmo 2.6
1 Para una demostración de este teorema ver [13].
104 2.4. Factorización QR.

1 i m p o rt numpy a s np
2 from numpy . l i n a l g i m p o rt ∗
3 from s c i p y . l i n a l g i m p o rt ∗
4
5 A = np . a r r a y ( [ [ 1 , −1, 5 ] ,
6 [6 , 5 , 9] ,
7 [ 9 , 4 , 1 ] ] , dtype=f l o a t )
8
9 p r i n t "La m a t r i z A: \ n" , A
10
11 Q,R=q r (A)
12
13 print " "
14 print "La m a t r i z Q o r t o g o n a l : \ n" ,Q
15 print " "
16 print "La m a t r i z R t r i a n g u l a r s u p e r i o r : \ n" ,R

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A:
3 [ [ 1 . −1. 5.]
4 [ 6. 5. 9.]
5 [ 9. 4. 1.]]
6
7 La m a t r i z Q o r t o g o n a l :
8 [[ −0.09205746 0.62309088 −0.77671306]
9 [ − 0 . 5 5 2 3 4 4 7 7 −0.68097364 − 0 . 4 8 0 8 2 2 3 7 ]
10 [ −0.82851716 0.38475011 0.4068497 ] ]
11
12 La m a t r i z R t r i a n g u l a r s u p e r i o r :
13 [[ −10.86278049 −5.98373502 −6.2599074 ]
14 [ 0. −2.48895867 −2.62855827]
15 [ 0. 0. −7.80411691]]
16 >>>

El Algoritmo 2.6, muestra que la matriz A se descompuso en dos matrices Q y R:


    
1 −1 5 −0.09205746 0.62309088 −0.77671306 −10.86278049 −5.98373502 −6.2599074
 6 5 9  =  −0.55234477 −0.68097364 −0.48082237  0 −2.48895867 −2.62855827 
9 4 1 −0.82851716 0.38475011 0.4068497 0 0 −7.80411691
| {z } | {z }| {z }
A Q R

Ahora bien, aunque Numpy y Scipy traen implementada la función qr(), en el siguiente
Algoritmo, veremos como hacerlo, de acuerdo con el método de Gram-Schmidt. Dicho
2. Factorización de matrices 105

algoritmo lo podemos encontrar en el artículo “Factorizaciones, procesos y algoritmos de


solución o iterados para sistemas de ecuaciones lineales” escrito por David Wong Aitken
de la Universidad de Trujillo Peru [15].

.:Algoritmo 2.7

1 i m p o rt numpy a s np
2 from numpy i m p o rt l i n a l g a s LA
3 i m p o rt copy
4
5
6 A = np . a r r a y ( [ [ 1 , 5, 7] ,
7 [4 , 2 , −3] ,
8 [7 , 2, 9 ] ] , dtype=f l o a t )
9
10
11 p r i n t "La m a t r i z A: \ n" , A
12 print " "
13
14 n , m = np . shape (A)
15
16 A1=copy . copy (A)
17
18 f o r j i n ra n g e ( n ) :
19 f o r k i n ra n g e ( j ) :
20 mult = A [ : , j ] . T . dot (A [ : , k ] ) / (A [ : , k ] . T . dot ( A [ : , k ] ) )
21 A [ : , j ] = A [ : , j ] − mult ∗A [ : , k ]
22
23
24 Q = np . z e r o s ( ( n ,m) )
25
26 f o r j i n ra n g e ( n ) :
27 i f LA . norm (A [ : , j ] ) < np . s q r t (2∗∗( −52) ) :
28 p r i n t " Las columnas de A son l i n a l m e n t e i n d e p e n d i e n t e s . "
29 Q [ : , j ] = A [ : , j ] /LA . norm (A [ : , j ] )
30
31 R = Q. T . dot (A1)
32
33 p r i n t "La m a t r i z Q: \ n" , Q
34 print " "
35 p r i n t "La m a t r i z R: \ n" , R
36
37 print " "
38 p r i n t "La m u l t i p l i c a c i o n de Q por R: \ n "
39 p r i n t Q. dot (R)

El programa anterior produce la siguiente salida:


106 2.4. Factorización QR.

1 >>>
2 La m a t r i z A:
3 [ [ 1. 5. 7.]
4 [ 4. 2 . −3.]
5 [ 7. 2. 9.]]
6
7 La m a t r i z Q:
8 [ [ 0.12309149 0.97979782 0.15762208]
9 [ 0.49236596 0.07760775 −0.86692145]
10 [ 0 . 8 6 1 6 4 0 4 4 −0.1843184 0.47286624]]
11
12 La m a t r i z R :
13 [[ 8 . 1 2 4 0 3 8 4 0 e+00 3 . 3 2 3 4 7 0 2 6 e+00 7 . 1 3 9 3 0 6 4 8 e +00]
14 [ −2.22044605 e −16 4 . 6 8 5 5 6 7 7 8 e+00 4 . 9 6 6 8 9 5 8 7 e +00]
15 [ −4.16333634 e −16 −5.82867088 e −16 7.95991510 e +00]]
16
17 La m u l t i p l i c a c i o n de Q por R :
18
19 [ [ 1. 5. 7.]
20 [ 4. 2. −3.]
21 [ 7. 2. 9.]]
22 >>>

El Algoritmo 2.7, toma la matriz A y obtiene sus tamaños y saca una copia de la matriz
A en la matriz A1 (lineas 14 y 16). Luego, por medio de un ciclo, obtiene los valores
del proceso de Gram-Schmidt, almacenando en la variable mult, el cociente del producto
punto entre los vectores columna de A; luego, se usa este resultado para actualizar cada
columna de A con su correspondiente valor (líneas 18 a 21) .

Posteriormente, se genera la matriz Q como una matriz nula (línea 24) y por medio de un
ciclo, se construyen las columnas de Q, tomando las columnas de A y dividiéndolas por la
norma de cada columna (líneas 26 a 29). Finalmente, la matriz R se obtiene al multiplicar
la transpuesta de Q por la matriz original A, que esta almacenada en A1 (línea 31). Al
final del Algoritmo, multiplicamos de nuevo las matrices Q y R para corroborar que nos
da como resultado la matriz A (línea 39).

Tengamos en cuenta que la matriz R es una matriz triangular superior, pero nuestro
Algoritmo, nos devolvió la matriz:
 
8.12403840e + 00 3.32347026e + 00 7.13930648e + 00
R =  −2.22044605e − 16 4.68556778e + 00 4.96689587e + 00 
−4.16333634e − 16 −5.82867088e − 16 7.95991510e + 00
Aparentemente, la matriz R no es triangular superior, pero los valores por debajo de la
diagonal, son muy pequeños y se pueden redondear a cero sin ningún problema:
2. Factorización de matrices 107

 
8.12403840 3.32347026 7.13930648
R= 0 4.68556778 4.96689587 
0 0 7.95991510
Finalmente, la matriz A en su factorización QR sería:
    
1 5 7 0.12309149 0.97979782 0.15762208 8.12403840 3.32347026 7.13930648
 4 2 −3  =  0.49236596 0.07760775 −0.86692145   0 4.68556778 4.96689587 
7 2 9 0.86164044 −0.1843184 0.47286624 0 0 7.95991510
| {z } | {z }| {z }
A Q R

2.5. Factorización de Cholesky


Esta factorización, al contrario de las anteriores, sólo es posible para matrices simétricas
definidas positivas. A continuación daremos una definición de éste tipo de matrices y un
ejemplo ilustrativo:

.:Definición 2.4 Matriz definida positiva:


Una matriz simétrica es definida positiva, cuando para cualquier vector x 6= 0, xt Ax es
un número real k > 0.

.:Ejemplo 2.14

Tomemos la matriz A definida positiva de tamaño 4 × 4 y un vector aleatorio x de tamaño


4 × 1:
   
5 −1 0 0 2
 −1 5 −1 0   −1 
A=  0 −1
 y x= 
5 −1   7 
0 0 −1 5 9
Veamos como es el producto xt Ax: inicialmente veremos los tamaños
 
2
   −1 
xt A x = 11 −14 27 38   7  = 567

9
Como vemos, el resultado es un número positivo, de igual manera, si realizamos el mismo
procedimiento con otro vector, el resultado siempre será un número mayor que cero.

El siguiente teorema afirma la existencia de la factorización de Cholesky:


108 2.5. Factorización de Cholesky

.:Teorema 2.10 Sea A una matriz de tamaño n × n además, A es simétrica y definida


positiva, entonces existe una única matriz real U = (uij ) de tamaño n × n triangular
superior y con uii > 0 con (i = 1, 2, . . . , n) tal que:

A = U tU

La demostración de este Teorema la podemos encontrar en [13].

La factorización de Cholesky es muy similar a la factorización LU , sólo que en este caso


U = Lt , es decir, que sólo se necesita calcular una matriz U (o L). La idea del método
consiste en hallar los pivotes de forma que se obtenga la matriz triangular superior. Héctor
Manuel Mora [16] nos muestra como se obtiene la factorización de Cholesky:

Recordemos que ésta factorización es la multiplicación de dos matrices, la primera es


triangular inferior y la segunda es triangular superior:

  
u11 u11 ··· u1k ··· u1j ··· u1n
 ..  .. .. .. 
 .  . . . 
  
 u1k
 ··· ukk 
 ukk · · · ukj ··· ukn  
 .. ..  .. .. 
 . .  . . 
  
 u1j
 ··· ukj ··· ujj 
 ujj ··· ujn  
 . .. ..  .. 
 .. . .  . 
u1n · · · ukn · · · ujn · · · unn unn

Así que el producto de la primera fila de U t por la primera columna de U es:

u211 = a11

Luego

u11 = a11
El producto de la primera fila de U t por la columna de j de U es:

u11 u1j = a1j


despejando tenemos:
a1j
u1j = para j = 2, . . . , n
u11
Bien, para seguir encontrando los demás componentes, sólo debemos multiplicar la fila k
de U t por la columna k de U , y entonces tendremos:
2. Factorización de matrices 109

k
X
u2ik = akk
i=1

k−1
X
u2ik + u2kk = akk
i=1

Entonces
v
u k−1
u X
ukk = ta kk − u2ik , para k = 2, . . . , n
i=1

Luego el producto de la fila k de U t por la columna j de U es:


k
X
uik uij = akj
i=1

Entonces:
k−1
X
akj − uik uij
i=1
ukj = para k = 2, . . . , n, j = k + 1, . . . , n
ukk

Éste método sólo devuelve una matriz, pues la segunda se obtiene al trasponer la primera;
en este caso la matriz triangular superior.

.:Ejemplo 2.15

Tomemos la matriz A definida positiva:


 
3 −1 0
A =  −1 3 −1 
0 −1 3

Calculamos el primer pivote: u11 = 3 = 1.73205081
−1
Ahora u12 = √ = −0.57735027
3
0
Luego u13 = √ = 0
3
La matriz U quedaría de la siguiente forma:
110 2.5. Factorización de Cholesky

 
1.73205081 −0.57735027 0
U = 0 0 0 
0 0 0
Calculamos el nuevo pivote:
p
u22 = 3 − (−0.57735027)2 = 1.63299316
Ahora calculamos los valores de la segunda fila:
−1
u23 = = −0.61237244
1.63299316
Ahora, la matriz U está definida de la siguiente forma:
 
1.73205081 −0.57735027 0
U = 0 1.63299316 −0.61237244 
0 0 0
Finalmente, el último pivote:
p
u33 = 3 − (−0.612372442 + 02 ) = 1.62018517
Nuestra matriz U es completa:
 
1.73205081 −0.57735027 0
U = 0 1.63299316 −0.61237244 
0 0 1.62018517
El Algoritmo 2.8, muestra como hacer la factorización de Cholesky con la librería Numpy
de Python.

.:Algoritmo 2.8

1 i m p o rt numpy a s np
2 i m p o rt copy
3
4 A = np . a r r a y ( [ [ 3 , −1, 0 ] ,
5 [ −1 , 3 , −1] ,
6 [ 0 , −1, 3 ] ] , dtype=f l o a t )
7
8 UT = np . l i n a l g . c h o l e s k y (A)
9
10 U=UT.T
11
12 p r i n t "La m a t r i z A: \ n" , A
13 print " "
14
2. Factorización de matrices 111

15 p r i n t "La m a t r i z UT: \ n" , UT


16 print " "
17
18 p r i n t "La m a t r i z t r a s p u e s t a U: \ n" , UT.T
19
20 print " "
21 p r i n t "La m u l t i p l i c a c i o n de UT por U: \ n" , UT. dot (U)

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A:
3 [ [ 3 . −1. 0.]
4 [ −1. 3 . −1.]
5 [ 0 . −1. 3.]]
6
7 La m a t r i z UT:
8 [ [ 1 . 7 3 2 0 5 0 8 1 −0. 0. ]
9 [ −0.57735027 1 . 6 3 2 9 9 3 1 6 −0. ]
10 [ 0. −0.61237244 1 . 6 2 0 1 8 5 1 7 ] ]
11
12 La m a t r i z t r a s p u e s t a U:
13 [ [ 1 . 7 3 2 0 5 0 8 1 −0.57735027 0 . ]
14 [ −0. 1.63299316 −0.61237244]
15 [ 0. −0. 1.62018517]]
16
17 La m u l t i p l i c a c i o n de UT por U:
18 [ [ 3 . −1. 0.]
19 [ −1. 3 . −1.]
20 [ 0 . −1. 3.]]
21 >>>

En el Algoritmo 2.8, vemos como la instrucción UT = [Link](A) , devuelve


la matriz triangular inferior; es por eso que la variable donde almacenamos la matriz
la llamamos UT. A continuación, mostraremos como implementar la factorización de
Cholesky sin usar la instrucción [Link](A).

El siguiente algoritmo, es implementado siguiendo los parámetros propuestos por Mora


[16]:

.:Algoritmo 2.9
112 2.5. Factorización de Cholesky

1 i m p o rt numpy a s np
2 i m p o rt copy
3
4 A = np . a r r a y ( [ [ 5 , −1, 0 , 0 ] ,
5 [ −1 , 5 , −1, 0 ] ,
6 [ 0 , −1, 5 , −1] ,
7 [ 0 , 0 , −1, 5 ] ] , dtype=f l o a t )
8
9 n = np . shape (A) [ 0 ]
10 e p s= 1 . 0 e−4
11
12 U = np . z e r o s ( ( n , n ) )
13
14 f o r k i n ra n g e ( n ) :
15 t = A[ k , k ] − U [ 0 : k , k ] . T . dot (U [ 0 : k , k ] )
16 i f t <= e p s :
17 p r i n t ’ M a tri z no d e f i n i d a p o s i t i v a . \ n ’
18 b re a k
19 else :
20 U[ k , k]= np . s q r t ( t )
21 f o r j i n ra n g e ( k+1 ,n ) :
22 U[ k , j ] = ( A[ k , j ] − U [ 0 : k , k ] . T . dot (U [ 0 : k , j ] ) ) /U[ k , k ]
23
24 p r i n t "La m a t r i z A: \ n" , A
25 print " "
26 p r i n t "La m a t r i z U: \ n" , U
27
28 UT=U.T
29
30 print " "
31 p r i n t "La m a t r i z UT: \ n" , UT
32
33 print " "
34 p r i n t "La m u l t i l i c a c i o n de UT por U: \ n" , UT. dot (U)

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A:
3 [ [ 5 . −1. 0 . 0.]
4 [ −1. 5 . −1. 0.]
5 [ 0 . −1. 5 . − 1 . ]
6 [ 0. 0 . −1. 5.]]
7
8 La m a t r i z U:
9 [[ 2 . 2 3 6 0 6 7 9 8 −0.4472136 0. 0. ]
10 [ 0. 2 . 1 9 0 8 9 0 2 3 −0.45643546 0 . ]
11 [ 0. 0. 2.18898759 −0.45683219]
12 [ 0. 0. 0. 2.18890483]]
2. Factorización de matrices 113

13
14 La m a t r i z UT:
15 [ [ 2.23606798 0. 0. 0. ]
16 [ −0.4472136 2.19089023 0. 0. ]
17 [ 0. −0.45643546 2 . 1 8 8 9 8 7 5 9 0. ]
18 [ 0. 0. −0.45683219 2.18890483]]
19
20 La m u l t i l i c a c i o n de UT por U:
21 [ [ 5 . −1. 0 . 0.]
22 [ −1. 5 . −1. 0.]
23 [ 0 . −1. 5 . − 1 . ]
24 [ 0. 0 . −1. 5.]]
25 >>>

El Algoritmo 2.9, descompone la matriz A usando una matriz nula U . De acuerdo a


la teoría, la matriz U se transforma en una matriz triangular superior. El algoritmo
determina un ciclo for (líneas 12 a 22) donde inicialmente se declara una variable t
(línea 15), dicha variable almacena los pivotes, posteriormente se determina si la matriz
es definida positiva (línea 16). Finalmente se hace el cálculo como lo hemos ilustrado
anteriormente.

.:Ejercicios 2.3

1. Encuentre la Factorización A = QR de las siguientes matrices:

a)   e)
8 9
7 −2  
−9 8 5 4 7
b)    4 −9 9 −9 8 
 
3.254 9.2147  7 4 1 2 5 
6.321 −5.012 0 2 1 4 5
c)  
9.3214 6.012
0.01214 −0.874 f)
d)  
  7 −9 −6
5 8 7  −5 −8
 4 10 3  −1 
0 2 1
−9 8 0

2. Con base a los algoritmos 2.6 y 2.7, implemente la función FactorizacionQR(A): en


Python, con las siguientes características:
114 2.5. Factorización de Cholesky

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , 3 , 5] ,
4 [ 4 , −2, 9 ] ,
5 [ − 1 , 7 , 6 ] ] , dtype=f l o a t )
6
7
8 d e f F a c to ri z a c i o n Q R (A) :
9 .
10 .
11 .
12 return Lista

La función debe recibir como parámetro la matriz A de tamaño n × n, y debe


devolver una lista que contenga las dos matrices Q y R.

3. Investigue e implemente en Python el algoritmo de Gram-Schmidt para encontrar


la matriz Q.

4. Encuentre la Factorización de Cholesky de las siguientes matrices:

a) c)
   
1 0 16 12 8 −16
0 1  −12 18 −6 9 
 
 8 −6 5 −10 
−16 9 −10 46
b)
  d)  
4 −1 0 4 1 4
 −1 4 −1   1 5 5 
0 −1 4 4 5 5

5. Demuestre que la matriz identidad de cualquier tamaño es definida positiva.

6. ¿La matriz diagonal de cualquier tamaño es definida positiva? explique ¿por qué?.
2. Factorización de matrices 115

7. Demuestre que cualquier matriz A de n × n de la forma:


 
a −1 0 0 ··· 0
 −1 a −1 0 ··· 0
 
 0 −1 a −1 ··· 0
 
A= .. ..
 0
 0 −1 a . 
 .
 . . . . ..
 .. .. .. ..

. −1 
0 0 0 0 −1 a

es simétrica y definida positiva.


8. Con base a los algoritmos 2.8 y 2.9 , implemente la función FactorizacionChol(A):
en Python, con las siguientes características:
1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 5 , −1, 0 , 0]
4 [ −1 , 5 , −1, 0 ]
5 [ 0 , −1, 5 , −1]
6 [ 0, 0 , −1, 5 ] ] , dtype=f l o a t )
7
8
9 d e f F a c t o r i z a c i o n C h o l (A) :
10 .
11 .
12 .
13 return U

La función debe recibir como parámetro la matriz A de tamaño n × n, y debe


devolver una matriz U triangular superior.
116 2.5. Factorización de Cholesky
“Respondiendo el ángel, le dijo: Yo soy Gabriel, que estoy en la
presencia de Dios, y he sido enviado para hablarte y anunciarte
estas buenas nuevas.”
Lucas 1:19

Solución de sistemas de ecuaciones lineales


3
Solucionar sistemas de ecuaciones lineales, es fundamental en muchos procesos
matemáticos. En realidad, muchos problemas de ecuaciones diferenciales, Geometría
analítica, Cálculo, Métodos numéricos, Estadística, recaen en la solución de un sistema
de ecuaciones lineales. Existen muchas metodologías para encontrar dichas soluciones:

Los métodos directos comprenden:

Sustitución: Simplemente, despejamos una variable y la reemplazamos en la otra


ecuación. Es muy útil con matrices pequeñas y no recomendable para matrices muy
grandes.

Igualación: Simplemente se despeja la misma variable en dos ecuaciones y se


igualan, de esta forma eliminamos una ecuación , pero si el sistema es muy grande
sólo obtendremos un nuevo sistema con una variable menos. De nuevo, no es muy
recomendable para sistemas grandes.

Reducción: Consiste en hacer operaciones elementales a algunas ecuaciones, para


que al sumarlas (o restarlas) se eliminen variables. Este método es más viable para
sistemas relativamente grandes.

Método de eliminación: En realidad, es una familia de métodos basados en el


método de reducción, entre los que se encuentran el método de Gauss - Jordan y
la eliminación Gausianna (pivoteo parcial o total ). Generalmente, éstos métodos
tienen la ventaja de ser muy eficientes. (ver sección 1.2)

117
118 3.1. Usando la factorización A = LU

Usando la Inversa: Este método, toma en cuenta que un sistema de ecuaciones


lineales se representa de la forma:

Ax = b

donde A es la matriz de coeficientes, x es el vector de las incógnitas y b es el vector


de términos independientes. Teniendo en cuenta que A es invertible, podemos ver
que:
x = A−1 b
Lo que reduce el problema a hallar A−1 y multiplicarla por el vector b. Aunque
teóricamente es muy fácil, en la practica, hallar la inversa puede ser costoso
computacionalmente, es decir, se requieren muchos pasos para hallarla.

Usando el determinante: Esta técnica que veremos en el siguiente capítulo, se


basa en el método de cofactores, usando la regla de Cramer. Aunque existen otros
métodos más eficientes. No es recomendable para solucionar sistemas grandes.

Factorización de Matrices: esta técnica se basa en la propiedad que tiene algunas


matrices para representarse como la multiplicación de otras matrices. El método es
eficiente computacionalmente y además, me permite encontrar otras características
de la matriz de coeficientes, como el determinante.

Los métodos Iterativos:

Estos métodos, descomponen la matriz coeficientes en la suma matrices más simples, de


esta descomposición se obtiene una fórmula iterativa, que se repite una cantidad finita de
veces para obtener una aproximación a la solución. Entre los más representativos tenemos
el método de Jacobi y el método de Gauss - Seidel. Estos métodos trabajan muy bien con
sistemas de ecuaciones muy grandes, sin embargo, obtiene soluciones aproximadas.

Este capítulo, abordará dos metodologías: en primer lugar, usaremos la factorización de


matrices para resolver sistemas de ecuaciones lineales. En segundo lugar, veremos algunos
métodos iterativos para resolver sistemas de ecuaciones lineales.

3.1. Usando la factorización A = LU


Solucionar un sistema de ecuaciones lineales usando la factorización A = LU , comprende
en realidad dos etapas, inicialmente partimos del siguiente hecho:

Ax = b (3.1)
Ahora bien, podemos escribir A de la siguiente forma:
3. Solución de sistemas de ecuaciones lineales 119

A = LU (3.2)
Entonces, reemplazamos 3.2 en 3.1 y obtenemos:

LU x = b (3.3)
La ecuación 3.3 podemos reagruparla de la siguiente forma:

L(U x) = b (3.4)
En la ecuación 3.4, la matriz U es de tamaño n × n y el vector x es de tamaño n × 1,
luego su producto, al que llamaremos z, es de tamaño n × 1, de modo que:

Lz = b (3.5)

Inicialmente, resolveremos el sistema de la ecuación (3.5); Lz = b el cual, no es difícil,


pues L es una matriz triangular inferior con unos en la diagonal, sólo debemos hacer
sustitución regresiva para obtener la solución.

Posteriormente y con base a la ecuación 3.5, resolvemos el sistema:

Ux = z

.:Ejemplo 3.1

Tomemos el sistema:
8x − 4y + 5z = 7
9x + y + 9z = −1
4x + 2y − z = 4
Tenemos la matriz A y el vector b:
   
8 −4 5 7
A= 9 1 9 , b =  −1 
4 2 −1 4
Al realizar la factorización A = LU obtenemos:
 
8.000000 −4.000000 5.000000
U =  0.000000 5.500000 3.375000 
0.000000 0.000000 −5.954545
y  
1.000000 0.000000 0.000000
L =  1.125000 1.000000 0.000000 
0.500000 0.727273 1.000000
120 3.1. Usando la factorización A = LU

Debemos encontrar z de la ecuación Lz =b


    
1.000000 0.000000 0.000000 z1 7
 1.125000 1.000000 0.000000   z2  =  −1 
0.500000 0.727273 1.000000 z3 4
el cual, se puede representar como el siguiente sistema:

z1 = 7
1.125000z1 + z2 = −1
0.500000z1 + 0.727273z2 + z3 = 4
Es fácil hacer la sustitución regresiva, a simple vista:

z1 = 7

z2 = −1 − (1.125000z1) = −1 − (1.125000(7))
luego

z2 = −8.875
Finalmente

z3 = −0.5z1 − 0.727273z2
donde

z3 = 4 − 0.5(7) − 0.727273(−8.875) = 6.9545479


Luego
 
7
z= −8.875 
6.9545479
La segunda parte del ejercicio, comprende usar z para resolver el sistema U x = z, que en
forma de un sistema corresponde a:

8x − 4y + 5z = 7
+ 5.5y + 3.375z = −8.875
− 5.954545z = 6.9545479
De nuevo, la naturaleza triangular de la matriz, hace que el proceso sea relativamente
fácil:
3. Solución de sistemas de ecuaciones lineales 121

−5.954545z = 6.9545479

6.9545479
z =
−5.954545

= −1.1679394

5.5y + 3.375z = −8.875


−8.875 − 3.375z
y =
5.5
= −0.8969463

8x − 4y + 5z = 7
7 + 4y − 5z
x =
8
7 + 4(−0.8969463) − 5(−1.1679394)
=
8

= 1.156489

Finalmente, el vector solución es:


 
1.156489
x =  −0.8969463 
−1.1679394
Para realizar este proceso en Python, tendríamos que implementar un método, para
despejar las variables de la matriz L y de la matriz U . Python y Numpy poseen una
función llamada lu_factor(A), la cual devuelve dos matrices:

1. La primera llamada LU que es una sola matriz, que almacena la matriz L y la


matriz U , sólo que a la matriz L no se le almacenas los unos de la diagonal.

2. La segunda es P , un vector donde se almacenan los índices de la matriz de


permutación.

Para el problema del ejercicio inmediatamente anterior donde:


122 3.1. Usando la factorización A = LU

   
8 −4 5 7
A= 9 1 9 , b =  −1 
4 2 −1 4
Tendríamos la matriz LU y el vector de la siguiente forma:
 
9.000000 1.000000 9.000000
LU =  0.888889 −4.888889 −3.000000 
0.444444 −0.318182 −5.954545
 
1.000000
P =  1.000000 
2.000000
Posteriormente, usamos la función de Numpy llamada lu_solve((LU, P), b), esta función
recibe dos parámetros, el primero es una tupla con la matriz LU y el vector P ; el segundo
parámetro es el vector b del sistema. Veamos el siguiente algoritmo:

.:Algoritmo 3.1

1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3
4 A = np . a r r a y ( [ [ 8 , −4, 5 ] ,
5 [9 , 1, 9] ,
6 [4 , 2 , − 1 ] ] , dtype=f l o a t )
7
8 b= np . a r r a y ( [ [ 7 , −1, 4 ] ] ) .T
9
10 LU, P = l u _ f a c t o r (A)
11
12 p r i n t "La m a t r i z A: \ n" ,A
13 print " "
14
15 p r i n t " El v e c t o r b : \ n" , b
16 print " "
17
18 p r i n t " El v e c t o r s o l u c i o n e s : \ n" , np . l i n a l g . s o l v e (A, b )
19 print " "
20
21 p r i n t " v e c t o r de p e rm u ta c i o n P : \ n" ,P
22 print " "
23
24 p r i n t "La m a t r i z LU : \ n" ,LU
25 print " "
26
27 p r i n t " El v e c t o r s o l u c i o n usando A=LU: \ n" , l u _ s o l v e ( ( LU, P) , b )
3. Solución de sistemas de ecuaciones lineales 123

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A:
3 [ [ 8 . −4. 5.]
4 [ 9. 1. 9.]
5 [ 4. 2. −1.]]
6
7 El v e c t o r b :
8 [ [ 7]
9 [ −1]
10 [ 4]]
11
12 El v e c t o r s o l u c i o n e s :
13 [ [ 1.15648855]
14 [ −0.89694656]
15 [ −1.16793893]]
16
17 v e c t o r de p e rm u ta c i o n P:
18 [1 1 2]
19
20 La m a t r i z LU :
21 [[ 9. 1. 9. ]
22 [ 0 . 8 8 8 8 8 8 8 9 −4.88888889 −3. ]
23 [ 0 . 4 4 4 4 4 4 4 4 −0.31818182 − 5 . 9 5 4 5 4 5 4 5 ] ]
24
25 El v e c t o r s o l u c i o n usando A=LU :
26 [ [ 1.15648855]
27 [ −0.89694656]
28 [ −1.16793893]]
29 >>>

El Algoritmo 3.1, declara la matriz A y el vector b como en el ejemplo; luego, el comando


LU, P = lu_factor(A) (línea 10), donde en las variables LU y P almacena la matriz LU
y el vector de los índices de permutación respectivamente. Para comparar los resultados,
usamos la función antes vista [Link](A,b) (ver línea 18), que resuelve el sistema
por el método tradicional. Finalmente, usamos el comando lu_solve((LU, P), b) (ver
linea 27) donde hacemos uso de la función lu_solve((LU, P), b), con los parametros antes
mencionados.
124 3.2. Usando la factorización A = QR

3.2. Usando la factorización A = QR


Como vimos en el capítulo anterior, la factorización A = QR consiste en descomponer la
matriz en el producto de dos matrices:

Q una matriz ortogonal.

R una matriz triangular superior e invertible.

Para resolver un sistema Ax = b con A de tamaño n × n y b un vector de tamaño n × 1,


también debemos tener en cuenta que Q es una matriz ortogonal, y esto quiere decir que
Qt Q = I, debido a que sus columnas son ortogonales entre si. Lo que hacemos será una
trasformación de nuestro sistema, de modo que:

Ax = b
multiplicaremos a ambos lados de la ecuación por Qt :

Qt Ax = Qt b
Al producto Qt A lo llamaremos R y a Qt b lo llamaremos c, entonces:

Qt A x = Qt b
|{z} |{z}
R c

Lo que implica, que el nuevo sistema es:

Rx = c
Lo bueno de este proceso es que R es una matriz triangular superior1 , así que encontrar la
solución al sistema es relativamente fácil, pues sólo debemos hacer la sustitución regresiva
para encontrar el vector x que es la solución.

.:Ejemplo 3.2

Tomemos de nuevo el sistema:


8x − 4y + 5z = 7
9x + y + 9z = −1
4x + 2y − z = 4

Con la matriz A y el vector b:


1 Recordemos que en la sección 2.4, vimos que la matriz R se obtenida al multiplicar Qt por A, (vea
la implementación del Algoritmo 2.7)
3. Solución de sistemas de ecuaciones lineales 125

   
8 −4 5 7
A= 9 1 9 , b =  −1 
4 2 −1 4
Su factorización A = QR es la siguiente:
 
−0.630488 0.735106 0.249207
Q =  −0.709299 −0.415251 −0.569615 
−0.315244 −0.535898 0.783221
 
−12.688578 1.182166 −9.220892
R= 0.000000 −4.427469 0.474171 
0.000000 0.000000 −4.663723
Ahora, como ya tenemos R, sólo debemos encontrar c:

c = Qt b

  
−0.630488 −0.709299 −0.315244 7
c =  0.735106 −0.415251 −0.535898   −1 
0.249207 −0.569615 0.783221 4
| {z } | {z }
Qt b

 
−4.965096
c =  3.417400 
5.446944
Ahora resolvemos el nuevo sistema Rx = c, que en forma de sistema sería:

−12.688578x1 + 1.182166x2 − 9.220892x3 = −4.965096


− 4.427469x2 + 0.474171x3 = 3.417400
− 4.663723x3 = 5.446944
Haciendo la sustitución regresiva:

−4.663723x3 = 5.446944

5.446944
=
−4.663723

x3 = −1.16793893
126 3.2. Usando la factorización A = QR

−4.427469x2 + 0.474171x3 = 3.417400

3.417400 − 0.474171x3
=
−4.427469

x2 = −0.89694656

finalmente:

−12.688578x1 + 1.182166x2 − 9.220892x3 = −4.965096

−4.965096 − (1.182166x2 − 9.220892x3)


=
−12.688578

x1 = 1.15648855

Teniendo como resultado:


 
1.156489
x =  −0.8969463 
−1.1679394
El siguiente algoritmo, muestra como hacer este proceso en Python.

.:Algoritmo 3.2

1
2 i m p o rt numpy a s np
3
4 A = np . a r r a y ( [ [ 8 , −4, 5 ] ,
5 [9 , 1, 9] ,
6 [4 , 2 , − 1 ] ] , dtype=f l o a t )
7
8 b= np . a r r a y ( [ [ 7 , −1, 4 ] ] ) .T
9
10 p r i n t "La m a t r i z A: \ n"
11 print A
12 print " "
13
14 p r i n t " El v e c t o r b : \ n"
15 print b
16 print " "
3. Solución de sistemas de ecuaciones lineales 127

17
18 Q, R = np . l i n a l g . q r (A)
19
20 p r i n t "La m a t r i z Q: \ n"
21 print Q
22 print " "
23
24 p r i n t "La m a t r i z R: \ n"
25 print R
26 print " "
27
28 c=Q. T . dot ( b )
29
30 print " "
31 p r i n t " El v e c t o r c : \ n"
32 print c
33
34 x=np . l i n a l g . s o l v e (R, c )
35
36 print " "
37 p r i n t " El v e c t o r s o l u c i o n x : \ n"
38 print x

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A:
3
4 [ [ 8 . −4. 5.]
5 [ 9. 1. 9.]
6 [ 4. 2. −1.]]
7
8 El v e c t o r b :
9
10 [ [ 7]
11 [ −1]
12 [ 4]]
13
14 La m a t r i z Q:
15
16 [[ −0.63048832 0.7351058 0.2492066 ]
17 [ − 0 . 7 0 9 2 9 9 3 7 −0.41525061 − 0 . 5 6 9 6 1 5 0 8 ]
18 [ − 0 . 3 1 5 2 4 4 1 6 −0.53589774 0 . 7 8 3 2 2 0 7 4 ] ]
19
20 La m a t r i z R :
21
22 [[ −12.68857754 1.18216561 −9.22089175]
23 [ 0. −4.42746931 0.4741713 ]
24 [ 0. 0. −4.6637235 ] ]
128 3.3. Usando la factorización de Cholesky

25
26
27 El v e c t o r c :
28
29 [[ −4.96509556]
30 [ 3.41740026]
31 [ 5.44694424]]
32
33 El v e c t o r s o l u c i o n x :
34
35 [ [ 1.15648855]
36 [ −0.89694656]
37 [ −1.16793893]]
38 >>>

El Algoritmo 3.2, realiza el mismo proceso que hicimos en el ejemplo inmediatamente


anterior. En la línea 18 encontramos las matrices Q y R con la instrucción Q, R =
[Link](A). Posteriormente, calculamos el vector c (línea 28) con la instrucción
c=[Link](b), es decir, la multiplicación de Qt b. Finalmente, hallamos la solución al
sistema con x=[Link](R,c) 2 (línea 34), para hallar el vector solución x.

3.3. Usando la factorización de Cholesky


En la factorización de Cholesky, se repite el proceso visto en las secciones anteriores.
Recordemos que en este caso, la matriz que debe ser simétrica definida positiva, donde
A = U t U , donde U es una matriz triangular superior. Si queremos resolver el sitema:

Ax = b (3.6)
y teniendo en cuanta que A es una matriz simétrica definida positiva, la cual la podemos
representra como:

A = U tU (3.7)
Reemplazamos 3.7 en 3.6. Ahora necesitamos resolver

U tz = b (3.8)
El sistema de la ecuación 3.8 es relativamente fácil de resolver, debido, a que las matrices
U t y U son triangulares.

2 Enestos ejemplos usamos la instrucción [Link](R,c), pero en aplicaciones reales se debe


implementar un método para la sustitución regresiva.
3. Solución de sistemas de ecuaciones lineales 129

Luego debemos resolver


Ux = z
.:Ejemplo 3.3
Resolver el sistema representado por la matriz de coeficientes A y el vector de términos
independientes b:
   
3 −1 0 3
A =  −1 3 −1  y b =  −1 
0 −1 3 2
Bien, encontremos la factorización de Cholesky de A:
 
1.732051 −0.000000 0.000000
U t =  −0.577350 1.632993 −0.000000 
0.000000 −0.612372 1.620185
 
1.732051 −0.577350 0.000000
U =  0.000000 1.632993 −0.612372 
0.000000 0.000000 1.620185
Ahora, debemos encontrar z de la ecuación U t z = b
    
1.732051 −0.000000 0.000000 z1 3
 −0.577350 1.632993 0.000000   z2  =  −1 
0.000000 −0.612372 1.620185 z3 2
Que en forma de ecuación sería:

1.732051z1 = 3
−0.577350z1 + 1.632993z2 = −1
−0.612372z2 + 1.620185z3 = 2
La sustitución regresiva es relativamente fácil, debido a la forma de la matriz:
3
z1 = = 1.7320506
1.732051
Luego con z2

−0.577350z1 + 1.632993z2 = −1

−1 + 0.577350z1
z2 =
1.632993

z2 = −0.0000004
130 3.3. Usando la factorización de Cholesky

Finalmente z1 :

−0.612372z2 + 1.620185z3 = 2

2 + 0.612372z2
z3 =
1.620185

z3 = 1.2344268
Entonces:  
1.7320506
z =  −0.0000004 
1.2344268
Ahora, usamos z para resolver el sistema U x = z:
    
1.732051 −0.577350 0.000000 x1 1.7320506
 0.000000 1.632993 −0.612372   x2  =  −0.0000004 
0.000000 0.000000 1.620185 x3 1.2344268
donde:

1.620185x3 = 1.2344268
x3 = 0.7619048
Ahora x2 :

1.632993x2 − 0.612372x3 = −0.0000004

−0.0000004 + 0.612372x3
x2 =
1.632993

x2 = 0.2857139
Finalmente:

1.732051x1 − 0.577350x2 = 3

3 + 0.577350x2
x1 =
1.732051

x1 = 1.0952381
3. Solución de sistemas de ecuaciones lineales 131

La solución final es:  


1.0952381
x =  0.2857143 
0.7619048
El siguiente Algoritmo muestra como hacer este proceso en Python:

.:Algoritmo 3.3

1 from U t i l i d a d p a r a L a t e x i m p o rt ∗
2 i m p o rt numpy a s np
3 #from numpy i m p o rt l i n a l g a s LA
4
5 i m p o rt copy
6
7 A = np . a r r a y ( [ [ 3 , −1, 0 ] ,
8 [ −1, 3 , −1 ] ,
9 [ 0 , −1, 3 ] ] , dtype=f l o a t )
10
11 b=np . a r r a y ( [ [ 3 , −1, 2 ] ] , dtype=f l o a t ) .T
12
13 UT = np . l i n a l g . c h o l e s k y (A)
14
15 U=UT.T
16
17 z= np . l i n a l g . s o l v e (UT, b )
18
19 x= np . l i n a l g . s o l v e (U, z )
20
21 p r i n t "La m a t r i z A: \ n" , A
22 print " "
23
24 p r i n t " El v e c t o r b : \ n" , b
25 print " "
26
27 p r i n t "La m a t r i z UT: \ n" , UT
28 print " "
29
30 p r i n t "La m a t r i z U: \ n" , UT. T
31 print " "
32
33 p r i n t " El v e c t o r z : \ n" , z
34 print " "
35
36 p r i n t " El v e c t o r x : \ n" , x

El programa anterior produce la siguiente salida:


132 3.3. Usando la factorización de Cholesky

1 >>>
2 La m a t r i z A:
3 [ [ 3 . −1. 0.]
4 [ −1. 3 . −1.]
5 [ 0 . −1. 3.]]
6
7 El v e c t o r b :
8 [[ 3.]
9 [ −1.]
10 [ 2.]]
11
12 La m a t r i z UT:
13 [ [ 1 . 7 3 2 0 5 0 8 1 −0. 0. ]
14 [ −0.57735027 1 . 6 3 2 9 9 3 1 6 −0. ]
15 [ 0. −0.61237244 1 . 6 2 0 1 8 5 1 7 ] ]
16
17 La m a t r i z U:
18 [ [ 1 . 7 3 2 0 5 0 8 1 −0.57735027 0 . ]
19 [ −0. 1.63299316 −0.61237244]
20 [ 0. −0. 1.62018517]]
21
22 El v e c t o r z:
23 [[ 1 . 7 3 2 0 5 0 8 1 e +00]
24 [ 1 . 3 5 9 7 3 9 9 6 e −16]
25 [ 1.23442680 e +00]]
26
27 El vector x :
28 [[ 1.0952381 ]
29 [ 0.28571429]
30 [ 0.76190476]]
31
32 >>>

El Algoritmo 3.3, descompone la matriz A en las matrices U y U t (líneas 13 y 15).


Posteriormente, hallamos el vector z con la instrucción z=[Link](UT,b) (línea 17),
para posteriormente calcular la solución final x con la instrucción x= [Link](U,z)
(línea 19).

A primera vista, podemos pensar que es ineficiente usar dos veces la instrucción
[Link], pero recordemos que este método es muy rapido y sólo se hace con fines
pedagógicos. En la práctica, lo ideal sería crear un método que haga la sustitución regresiva
para solucionar los sistemas.

.:Ejercicios 3.1

1. Implemente un algoritmo en Python con las siguientes características:


3. Solución de sistemas de ecuaciones lineales 133

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 5 , −1, 0 , 0]
4 [ −1 , 5 , −1, 0 ]
5 [ 0 , −1, 5 , −1]
6 [ 0, 0 , −1, 5 ] ] , dtype=f l o a t )
7
8 b=np . a r r a y ( [ [ 4 , −7, 1, 1 ] ] , dtype=f l o a t ) .T
9
10
11 d e f S o l S i s te m a s L U (A, b ) :
12 .
13 .
14 .
15 return x

a) La función SolSistemasLU(A,b) debe usar la factorización LU para solucionar


el sistema, no se debe usar la instrucción [Link](A,b), se debe
implementar la sustitución regresiva.
b) Genere una matriz A de tamaño 100×100, y un vector b de 100×1. Encuentre la
solución al sistema usando la función implementada en el punto a) y comparela
con la solución real.

2. Implemente un algoritmo en Python con las siguientes características:


1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 5 , −1, 0 , 0]
4 [ −1 , 5 , −1, 0 ]
5 [ 0 , −1, 5 , −1]
6 [ 0, 0 , −1, 5 ] ] , dtype=f l o a t )
7
8 b=np . a r r a y ( [ [ 4 , −7, 1, 1 ] ] , dtype=f l o a t ) .T
9
10
11 d e f SolSistemasQR (A, b ) :
12 .
13 .
14 .
15 return x

a) La función SolSistemasQR(A,b) debe usar la factorización QR para solucionar


el sistema, no se debe usar la instrucción [Link](A,b), se debe
implementar la sustitución regresiva.
134 3.4. Método de Jacobi

b) Genere una matriz A de tamaño 100×100, y un vector b de 100×1. Encuentre la


solución al sistema usando la función implementada en el punto a) y comparela
con la solución real.

3. De igual forma, repita el ejercicio del los numerales 1 y 2 pero con la factorización
de Cholesky.

4. Investigue e implemente en Python la descomposición en valores singulares.

5. Demuestre que si se multiplica una matriz A por su transpuesta At , entonces AAt


es definida positiva.

3.4. Método de Jacobi


El método de Jacobi es el más simple de los métodos iterativos. Consiste en la
descomposición de la matriz de coeficientes en la suma de tres matrices; este proceso
permite la construcción de una fórmula iterativa que eventualmente converge a la solución
del sistema. Sin embargo, existen varias razones por las cuales, el método puede o
no encontrar la solución. En primer lugar, el método funciona siempre para matrices
diagonalmente dominantes, si la matriz no es de esta forma, es posible que el método no
encuentre la solución. En segundo lugar, se requieren de varias iteraciones para hallar la
solución al sistema, pero todo depende de un valor inicial, al que llamaremos x(0) .

Para empezar, veremos que es una matriz diagonalmente dominante:

.:Definición 3.1 Matriz Diagonalmente dominante

Una matriz es diagonalmente dominante (también llamada estrictamente dominante)


cuando el valor absoluto del elemento de la diagonal, es mayor que el valor absoluto
de la suma de los demás elementos de la fila correspondiente. Esto es, si A = (aij ) y de
tamaño n × n, entonces:
n
X
|aii | > |aij |
j=1
j 6= i

Otro detalle que debemos tener en cuenta para los métodos iterativos, es el cálculo del
error. En nuestro caso, tenemos dos alternativas, en primer lugar, encontrar la diferencia
de las normas, entre los resultados de las diferentes iteraciones y en segundo lugar,
mediremos en términos de porcentajes, si el nuevo vector encontrado, se parece al vector
3. Solución de sistemas de ecuaciones lineales 135

encontrado en la iteración anterior.

El método de Jacobi3 , se puede ver desde dos puntos de vista:

1. Solucionar un sistema de ecuaciones lineales, usando un despeje en el mismo sistema,


para hallar una forma iterativa; este proceso permitirá después de un número k de
iteraciones, encontrar una solución aproximada.

2. El segundo enfoque, consiste en hallar una matriz y un vector, al que llamaremos


iteradores, con los cuales se hará el proceso para encontrar la solución aproximada.

Supongamos que tenemos un sistema con n ecuaciones lineales con n incógnitas, de la


siguiente forma:

a11 x1 + a12 x2 + · · · + a1n xn = b1


a21 x1 + a22 x2 + · · · + a2n xn = b2
.. .. .. .. ..
. . . . = .
ai1 x1 + ai2 x2 + · · · + ain xn = bi
.. .. .. .. ..
. . . . = .
an1 x1 + an2 x2 + · · · + ann xn = bn (3.9)

Ahora, tomaremos el sistema descrito en (3.9) y despejaremos la variable x1 de la primera


fila, luego x2 de la segunda fila, así, en la fila i, despejaremos la variable xi , hasta que
terminemos todas las filas:

b1 − (a12 x2 + · · · + a1n xn )
x1 =
a11
b2 − (a21 x1 + a23 x3 + · · · + a2n xn )
x2 =
a22
.. .. .. .. ..
. = . . . . 
bi − ai1 x1 + ai2 x2 + · · · + ai(j−1) x(j−1) + ai(j+1) x(j+1) + · · · + ain xn
xi =
aii
.. .. .. .. ..
. = . . . . 
bn − an1 x1 + an2 x2 + · · · + an(n−1) x(n−1)
xn = (3.10)
ann
3 Tambien se le conoce como Gauss-Jacobi, ver [17]
136 3.4. Método de Jacobi

Con la ecuación (3.10), implementaremos la forma iterativa4 , la cual, usará la siguiente


notación:
(k)
xi
En ningún momento se debe interpretar que la variable xi esta elevada a la k, la
interpretación correcta nos dice que tenemos la k-ésima iteración de la variable xi .

El nuevo sistema en forma iterativa será el siguiente:

 
(k−1) (k−1)
b1 − a12 x2 + · · · + a1n xn
(k)
x1 =
a11
 
(k−1) (k−1) (k−1)
b2 − a21 x1 + a23 x3 + · · · + a2n xn
(k)
x2 =
a22
.. .. .. .. ..
. = . . . . 
(k−1) (k−1) (k−1) (k−1) (k−1)
bi − ai1 x1 + ai2 x2 + · · · + ai(j−1) x(j−1) + ai(j+1) x(j+1) + · · · + ain xn
(k)
xi =
aii
.. .. .. .. ..
. = . . . . 
(k−1) (k−1) (k−1)
bn − an1 x1 + an2 x2 + · · · + an(n−1) x(n−1)
x(k)
n = (3.11)
ann
En general tendrá de la siguiente forma:
 
 
 X n 
 (k−1) 
bi −  aij xj 
 
 i=1 
(k) i 6= j
xi = i = 1, 2, . . . , n
aii
Este proceso, requiere que se comience con un valor inicial, en este caso es un vector al
que llamaremos x(0) . La escogencia de este vector inicial, puede o no retardar el proceso
de convergencia, se debe tener especial cuidado con la escogencia de este vector.

¿Cuando detener el proceso?

4 Cuando hablamos de un proceso iterativo, nos referimos a un proceso que se repite muchas veces,

haciendo pequeños cambios al interior del proceso, hasta llegar a un punto de parada determinado por
algún tipo de condición.
3. Solución de sistemas de ecuaciones lineales 137

Bien, cuando resolvemos un sistema de la forma Ax = b, obtenemos como resultado


un vector x, entonces, usaremos la norma para determinar la distancia entre las
aproximaciones que obtenemos. Bunden [2] nos muestra que si tenemos x(k) y x(k−1) , es
decir, los vectores soluciones obtenidos en la (k − 1)−ésima y k-ésima iteración. Entonces
tenemos que:

x(k) − x(k−1)
<ǫ (3.12)
x(k)

Donde ǫ es un valor de tolerancia dado de antemano. Si la inecuación planteada en (3.12)


se cumple, el proceso se detiene y la solución es x(k) .

.:Ejemplo 3.4

Tomemos el sistema:

5x + 2y + z = 1
x − 7y − 2z = 2
x − y + 6z = −1 (3.13)

Como vemos, el sistema es diagonalmente dominante. Ahora, implementaremos la versión


iterativa:

1 − (2y (k−1) + z (k−1) )


x(k) =
5
(k−1)
2 − (x − 2z (k−1) )
y (k) =
−7
(k−1)
−1 − (x − y (k−1) )
z (k) =
6
 
0
Para este ejemplo, tomaremos como x(0) =  0 , es decir, el vector nulo como valor
0
inicial y con una tolerancia inferior a 0.01.

El proceso comienza reemplazando el vector inicial en la fórmula iterativa:

Iteración 1:
138 3.4. Método de Jacobi

1 − (2y (0) + z (0) ) 1 − (2(0) + (0)) 1


x(1) = = = = 0.2
5 5 5
2 − (x(0) − 2z (0) ) 2 − ((0) − 2(0)) 2
y (1) = = = − = −0.28571429
−7 −7 7
−1 − (x(0) − y (0) ) −1 − ((0) − (0)) 1
z (1) = = = − = −0.16666667
6 6 6
Iteración 2:

Ahora, tomamos los valores obtenidos en la iteración 1 y los remplazamos en la misma


forma iterativa, para obtener los resultados de la segunda iteración.

1 − (2y (1) + z (1) ) 1 − (2(−0.28571429) + (−0.16666667))


x(2) = = = 0.34761905
5 5
2 − (x(1) − 2z (1) ) 2 − ((0.2) − 2(−0.16666667))
y (2) = = = −0.20952381
−7 −7
−1 − (x(1) − y (1) ) −1 − ((0.2) − (−0.28571429))
z (2) = = = −0.24761905
6 6
Iteración 3:

1 − (2y (2) + z (2) ) 1 − (2(−0.20952381) + (−0.24761905))


x(3) = = = 0.33333333
5 5
2 − (x(2) − 2z (2) ) 2 − ((0.34761905) − 2(−0.24761905))
y (3) = = = −0.16530612
−7 −7
−1 − (x(2) − y (2) ) −1 − ((0.34761905) − (−0.20952381))
z (3) = = = −0.25952381
6 6
El cuadro 3.1, muestra las seis primeras iteraciones, con su respectivo error.
La solución exacta al sistema propuesto en la ecuación (3.13) es:
 
0.3173913
x =  −0.16956522 
−0.24782609
Ahora bien, este método, no es el más rápido, y en realidad con el esquema de despeje
de ecuaciones, se puede trabajar con sistemas pequeños, los cuales pueden solucionarse a
mano, sin embargo, computacionalmente es muy complejo. Para solucionar el problema,
recurriremos al segundo enfoque, en este caso usaremos la matriz de coeficientes A, la
cual, la separaremos en tres matrices:
3. Solución de sistemas de ecuaciones lineales 139

x(0) x(1) x(2) x(3) x(4) x(5) x(6)


x 0.00 0.200000 0.347619 0.333333 0.318027 0.315533 0.316966
y 0.00 -0.285714 -0.209524 -0.165306 -0.163946 -0.168918 -0.170068
z 0.00 -0.166667 -0.247619 -0.259524 -0.249773 -0.246995 -0.247408
Error 1.0 0.3886 0.1057 0.0417 0.0142 0.0043

Cuadro 3.1: Seis primeras iteraciones usando Jacobi, para solucionar el sistema de la
ecuación (3.13), usando x(0) como el vector nulo.

A=L+D+U
Donde L es una matriz triangular inferior con ceros en la diagonal, D es una matriz
diagonal, la cual se va a obtener la diagonal de la matriz A y finalmente, la matriz U , la
cual será, una matriz triangular superior con ceros en la diagonal, es decir, si A = (aij )
de tamaño n × n, entonces:
 a 0 0 ··· 0   0 a12 a13 ··· a1n 
  11
0 0 a23 ··· a2n
a21 0
 .   
   .   
 a31 a32 0   0 a22 . ··· 0   . 
     . 
A= + 0 0 a33 ··· 0 + 0 . 
 . . ..     
 . . .   . . . .. .   .. 
. .  . . . .   
. . . . . . a(n−1)n
an1 an2 an3 ··· 0
| {z } 0 0 0 ··· ann 0
L
| {z } | {z }
D U

Bien, si tenemos el sistema Ax = b, entonces reemplazamos A por L + D + U :

Ax = b

(L + D + U )x = b
Aplicamos la propiedad distributiva de las matrices:

(L + D + U )x = b

Lx + Dx + U x = b
Ahora despejamos Dx:

Lx + Dx + U x = b

Dx = −Lx − U x + b
140 3.4. Método de Jacobi

El despeje en la ecuación anterior es posible, pues sólo estamos tratando con la


multiplicación del escalar -1 por la matriz L y por la matriz U . Si somos más estrictos,
tendríamos que decir que se suma −Lx − U x a ambos lados de la ecuación. Ahora,
factorizamos el escalar -1 y el vector x:

Dx = −(L + U )x + b
Sólo nos queda despejar la matriz D, la cual, es la única matriz que tiene inversa (L y U
no son invertibles) :

D−1 Dx = D−1 [−(L + U )x + b]


De nuevo, aplicamos la propiedad distributiva:

x = −D−1 (L + U )x + D−1 b
Esta nueva manera de ver el sistema, nos permite encontrar la forma iterativa matricial:

x(k) = −D−1 (L + U )x(k−1) + D−1 b


Ahora bien, a la matriz −D−1 (L + U ) la llamaremos la matriz T , y al vector D−1 b, lo
llamaremos c, luego, el nuevo sistema iterativo es:

x(k) = T x(k−1) + c
Donde T = −D−1 (L + U ) y c = −D−1 b.

A primera vista, el método no parece muy eficiente, pues se debe calcular D−1 , pero
recordemos que la matriz D es una matriz diagonal de tamaño n × n que tiene la forma:
 
d11 0 · · · 0
 0 d22 · · · 0 
 
D= . . .. .. 
 .. .. . . 
0 0 · · · dnn

Es fácil demostrar que


 1 
d11 0 ··· 0
1
 0
d22 ··· 0 
−1  
D = . .. .. ..
 ..

. . . 
1
0 0 ··· dnn

Lo que nos dice que el cálculo de D−1 , no conlleva mucho esfuerzo computacional.

.:Ejemplo 3.5
3. Solución de sistemas de ecuaciones lineales 141

Tomemos el sistema:

4.345x1 − 0.129x2 + 0.345x3 + 0.0871x4 = 5.671


0.0267x1 + 7.5601x2 − 0.8854x3 − 3.1112x4 = 0.00982
4.35612x1 + 0.332x2 + 11.0098x3 + 0.712x4 = 0.765
3.0987x1 − 0.998x2 + 0.324x3 + 21.971x4 = 9.09832 (3.14)
 
1
 1 
Aplicaremos el método de Jacobi, con x(0) = 
 1 

1
Ahora, sólo debemos encontrar las matrices L, D y U
 
0.000000 −0.000000 0.000000 0.000000
 0.026700 0.000000 −0.000000 −0.000000 
L=
 4.356120

0.332000 0.000000 0.000000 
3.098700 −0.998000 0.324000 0.000000

 
4.345000 0.000000 0.000000 0.000000
 0.000000 7.560100 0.000000 0.000000 
D=
 0.000000

0.000000 11.009800 0.000000 
0.000000 0.000000 0.000000 21.971000

 
0.000000 −0.129000 0.345000 0.087100
 0.000000 0.000000 −0.885400 −3.111200 
U =
 0.000000

0.000000 0.000000 0.712000 
0.000000 −0.000000 0.000000 0.000000

Ahora, calculamos la matriz T y el vector c

T = −D−1 (L + U )
 
−0.000000 0.029689 −0.079402 −0.020046
 −0.003532 −0.000000 0.117115 0.411529 
=  
 −0.395658 −0.030155 −0.000000 −0.064670 
−0.141036 0.045424 −0.014747 −0.000000

y
142 3.4. Método de Jacobi

c = D−1 b
 
1.305178
 0.001299 
=  
 0.069484 
0.414106

Nuestro proceso iterativo tendrá la siguiente forma:

x(k) = T x(k−1) + c

 (k)     (k−1)   
x1 −0.000000 0.029689 −0.079402 −0.020046 x1 1.305178
 (k)   (k−1)  
 x2   −0.003532 −0.000000 0.117115 0.411529 
 x   0.001299 
 (k)  =   2 + 
 x3   −0.395658 −0.030155 −0.000000 −0.064670   x(k−1)  0.069484 
3
(k) −0.141036 0.045424 −0.014747 −0.000000 (k−1) 0.414106
x4 x4

El proceso iterativo se hace de la misma forma que el realizado con el sistema, el resultado
del lado derecho de la ecuación anterior, se introduce de nuevo en el proceso, de esta forma
obtenemos las nuevas soluciones.

Iteración 1:

      
1.23542002 −0.000000 0.029689 −0.079402 −0.020046 1 1.305178
 0.52641103   −0.003532 −0.000000 0.117115 0.411529   1   0.001299 
 −0.42099947  =  −0.395658 −0.030155 −0.000000
+
−0.064670   1   0.069484 
0.30374676 −0.141036 0.045424 −0.014747 −0.000000 1 0.414106

Iteración 2:

      
1.34814626 −0.000000 0.029689 −0.079402 −0.020046 1.23542002 1.305178
 0.07263108   −0.003532 −0.000000 0.117115 0.411529   0.52641103   0.001299 
 −0.45483787  =  −0.395658 −0.030155 −0.000000
+
−0.064670   −0.42099947   0.069484 
0.26998707 −0.141036 0.045424 −0.014747 −0.000000 0.30374676 0.414106

Iteración 3:

      
1.33803742 −0.000000 0.029689 −0.079402 −0.020046 1.34814626 1.305178
 0.0543769   −0.003532 −0.000000 0.117115 0.411529   0.07263108   0.001299 
 −0.48357202  =  −0.395658 +
−0.030155 −0.000000 −0.064670   −0.45483787   0.069484 
0.23397535 −0.141036 0.045424 −0.014747 −0.000000 0.26998707 0.414106
3. Solución de sistemas de ecuaciones lineales 143

x(0) x(1) x(2) x(3) x(4) x(5) x(6)


x1 1.00 1.235420 1.348146 1.338037 1.340499 1.339393 1.339494
x2 1.00 0.526411 0.072631 0.054377 0.036228 0.037444 0.036867
x3 1.00 -0.420999 -0.454838 -0.483572 -0.476693 -0.477186 -0.476703
x4 1.00 0.303747 0.269987 0.233975 0.234996 0.233723 0.233941
Error 1.1588 0.3241 0.035 0.0135 0.0014 0.0005

Cuadro 3.2: Seis primeras iteraciones usando Jacobi, para solucionar el sistema de la
ecuación (3.14), usando x(0) = (1, 1, 1, 1)t .

El cuadro 3.2, muestra las seis primeras iteraciones del sistema dado en la ecuación (3.14).

Tenga en cuenta que la solución real es:


 
1.33944017
 0.0369971 
x= 
 −0.47671957 
0.23390729
En el cuadro 3.2, vemos en la última fila, el cálculo del error usando la norma de la
diferencia de los vectores, para el método de Jacobi, podemos usar la forma ya planteada
en la ecuación (3.12), o usando una forma más simple, la cual, sólo tiene en cuenta la
diferencia entre los vectores:

x(k) − x(k−1) < ǫ (3.15)

En nuestros ejemplos, usamos la forma planteada en (3.12), pues nos ofrece un error
relativo, frente a un error total, que en muchas ocasiones, no nos dice como es la diferencia
con respecto a las magnitudes trabajadas en el experimento.

Otra forma de manejar el error, es midiendo la diferencia componente a componente entre


los vectores solución en cada iteración. Esto nos permite visualizar los cambios obtenidos
en el proceso. Si tenemos x(k−1) y x(k) dos soluciones obtenidas en las iteraciones k − 1
y k, entonces, el error entre las dos iteraciones se calcula de la siguiente forma:

x(k) y x(k−1) tienen componentes:


 (k)
  (k−1)

x1 x1
 (k)   (k−1) 
(k)
 x2  (k−1)
 x2 
x =
 .. 
 y x =
 .. 

 .   . 
(k) (k−1)
xn xn
144 3.4. Método de Jacobi

El vector ε(k) muestra el error existente entre las iteraciones k y k − 1:


 (k) (k−1)

x1 −x1
 (k) × 100 % 
x1
 
 (k) (k−1) 
x1 −x1
 (k) × 100 % 
ε(k)
 x1 
= 
 .. 

 . 

 (k) (k−1) 
x1 −x1
(k) × 100 %
x1

El Cuadro 3.3, muestra las mismas iteraciones hechas en el Cuadro 3.2 del ejemplo 3.5,
pero en esta ocasión, obtenemos el error ε(k) .

x1 x2 x3 x4
(0)
x 1.000000 1.000000 1.000000 1.000000
x(1) 1.235420 0.526411 -0.420999 0.303747
ε(1) 19.055 % 89.96 % 337.52 % 229.22 %
x(2) 1.348146 0.072631 -0.454838 0.269987
ε(2) 8.36 % 624.77 % 7.43 % 12.50 %
x(3) 1.338037 0.054377 -0.483572 0.233975
ε(3) 0.75 % 33.56 % 5.94 % 15.39 %
x(4) 1.340499 0.036228 -0.476693 0.234996
ε(4) 0.18 % 50.09 % 1.44 % 0.43 %
x(5) 1.339393 0.037444 -0.477186 0.233723
ε(5) 0.08 % 3.24 % 0.103 % 0.54 %
x(6) 1.339494 0.036867 -0.476703 0.233941
ε(6) 0.007 % 1.56 % 0.101 % 0.093 %
x(7) 1.339434 0.037013 -0.476739 0.233893
ε(7) 0.0044 % 0.39 % 0.0076 % 0.0203 %

Cuadro 3.3: Siete primeras iteraciones usando Jacobi, para solucionar el sistema de la
ecuación (3.14), usando x(0) = (1, 1, 1, 1)t y teniendo en cuenta el error ε(k) .

En el Cuadro 3.3, las filas muestran los vectores solución encontrados en cada iteración.
Después de cada vector, se muestra el vector ε(k) (resaltado en gris) correspondiente a la
fila anterior; en él, podemos ver como el porcentaje de error va disminuyendo con el pasar
del proceso iterativo. Si embargo, la componente x2 , tarda más en llegar a un error menor
al 1 %, pues en la primera iteración tiene un porcentaje de error 89.96 %, posteriormente,
pasa a un error de 624.77 %, pero luego vuelve a 50.09 %, para finalmente llegar a 0.39 %.
3. Solución de sistemas de ecuaciones lineales 145

x(0) x(1) x(2) x(3) x(4) x(5) x(6)


x1 1.00 1.235420 1.348146 1.338037 1.340499 1.339393 1.339494
x2 1.00 0.526411 0.072631 0.054377 0.036228 0.037444 0.036867
x3 1.00 -0.420999 -0.454838 -0.483572 -0.476693 -0.477186 -0.476703
x4 1.00 0.303747 0.269987 0.233975 0.234996 0.233723 0.233941
Error 1.1588 0.3241 0.035 0.0135 0.0014 0.0005
(a) Con x(0) = (1, 1, 1, 1)t

x(0) x(1) x(2) x(3) x(4) x(5) x(6)


x1 0.00 1.305178 1.291399 1.343405 1.337932 1.339856 1.339376
x2 0.00 0.001299 0.175244 0.035522 0.044112 0.036376 0.037282
x3 0.00 0.069484 -0.473741 -0.461567 -0.479085 -0.476283 -0.476902
x4 0.00 0.414106 0.229063 0.246919 0.233058 0.234478 0.233814
Error 1.0 0.4267 0.1044 0.01704 0.0059 0.00095
(b) Con x(0) = (0, 0, 0, 0)t

x(0) x(1) x(2) x(3) x(4) x(5) x(6)


x1 0.50 1.270299 1.319772 1.340721 1.339216 1.339625 1.339435
x2 0.50 0.263855 0.123937 0.044950 0.040170 0.036910 0.037074
x3 0.50 -0.175758 -0.464289 -0.472570 -0.477889 -0.476734 -0.476802
x4 0.50 0.358926 0.249525 0.240447 0.234027 0.234100 0.233878
Error 0.7815 0.24002 0.05728 0.0067 0.00241 0.00023

1 1 1 1 t
(c) Con x(0) = , , ,
2 2 2 2

Cuadro 3.4: Seis primeras iteraciones usando Jacobi, para solucionar el sistema de la
ecuación (3.14), usando diferentes x(0) .

Otro de los problemas encontrados en la implementación del método de Jacobi, es


la escogencia del vector inicial x(0) . Aunque esto no interviene en la convergencia o
divergencia del método, si puede a largar o acortar el tiempo de ejecución del mismo.
El Cuadro 3.4, muestra la ejecución del método de Jacobi con tres x(0) diferentes:
t
x(0) = (1, 1, 1, 1)t , x(0) = (0, 0, 0, 0)t y x(0) = 21 , 12 , 21 , 12 . En este experimento, se puede

ver en el Sub cuadro (c) con x(0) = 21 , 21 , 12 , 12 t , es la mejor opción, pues llega a la
sexta iteración con un error de 0.00023, mientras que las otras dos opciones tienen errores
ligeramente más grandes.

El siguiente Algoritmo, muestra la implementación del método de Jacobi:


146 3.4. Método de Jacobi

.:Algoritmo 3.4

1 i m p o rt numpy a s np
2 i m p o rt copy
3
4 A = np . a r r a y ( [ [ 4 . 3 4 5 , −0.129 , 0 . 3 4 5 , 0 . 0 8 7 1 ] ,
5 [ 0 . 0 2 6 7 , 7 . 5 6 0 1 , −0.8854 , − 3 . 1 1 1 2 ] ,
6 [4.35612 , 0.332 , 11.0098 , 0. 712] ,
7 [ 3 . 0 9 8 7 , −0.998 , 0 . 3 2 4 , 2 1 . 9 7 1 ] ] , dtype=f l o a t )
8
9 b=np . a r r a y ( [ [ 5 . 6 7 1 , 0 . 0 0 9 8 2 , 0 . 7 6 5 , 9 . 0 9 8 3 2 ] ] , dtype=f l o a t ) . T
10
11 tam=np . shape (A) [ 0 ]
12
13 temp=np . d i a g (A)
14 D=np . e y e ( np . shape (A) [ 0 ] )
15
16 f o r i i n ra n g e ( np . shape (A) [ 0 ] ) :
17 D[ i , i ]=temp [ i ]
18
19 L=np . t r i l (A) − D
20 U=np . t r i u (A) − D
21
22 T = −1∗(np . l i n a l g . i n v (D) . dot (L + U) )
23 C = np . l i n a l g . i n v (D) . dot ( b )
24
25 x0=np . a r r a y ( [ [ 0 . 5 , 0 . 5 , 0 . 5 , 0 . 5 ] ] , dtype=f l o a t ) . T
26
27 N=5 ## c a n t i d a d de i t e r a c i o n e s
28
29 M=copy . copy ( x0 )
30
31 f o r i i n ra n g e (N+1) :
32 x1=T . dot ( x0 )+C
33 M=np . c o n c a t e n a t e ( (M, x1 ) , a x i s =1)
34 x0=x1
35
36 p r i n t "La m a t r i z A: \ n" , A
37 print " "
38
39 p r i n t " El v e c t o r b=:\ n" , b
40 print " "
41
42 p r i n t "La s o l u c i o n r e a l e s : \ n" , np . l i n a l g . s o l v e (A, b )
43 print " "
44
45 p r i n t "La s o l u c i o n por J a c o b i usando %d i t e r a c i o n e s : \ n" % (N+1)
46 p r i n t x1
47
48 print " "
49 p r i n t " Las i t e r a c i o n e s : \n"
50 print M
3. Solución de sistemas de ecuaciones lineales 147

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A:
3 [[ 4.345 −0.129 0.345 0.0871 ]
4 [ 0.0267 7.5601 −0.8854 −3.1112 ]
5 [ 4.35612 0.332 11.0098 0.712 ]
6 [ 3.0987 −0.998 0.324 21.971 ]]
7
8 El v e c t o r b=:
9 [[ 5.671 ]
10 [ 0.00982]
11 [ 0.765 ]
12 [ 9.09832]]
13
14 La s o l u c i o n r e a l e s :
15 [ [ 1.33944017]
16 [ 0.0369971 ]
17 [ −0.47671957]
18 [ 0.23390729]]
19
20 La s o l u c i o n por J a c o b i usando 6 i t e r a c i o n e s :
21
22 [ [ 1.33943488]
23 [ 0.03707418]
24 [ −0.4768025 ]
25 [ 0.2338775 ] ]
26
27 Las i t e r a c i o n e s :
28
29 [ [ 0.5 1.2702 1.3197 1.3407 1.3392 1.3396 1.3394]
30 [ 0.5 0.2638 0.1239 0.0449 0.0401 0.0369 0.0370]
31 [ 0 . 5 −0.1757 −0.4642 −0.4725 −0.4778 −0.4767 − 0 . 4 7 6 8 ]
32 [ 0.5 0.3589 0.2495 0.2404 0.2340 0.2341 0.2338]]
33 >>>

El Algoritmo 3.4, inicia con la implementación del sistema del ejemplo 3.5, con la matriz
A y el vector b (líneas 4 y 9). Posteriormente, en la variable tam, almacena el tamaño de
la matriz A y en temp almacena el vector con la diagonal de A (línea 13). El vector temp,
se utiliza para la construcción de la matriz D, la cual, se inicia con la matriz identidad de
tamaño n, para posteriormente, con un ciclo for, cambiar los valores de la diagonal de D
(líneas 14 a 17). Luego, calculamos las matrices L y U , estas matrices se construyen con
las instrucciones [Link](A) y [Link](A), las cuales obtienen la matriz triangular inferior
148 3.5. Método de Gauss-Seidel

y triangular superior respectivamente de la matriz A; las instrucciones L=[Link](A) -


D y U=[Link](A) - D, muestran como se construyen dichas matrices, a las cuales, les
debemos restar la matriz D, debido a que las funciones [Link](A) y [Link](A) incluyen
la diagonal (líneas 19 y 20).

En las líneas 22 y 23 calculamos la matriz T y el vector c, los cuales son fundamentales para
el proceso iterativo: T = -1*([Link](D).dot(L + U)) y C = [Link](D).dot(b).
En la línea 25, inicializamos el vector x(0) con x0=[Link]([[ 0.5, 0.5, 0.5, 0.5 ]],
dtype=float).T. Luego, usamos la variable N como el número de ciclos (línea 27), para
posteriormente declarar la matriz M, que inicialmente es el vector x0 (línea 25); la matriz
M tiene la función de almacenar el vector solución en cada iteración, con lo que podemos
ver como es el proceso iterativo.

El ciclo for en las líneas 31 a 34 , es el responsable del proceso iterativo; en el, se usan
la matriz T y el vector c, los cuales permiten calcular la nueva solución y almacenarla
en la variable x1. Una vez calculado el vector x1, es agregado a la matriz M como una
nueva columna M=[Link]((M,x1),axis=1) (línea 33). Finalmente, se imprimen
la matriz A, el vector b, la solución verdadera usando [Link](A,b), la solución
encontrada con el método de Jacobi y la matriz M con las iteraciones.

3.5. Método de Gauss-Seidel

El método de Gauss-Seidel es una versión mejorada del método de Jacobi; básicamente,


consiste en la actualización de las componentes del vector solución en el mismo momento
que se esta calculando. Tomemos de nuevo un sistema en forma generalizada:

a11 x1 + a12 x2 + · · · + a1n xn = b1


a21 x1 + a22 x2 + · · · + a2n xn = b2
.. .. .. .. ..
. . . . = .
ai1 x1 + ai2 x2 + · · · + ain xn = bi
.. .. .. .. ..
. . . . = .
an1 x1 + an2 x2 + · · · + ann xn = bn (3.16)

Ahora, como en el método de Jacobi, despejaremos la variable xi de la fila i:


3. Solución de sistemas de ecuaciones lineales 149

b1 − (a12 x2 + · · · + a1n xn )
x1 =
a11
b2 − (a21 x1 + a23 x3 + · · · + a2n xn )
x2 =
a22
.. .. .. .. ..
. = . . . . 
bi − ai1 x1 + ai2 x2 + · · · + ai(j−1) x(j−1) + ai(j+1) x(j+1) + · · · + ain xn
xi =
aii
.. .. .. .. ..
. = . . . . 
bn − an1 x1 + an2 x2 + · · · + an(n−1) x(n−1)
xn = (3.17)
ann
Aquí es donde reside la diferencia, pues, para construir la versión iterativa, debemos tener
en cuenta que la primera componente x1 se actualiza con las componentes del vector
x(0) , pero las siguientes componentes se actualizan con los valores ya calculados. Nuestra
versión iterativa quedaría de la siguiente forma:
 
(k−1) (k−1)
b1 − a12 x2 + · · · + a1n xn
(k)
x1 =
a11
 
(k) (k−1) (k−1)
b2 − a21 x1 + a23 x3 + · · · + a2n xn
(k)
x2 =
a22
.. .. .. .. ..
. = . . . . 
(k) (k) (k) (k−1) (k−1)
bi − ai1 x1 + ai2 x2 + · · · + ai(j−1) x(j−1) + ai(j+1) x(j+1) + · · · + ain xn
(k)
xi =
aii
.. .. .. .. ..
. = . . . . 
(k) (k) (k)
bn − an1 x1 + an2 x2 + · · · + an(n−1) x(n−1)
x(k)
n = (3.18)
ann
Para ver el funcionamiento del método de Gauss-Seidel, tomemos el ejemplo del sistema
descrito en la ecuación (3.13):
.:Ejemplo 3.6

5x + 2y + z = 1
x − 7y − 2z = 2
x − y + 6z = −1
150 3.5. Método de Gauss-Seidel

Recordemos que este sistema es diagonalmente dominante. Ahora, implementaremos la


versión iterativa:
1 − (2y (k−1) + z (k−1) )
x(k) =
5
2 − (x(k) − 2z (k−1) )
y (k) =
−7
−1 − (x(k) − y (k) )
z (k) =
6
 
0
Tomaremos como x(0) =  0 , y con una tolerancia inferior a 0.01. En la forma iterativa
0
podemos ver la diferencia con el método de Jacobi. Para calcular la variable x(k) usamos
las componentes y (k−1) y z (k−1) , en este punto es exactamente igual a Jacobi; pero, en el
calculo de y (k) , se usa la variable x(k) que se calculo en el paso inmediatamente anterior
y la variable z (k−1) como en Jacobi. Finalmente, el cálculo de z (k) se toman los valores
ya calculados de x(k) y y (k) . Veamos las iteraciones:

Iteración 1:

1 − (2y (0) + z (0) ) 1 − (2(0) + (0)) 1


x(1) = = = = 0.2
5 5 5
2 − (x(1) − 2z (0) ) 2 − ((0.2) − 2(0))
y (1) = = = −0.2571429
−7 −7
−1 − (x(0) − y (0) ) −1 − ((0.2) − (−0.2571429))
z (1) = = = −0.24285714
6 6
Iteración 2:

1 − (2y (1) + z (1) ) 1 − (2(−0.2571429) + (−0.24285714))


x(2) = = = 0.34761905
5 5
2 − (x(2) − 2z (1) ) 2 − ((0.34761905) − 2(−0.24285714))
y (2) = = = −0.16612245
−7 −7
−1 − (x(2) − y (2) ) −1 − ((0.34761905) − (−0.16612245))
z (2) = = = −0.25292517
6 6
En el Cuadro 3.5, encontramos que en el Sub cuadro (a), el sistema resuelto con método de
Jacobi, el cual, tomo seis iteraciones para obtener un error menor a 0.01. En el Subcuadro
3. Solución de sistemas de ecuaciones lineales 151

(b), tenemos el sistema resuelto por el método de Gauss-Seidel. En ambos casos podemos
apreciar que el método de Gauss-Seidel tomó sólo cuatro iteraciones para encontrar la
solución con un error menor al 0.01, frente a las seis usadas por el método de Jacobi.

x(0) x(1) x(2) x(3) x(4) x(5) x(6)


x 0.00 0.200000 0.347619 0.333333 0.318027 0.315533 0.316966
y 0.00 -0.285714 -0.209524 -0.165306 -0.163946 -0.168918 -0.170068
z 0.00 -0.166667 -0.247619 -0.259524 -0.249773 -0.246995 -0.247408
Error 1.0 0.3886 0.1057 0.0417 0.0142 0.0043
(a) Seis primeras iteraciones usando Jacobi, para solucionar el sistema de la ecuación (3.13), usando x(0)
como el vector nulo.

x(0) x(1) x(2) x(3) x(4)


x 0.000000 0.200000 0.351429 0.317034 0.316770
y 0.000000 -0.257143 -0.166122 -0.168159 -0.169738
z 0.000000 -0.242857 -0.252925 -0.247532 -0.247751
Error 1.0 0.3815 0.0799 0.0037
(b) Cuatro primeras iteraciones usando Gauss-Seidel, para solucionar el sistema de
la ecuación (3.13), usando x(0) como el vector nulo.

Cuadro 3.5: Comparación entre el método de Jacobi y Gauss- Seidel, para el sistema
(3.13)

.:Ejemplo 3.7

Resuelva el sistema:

12.34x − 3.528y + 1.112z − 0.019w = 0.0123


4.532x + 1.982y + 13.45z − 1.607w = 3.489
7.501x + 23.389y − 1.177z + 2.203w = 2.561
0.012x + 3.66y − 7.372z + 56.322w = −9.98 (3.19)

Usando el vector x(0) como el vector nulo y con una tolerancia menor a 0.01.

Si aplicamos el método de Gauss-Seidel a este problema, encontraremos que la solución


encontrada no es la correcta; esto, debido a que la matriz no es diagonalmente dominante
(filas dos y tres). El cuadro 3.6, muestra los resultados obtenidos con la matriz de
coeficientes del sistema (3.19).
152 3.5. Método de Gauss-Seidel

x(0) x(1) x(2) x(3) x(4)


x 0.00 0.000997 -2.442896 318.764963 -41310.826083
y 0.00 1.758064 -211.766727 27462.785450 -3559271.990349
z 0.00 32.766214 -4218.429069 546753.714398 -70861480.575521
w 0.00 3.997337 -538.566520 69779.851259 -9043773.544408
Error 1.0 1.0077 1.0077 1.0077

Cuadro 3.6: Cuatro primeras iteraciones usando Gauss-Seidel, para solucionar el sistema
de la ecuación (3.19), usando x(0) como el vector nulo.

Como vimos, el sistema (3.19) no es diagonalmente dominante y en el Cuadro 3.6, podemos


ver que en la cuarta iteración los resultados son completamente diferentes a la solución
real, la cual es:

 
0.01830965
 0.12928865 
x=
 0.21537638 

−0.15741028

Para solucionar este inconveniente, podemos intercambiar las filas dos y tres. Con este
cambio, el sistema (3.19), se transforma en el sistema (3.20), el cual, si es diagonalmente
dominante:

12.34x − 3.528y + 1.112z − 0.019w = 0.0123


7.501x + 23.389y − 1.177z + 2.203w = 2.561
4.532x + 1.982y + 13.45z − 1.607w = 3.489
0.012x + 3.66y − 7.372z + 56.322w = −9.98 (3.20)

Ahora, aplicamos de nuevo el método de Gauss-Seidel al sistema (3.20), usando los mismos
parámetros; los resultados los podemos ver en el Cuadro 3.7.

El método de Gauss-Seidel es por lo general, más rápido que el método de Jacobi, sin
embargo, en algunas ocasiones, Jacobi puede llegar a encontrar la solución en una iteración
anterior. De otro lado, el método de Gauss-Seidel también lo podemos representar con
la descomposición matricial como lo hicimos con el método de Jacobi, todo parte de la
descomposición de la matriz A en las matrices L, D y U . En la forma iterativa general
mostrada en la ecuación (3.18), podemos deducir la siguiente expresión:
3. Solución de sistemas de ecuaciones lineales 153

x(0) x(1) x(2) x(3) x(4)


x 0.00 0.000997 0.028148 0.035312 0.034571
y 0.00 0.148853 0.164135 0.160750 0.160871
z 0.00 0.168138 0.137040 0.134519 0.134738
w 0.00 -0.164861 -0.169930 -0.170042 -0.170021
Error 1.0 0.1613 0.0305 0.00287

Cuadro 3.7: Cuatro primeras iteraciones usando Gauss-Seidel, para solucionar el sistema
de la ecuación (3.20), usando x(0) como el vector nulo.

 
(k) (k) (k) (k−1) (k−1)
bi − ai1 x1 + ai2 x2 + · · · + ai(j−1) x(j−1) + ai(j+1) x(j+1) + · · · + ain xn
(k)
xi =
aii
(3.21)
En la ecuación (3.21), podemos ver que la variable xi se despeja de la ecuación i
del sistema. En el paréntesis podemos apreciar términos que usan las variables de la
(k) (k) (k)
iteraciones que se han calculado hasta el momento ai1 x1 + ai2 x2 + · · · + ai(j−1) x(j−1) ;
Luego aparecen los términos de las variables que para calcularse requieren de la iteración
(k−1) (k−1)
anterior ai(j+1) x(j+1) + · · · + ain xn . Esta división nos permite visualizar la forma
general del método de Gauss-Seidel:
 
i−1
X n
X
(k) (k−1) 
bi −  aij xj + aij xj
(k) j=1 j=i+1
xi = (3.22)
aii
i−1
X (k)
Podemos ver que la primera sumatoria aij xj , relaciona los elementos que están
j=1
por debajo de la diagonal principal de la matriz de coeficientes. La otra sumatoria
Xn
(k−1)
aij xj , relaciona los elementos que están por encima de la diagonal. Entonces
j=i+1
la forma iterativa matricial se tomará de acuerdo a esta observación:

(D − L)x(k) = U x(k−1) + b

La matriz (D − L) es invertible, es es la diferencia de una matriz diagonal con una matriz


triangular inferior; entonces, usamos la inversa de (D − L) para despejar x(k) :
154 3.5. Método de Gauss-Seidel

h i
(D − L)−1 (D − L)x(k) = (D − L)−1 U x(k−1) + b

x(k) = (D − L)−1 U x(k−1) + (D − L)−1 b

A la matriz (D − L)−1 U la llamaremos TG y al vector (D − L)−1 b lo llamaremos cG . La


forma general iterativa del método de Gauss-Seidel esta dad por:

x(k) = TG x(k−1) + cG
con TG = (D − L)−1 U y cG = (D − L)−1 b. El siguiente ejemplo, muestra como plantear
el problema en forma matricial:

.:Ejemplo 3.8

Resuelva el sistema

12.34x − 3.528y + 1.112z − 0.019w = 0.0123


7.501x + 23.389y − 1.177z + 2.203w = 2.561
4.532x + 1.982y + 13.45z − 1.607w = 3.489
0.012x + 3.66y − 7.372z + 56.322w = −9.98 (3.23)

Usando el vector x(0) = (−1, −1, 0, 0) y con una tolerancia menor a 0.0001.

Para este ejemplo hemos cambiado el vector inicial, sin embargo, el resultado es el mismo,
tenemos las matrices:
 
0.0 0.0 0.0 0.0
 7.501 0.0 0.0 0.0 
L=  4.532 1.982

0.0 0.0 
0.012 3.66 −7.372 0.0
 
12.34 0.0 0.0 0.0
 0.0 23.389 0.0 0.0 
D= 
 0.0 0.0 13.450000 0.0 
0.0 0.0 0.0 56.322
 
0.0 −3.528000 1.112000 −0.019000
 0.0 0.0 −1.177000 2.203000 
U = 
 0.0 0.0 0.0 −1.607000 
0.0 0.0 0.0 0.0
3. Solución de sistemas de ecuaciones lineales 155

Con ellos construimos la matriz TG :


 
0.0 0.285900 −0.090113 0.001540
 0.0 −0.091690 0.079223 −0.094683 
TG =  0.0 −0.082823

0.018690 0.132913 
0.0 −0.004943 −0.002683 0.023550
y el vector cG :
 
0.000997
 0.148853 
cG = 
 0.168138 

−0.164861
La forma iterativa esta definida de la siguiente forma:
    x(k−1) 
x(k) 
0.0 0.285900 −0.090113 0.001540

0.000997

 y (k)  0.0 −0.091690 0.079223 −0.094683   (k−1)
0.148853 
 y
 
 =
 +
 z (k)  0.0 −0.082823 0.018690 0.132913   z (k−1)  0.168138 
w (k) 0.0 −0.004943 −0.002683 0.023550 w (k−1) −0.164861

El cuadro 3.8, muestra las 7 iteraciones necesarias para resolver el sistema.

x(0) x(1) x(2) x(3) x(4) x(5)


x -1.000000 -0.284903 0.046907 0.035135 0.034523 0.034589
y -1.000000 0.240543 0.161821 0.160588 0.160886 0.160875
z 0.000000 0.250961 0.131651 0.134536 0.134753 0.134734
w 0.000000 -0.159918 -0.170489 -0.170029 -0.170020 -0.170022
Error 3.065 1.3217 0.0448 0.0026 0.0002

x(6) x(7)
x 0.034588 0.034588
y 0.160875 0.160875
z 0.134734 0.134734
w -0.170022 -0.170022
Error 5.4117e-06 5.328e-07

Cuadro 3.8: Siete primeras iteraciones usando Gauss-Seidel, para solucionar el sistema de
la ecuación (3.23), usando x(0) = (−1, −1, 0, 0).

El siguiente Algoritmo muestra la implementación en Python del método de Gauss-Seidel:

.:Algoritmo 3.5
156 3.5. Método de Gauss-Seidel

1 i m p o rt numpy a s np
2 i m p o rt copy
3
4 A = np . a r r a y ( [ [ 1 2 . 3 4 , −3.528 , 1.112 , −0.019] ,
5 [ 7 . 5 0 1 , 2 3 . 3 8 9 , −1.177 , 2 . 2 0 3 ] ,
6 [ 4.532 , 1.982 , 1 3 . 4 5 , −1.607 ] ,
7 [ 0.012 , 3.66 , −7.372 , 5 6 . 3 2 2 ] ] , dtype=f l o a t )
8
9
10 b=np . a r r a y ( [ [ 0 . 0 1 2 3 , 3 . 4 8 9 , 2 . 5 6 1 , −9.98 ] ] , dtype=f l o a t ) . T
11
12 x0=np . a r r a y ( [ [ −1 , −1 ,0 ,0 ] ] , dtype=f l o a t ) .T
13
14 tam =np . shape (A) [ 0 ]
15 temp =np . d i a g (A)
16
17 D=np . e y e ( np . shape (A) [ 0 ] )
18
19 f o r i i n ra n g e ( np . shape (A) [ 0 ] ) :
20 D[ i , i ]=temp [ i ]
21
22 L=np . t r i l (A) − D
23 U=np . t r i u (A) − D
24
25 LDinv=np . l i n a l g . i n v (L+D)
26
27 T = −1∗(LDinv . dot (U) )
28 C = LDinv . dot ( b )
29
30 N=6 ## c a n t i d a d de i t e r a c i o n e s
31
32 M=copy . copy ( x0 )
33
34 f o r i i n ra n g e (N+1) :
35 x1=T . dot ( x0 )+C
36 M=np . c o n c a t e n a t e ( (M, x1 ) , a x i s =1)
37 x0=x1
38
39 print " "
40 print "La m a t r i z A: \ n" , A
41 print " "
42 print " El v e c t o r b=:\ n" , b
43 print " "
44 print "La s o l u c i o n r e a l e s : \ n" , np . l i n a l g . s o l v e (A, b )
45 print " "
46 print "La s o l u c i o n por Gauss − S e i d e l usando %d i t e r a c i o n e s : \ n" % (N+1)
47 print x0
48
49 print " "
50 p r i n t " Las i e t r a c i o n e s : \ n "
51 print M
3. Solución de sistemas de ecuaciones lineales 157

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A:
3 [ [ 1 . 2 3 4 0 0 0 0 0 e +01 −3.52800000 e+00 1 . 1 1 2 0 0 0 0 0 e+00 −1.90000000 e −02]
4 [ 7 . 5 0 1 0 0 0 0 0 e +00 2 . 3 3 8 9 0 0 0 0 e+01 −1.17700000 e+00 2 . 2 0 3 0 0 0 0 0 e +00]
5 [ 4 . 5 3 2 0 0 0 0 0 e +00 1 . 9 8 2 0 0 0 0 0 e+00 1 . 3 4 5 0 0 0 0 0 e+01 −1.60700000 e +00]
6 [ 1 . 2 0 0 0 0 0 0 0 e −02 3 . 6 6 0 0 0 0 0 0 e+00 −7.37200000 e+00 5.63220000 e +01]]
7
8 El v e c t o r b=:
9 [[0.0123]
10 [3.489 ]
11 [2.561 ]
12 [ −9.98 ]]
13
14 La s o l u c i o n r e a l e s :
15 [[0.03458763]
16 [0.16087467]
17 [0.13473387]
18 [ −0.17002163]]
19
20 La s o l u c i o n por Gauss − S e i d e l usando 7 i t e r a c i o n e s :
21
22 [[0.03458762]
23 [0.16087467]
24 [0.13473387]
25 [ −0.17002163]]
26
27 Las i e t r a c i o n e s :
28
29 [ [ − 1 . −0.2849 0 . 0 4 6 9 0.0351 0.0345 0.0345 0.0345 0.03458762]
30 [ −1. 0.2405 0.1618 0.1605 0.1608 0.1608 0.1608 0.16087467]
31 [ 0. 0.2509 0.1316 0.1345 0.1347 0.1347 0.1347 0.13473387]
32 [ 0 . −0.1599 −0.1704 −0.1700 −0.1700 −0.1700 −0.1700 − 0 . 1 7 0 0 2 1 6 3 ] ]
33
34 >>>

El Algoritmo 3.5, muestra la implementación del método de Gauss-Seidel, el cual, no


difiere mucho de la implementación de el método de Jacobi expuesto en el Algoritmo 3.4.
La diferencia radica en el cálculo de la matriz TG y el vector cG . En la línea 25, se calcula
la inversa de la matriz L + D, en las líneas 27 y 28 se calculan las matrices T y C (TG y
cG ) usando este resultado. El resto del proceso es el mismo.
158 3.6. Método de Relajación

3.6. Método de Relajación


Este método es conocido como SOR (Successive Over Relaxation), el cual, se basa en
el método de Gauss-Seidel para resolver un sistema con las mismas restricciones que
encontramos en Jacobi y Gauss-Seidel.

.:Definición 3.2 Definición de radio espectral

Sea A una matriz de tamaño n × n, se dice que el radio espectral de A denotado como
ρ(A), el mayor de entre los valores absolutos de los elementos de su espectro, es decir,
es el mayor de entre los valores propios de A; si A tiene valores propios λ1 , λ2 . . . λn ,
entonces:

ρ(A) = máx (|λi |)


i

Los valores propios de A son un concepto que veremos en el capítulo sobre valores
y vectores propios, sin embargo, el método de relajación hace que se amplie el rango
espectral de la matriz, haciendo que el método converja más rápido.

Todo parte de la siguiente descomposición:

1 1−w
A= D− D−L−U
w w
Donde el término w1 D − 1−w
w D es D sólo que reescrito de otra forma. Ahora Si tenemos
que resolver el sistema Ax = b, entonces:

Ax = b
remplazamos:

 
1 1−w
D− D−L−U x = b
w w
1 1−w
Dx − Dx − Lx − U x = b
w w
1 1−w
Dx − Lx = Dx + U x + b
w w
Dx − wLx 1−w
= Dx + U x + b
w w
despejando x:
3. Solución de sistemas de ecuaciones lineales 159

 
1−w
(D − wL)x = w Dx + U x + b
w

= (1 − w)Dx + wU x + wb

De nuevo, la matriz D − wL es invertible y por lo tanto podeos obtener (D − wL)−1 ,


término que multiplicaremos por derecha a ambos lados de la ecuación:

(D − wL)x = [(1 − wD) + wU ] x + wb

x = (D − wL)−1 [(1 − wD) + wU ] x + (D − wL)−1 wb

Donde TS = (D − wL)−1 [(1 − wD) + wU ] y cS = (D − wL)−1 wb.

x = T s x + cs
En forma general, la forma iterativa sería:

x(k+1) = (D − wL)−1 [(1 − wD) + wU ] x(k) + w(D − wL)−1 b

x(k+1) = TS x(k) + cS
El siguiente teorema demuestra la convergencia de los métodos antes citados:

.:Teorema 3.1 Sea A de tamaño n × n, si A es diagonal estrictamente dominante y


para algún vector x(0) , los métodos de Jacobi, Gauss-Seidel y el método de Relajación dan
 ∞
como resultado una sucesión de vectores x(k) k=0 que converge a una única solución del
sistema Ax = b.

Para una demostración del Teorema ver [2] y [18]. El teorema anterior converge siempre
y cuando la matriz de coeficientes A sea diagonal estrictamente dominante; mejor aun,
los métodos iterativos que hemos vista en este capítulo caen bajo este teorema, pues el
método de Relajación es una generalización del método de Gauss-Seidel, sólo falta hacer
w = 1, para obtener la misma forma iterativa.

El siguiente teorema determina la escogencia del término w :

.:Teorema 3.2 Sea A de tamaño n × n, si A es diagonal estrictamente dominante,


entonces el método de relajación converge si 0 < w < 2, para algún vector x(0) .
160 3.6. Método de Relajación

De nuevo la demostración la podemos encontrar en ver [2] y [18]. La escogencia de w


determina el nombre del método, así:
Si 0 < w < 1 el método se llama subrelajación
Si w = 1 es el método de Gauss-Seidel
Si 1 < w < 2 se llama método de sobre relajación.
El siguiente ejemplo muestra la efectividad del método:

.:Ejemplo 3.9

Resuelva el siguiente sistema de ecuaciones lineales por el método de Relajación:

36x + 7y + 8z + 4w = 7
7x + 29y + 9z + 4w = 5
3x + 8y + 24z + 3w = 4
4x + 4y + 2z + 17w = 8 (3.24)

Como ya sabemos como se calculan D, L y U , entonces pasaremos a mostrar la matriz


TS :
 
0.200000 −0.155556 −0.177778 −0.088889
 −0.038621 0.230038 −0.213946 −0.093180 
TS = 
 −0.009701 −0.045788

0.274830 −0.066263 
−0.029464 −0.009711 0.047870 0.240508
Ahora el vector cS :
 
0.155556
 0.107893 
cs =  
 0.089006 
0.318503
El cuadro 3.9 muestra, las primeras seis iteraciones hasta obtener un error inferior a 0.001
y tomando el vector nulo como vector x(0) .

El cuadro 3.9, muestra que en la sexta iteración el método ya tiene una solución con una
tolerancia bastante buena, en este ejemplo se uso un w = 0.8. El cambio de este parámetro
puede hacer que el método tarde más en llegar a una buena solución. El Cuadro 3.10
muestra el mismo ejemplo con el sistema (3.24), donde se cambio el parámetro w.

Con un w = 0.3 (Subcuadro (a)), el método tomó 19 iteraciones, mientras que con un
w = 1 (Subcuadro (b)), sólo tomó seis; de igual manera, con un w = 1.5 la cantidad de
3. Solución de sistemas de ecuaciones lineales 161

x(0) x(1) x(2) x(3) x(4) x(5) x(6)


x 0.000000 0.155556 0.125749 0.118302 0.117735 0.118044 0.118250
y 0.000000 0.107893 0.077984 0.065906 0.062528 0.061714 0.061551
z 0.000000 0.089006 0.085914 0.081737 0.079948 0.079303 0.079087
w 0.000000 0.318503 0.393736 0.412850 0.417584 0.418687 0.418920
Error 1.0 0.2010 0.05466 0.013715 0.0034 0.0009

Cuadro 3.9: Seis primeras iteraciones usando el método de Relajación, para solucionar el
sistema de la ecuación (3.24), usando x(0) como el vector nulo y w = 0.8.

iteraciones llego a 16 (Subcuadro (c)). La pregunta sería ¿de que forma podemos encontrar
el mejor w?. En algunos textos como el de Burden [2] muestran algunas fórmulas especiales
pero éstas sólo funcionan en casos muy particulares, mientras que Mora [16] sugiere hacer
varias pruebas hasta obtener un resultado óptimo.

El siguiente Algoritmo muestra la implementación del el método de Relajación


implementado en Python:

.:Algoritmo 3.6

1 i m p o rt numpy a s np
2 i m p o rt copy
3
4 A = np . a r r a y ( [ [ 3 6 . , 7. , 8. , 4.] ,
5 [ 7. , 29. , 9. , 4.] ,
6 [ 3. , 8. , 24. , 3.] ,
7 [ 4. , 4. , 2. , 1 7 . ] ] , dtype=f l o a t )
8
9
10 b=np . a r r a y ( [ [ 7 , 5 , 4 , 8 ] ] , dtype=f l o a t ) .T
11
12 x0=np . z e r o s ( ( np . shape (A) [ 0 ] , 1 ) )
13
14 w=0.8
15
16 tam=np . shape (A) [ 0 ]
17
18 temp=np . d i a g (A)
19 D=np . e y e ( np . shape (A) [ 0 ] )
20
21 f o r i i n ra n g e ( np . shape (A) [ 0 ] ) :
22 D[ i , i ]=temp [ i ]
23
24
25 L=np . t r i l (A) − D
26 U=np . t r i u (A) − D
162 3.6. Método de Relajación

x(0) x(1) x(2) x(3) x(4) ······ x(19)


x 0.000000 0.058333 0.089119 0.105018 0.112975 ······ 0.118376
y 0.000000 0.047500 0.069042 0.077289 0.079034 ······ 0.062027
z 0.000000 0.043062 0.064941 0.075532 0.080239 ······ 0.079034
w 0.000000 0.132186 0.220250 0.279817 0.320663 ······ 0.418152
Error 1.0 0.3839 0.1985 0.1170 ······ 0.00075
(a) w = 0.3

x(0) x(1) x(2) x(3) x(4) x(5) x(6)


x 0.000000 0.194444 0.105095 0.116613 0.118497 0.118428 0.118380
y 0.000000 0.125479 0.062951 0.059925 0.061256 0.061525 0.061542
z 0.000000 0.100535 0.084610 0.079478 0.078973 0.078979 0.078986
w 0.000000 0.383485 0.421094 0.419699 0.419002 0.418955 0.418961
Error 1.0 0.2607 0.02918 0.00550 0.0006 0.00011
(b) w = 1.0

x(0) x(1) x(2) x(3) x(4) ······ x(16)


x 0.000000 0.291667 -0.026393 0.198123 0.090700 ······ 0.118363
y 0.000000 0.153017 0.027128 0.046347 0.089361 ······ 0.061531
z 0.000000 0.118804 0.082989 0.068123 0.080361 ······ 0.078994
w 0.000000 0.527970 0.426993 0.394081 0.431110 ······ 0.418971
Error 1.0 0.8209 0.5085 0.2674 ······ 0.00010
(c) w = 1.5

Cuadro 3.10: El método de Relajación, para solucionar el sistema de la ecuación (3.24),


usando x(0) como el vector nulo y cambiando el parámetro w.

27
28
29 LDinv=np . l i n a l g . i n v (D + (w∗L ) )
30 T= LDinv . dot ((1 −w) ∗D − w∗U)
31 C = w∗ ( LDinv . dot ( b ) )
32
33 N=6## c a n t i d a d de i t e r a c i o n e s
34
35 M=copy . copy ( x0 )
36
37
38 f o r i i n ra n g e (N+1) :
39 x1=T . dot ( x0 ) + C
40 M=np . c o n c a t e n a t e ( (M, x1 ) , a x i s =1)
41 x0=x1
3. Solución de sistemas de ecuaciones lineales 163

42
43 print " "
44 print "La m a t r i z A: \ n" , A
45 print " "
46 print " El v e c t o r b=:\ n" , b
47 print " "
48 print "La s o l u c i o n r e a l e s : \ n" , np . l i n a l g . s o l v e (A, b )
49 print " "
50 print "La s o l u c i o n por SOR usando %d i t e r a c i o n e s : \ n" % (N+1)
51 print x0
52 print " "
53 print " Las i t e r a c i o n e s : \ n" , M

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A:
3 [ [ 36. 7. 8. 4.]
4 [ 7. 29. 9. 4.]
5 [ 3. 8. 24. 3.]
6 [ 4. 4. 2. 17.]]
7
8 El v e c t o r b=:
9 [[ 7.]
10 [ 5.]
11 [ 4.]
12 [ 8.]]
13
14 La s ol uci on r e a l es :
15 [[ 0.11837445]
16 [ 0.06153967]
17 [ 0.07898626]
18 [ 0.418963 ]]
19
20 La s o l u c i o n por SOR usando 7 i t e r a c i o n e s :
21
22 [[ 0.11833374]
23 [ 0.06152953]
24 [ 0.07901747]
25 [ 0.41896098]]
26
27 Las i t e r a c i o n e s :
28 [ [ 0.0 0.15555556 0.1257486 0.11830219 0.11773504 0.11804439
0.11824952 0.11833374]
29 [ 0.0 0.10789272 0.07798377 0.06590623 0.06252795 0.06171439
0.06155061 0.06152953]
30 [ 0.0 0.08900639 0.08591375 0.08173731 0.07994815 0.07930293 0.0790868
0.07901747]
164 3.7. ¿Qué método usar?

31 [ 0.0 0.31850325 0.39373562 0.41285026 0.41758425 0.41868669


0.41891973 0.41896098]]
32 >>>

El Algoritmo 3.6, es muy similar en funcionamiento al método de Gauss-Seidel, los cambios


ocurren en la implementación de la matriz TS y el vector cS , además, la inclusión del
parámetro w. En las líneas 26 a 31 se implementa la matriz T y el vector c, mientras que
en la línea 14 se declara w = 0.8. El resto del algoritmo funciona exactamente igual al de
Gauss-Seidel y Jacobi.

3.7. ¿Qué método usar?


Bien, si tenemos un problema que requiere la solución de un sistema de ecuaciones lineales
de la forma Ax = b, entonces es probable necesitemos resolverlo por alguno de los métodos
expuestos en estos primeros capítulos. Lo primero que debemos tener en cuenta es el
tamaño de matriz de coeficientes A; si es pequeña, podemos usar un método directo como
Gauss-Jordan, pero si el sistema es muy grande, debemos recurrir bien sea a la fatorización
de matrices o a los métodos iterativos.

En cualquiera de las dos opciones, debemos tener en cuenta la naturaleza de la matriz,


es decir, si esta es definida positiva podemos usar métodos como la descomposición de
Cholesky: si la matriz es diagonalmente dominante, en cuyo caso podemos usar métodos
iterativos. El siguiente ejemplo muestra el poder de los métodos iterativos:

.:Ejemplo 3.10

Resuelva un sistema de ecuaciones lineales con una matriz de coeficientes de tamaño


100 × 100, usando los métodos iterativos de Jacobi, Gauss-Seidel y Relajación con
w = 0.85:

Para este experimento, tomamos la matriz de coeficientes y el vector de términos


independientes que aparece en el apéndice B; a ellos les aplicamos los tres métodos y
encontramos que Python toma cerca de 0.0005seg en encontrar la solución al sistema
usando los tres métodos iterativos. La figura 3.1, muestra el desarrollo de los tres métodos;
en ellos se evidencia que Gauss-Seidel y Jacobi fueron los más rápidos, mientras que
Relajación con w = 0.85 no tuvo un buen desempeño.

A pesar de estos resultados, La literatura nos dice que es el método de relajación es el


que ofrece mejores resultados, frente a los método de Jacobi y Gauss-Seidel, sin embargo,
3. Solución de sistemas de ecuaciones lineales 165

1 Relajación con w = 0.85


Gauss-Seidel
0.8 Jacobi

0.6
Error

0.4

0.2

2 4 6 8 10
Iteraciones

Figura 3.1: Aplicación de los métodos de Relajación con w = 0.85, Gauss-Seidel y Jacobi,
al ejemplo 3.10 (Iteraciones vs Error)

es necesario hallar un buen w.

La literatura y en especial Gutiérrez [4], nos sugiere que los mejores algoritmos son los
iterativos, el siguiente cuadro propuesto por Gutiérrez y otros, nos muestran la cantidad
de operaciones necesarias en cada método ( Cuadro 3.11):

El Cuadro 3.11, nos dice que si n es el tamaño de la matriz (el número de ecuaciones)5 ;
entonces los métodos iterativos se muestran como los más eficientes, sin embargo, estos
sólo funcionan si la matriz es diagonalmente dominantes; para matrices que no lo sean,
se recomienda la descomposición triangular, bien sea A = LU o P A = LU . La figura
3.2, muestra como los métodos iterativos usan menos operaciones, mientras que usar la
inversa de la matriz es poco recomendable.

Existen otros métodos para hallar la solución a sistemas de ecuaciones lineales. En este
libro, hemos visto algunos métodos iterativos, pero existen otros que son más complejos;
motivo por el cual, no los he incluido en este texto, pues requieren de conocimientos
previos para su desarrollo. (para más información ver [17, 2, 18, 16]).

5 En el caso de los métodos iterativos r es el número de iteraciones necesaria determinada por algún
criterio
166 3.7. ¿Qué método usar?

Método Cantidad de operaciones

n3 n
Eliminación Gaussiana + n2 −
3 3

n3 n
Descomposición triangular + n2 −
3 3

n3 n
Eliminación Gauss-Jordan + n2 −
2 2

Inversión de matrices y multiplicación n3 + n2

Métodos Iterativos rn2

Cuadro 3.11: Cantidad de operaciones para los métodos estándar. (Cuadro tomado de [4],
pag 134)

.:Ejercicios 3.2

1. Implemente un algoritmo en Python con las siguientes características:


1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 2 , −1, 0 , 0]
4 [ −1 , 2 , −1, 0 ]
5 [ 0 , −1, 2 , −1]
6 [ 0, 0 , −1, 2 ] ] , dtype=f l o a t )
7
8 b=np . a r r a y ( [ [ 6 , 8 , −6, −9 ] ] , dtype=f l o a t ) .T
9
10
11 d e f MetJacobi (A, b ) :
12 .
13 .
14 .
15 return M

a) La función MetJacobi(A,b) debe usar el método de Jacobi para solucionar el


sistema, no se debe usar la instrucción [Link](A,b).
b) La función MetJacobi(A,b), debe devolver una matriz M, cuyos vectores
columna son las soluciones en cada iteración, es decir, la primera columna
3. Solución de sistemas de ecuaciones lineales 167

Eli. Gaussiana y Des. triangular


250 Eli. Gauss-Jordan
Inv. de matrices y multipli.
Mét. Iterativos
Cantidad de operaciones

200

150

100

50

0 1 2 3 4 5 6
n tamaño de la matriz

Figura 3.2: Tamaño de la matriz vs cantidad de operaciones necesarias para resolver el


sistema Ax = b

de la matriz es el vector x(0) , la segunda columna es el resultado de la primera


iteración y así sucesivamente.
c) Determine el error en cada iteración usando la norma (como en el Cuadro
3.2). Posteriormente calcule el error usando el porcentaje de cambio en cada
iteración (como en el Cuadro 3.3).
d ) Genere una matriz A de tamaño 100×100, y un vector b de 100×1. Encuentre la
solución al sistema usando la función implementada en el punto a) y compárela
con la solución real.

2. Implemente la función MetGaussSeidel(A,b) y haga los numerales a) hasta d) iguales


al punto anterior.
3. Implemente la función MetRelajacion(A,b,w) y haga los numerales a) hasta d)
iguales al punto anterior.
4. Genere una matriz A de tamaño 100 × 100, y un vector b de 100 × 1. Haga las
30 primeras iteraciones con el método de relajación usando un w = 0.1, w = 0.3,
w = 0.7, w = 0.9, w = 1.1, w = 1.3, w = 1.5, w = 1.7 y w = 1.9. Haga un
cuadro estadístico con dicha información, compare las soluciones encontradas con
la solución verdadera.
168 3.7. ¿Qué método usar?
“Yo necesito pocas cosas y las pocas que necesito, las necesito
poco”
San Francisco de Asís

Determinantes
4
4.1. Definición
El determinante es un número asociado a una matriz, que inicialmente se usaba para
conocer la soluciones a un sistema de ecuaciones lineales; veamos la siguiente definición:

.:Definición 4.1 El determinante de una matriz es una función con dominio Rn×n → R,
en la cual se toma una matriz cuadrada y se retorna un número real.

La anterior definición, sólo hace referencia a matrices en el campo de los números reales
R, sin embargo, los teoremas, hechos y algoritmos, pueden ajustarse para que manipulen
matrices en el campo de los números complejos C.1

4.2. Determinante de matrices 2 × 2


En realidad, los determinantes de tamaño 2 × 2, fueron inicialmente usados para hallar
la solución a sistemas de ecuaciones lineales del mismo tamaño. La siguiente definición,
enuncia como calcular el determinante más sencillo, el de la matriz de tamaño 2 × 2:
1 Técnicamente, el análisis matricial moderno, esta orientado al campo de los complejos, el caso de

los números reales, es en realidad un caso particular de los números complejos. En este texto, sólo
abordaremos la parte real.

169
170 4.3. Determinante de matrices 3 × 3

.:Definición 4.2 (Determinante de una matriz cuadrada de orden 2)


 
a11 a12
Sea A = entonces el determinante de A, denotado por detA o |A| se define
a21 a22
como:

a11 a12
detA = = a11 a22 − a12 a21 (4.1)
a21 a22

Lo único que debemos hacer es multiplicar las diagonales de la matriz, las barras en la
matriz; ya no representan la matriz en sí misma, sino el determinante y se pueden tratar
como un número.

 
2 3
.:Ejemplo 4.1 Hallar el determinante de la matriz A = .
−1 7

detA = |A| = (2)(7) − (−1)(3)


= 14 − (−3)
= 17

4.3. Determinante de matrices 3 × 3


El determinante de matrices de tamaño 3 × 3, se basa en el concepto del determinante de
tamaño 2 × 2:

.:Definición 4.3 (Determinante de una matriz cuadrada de orden 3)


 
a11 a12 a13
Sea A =  a21 a22 a23 entonces el determinante de A, denotado por detA o |A| se
a31 a32 a33
define como:
a11 a12 a13
a22 a23 a21 a23 a21 a22
detA = a21 a22 a23 = a11 − a12 + a13 (4.2)
a32 a33 a31 a33 a31 a32
a31 a32 a33

Para hallar el determinante de una matriz 3 × 3 necesitamos calcular el determinante de


tres matrices de 2 × 2, las cuales se obtienen de la siguiente forma:
4. Determinantes 171

 
a22 a23
es la matriz que se obtiene al eliminar la primera fila y la primera
a32 a33
columna de A.

 
a21 a23
es la matriz que se obtiene al eliminar la primera fila y la segunda
a31 a33
columna de A.

 
a21 a22
es la matriz que se obtiene al eliminar la primera fila y la tercera
a31 a32
columna de A.

.:Ejemplo 4.2 Hallar el determinante de la matriz

 
5 7 9
A =  1 −1 3 
6 −1 4

detA = |A|
−1 3 1 3 1 −1
= 5 −7 +2
−1 4 6 4 6 −1
= 138

4.4. Determinantes de matrices de tamaño n × n

Como vimos, al calcular el determinante de una matriz de tamaño 3×3, se hace un proceso
de eliminación de la primera fila y las tres columnas, esto genera tres sub matrices de
tamaño 2 × 2, a estas matrices las llamaremos las Menores:
172 4.4. Determinantes de matrices de tamaño n × n

.:Definición 4.4 (La Menor de una Matriz)

Dada una matriz A de tamaño n × n, la Menor M ij de A es la matriz de dimensión


(n − 1) × (n − 1) obtenida de A al eliminar el renglón i y la columna j.

 
a11 a12 ··· a1j ··· a1n

 a21 a22 ··· a2j ··· a2n 

 .. .. .. .. .. .. 
 . . . . . . 
A =  
fila
 ai1
 ai2 ··· aij ··· ain 

} i
 . .. .. .. .. ..
 ..

. . . . . 
an1 an2 ··· anj ··· ann
|{z}
Columna j

La menor Mij quedaría


 
a11 q12 ··· a1(n−1)

 ai1 ai2 ··· ai(n−1) 

Mij =  .. .. .. .. 
 . . . . 
a(n−1)1 a(n−1)2 ··· a(n−1)(n−1)

.:Ejemplo 4.3 Si definimos la matriz A:


 
5 7 9
A =  1 −1 3 
6 −1 4

Entonces
   
−1 3 5 9
M11 = , M22 =
−1 4 6 4

   
5 7 1 3
M33 = , M12 =
1 −1 6 4

Ahora bien, además de la menor, es necesario tener en cuenta la definición de cofactor:


4. Determinantes 173

.:Definición 4.5 (Cofactor de una matriz)

Dada una matriz A de orden n × n, el cofactor ij de A denotado por Aij está dado por:
i+j
Aij = (−1) |Mij |
i+j
(−1) = 1 si (i + j) es par
i+j
(−1) = −1 si (i + j) es impar

.:Ejemplo 4.4 Dada la matriz


 
5 7 9
A =  1 −1 3 
6 −1 4
Veamos los siguientes cofactores:

5 9
A22 = (−1)2+2
6 4
= −34

1 −1
A23 = (−1)1+3
6 −1
= 5
Ahora, ya podemos calcular el determinante de una matriz de cualquier tamaño:

.:Definición 4.6 (Determinante de una matriz de orden n × n)

Sea A de orden n × n. El detA se puede expresar como expansión por cofactores, así:
n
X
detA = |A| = a11 A11 + a12 A12 + · · · + a1n A1n = a1k A1k
k=1

.:Ejemplo 4.5 Encuentre el determinante de la matriz


 
2 2 4 5
 4 −5 7 1 
A=  5

0 9 0 
0 1 −3 1
174 4.4. Determinantes de matrices de tamaño n × n

aplicando la definición de cofactores.

Entonces:

detA = 2A11 + 2A12 + 4A13 + 5A14


   
−5 7 1 4 7 1
= 2 (−1)2 0 9 0  + 2 (−1)3 5 9 0  +
1 −3 1 0 −3 1
   
4 −5 1 4 −5 7
4 (−1)4 5 0 0  + 5 (−1)5 5 0 9 
0 1 1 0 1 −3
= −108 + 28 + 120 + 380
= 420
Como vemos, el determinante de una matriz de 5 × 5, conlleva calcular 5 determinantes
de 4 × 4, que a su vez, requieren de 4 determinantes de 3 × 3, y cada uno de ellos conlleva
n!
3 determinantes de 2 × 2, esto nos muestra que el orden de complejidad es , es por
3!
esto, que el método de los cofactores no es el más apropiado para hallar el determinante
de una matriz, pues para una matriz de 10 × 10 se necesitarían 604800 operaciones. Para
solucionar este inconveniente, es necesario estudiar las propiedades de los determinantes.

En Python con la librería Numpy, el cálculo del determinante es relativamente fácil,


veamos el siguiente algoritmo:

.:Algoritmo 4.1

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 1 , −4, 5 ] ,
4 [9 , 0, 9] ,
5 [2 , 7 , − 1 ] ] , dtype=f l o a t )
6
7 d=np . l i n a l g . d e t (A)
8
9 p r i n t "La m a t r i z A: \ n" , A
10 print " "
11 p r i n t " d e t (A) = " , d

El programa anterior produce la siguiente salida:


4. Determinantes 175

1 >>>
2 La m a t r i z A:
3 [ [ 1 . −4. 5.]
4 [ 9. 0. 9.]
5 [ 2. 7. −1.]]
6
7 d e t (A) = 144.0
8 >>>

Como vemos en el Algoritmo 4.1, la función d=[Link](A), calcula el determinante


de la matriz A y lo almacena en la variable d. Pero, no es muy difícil calcular los
determinantes para matrices de tamaños 2 × 2 y 3 × 3, veamos el siguiente algoritmo:

.:Algoritmo 4.2

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 2 , −4, 7 ] ,
4 [ −9 , 6 , 9] ,
5 [ 2 , 7 , − 1 ] ] , dtype=f l o a t )
6
7 B = np . a r r a y ( [ [ 9 , 5 ] ,
8 [ 4 , − 1 ] ] , dtype=f l o a t )
9
10 d e f D e te rm i n a n a te 2 x 2 (A) :
11 r e t u r n A[ 0 , 0 ] ∗ A[ 1 , 1 ] − (A[ 1 , 0 ] ∗ A[ 0 , 1 ] )
12
13 d e f D e te rm i n a n a te 3 x 3 (A) :
14
15 M11=np . a r r a y ( [ [ A [ 1 , 1 ] , A[ 1 , 2 ] ] ,
16 [ A[ 2 , 1 ] , A[ 2 , 2 ] ] ] )
17
18 M12=np . a r r a y ( [ [ A [ 1 , 0 ] , A[ 1 , 2 ] ] ,
19 [ A[ 2 , 0 ] , A[ 2 , 2 ] ] ] )
20
21 M13=np . a r r a y ( [ [ A [ 1 , 0 ] , A[ 1 , 1 ] ] ,
22 [ A[ 2 , 0 ] , A[ 2 , 1 ] ] ] )
23
24 c o f 1 = (( −1) ∗∗(1+1) ) ∗A[ 0 , 0 ] ∗ D e te rm i n a n a te 2 x 2 (M11)
25 c o f 2 = (( −1) ∗∗(1+2) ) ∗A[ 0 , 1 ] ∗ D e te rm i n a n a te 2 x 2 (M12)
26 c o f 3 = (( −1) ∗∗(1+3) ) ∗A[ 0 , 2 ] ∗ D e te rm i n a n a te 2 x 2 (M13)
27
28 return cof1 + cof2 + cof3
29
30
31 p r i n t "La m a t r i z B 2 x2 : \ n" , B
32 print " "
176 4.4. Determinantes de matrices de tamaño n × n

33 print " d e t (B) = " , D e te rm i n a n a te 2 x 2 (B)


34 print " "
35 print "La m a t r i z A 3 x3 : \ n" , A
36 print " "
37 print " d e t (A) = " , D e te rm i n a n a te 3 x 3 (A)

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z B 2 x2 :
3 [ [ 9. 5.]
4 [ 4. −1.]]
5
6 d e t (B) = −29.0
7
8 La m a t r i z A 3 x3 :
9 [ [ 2 . −4. 7.]
10 [ −9. 6. 9.]
11 [ 2. 7. −1.]]
12
13 d e t (A) = −699.0
14 >>>

El Algoritmo 4.2, crea dos funciones:

Línea 10: Determinanate2x2(A), esta función calcula el determinante de una matriz


de 2 × 2; simplemente se apega a la definición de determinante que encontramos en
la ecuación (4.1).

Línea 13: Determinanate3x3(A), esta función calcula el determinante de una matriz


de 3 × 3; en este caso se, tomamos como base la ecuación (4.2). En esta función,
podemos apreciar que se crean las tres sub matrices para las correspondientes
menores (líneas 15 a 21) M11, M12 y M13. Posteriormente, calculamos los
cofactores: cof1, cof2 y cof3 (líneas 24 a 26), para finalmente calcular la suma
con: return cof1 + cof2 + cof3.

Al final, imprimimos los resultados:

.:Ejercicios 4.1

1. Hallar el determinante de cada una de las siguientes matrices:


4. Determinantes 177

 
1 −1 −1 0
 −3 4 6 0 
a) A= 
 2 5 −1 −3 
4 0 3 0
 
0 a 0 0
 b 0 0 0 
b) A=
 0 0 0 c 

0 0 d 0
 
0 b 0 0
 c d 0 0 
c) A=
 0 0 a −b 

0 0 c d
 
2 5 −6 1 0
 0
 1 −7 6 0 

d) A=
 0 0 0 −7 0 

 0 2 1 5 −8 
2 −1 5 4 0
2. El método de Sarrus consiste de los sigientes pasos:

Repetir las dos primeras columnas de la matriz a la derecha de la misma.


Después, sumar los productos de las diagonales descendentes y sustraer los
productos de las diagonales ascendentes.

Los que nos daría


|A| = a11 a22 a33 + a12 a23 a31 + a13 a21 a32 −
a13 a22 a31 − a11 a23 a32 − a33 a21 a12 (4.3)
a) Implemente un programa en Python que calcule el determinante de una matriz
de 3 × 3 usando el método de Sarrus.
b) ¿es posible extender la fórmula de Sarrus para determinantes más grandes?

3. Consulte e implemente en Python el método de Chió para hallar determinantes.


4. Demuestre las siguientes afirmaciones:
Si A es una matriz cuadrada definida positiva de la forma:
 
a11 a12 a13 · · · a1n
 a21 a22 a23
 · · · a2n 

A= . .. .. .. .. 
 .. . . . . 
an1 an2 an3 · · · ann
entonces
178 4.5. Propiedades de los determinantes

a) a11 > 0
a11 a12
b) >0
a21 a22
a11 a12 a13
c) a21 a22 a23 >0
a31 a32 a33
a11 a12 a13 ··· a1n
a21 a22 a23 ··· a2n
d) .. .. .. .. .. >0
. . . . .
an1 an2 an3 · · · ann

4.5. Propiedades de los determinantes


Los siguientes teoremas muestran las principales propiedades que tienen los
determinantes. Sus demostraciones las podemos encontrar en [19].

.:Teorema 4.1 (Propiedad 1)


Si A es una matriz cuadrada de orden n y A tiene una fila (o columna) nula, entonces

detA = 0

.:Ejemplo 4.6

Calcular el determinante de la matriz A:


 
5 9 1
A =  −8 9 6 
0 0 0
Veamos la expansión en cofactores:

det A = a11 A11 + a12 A12 + a13 A13

9 6 −8 6 −8 6
= (5)(−1)1+1 + (9)(−1)1+2 + (1)(−1)1+3
0 0 0 0 0 0

= 0+0+0=0

Entonces det A = 0
4. Determinantes 179

.:Teorema 4.2 (Propiedad 2)


Si A es una matriz cuadrada de orden n. Si cualquier fila de A se multiplica por un escalar
k, el determinante de la nueva matriz es k veces el determinante de A.

.:Corolario 4.1 Si A es una matriz cuadrada de orden n, entonces:

det(kA) = k n detA

.:Ejemplo 4.7

Calcular el determinante de la matriz A:


 
−24 21 12
A =  15 3 6 
15 12 21

es fácil ver que


 
−8 7 4
A = 3 5 1 2 
5 4 7

Si aplicamos el corolario tenemos que:

−8 7 4
det A = 33 5 1 2 = 27(−107) = −2889
5 4 7

.:Teorema 4.3 (Propiedad 3)


Sean A, B y C matrices cuadradas de orden n idénticas excepto por la i-ésima columna,
y tal que la i-ésima columna de C es la suma de la i-ésimas columnas de A y B. Entonces
y sólo entonces:

detC = detA + detB

.:Ejemplo 4.8
180 4.5. Propiedades de los determinantes

Tomemos las matrices A y B:


   
1 2 9 1 2 1
A= 7 5 6  y B= 7 5 1 
9 8 1 9 8 5
Ahora la matriz C definida de la siguiente forma:
 
1 2 10
C= 7 5 7 
9 8 6
Entonces detA = 150, el detB = −24 y el detC = 126, podemos ver que:

126 = 150 + (−24)

.:Teorema 4.4 (Propiedad 4)


Sea A una matriz cuadrada de orden n. Si se intercambian dos filas cuales quiera de A,
el determinante de la matriz así obtenida es igual a detA multiplicado por (-1).

De lo anterior, podemos deducir el siguiente corolario.

.:Corolario 4.2 Sea P una matriz de permutación, entonces:


1. El detP = −1
2. Si tenemos k permutaciones en P , entonces detP = (−1)k donde k es el número de
intercambios de filas.

.:Ejemplo 4.9

Tomemos la matriz A;
 
1 2 9
A= 7 5 6 
9 8 1
Como vimos, el detA = 150, ahora intercambiemos la fila 3 por la fila 1 (f1 ⇄ f3 ):
 
9 8 1
B= 7 5 6 
1 2 9
el detB = −150
4. Determinantes 181

.:Teorema 4.5 (Propiedad 5)


Sea A una matriz cuadrada de orden n. Si dos filas de A son iguales, entonces el detA = 0

.:Ejemplo 4.10

Tomemos la matriz A;
 
7 5
A=
7 5
El detA = 7(5) − 7(5) = 0

.:Teorema 4.6 (Propiedad 6)


Sea A una matriz cuadrada de orden n. Si A tiene una fila que es múltiplo escalar de
otra, entonces el detA = 0

.:Ejemplo 4.11

Tomemos la matriz A;
 
7 5
A=
14 10
El detA = 7(10) − 14(5) = 0

.:Teorema 4.7 (Propiedad 7)


Sea A una matriz cuadrada de orden n. Si sumamos un múltiplo escalar de una fila a
otra, entonces el determinante de A no cambia

.:Corolario 4.3 Si E es una matriz elemental de orden n, donde se aplique la operación


elemental fi → fi + kfj , entonces detE = 1

.:Ejemplo 4.12

Tomemos la matriz A;
 
1 2 9
A= 7 5 6 
9 8 1
182 4.6. Determinante de matrices especiales

El detA = 150, ahora bien, realizaremos la operación elemental f3 → f3 + (−9)f1 , luego,


A estaría ahora definida de la siguiente manera:
 
1 2 9
B= 7 5 6 
0 −10 −80
Luego, detB = 150

4.6. Determinante de matrices especiales


El método de los cofactores no es el más óptimo para hallar el determinante de una
matriz; como vimos, es un método que por ser recursivo, hace demasiadas operaciones. Los
siguientes teoremas, muestran que algunas matrices, por su forma, permiten calcular en
forma más eficiente el determinante. Las demostraciones de dichos teoremas las podemos
encontrar en [19] y [11]

.:Teorema 4.8 Sea A de orden n × n, triangular inferior o superior, entonces el


determinante detA, es igual al producto de los elementos de la diagonal principal:

detA = a11 a22 a33··· ann

Del teorema anterior, podemos deducir el siguiente corolario:

.:Corolario 4.4 Sea D una matriz diagonal de orden n


 
d1

 d2 

D= .. 
 . 
dn
Entonces, el detD = d1 d2 · · · dn
.:Ejemplo 4.13 Tomemos las siguientes matrices:

 
(α + 1) 0 0 ··· 0
   0 (α + 2) 0 ··· 0 
3 0 0  
A= 4 1

0 , B =  0 0 (α + 3) ··· 0 
 α∈R
2 2 7
 .. .. .. .. .. 
 . . . . . 
0 0 0 · · · (α + n) n×n
4. Determinantes 183

Bien, en el caso de la matriz A, el cálculo del determinante es relativamente sencillo


gracias al Teorema 4.8, sólo es cuestión de multiplicar su diagonal:

detA = 3 × 1 × 7 = 21
Para el caso de la matriz B, aplicamos el Corolario del Teorema 4.8; sin embargo, este
resulta ser un poco más complejo, pues está determinado por la variable α:

detB = (α + 1)(α + 2)(α + 3) · · · (α + n)


como no conocemos el valor de α, dejamos expresado el determinante.

El siguiente ejemplo es tomado de [11]:

.:Ejemplo 4.14 Calcular

1 3 5 2
0 −1 3 4
|A| =
2 1 9 6
3 2 4 8

1 3 5 2
0 −1 3 4
|A| = Tratamos de convertirlo en el determinante de una matriz
2 1 9 6
3 2 4 8
triangular.

- Multiplicamos el renglón 1 por dos y lo restamos del tercero.


- Multiplicamos el renglón 1 por 3 y lo restamos del 4, entonces:

1 3 5 2
0 −1 3 4
|A| =
0 −5 − 1 2
0 −7 −11 2
- Multiplicamos el renglón 2 por -5 y lo sumamos al tercero.
- Multiplicamos el renglón 2 por -7 y lo sumamos al cuarto, entonces:

1 3 5 2
0 −1 3 4
|A| =
0 0 −16 −18
0 0 −32 −26
- Multiplicamos el renglón 3 por -2 y lo sumamos al cuarto y se obtiene:
184 4.6. Determinante de matrices especiales

1 3 5 2
0 −1 3 4
|A| =
0 0 −16 −18
0 0 0 10
Como la matriz que se obtiene es triangular superior, detA=producto de los elementos
en la diagonal principal

detA = 1. (−1) . (−16) .10 = 160


El siguiente Teorema aplica para cualquier matriz, sin embargo, puede ayudarnos a
calcular el determinante de algunas matrices que tengan muchos ceros, bien sea en una
fila o en una columna.

.:Teorema 4.9 Sea A de orden n × n:


 
a11 q12 ··· a1n
 a21
 a22 ··· a2n 

A= . .. .. ..
 ..

. . . 
an1 an2 · · · ann
Entonces, es posible hallar el determinante de A, expandiendo cualquier fila de A por
cofactores, es decir:

detA = ai1 Ai1 + ai2 Ai2 + · · · + ain Ain (4.4)


Xn
= aik Aik para i = 1, 2, 3, . . . n
k=1

o bien, es posible hallar el determinante de A expandiendo cualquier columna de A por


cofactores, es decir:

detA = a1j A1j + a2j A2j + · · · + anj Anj (4.5)


Xn
= akj Akj para j = 1, 2, 3, . . . n
k=1

.:Ejemplo 4.15 Hallar el determinante de la matriz


 
8 7 0 5 6
 3 2 0 4 7 
 
A=  8 5 0 7 9 

 0 0 0 0 4 
7 8 7 4 1
4. Determinantes 185

Bien, observemos que la cuarta fila de A tiene 4 ceros, así que usaremos esta fila para
calcular el determinante:

detA = a41 A41 + a42 A42 + a43 A43 + a44 A44 + a45 A45
X5
= a4k A4k para i = 1, 2, . . . , 5
k=1
   
7 0 5 6 8 0 5 6
 4+1 2 0 4 7 
 + (0) (−1)4+2 3
 0 4 7 
= (0) 
(−1)
+
5 0 7 9   8 0 7 9 
8 7 4 1 7 7 4 1
| {z } | {z }
=0 =0
   
8 7 5 6 8 7 0 6
 4+3 3 2 4 7   4+4 3 2 0 7 
+ (0) 
(−1)
 + (0) (−1) 
8 5 7 9   8 5 0 9 
7 8 4 1 7 8 7 1
| {z } | {z }
=0 =0
 
8 7 0 5
 4+5 3 2 0 4 
+(4) 
(−1)

8 5 0 7 
7 8 7 4

Bien, de los cinco determinantes de 4 × 4, sólo debemos calcular uno (el último de la
ecuación anterior); los demás cofactores no son necesarios, pues el determinante de la
menor correspondiente se e hace cero.
 
8 7 0 5 8 7 0 5
 4+5 3 2 0 4 
 = −4 3 2 0 4
(4) 
(−1) 8 5 0 7  8 5 0 7
7 8 7 4 7 8 7 4

Este implica calcular un determinante para una matriz de 4 × 4:


 
8 7 0 5
 3 2 0 4 
B=
 
8 5 0 7 
7 8 7 4

Llamaremos B a la nueva matriz, ahora aplicamos la misma técnica, expandimos el


determinante usando la tercera columna:
186 4.6. Determinante de matrices especiales

detB = b13 A13 + b23 A23 + b33 A33 + b43 A43


X4
= ak3 Ak3 para i = 1, 2, 3, 4
k=1
   
3 2 4 8 7 5
= (0) (−1)1+3 8 5 7  + (0) (−1)2+3 8 5 7 
7 8 4 7 8 4
| {z } | {z }
=0 =0
   
8 7 5 8 7 5
+ (0) (−1)3+3 3 2 4  +(7) (−1)4+3 3 2 4 
7 8 4 8 5 7
| {z }
=0

De nuevo, de los cuatro determinantes sólo es necesario calcular uno, pues los demás se
hacen cero:
  
8 7 5 8 7 5
(−4) (7) (−1)4+3 3 2 4  = 28 3 2 4
8 5 7 8 5 7

= 28(24)
= 672

4.6.1. Determinante de matrices elementales


Los siguientes teoremas exploran los determinantes de las matrices elementales:

.:Teorema 4.10 Sea E una matriz elemental definida por la operación elemental fi →
kfi , entonces, detE = k
.:Teorema 4.11 Sea E una matriz elemental definida por la operación elemental fi →
fi + kfj , entonces, detE = 1
.:Teorema 4.12 Sea E una matriz elemental definida por la operación elemental fi ⇆
fj , entonces, detE = −1
.:Ejemplo 4.16 Hallar el determinante de las siguientes matrices elementales
     
1 0 0 1 0 0 0 1 0
A =  0 −8 0  , B =  0 1 0 , C =  1 0 0 
0 0 1 −7 0 1 0 0 1
4. Determinantes 187

La matriz A es de la forma f2 → (−8)f2 , luego detA = −8.

La matriz B es de la forma f3 → f3 + (−7)f1 , luego detA = 1, de otro lado teniendo en


cuenta el Teorema 4.8, vemos que B es triangular inferior. Finalmente, la matriz C es de
la forma f1 ⇆ f2 , luego detC = −1

El siguiente teorema, muestra la relación existente entre el determinante y la solución de


los sistemas de ecuaciones lineales.

.:Teorema 4.13 Sea A una matriz de tamaño n × n, entonces A es invertible si y sólo


si detA 6= 0

.:Ejemplo 4.17 Tomemos la matriz


 
0.254 5.269 3.874
A =  4.985 6.397 5.002 
2.571 1.002 9.147

Su inversa es  
−0.2632043 0.2180053 −0.0077413
A−1 =  0.1610556 0.0375695 −0.0887561 
0.0563377 −0.0653915 0.1212240
Y si calculamos detA = −203.2693, luego detA 6= 0

El teorema anterior, podríamos interpretarlo como una manera muy “costosa” de saber a
priori, si un sistema de la forma Ax = b, tiene solución única o si tiene múltiples soluciones.
Más adelante, veremos que el determinante, puede inclusive, ayudar en el cálculo de la
inversa de la matriz.

Los siguientes teoremas, nos ofrece una luz sobre como podemos calcular el determinante
de una manera más eficiente:

.:Teorema 4.14 Sea A una matriz cuadrada de orden n, si A es invertible entonces, su


determinante es igual al producto de sus pivotes

detA = ±d1 d2 · · · dn

Ahora bien, el siguiente teorema es fundamental en el cálculo de los determinantes:


188 4.6. Determinante de matrices especiales

.:Teorema 4.15 Sean A y B matrices de orden n, entonces


detAB = detA · detB
Es decir: el determinante de un producto es el producto de los determinantes.
.:Ejemplo 4.18 Comprobar que detAB = detAdetB dadas la matrices
   
5 2 1 5 8 7
A= 4 5 8  y B= 2 0 1 
3 0 2 −9 8 5
Veamos que:

20 48 42
det(AB) = −42 96 73 = −5360
3 40 31
Ahora bien, detA = 67 y detB = −80, luego detAdetB = −5360.

La transpuesta de una matriz también está relacionada con el determinante:

.:Teorema 4.16 Sea A un matriz cuadrada de orden n, entonces


detA = detAt
.:Ejemplo 4.19 Calcular el detA y detAt si
 
5 2 1
A= 4 5 8 
3 0 2
Calculamos At
 
5 4 3
At =  2 5 0 
1 8 2
Luego, detA = 67 y detAt = 67
.:Ejercicios 4.2
1. Suponiendo que:
a11 a12 a13
a21 a22 a23 = 8
a31 a32 a33
calcule los siguientes determinantes:
4. Determinantes 189

a21 a22 a23 −3a11 −3a12 −3a13


a) a31 a32 a33 d) 2a21 2a22 2a23
a11 a12 a13 5a31 5a32 5a33
a11 a13 a12 a11 2a13 a12
b) a21 a23 a22 e) a21 2a23 a22
a31 a33 a32 a31 2a33 a32
a11 a12 a13 a12 a11 2a12 − a11
c) 2a21 2a22 2a23 f) a22 a21 2a22 − a21
a31 a32 a33 a32 a31 2a32 − a31

2. Muestre que el valor del determinante

23 54 96
21 21 36
−45 87 63

es 65583, utilizando las distintas propiedades de éste.


3. Demuestre que
1 + x1 x2 x3 ··· xn
x1 1 + x2 x3 ··· xn
x1 x2 1 + x3 ··· xn = 1 + x1 + x2 + · · · + xn
.. .. .. ..
. . . .
x1 x2 x3 · · · 1 + xn

4.7. La Inversa, el Determinante y la Adjunta de una


matriz
El siguiente teorema, muestra la relación existente entre la inversa de una matriz y su
determinante.

.:Teorema 4.17 Sea A una matriz cuadrada de orden n, Si A es invertible, entonces


detA 6= 0 y además
1
detA−1 =
detA
.:Ejemplo 4.20 Tomamos
 
2 8 9
A= 4 1 1 
6 9 8
190 4.7. La Inversa, el Determinante y la Adjunta de una matriz

Su inversa  
−0.0166667 0.2833333 −0.0166667
A−1 =  −0.4333333 −0.6333333 0.5666667 
0.5 0.5 −0.5
Ahora, detA = 60 y el detA−1 = 0.0166666, se puede ver que
1
0.0166666 =
60
Ahora, veremos otro concepto, del cual es posible relacionar con el determinante y la
inversa de una matriz, se trata de matriz Adjunta.

.:Definición 4.7 (Matriz Adjunta)


Sea A una matriz cuadrada de orden n. Tomemos la matriz B cuadrada de orden n cuyas
componentes son los cofactores de A, de tal forma que coincidan con los componentes de
la matriz, tal que aij = Aij
 
A11 A12 · · · A1n
 A21 A22 · · · A2n 
 
B= . .. .. ..  ∀i, j con i = 1, 2, . . . , n y j = 1, 2, . . . , n
 .. . . . 
An1 An2 · · · Ann

La adjunta de A denotada como adjA se define como la traspuesta de la matriz de


cofactores
 
A11 A21 · · · An1
 A12 A22 · · · An2 
adjA = B t =  .
 
.. .. ..
 ..

. . . 
A1n A2n · · · Ann

Ahora bien, como vimos un cofactor conlleva el calculo de un determinante más pequeño;
en el caso de una matriz de 3 × 3 tendríamos que calcular nueve determinantes de 2 × 2,
entonces calcular la adjunta puede resultar un proceso muy largo, debido a la cantidad
de cofactores implícitos en la matriz original. El siguiente ejemplo es tomado de [11].

.:Ejemplo 4.21 Sea A definida de la siguiente forma:


 
2 4 −6
A =  −3 5 1 
0 −7 3
Encuentre la AdjA
4. Determinantes 191

Para hallar la adjunta primero debemos hallar los cofactores de A, es decir, los
componentes de la matriz B de la definición 4.7.

5 1 2 4
A11 = (−1)2 = 22 A23 = (−1)5 = 14
−7 3 0 −7
−3 1
A12 = (−1)3 =9
0 3 4 −6
A31 = (−1)4 = 34
5 1
4 −3 5
A13 = (−1) = 21
0 −7
2 −6
−3 5 A32 = (−1)5 = 16
A21 = (−1) 3
= 30 −3 1
0 −7
2 −6 2 4
A22 = (−1)4 =6 A33 = (−1)6 = 22
0 3 −3 5

Luego la matriz B sería


 
22 9 21
B =  30 6 14 
34 16 22
Entonces
 
22 30 34
AdjA = B t =  9 6 16 
21 14 22

El siguiente teorema, muestra la relación directa entre la inversa de una matriz, su


determinante y su adjunta.

.:Teorema 4.18 Sea A una matriz cuadrada de orden n, si A es invertible, entonces:


 
−1 1
A = AdjA
detA

Según [20], calcular la inversa por éste método es muy complejo, se requiere calcular n2
determinantes de n − 1 y un determinante de orden n. La pregunta es:

¿Cómo calcular el determinante de una matriz en forma eficiente?


192 4.7. La Inversa, el Determinante y la Adjunta de una matriz

A lo largo de este capítulo, hemos visto que la mayoría de los métodos expuestos son
muy costosos computacionalmente. Para contestar este interrogante, debemos avanzar un
poco más en la teoría; por ahora veamos un ejemplo del Teorema 4.18.

.:Ejemplo 4.22 De nuevo [11], propone hallar la inversa de A usando la AdjA:


 
2 4 −6
A =  −3 5 1 
0 −7 3
 
22 30 34
Sabemos que detA = −46 y AdjA =  9 6 16 , aplicando el teorema 4.18 tenemos
21 14 22
que:
 
22 30 34
−1 1 
A = − 9 6 16 
46
21 14 22
 11 15 17

− 23 − 23 − 23
 
 
=  −9 −3 8 
− 23
 46 23 
 
21 7 11
− 46 − 23 − 23
Ahora bien, este mismo resultado lo podríamos usar para calcular la adjunta por medio
de la matriz inversa. Recordemos que el Teorema 4.18 dice que:
 
−1 1
A = AdjA
detA
Multiplicaremos por detA a ambos lados de la ecuación:
 
−1 1
(detA) A = (detA) AdjA
detA
Luego:

AdjA = (detA) A−1


.:Ejemplo 4.23 Tomemos la matriz
 
2 5 −9
A= 4 9 6 
0 2 1
Hallemos la adjunta con la ayuda del determinante y la inversa:
4. Determinantes 193

Bien, el detA = −98, la inversa es:


 
0.0306122 0.2346939 −1.1326531
A−1 =  0.0408163 −0.0204082 0.4897959 
−0.0816327 0.0408163 0.0204082
Ahora remplazamos y tenemos:

AdjA = (detA) A−1


 
0.0306122 0.2346939 −1.1326531
(−98)  0.0408163 −0.0204082 0.4897959 
−0.0816327 0.0408163 0.0204082
 
−3 −23 111
=  −4 2 −48 
8 −4 −2

Bien, pero sigue siendo un método muy costoso, pues es necesario hallar el determinante y
la inversa de A, y como hemos visto, son procesos muy complejos. El siguiente algoritmo
muestra la implementación de la adjunta por medio de la inversa.

.:Algoritmo 4.3

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 2 , 4 , −6] ,
4 [ −3 , 5 , 1 ] ,
5 [ 0 , − 7 , 3 ] ] , dtype=f l o a t )
6
7 Ainv=np . l i n a l g . i n v (A)
8 d e t=np . l i n a l g . d e t (A)
9 Adjunta=d e t ∗ Ainv
10
11 p r i n t "La m a t r i z A e s : \ n" , A
12 print " "
13 p r i n t "La Adj (A) e s : \ n" , Adjunta

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A e s :
3 [ [ 2. 4 . −6.]
194 4.8. La factorización de matrices en el cálculo del determinante

4 [ −3. 5. 1.]
5 [ 0 . −7. 3.]]
6
7 La Adj (A) es :
8 [ [ 22. 30. 34.]
9 [ 9. 6. 16.]
10 [ 21. 14. 22.]]
11 >>>

En el Algoritmo 4.3, simplemente calculamos la inversa de la matriz A (línea 7),


posteriormente, el determinante (línea 8) y luego, en la variable Adjunta, almacenamos el
producto del escalar det por la matriz inversa Ainv. Finalmente, imprimimos la matriz y
su adjunta.

4.8. La factorización de matrices en el cálculo del


determinante
El cálculo del determinante es muy ineficiente por el método de los cofactores. Para
optimizar el proceso de hallar el determinante de una matriz, haremos uso de los siguientes
teoremas:

El Teorema 4.15, el cual, nos dice que si A = BC, entonces detA = detBdetC.

El Teorema 2.7, éste nos dice que si la matriz A es invertible, es posible hallar
su factorización A = LU , donde la matriz L es triangular inferior con unos en la
diagonal y la matriz U es triangular superior.

El Teorema 4.8, el cual, nos dice que el determinante de una matriz triangular
superior o inferior es el producto de su diagonal.

Con estos tres Teoremas, podemos deducir que si A es una matriz de tamaño n × n
invertible, entonces por el Teorema 2.7, podemos escribir A como:

A = LU
Ahora aplicamos el Teorema 4.15:

detA = (detL) (detU )


Ahora, por el Teorema 4.8, L es una matriz triangular inferior con unos en la diagonal,
así que su determinante es 1:

detA = (1) (detU )


4. Determinantes 195

Luego

detA = detU
De nuevo, aplicado el Teorema 4.8, el calculo del determinante de la matriz U es muy
simple, pues, sólo basta multiplicar los elementos de la diagonal de U .

.:Ejemplo 4.24 Tomemos la matriz


 
8 −4 5
A= 9 1 9 
4 2 −1
hallemos el detA usando su factorización A = LU

Lo primero es hallar L y U , en este caso son:


 
8.000000 −4.000000 5.000000
U =  0.000000 5.500000 3.375000 
0.000000 0.000000 −5.954545
y  
1.000000 0.000000 0.000000
L =  1.125000 1.000000 0.000000 
0.500000 0.727273 1.000000
Ahora, śolo basta hallar el detU , que es igual al detA, pero el detU es la multiplicación
de los elementos de la diagonal de U :

detA = detU

= (8.0) (5.5) (−5.954545454)

= −262

Ahora bien, se podría pensar: es igual de costoso el método de los cofactores que el método
de la factorización de matrices. Pero la realidad es que el método de los cofactores es de de
orden n! (donde n es el tamaño de la matriz), mientras que el método de la factorización
de matrices es de orden n3 . Éste es mejor método, hallar la factorización A = LU y
simplemente multiplicar los elementos de la diagonal de U .

El siguiente Algoritmo, calcula el determinante de una matriz, usando la descomposición


LU .
196 4.8. La factorización de matrices en el cálculo del determinante

.:Algoritmo 4.4

1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3
4 A=np . round (1 0 ∗ np . random . rand ( 4 , 4 ) )
5
6 n=np . shape (A) [ 0 ]
7
8 U=copy . copy (A)
9
10 f o r i i n ra n g e ( n−1) :
11 f o r j i n ra n g e ( i +1 , n ) :
12 TEMP=−1∗U[ j , i ] /U[ i , i ]
13 U[ j , : ] =U[ j , : ] + TEMP∗U[ i , : ]
14
15
16 d e t2 =1.0
17 f o r i i n ra n g e ( np . shape (U) [ 0 ] ) :
18 d e t2=d e t2 ∗U[ i , i ]
19
20
21 d e t1=np . l i n a l g . d e t (A)
22
23 print "La m a t r i z A e s : \ n" , A
24 print " "
25 print "La m a t r i z U: \ n" , U
26 print " "
27 print " d e t e r m i n a n t e r e a l " , d e t1
28 print " "
29 print " d e t e r m i n a n t e con U" , d e t2

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A e s :
3 [[ 8. 7. 8. 10.]
4 [ 7. 0. 8. 8.]
5 [ 7. 9. 0. 9.]
6 [ 2. 0. 6. 8.]]
7
8 La m a t r i z U:
9 [[ 8. 7. 8. 10. ]
10 [ 0. −6.125 1 . −0.75 ]
11 [ 0. 0. −6.53061224 −0.10204082]
12 [ 0. 0. 0. 5.65625 ]]
13
14 determinante r e a l 1810.0
15
4. Determinantes 197

16 d e t e r m i n a n t e con LU 1 8 1 0 . 0
17 >>>

El Algoritmo 4.4, genera una matriz aleatoria con la instrucción


A=[Link](10*[Link](4,4)) (línea 4), para este ejemplo se generó la matriz
A:
 
8 7 8 10
 7 0 8 8 
A=  7 9 0 9 

2 0 6 8
Como la instrucción [Link](4,4) genera una matriz de componentes aleatorias
con valores entre cero y uno, multiplicamos por 10, para obtener valores más grandes,
luego redondeamos con la instrucción [Link]().

Posteriormente, capturamos el tamaño de la matriz, que este caso es 4 (línea 6). En la


matriz U , copiamos la matriz original A (línea 8), y luego procedemos a calcular la matriz
U , con el mismo proceso que usamos en el Algoritmo 2.4 (líneas 10 a 13). Sólo debemos
calcular U , no es necesario calcular la matriz L.
 
8.000000 7.000000 8.000000 10.000000
 0.000000 −6.125000 1.000000 −0.750000 
U = 
 0.000000 0.000000 −6.530612 −0.102041 
0.000000 0.000000 0.000000 5.656250
Entre las líneas 16 a 18, inicializamos la variable det2=1.0, es en esta variable que
guardaremos el determinante de la matriz U ; el ciclo for que encontramos a continuación,
recorre la diagonal de la matriz U para almacenar la multiplicación de los elementos de la
diagonal. Una vez terminado este ciclo, el determinante de la matriz queda almacenado en
dicha variable. Finalmente, imprimimos la matriz A, la matriz U y los dos determinantes:
det1 con el determinante calculado con la función [Link](A) y det2 calculado con
la multiplicación de los elementos de la diagonal de U .

Sin embargo, el Algoritmo 4.4, no tiene en cuenta si el pivote usado el ciclo for, en
la instrucción TEMP=-1*U[j,i]/U[i,i] se hace cero; esto causaría un error que Python
manifiesta de la siguiente forma:

RuntimeWarning: divide by zero encountered in double_scalars TEMP=-1*U[j,i]/U[i,i]

Este error, es posible superarlo, si tenemos en cuenta la permutación de filas en el momento


en que uno de los pivotes se haga cero.
198 4.9. Regla de Cramer

4.9. Regla de Cramer


De nuevo, nuestro reto es encontrar la solución a un sistema de la forma Ax = b, donde
A es una matriz de tamaño n × n e invertible. El siguiente teorema usa el determinante
para obtener la solución a un sistema de ecuaciones lineales:

.:Teorema 4.19 Sea A una matriz cuadrada de orden n, si A es invertible y es la matriz


de cofactores de un sistema cuya representación matricial es Ax = b, entonces la j−ésima
componente del vector b, está definida por:

detBj
xj =
detA

Donde Bj es la matriz que se obtiene tomando A y sustituyendo la j−ésima columna por


el vector b.

Si tenemos en cuenta que el cálculo del determinante es muy costoso, la regla de Cramer,
sólo podría utilizarse para sistemas de ecuaciones lineales pequeños.

.:Ejemplo 4.25 Usando la regla de Cramer, encuentre x1 y x4 del siguiente sistema de


ecuaciones lineales:

x1 − 2x2 + 3x3 + x4 = 1
x1 + 9x2 − x3 − 4x4 = 9
2x1 + x2 − 7x3 + 9x4 = 2
x1 − x2 + x3 − x4 = −1

La matriz A y el vector b:
   
1 −2 3 1 1
 1 9 −1 −4   9 
A=  y b= 
 2 1 −7 9   2 
1 −1 1 −1 −1

El detA = 357, Ahora bien, queremos calcular el valor de x1 entonces reemplazamos la fila
1 por el vector b y obtenemos el determinante de esta nueva matriz (B1 ), luego dividimos
por el detA.
4. Determinantes 199

1 −2 3 1
9 9 −1 −4
2 1 −7 9
detB1 −1 −1 1 −1 79
x1 = = = = 0.2212885
detA 1 −2 3 1 357
1 9 −1 −4
2 1 −7 9
1 −1 1 −1
El mismo procedimiento lo aplicamos para x4

1 −2 3 1
1 9 −1 9
2 1 −7 2
detB4 1 −1 1 −1 270
x4 = = = = 0.7563025
detA 1 −2 3 1 357
1 9 −1 −4
2 1 −7 9
1 −1 1 −1
Como vemos, el método es muy simple. La única ventaja que tiene este método, es que
sólo calcula la variable que necesitamos, no calcula las demás. Sin embargo, hay que pagar
un precio muy alto por esto, se deben calcular dos determinantes, el de la matriz original
A y el de la matriz Bj ; esto hace que método sea poco eficiente.

.:Algoritmo 4.5

1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3
4 A=np . round (1 0 ∗ np . random . rand ( 4 , 4 ) )
5 b=np . round (1 0 ∗ np . random . rand ( 4 , 1 ) )
6
7 detA=np . l i n a l g . d e t (A)
8
9 B1=copy . copy (A)
10
11 f o r i i n ra n g e ( np . shape (A) [ 0 ] ) :
12 B1 [ i , 0 ] = b [ i ]
13
14 detB1=np . l i n a l g . d e t (B1 )
15
16 x=np . l i n a l g . s o l v e (A, b )
17
18 x1=detB1 / detA
19
20 p r i n t "La m a t r i z A e s : \ n" , A
200 4.9. Regla de Cramer

21 print " "


22
23 p r i n t " El v e c t o r b : \ n" , b
24 print " "
25
26 p r i n t "La m a t r i z B1 e s : \ n" , B1
27 print " "
28
29 p r i n t " El d e t e r m i n a n t e de A : \ n" , detA
30 print " "
31
32 p r i n t " El d e t e r m i n a n t e de B1 : \ n" , detB1
33 print " "
34
35 p r i n t " El v e c t o r s o l u c i o n x : \ n" , x
36 print " "
37
38 p r i n t " x1 c a l c u l a d o con Cramer " , x1
39 print " "

El programa anterior produce la siguiente salida:

1 >>>
2 La m a t r i z A e s :
3 [ [ 6. 6. 7. 9.]
4 [ 9. 9. 7. 3.]
5 [ 1. 5. 0. 1.]
6 [ 8. 2. 4. 3.]]
7
8 El vector b :
9 [[ 2.]
10 [ 1.]
11 [ 2.]
12 [ 3.]]
13
14 La m a t r i z B1 e s :
15 [[ 2. 6. 7. 9.]
16 [ 1. 9. 7. 3.]
17 [ 2. 5. 0. 1.]
18 [ 3. 2. 4. 3.]]
19
20 El d e t e r m i n a n t e de A :
21 966.0
22
23 El d e t e r m i n a n t e de B1 :
24 704.0
25
26 El v e c t o r s o l u c i o n x :
27 [ [ 0.72877847]
4. Determinantes 201

28 [ 0.13457557]
29 [ −1.22360248]
30 [ 0.59834369]]
31
32 x1 c a l c u l a d o con Cramer 0 . 7 2 8 7 7 8 4 6 7 9 0 9
33 >>>

El Algoritmo 4.5, inicia generando la matriz A y el vector b en forma aleatoria (líneas 4


y 5), en nuestro caso son las matrices:
   
6 6 7 9 2
 9 9 7 3   1 
A=  1 5 0 1 
 y b=  2 

8 2 4 3 3
Luego, calculamos el detA = 966 (línea 7) en la variable detA, y creamos la matriz B1,
la cual, inicialmente es igual a la matriz A (línea 9). Posteriormente, se una un ciclo for
para cambiar la primera fila de B1 por el vector b, en este ejemplo vamos a encontrar la
variable x1 (líneas 11 y 12).

Ahora bien, se calcula el determinante de B1 y se almacena en la variable detB1 (línea


14). En este punto ya podemos calcular el valor de la variable x1 , sólo basta dividir el
determinante de B1 por el determinante de A: x1=detB1/detA. Al final, calculamos la
solución del sistema con el comando solve y lo almacenamos en la variable x; imprimimos
las matrices A, b, B1, los determinantes, el vector x con la solución total del sistema y la
variable x1 que fue calculada usando la regla de Cramer.

.:Ejercicios 4.3

1. Resolver los siguientes determinantes:

7 8 5 0 0 2 5 4
7 8 5 0 7 8 9 6
a) c)
3 6 98 0 5 21 5 4
42 2 5 8 1 2 5 1

5 4 1 2 5
5 −8 7 4 87 4 5 8 9
0 0 −5 5 d) 6 5 8 74 5
b)
−5 1 4 7 2 1 2 0 2
8 5 4 5 2 1 2 0 2.00001
202 4.9. Regla de Cramer

a 0 0 0 0 a 0 0 0 0 0
0 0 b 0 0 0 0 b 0 0 0
e) 0 0 0 0 c 0 0 0 0 c 0
f)
0 0 0 d 0 0 0 e 0 0 0
0 e 0 0 0 0 0 0 0 0 f
0 d 0 0 0 0

2. Solucionar los siguientes sistemas, usando la regla de Cramer:

x + 10x2 + x3 = 7
a) x1 − x2 + x3 = 5
x1 + 7x2 − 45x3 = 0
2x1 + x2 + x3 = −9
b) x1 + 11x2 + 2x3 = 0
−x1 − 54x2 − 28x3 = 8
x1 − 11x2 − 54x3 = 0
x1 + x2 − 11x4 = 0
c)
x1 + 3x3 − 2x4 = 10
x1 + x3 + 9x4 = 87
0.214x1 − 0.2147x2 + 4.2158x3 + 0.0214x4 = 0.0012
0.0147x1 − 0.1824x3 + 0.2147x4 = 0.0147
d)
0.09874x1 + 0.1249x2 + 0.2585x4 = 0.0147
0.897x1 + 0.00015x2 − x3 − 0.214x4 = 0.0214

3. Dada las siguientes matrices cuadradas, encuentre la adjunta por el método de los
cofactores, luego encuentre la inversa usando la adjunta:
   
6 5 8 4 −5 8 7 4
 1 2 5 −4   1 −2 5 6 
a) A =  1 1 1
 c) C =  
5   9 63 2 1 
1 2 5 5 4 7 96 −5
   
5 4 1 4 7 7 8 5 4 1
 0 1 2 5 4   2 5 4 7 8 
   
b) B =  7 8 5 2 2 
 d ) D =  9 −6 5 1 10 
 
 1 2 5 9 6   2 0 2 5 5 
3 21 58 8 5 8 9 5 5 4

4. Dada las siguientes matrices cuadradas, encuentre la adjunta usando el determinante


y la inversa.
4. Determinantes 203

   
0 2 1 4 6 5 2 1
 5 8 9 6   4 7 8 5 
a) A = 
  c) C = 
 
57 5 5 4  4 7 4 1 
2 1 0 14 0 0 1 0
   
8 5 4 7 4 8 4 5 4 0
 1 1 1 5 8   1 2 5 4 8 
   
b) B = 
 80 1 2 0 1 
 d) D = 
 9 6 9 8 5 

 21 0 1 0 1   2 1 4 7 8 
0 1 1 1 10 5 4 1 2 5

5. Sea A una matriz cuadrada de orden :n

a) Demuestre que si A es antisimétrica y n es impar entonces A no es invertible


b) Pruebe que si A es invertible, det (adjA) = (detA)n−1
c) Demuestre que si A no es invertible entonces A (adjA) = 0
d ) Si A, B son matrices invertibles de orden n, muestre que: adj (AB) =
(adjB) (adjA)

6. Implemente un programa en Python con las siguientes características:


1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 2, 5, 9, 7]
4 [ 8, 1, 7, −4]
5 [ 2 , −1, 2, −1]
6 [ −10 , 4 , 2, − 1 ] ] , dtype=f l o a t )
7
8
9
10 d e f D e te rm i n a n te (A) :
11 .
12 .
13 .
14 return d

Esta función, toma como parámetro la matriz A de tamaño n × n, con esta


información debe devolver el determinante de la matriz; el algoritmo debe usar
el hacho de que A = LU y que el detA = detU , por esta razón, no se puede usar la
función [Link](A). Si un pivote es igual a cero, se debe hacer una permutación
de filas, lo que implicaría un cambio de signo en el determinante final. La función
debe servir para cualquier matriz cuadrada, sin importar el tamaño. (Recuerde el
Algoritmo 4.4)
7. Implemente un programa en Python con las siguientes características:
204 4.9. Regla de Cramer

1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 2, 5, 9, 7]
4 [ 8, 1, 7, −4]
5 [ 2 , −1, 2, −1]
6 [ −10 , 4 , 2, − 1 ] ] , dtype=f l o a t )
7
8
9
10 d e f M e n o ri j (A, i , j ) :
11 .
12 .
13 .
14 r e t u r n Mij

Esta función, toma como parámetros la matriz A de tamaño n × n, el valor de i


y el valor de j; con esta información debe devolver la matriz Menor ij, es decir,
la matriz resultante de eliminar la fila i y la columna j de A. En este caso, se da
como ejemplo la matriz A de la línea 3, pero debe funcionar para cualquier matriz
cuadrada, sin importar el tamaño.

8. Implemente un programa en Python con las siguientes características:


1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 2, 5, 9, 7]
4 [ 8, 1, 7, −4]
5 [ 2 , −1, 2, −1]
6 [ −10 , 4 , 2, − 1 ] ] , dtype=f l o a t )
7
8
9
10 d e f C o f a c t o r i j (A, i , j ) :
11 .
12 .
13 .
14 return Cij

Esta función, toma como parámetros la matriz A de tamaño n × n, el valor de


i y el valor de j, con esta información debe devolver el cofactor ij, es decir,
Aij = (−1)i+j |Mij |, donde Mij es la matriz Menor ij. La función debe servir
para cualquier matriz cuadrada, sin importar el tamaño.
Nota: Tenga en cuenta lo siguiente:

Puede hacer uso de la función Menorij(A,i,j) del punto anterior.


4. Determinantes 205

Haga uso de la descomposición A = LU , para calcular el determinante de las


matrices menores; no use la función [Link](A).
Recuerde que el cofactor es un número real, no es una matriz.

9. Implemente un programa en Python con las siguientes características:


1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 2, 5, 9, 7]
4 [ 8, 1, 7, −4]
5 [ 2 , −1, 2, −1]
6 [ −10 , 4 , 2, − 1 ] ] , dtype=f l o a t )
7
8
9
10 d e f MCofactores (A) :
11 .
12 .
13 .
14 re tu rn Acofac

Esta función, toma como parámetros la matriz A de tamaño n × n, con esta


información debe devolver la matriz de cofactores. La función debe servir para
cualquier matriz cuadrada, sin importar el tamaño.

10. Implemente un programa en Python con las siguientes características:


1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 2, 5, 9, 7]
4 [ 8, 1, 7, −4]
5 [ 2 , −1, 2, −1]
6 [ −10 , 4 , 2, − 1 ] ] , dtype=f l o a t )
7
8
9
10 d e f DeterminanteA (A) :
11 .
12 .
13 .
14 r e t u r n ( det , A c o f a c )

Esta función, toma como parámetros la matriz A de tamaño n × n, con esta


información debe devolver una tupla con el determinante de la matriz A usando los
cofactores y la matriz de cofactores. La función debe servir para cualquier matriz
cuadrada, sin importar el tamaño.
206 4.9. Regla de Cramer

11. Implemente un programa en Python con las siguientes características:


1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 2, 5, 9, 7]
4 [ 8, 1, 7, −4]
5 [ 2 , −1, 2, −1]
6 [ −10 , 4 , 2, − 1 ] ] , dtype=f l o a t )
7
8
9
10 d e f MAdjunta (A) :
11 .
12 .
13 .
14 r e t u r n Adjunta

Esta función, toma como parámetro la matriz A de tamaño n × n, y debe devolver


la matriz adjunta A, usando los cofactores. La función debe servir para cualquier
matriz cuadrada, sin importar el tamaño.
12. Implemente un programa en Python con las siguientes características:
1 i m p o rt numpy a s np
2
3 A = np . a r r a y ( [ [ 2, 5, 9, 7]
4 [ 8, 1, 7, −4]
5 [ 2 , −1, 2, −1]
6 [ −10 , 4 , 2, − 1 ] ] , dtype=f l o a t )
7
8
9
10 d e f MInversa (A) :
11 .
12 .
13 .
14 return Invs

Esta función, toma como parámetro la matriz A de tamaño n×n, y debe devolver la
matriz inversa de A, usando la matriz adjunta. La función debe servir para cualquier
matriz cuadrada, sin importar el tamaño. Recuerde que el determinante no se puede
calcular con la función [Link](A), se debe usar la descomposición A = LU
para calcular el determinanate.
13. Implemente un programa en Python con las siguientes características:
1 i m p o rt numpy a s np
2
4. Determinantes 207

3 A = np . a r r a y ( [ [ 2, 5, 9, 7]
4 [ 8, 1, 7, −4]
5 [ 2 , −1, 2, −1]
6 [ −10 , 4 , 2, − 1 ] ] , dtype=f l o a t )
7
8 b=np . a r r a y ( [ [ 1 , 7 , 8, − 4 ] ] , dtype=f l o a t ) . T
9
10 d e f SolveSistemaAxbCramer (A, b ) :
11 .
12 .
13 .
14 return x

Esta función, toma como parámetros la matriz A de tamaño n × n, y un vector


columna b de tamaño n × 1; con esta información, la función debe devolver el vector
x que es la solución al sistema Ax = b usando la regla de Cramer. La función debe
servir para cualquier matriz cuadrada, y cualquier vector b, sin importar el tamaño.
Recuerde que el determinante no se puede calcular con la función [Link](A),
se debe usar la descomposición A = LU para calcular el determinante.
208 4.9. Regla de Cramer
“Si existen hombres que excluyen a cualquiera de las criaturas
de Dios del amparo de la compasión y la misericordia, existirán
hombres que tratarán a sus hermanos de la misma manera”
San Francisco de Asís

Vectores y Espacios vectoriales


5
5.1. Nociones básicas de vectores en R2
En los capítulos anteriores, hemos definido el concepto de vector. Pero esta definición,
es estrictamente matemática y está muy unida al concepto de matriz. Sin embargo, los
vectores pueden interpretarse según sea el área de estudio, y pueden representar otros
conceptos, que son útiles para otras ciencias como la Física, la Geometría diferencial, etc.

Antes que nada, debemos tener en cuenta que una magnitud es escalar cuando representa
un valor numérico simple; por ejemplo, la altura de una persona es una magnitud escalar;
la distancia entre dos puntos es una magnitud escalar. Ahora bien, existen magnitudes
que no son susceptibles de representarse con un número; por ejemplo, si te pones una cita
con una persona, debes definir el lugar y la hora donde se hará el encuentro; este sería un
ejemplo muy simple de una magnitud vectorial. En Matemáticas y Física, encontramos
otros ejemplos de magnitudes vectoriales; por ejemplo, la velocidad es una magnitud
vectorial, pues debemos conocer tanto la rapidez como la dirección en que se viaja.

Un vector en matemáticas, es simplemente un arreglo de números (bien sea en filas


o columnas), que hace parte de un conjunto al que llamaremos espacio vectorial,
geométricamente se representan como una semirecta o una flecha. En Física, un vector
es un objeto geométrico que se utiliza para representar magnitudes que conlleven dos o
más componentes, como por ejemplo la velocidad; por ejemplo, si alguien te dice “ese
automóvil va a 80k/h”, esa información no es suficiente, es necesario saber hacía donde

209
210 5.1. Nociones básicas de vectores en R2

va el automóvil. La fuerza es otro ejemplo de una magnitud vectorial; si te piden mover


un objeto, debes tener en cuenta dos cosas, la fuerza que necesitas aplicar al objeto para
moverlo y hacia donde debes moverlo.

El uso de la palabra vector, ha evolucionado hasta el punto, en que hoy en día se utiliza
para representar objetos o magnitudes que aparentemente, no están relacionadas con la
Física o las Matemáticas, por ejemplo en Epidemiología, se usa la palabra vector para
representa una especie animal que es propensa a transmitir un agente infeccioso, como
los mosquitos o los ratones. En navegación y aeronáutica es común escuchar “El vector
de aproximación” que en realidad es un conjunto de maniobras y ajustes de la nave
(dirección, sustentación y estabilidad, etc) previas a la llegada a cierto punto o usadas
para aterrizar. En Genética, también se usa el concepto, el vector genético es una porción
de la cadena de ADN que transmite algún tipo de información genética.

Las magnitudes escalares, se representan en la recta real, por ejemplo, si hablamos de la


altura de una persona que mide 1.80mts, esto es posible representarlo en la recta real:

1.80mts

500kl

Cuando hablamos de magnitudes escalares, estos se obtendrán del conjunto R. Para las
magnitudes vectoriales de dos componentes usaremos el plano representado como R2 . En
el espacio el conjunto se llamará R3 y para dimensiones más grandes hablaremos de Rn .

Para representar los vectores, usaremos el concepto de segmento dirigido:

.:Definición 5.1 (Segmento dirigido)


En Geometría un segmento dirigido en un plano, es segmento de recta que tiene
−−→
punto inicial P y punto final Q y que se denota como P Q.

Observemos que P es el punto inicial y Q es el punto final, lo cual, denota la dirección


partiendo del punto P y terminando en el punto Q. Esto implica que el segmento dirigido
−−→ −−→
P Q es diferente al segmento dirigido QP .
−−→ −−→
En la Figura 5.1, apreciamos que ambos segmentos P Q y QP , tienen la misma longitud,
pero direcciones opuestas. Con base en el concepto de segmento dirigido veremos el
5. Vectores y Espacios vectoriales 211

b Q b Q

−−→ −−→
PQ QP
b b

P P

−−→ −−→
Figura 5.1: Segmentos dirigidos P Q y QP .

concepto de vector:

.:Definición 5.2 (Definición de vector)


Un vector en el plano xy (R2 ), es un segmento de recta dirigido, que tiene un
punto P como punto inicial y un punto Q como punto final.

Ahora bien, matemáticamente podemos representar un vector en el plano como una tupla:

.:Definición 5.3 (Definición de vector)


Un vector en el plano xy (R2 ), es un par ordenado de números reales (a, b). donde
a y b se denominan elementos o componentes del vector.

las dos definiciones suenan un poco distintas, pero en realidad, representan un mismo
concepto. La representación matemática en forma de tupla sólo tiene en cuenta el punto
final del vector, el punto inicial se toma el origen del sistema, por ejemplo: Tomemos el
−−→
vector P Q con P (1, 3) y Q(5, 6) veamos la figura 5.2.
−−→
Vemos en la sub figura (a) de la figura 5.2, el vector P Q y en la sub figura (b) el vector
(4, 3); ambos vectores son iguales, el lector puede apreciar que ambos tienen la misma
longitud, en este caso 5 y ambos tienen el mismo ángulo de elevación con respecto al eje
horizontal, que en este caso es de 36.87o o 0.6435011 radianes.

En este texto, usaremos la notación de tupla para representar un vector. En algunas


ocasiones, usaremos la representación geométrica, es decir, usando el punto inicial y el
punto final.
212 5.1. Nociones básicas de vectores en R2

Q
6 6

5 5

4 4
(4, 3)
3 3
P
2 2

1 1

0 0
0 1 2 3 4 5 6 0 1 2 3 4 5 6

(a) (b)

−−→
Figura 5.2: Los vectores P Q y (4, 3)

.:Definición 5.4 (Magnitud o norma de un vector)


Dado un vector v con componentes (a, b). La magnitud o norma de v es la distancia del
segmento dirigido que lo representa, dicha distancia se calcula de la siguiente forma:
p
|v| = a2 + b2
La notación |v|, denota la distancia entre el origen del sistema (0, 0) y el punto (a, b).

Es fácil ver que la magnitud de un vector se obtiene aplicando el teorema de Pitágoras,


donde los catetos del triángulo son los componentes del vector. La figura 5.3, muestra
como se obtiene la magnitud del vector.

Otro de los componentes del vector es su ángulo de elevación, también conocido como
dirección u orientación del vector.
5. Vectores y Espacios vectoriales 213

(a, b)

b2
+
√ a2 b

Figura 5.3: La magnitud de un vector

.:Definición 5.5 (Dirección de un vector)


Dado un vector v con componentes (a, b). La dirección de v es el ángulo θ que tiene como
lado inicial el eje x y como lado final el mismo vector, de tal forma que:
b
tan θ =
a
Con a 6= 0 y 0 ≤ θ ≤ 2π, donde
 
−1 b
θ = tan
a

No es difícil deducir de donde se obtiene el ángulo θ, sólo basta aplicar algo de


trigonometría; la figura 5.4 muestra como podemos obtener el ángulo θ:

(a, b)

Figura 5.4: Dirección de un vector


214 5.1. Nociones básicas de vectores en R2

.:Ejemplo 5.1

Dado el vector v = (2 , 5) encuentre su


magnitud y su dirección:

La magnitud:
5 (2, 5)
p √ √

5
5 .3 8
|v| = 22 + 52 = 4 + 25 = 29 = 5.3851
4

52 =
Ahora su dirección estaría dada por:

22+
3
5

= √
tan θ = = 2.5 2 v
2

|v |
Luego 1
θ = 68.12
θ = tan−1 (2.5) = 1.1902899 0
0 1 2 3
que en grados, sería aproximadamente
68.198591. Figura 5.5: El vector v = (2, 5) con su
magnitud y dirección
Recuerde que en algunos casos, cuando el
vector no esta en el primer cuadrante, el ángulo de la dirección no siempre corresponde a
un ángulo positivo. Para visualizarlo, debemos sumar o restar π según sea el caso.

5.1.1. Suma de vectores


En el Capítulo 1, nos encontramos con la Definición 1.8, en la cual establecemos cómo
debemos sumar las matrices. Si consideramos que los vectores son matrices en los cuales,
una de sus dimensiones es uno, entonces ya tendríamos la definición de suma de vectores,
pero no tenemos una visión geométrica de ésta operación.

.:Definición 5.6 (Suma de vectores)


Dados los vectores v1 = (a1 , b1 ) y v2 = (a2 , b2 ) , La suma de vectores se define
como:
v1 + v2 = ((a1 + a2 ) , (b1 + b2 ))

Como vemos, la Definición 5.6 es igual a la Definición 1.8, sólo que se aplica para matrices
de tamaño n×1 o 1×n según sean vectores filas o vectores columna. Gráficamente, la suma
de vectores, genera un paralelogramo construido de tal forma que, en el punto final del
primer vector se ubica el otro vector; luego, al segundo vector, se le ubica el primer vector
en su punto final. De esa forma, construimos un paralelogramo; el nuevo vector v1 + v2 ,
5. Vectores y Espacios vectoriales 215

tiene su origen en el punto (0 , 0) y su punto extremo en el punto ((a1 + a2 ) , (b1 + b2 ))


que es el extremo del paralelogramo1. La figura 5.6, ilustra la situación:

((a1 + a1 ), (b1 + b2 ))

b1

v2
+
v1
v1

b2
v2

a1 a2

Figura 5.6: Suma de vectores

.:Ejemplo 5.2

Encuentre el vector que resulta de sumar los vectores v1 = (4 , 2) y v2 = (−1 , 1):

Llamaremos al nuevo vector w = v1 + v2

w = v1 + v2

= (4 , 2) + (−1 , 1)

= ((4 + (−1)) , (2 + 1))

= (3 , 3)

1A este método se le conoce como el método del paralelogramo.


216 5.1. Nociones básicas de vectores en R2

4
w = (3, 3)
3

2
v1 = (4, 2)
v2 = (−1, 1)
1

−1 0 1 2 3 4

Figura 5.7: El vector w = v1 + v2 = (3, 3)

5.1.2. Multiplicación por escalar


Cuando multiplicamos una matriz por un escalar, los componentes de la matriz se
multiplican por dicho escalar, tal y como lo vimos en la Definición 1.9. Cuando
multiplicamos un vector por un escalar, ocurre exactamente lo mismo, multiplicamos
todos los componentes del vector por el escalar; sin embargo, geométricamente la
magnitud del vector cambia.

.:Definición 5.7 (Multiplicación por escalar)


Dado el vector v = (a, b) y el escalar k, La multiplicación de un vector por un
escalar está dado por:
kv = (ka, kb)

Veamos el siguiente ejemplo:

.:Ejemplo 5.3

1
Tomemos el vector v = (3, −2) y lo multiplicaremos por los escalares k1 = 2 y k2 = − :
2
k1 v = 2(3, −2) = (6, −4)

 
1 3
k2 v = − (3, −2) = − , 1
2 2
5. Vectores y Espacios vectoriales 217

La figura 5.8, muestra lo que ocurre gráficamente:

k2 v
1

−2 −1 1 2 3 4 5 6
−1
v
−2

−3 k1 v

−4

Figura 5.8: Los vectores v, k1 v y k2 v

Cuando multiplicamos un vector v por un escalar k, su magnitud cambia, de tal forma


que crece o decrece |k| |v|, en el caso de k1 v, vimos que la magnitud de v se duplicó, sin
embargo, al ser k1 > 0 se conservó su dirección. Con k2 ocurrió lo contrario, su magnitud
se vió reducida a la mitad y además, como k2 < 0 cambió por completo su dirección, es
decir, giró 180o (o π radianes).

Es fácil ver, que al multiplicar un escalar por un vector, la longitud del vector aumenta
|k| unidades, si k > 0 se conserva su dirección, pero si k < 0 su dirección se incrementa
en 180o. Tomemos v = (a, b) y k, veamos que ocurre con la magnitud de kv:

kv = (ka, kb)
Luego,
p
|kv| = (ka)2 + (kb)2

p
= k² a2 + k 2 b2

p
= k² (a2 + b2 )

p
= k (a2 + b2 ) = k |v|

Si k < 0, la demostración anterior se hace de la misma manera, pues al elevarse al cuadrado


218 5.1. Nociones básicas de vectores en R2

los componentes del vector kv, estos quedan positivos. La dirección del vector es opuesta,
debido a que un escalar negativo cambia los signos de los componentes internos del vector.

5.1.3. Diferencia de vectores


La diferencia de vectores, en realidad es la suma de dos vectores, uno de los cuales esta
multiplicado por el escalar (-1):

.:Definición 5.8 (Diferencia de vectores)


Dados los vectores v1 = (a1 , b1 ) y v2 = (a2 , b2 ), La diferencia de v1 y v2 está
dada por:
v1 − v2 = v1 + (−1)v2 = ((a1 − a2 ) , (b1 − b2 ))

La figura 5.9, muestra cómo podemos interpretarlo gráficamente:

v2 − v1 v1 − v2
v2 v2

v1 v1

Figura 5.9: Los vectores v2 − v1 y v1 − v2

Los vectores v2 − v1 y v1 − v2 tiene la misma magnitud, pero tienen direcciones opuestas.


Veamos el siguiente ejemplo:

.:Ejemplo 5.4

Tomemos el vector v1 = (6, −3) y el vector v2 = (4, 4) , calculemos v1 − v2 y v2 − v1 :


5. Vectores y Espacios vectoriales 219

4
v1 − v2
3
v2
2

−2 −1 1 2 3 4 5 6
−1 v1

−2

−3

−4

−5
v2 − v1

−6

−7

Figura 5.10: Los vectores v1 − v2 y v2 − v1 .

v1 − v2 = (6, −3) − (4, 4)

= (6 − 4, −3 − 4)

= (2, −7)

Ahora bien,
220 5.1. Nociones básicas de vectores en R2

v2 − v1 = (4, 4) − (6, −3)

= (4 − 6, 4 − (−3))

= (−2, 7)

La figura 5.10, ilustra la situación. Como podemos observar, ambos vectores tienen la
misma magnitud:

p
|v2 − v1 | = (−2)2 + (7)2 = 7.2801

p
|v1 − v2 | = (2)2 + (−7)2 = 7.2801

En cuando al ángulo, ambos vectores son opuestos. Esto muestra que la diferencia de
vetores, produce vectores con la misma magnitud, pero con direcciones opuestas.

Todos los vectores se pueden representar como el producto de dos escalares por dos
vectores, a los que llamaremos vectores unitarios, dichos vectores, los denominaremos i
y j; más adelante, les daremos el nombre de bases unitarias a dichos vectores. El vector
i = (1, 0) y el vector j = (0, 1), cualquier vector se puede representar en forma de
estos vectores; por ejemplo, tomemos el vector v = (2, −1), para representarlo como la
multiplicación de los vectores i y j por los escalares 2 y -1:

v = (2, −1) = 2i + (−1)j

Ahora:

2(1, 0) + (−1)(0, 1) = (2, 0) + (0, −1)

= (2, −1)

Como vemos, los vectores v = (2, −1) y 2i + (−1)j son el mismo vector pero con diferente
representación.
5. Vectores y Espacios vectoriales 221

5.1.4. Vector Unitario


.:Definición 5.9 (Vector unitario)
Un vector v = (a, b) es unitario si |v| = 1, es decir:
p
a2 + b 2 = 1

En los vectores unitarios, sólo es necesario saber la dirección, pues la longitud es 1. La


pregunta seria:

Si tengo un vector v ¿Cómo conseguir un vector unitario u que tenga la misma


dirección que el vector v?

La idea es muy similar a la normalización, es decir, tomar el mayor valor de un conunto


de datos y dividir todos los datos del conjunto por ese valor. El concepto es igual, sólo
que dividimos por la longitud total, así entonces para hallar el nuevo vector tomaremos:

1
u= v
|v|

Entonces, el nuevo vector u tendrá la misma dirección de v pero su magnitud es 1.

.:Ejemplo 5.5

Tomemos el vector v = (3, 5) hallemos su vector unitario:

1
u = v
|v|
1
= p (3, 5)
(3) + (5)2
2

= 0.1714986(3, 5)

= (0.5144958, 0.857493)

La figura 5.11 ilustra la situación. Ambos vectores, tienen la misma dirección pero
diferente longitud.
222 5.1. Nociones básicas de vectores en R2

5 5

4 4

3 3

2 2
u = (0.5144958, 0.857493)
1 v = (5, 3) 1

0 0
0 1 2 3 4 0 1 2 3 4

Figura 5.11: Los vectores v y su vector unitario u

5.1.5. Ángulo entre vectores


La siguiente definición, ilustra cómo obtener el ángulo entre vectores:

.:Definición 5.10 (Ángulo entre vectores)


Sean v1 = (a1 , b1 ) y v2 = (a2 , b2 ) vectores no nulos. El ángulo θ ∈ [0, π] es el
ángulo no negativo más pequeño que tiene como lados los vectores v1 y v 2 y como
origen, el origen del sistema:

a1 a2 + b 1 b 2
cos θ =
|v1 | |v2 |

Si v1 y v2 tienen la misma dirección, entonces θ = 0.


Si v1 y v2 tienen direcciones opuestas, entonces θ = π.

Veamos el siguiente ejemplo:

.:Ejemplo 5.6

Sean los vectores v1 = (4, 1) y v2 = (2, 5), hallar el ángulo entre los dos vectores:

Primero hallamos la norma de ambos vectores:


p √
|v1 | = 42 + 12 = 17 = 4.1231056
5. Vectores y Espacios vectoriales 223

p √
|v2 | = 22 + 52 = 29 = 5.3851648

Ahora,

(4)(2) + (1)(5)
cos θ = = 0.5854906
(4.1231056)(5.3851648)

θ = cos−1 (0.5854906) = 0.9453112

Que equivale a θ = 54.162344o. La figura 5.12, ilustra la situación.

4
v2
3

2
θ = 54.16o
1
v1
0
0 1 2 3 4 5

Figura 5.12: Ángulo entre los vectores v1 y v2

El término a1 a2 + b1 b2 de la definición de ángulo entre vectores, lo veremos más adelante


cuando veamos el concepto de producto punto o producto escalar.

5.1.6. Vectores ortogonales


La definición de ángulo entre vectores es muy importante, en especial cuando los vectores
tienen un ángulo entre ellos de 90 grados; a estos vectores los llamaremos vectores
ortogonales.
224 5.1. Nociones básicas de vectores en R2

.:Definición 5.11 (Vectores ortogonales)


Sean v1 = (a1 , b1 ) y v2 = (a2 , b2 ) vectores no nulos. Si el ángulo θ entre v1 y v2 es
π
, se dice que v1 y v2 son ortogonales y se denota como v1 ⊥ v2 .
2

Veamos el siguiente ejemplo:

.:Ejemplo 5.7

Sean los vectores v1 = (−4, 8) y v2 = (2, 1), Determine si ambos vectores son ortogonales:

Primero hallamos la norma de ambos vectores:

p √
|v1 | = (−4)2 + (8)2 = 80 = 8.9442719

p √
|v2 | = 22 + 12 = 5 = 2.236068

Ahora,

(−4)(2) + (8)(1)
cos θ = =0
(8.9442719)(2.236068)
π
θ = cos−1 (0) = 1.5707963 =
2

Luego v1 ⊥ v2 .
El concepto de vectores ortogonales, lo utilizaremos más adelante; el ejemplo más simple
es el de proyecciones ortogonales, que es cuando un vector se proyecta sobre otro vector
o sobre un plano. de igual forma, lo encontramos en la factorización de matrices de la
forma A = QR, (ver la sección 2.4) donde la matriz Q es un matriz ortogonal, es decir,
sus vectores columna son ortogonales entre si. La matriz Q tiene muchas aplicaciones,
sobretodo en la computación gráfica (rotación y reflexión de figuras ).

5.1.7. Vector proyección


Teniendo en cuenta la definición de ángulo entre vectores y vector ortogonal, procederemos
a definir el vector proyección:
5. Vectores y Espacios vectoriales 225

v1 3

2 π
θ=
2
1
v2

−4 −3 −2 −1 0 1 2

Figura 5.13: Los vectores ortogonales v1 y v2

.:Definición 5.12 (El vector proyección)


Sea u = (a1 , b1 ) y v = (a2 , b2 ) vectores no nulos. La proyección de u sobre v, denotada
como proyv u está dada por:
a1 a2 + b 1 b 2
proyv u = v
|v|2
Donde si:
a1 a2 + b1 b2 > 0 entonces v2 y proyv2 tienen la misma dirección.

a1 a2 + b1 b2 < 0 entonces v2 y proyv2 tienen direcciones opuestas.

La figura 5.14, vemos que el vector proyv u, es paralelo al vector v, en cuyo caso, tienen
las mismas direcciones o direcciones opuestas. En realidad, el proceso de obtener el vector
proyección consiste, en conseguir un nuevo vector a partir de v, el cual, se redimensiona
a1 a2 + b 1 b 2
multiplicándolo por un escalar, que en este caso es 2 , para que coincida con la
|v|
proyección ortogonal de u.

.:Ejemplo 5.8

Sean los vectores u = (6, 1) y v = (2, 5), encuentre proyv u y proyu v:


226 5.1. Nociones básicas de vectores en R2

u
u
v
π
θ> 2
v

θ proyv u
π
0<θ< 2 proyv u

a1 a2 + b 1 b 2 > 0 a1 a2 + b 1 b 2 < 0

Figura 5.14: Los vectores u , v y proyv u

Para la proyv u, primero hallamos la norma de v:


p √
|v| = 22 + 52 = 29 = 5.3851648
Ahora,

(6)(2) + (1)(5)
proyv u = (2, 5)
5.38516482

= 0.5862069(2, 5)

= (1.1724138, 2.9310345)

Para la proyu v, primero hallamos la norma de u:


p √
|u| = 62 + 12 = 37 = 6.0827625
Ahora,

(6)(2) + (1)(5)
proyu v = (6, 1)
6.08276252

= 0.4594595(6, 1)

= (2.756757, 0.4594595)

El siguiente algoritmo, implementa los anteriores conceptos:


5. Vectores y Espacios vectoriales 227

5 5
v v
4 4
proyv u = (1.17, 2.93)
3 3

2 2 proyu v =(2.75, 0.459)

1 1
u u
0 0
0 1 2 3 4 5 6 0 1 2 3 4 5 6

Figura 5.15: Los vectores v1 , v2 , proyv u y proyu v

.:Algoritmo 5.1

1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p r i n t " D e f i n i m o s l o s v e c t o r e s u y v\n"
5
6 u=np . a r r a y ( [ 2 , 5 ] , dtype=f l o a t )
7 v=np . a r r a y ( [ 6 , 1 ] , dtype=f l o a t )
8
9 p r i n t " El v e c t o r u : " , u , " \n"
10 p r i n t " El v e c t o r v : " , v , " \n"
11
12 d e f l o n g V e c to rR 2 ( v ) :
13 r e t u r n np . s q r t ( v [ 0 ] ∗ ∗ 2 + v [ 1 ] ∗ ∗ 2 )
14
15 p r i n t "La l o n g i t u d d e l v e c t o r u e s : " , l o n g V e c to rR 2 ( u )
16 print " "
17 p r i n t "La l o n g i t u d d e l v e c t o r v e s : " , l o n g V e c to rR 2 ( v )
18
19 def direccionVectorR2 ( v ) :
20 i f v [0]==0:
21 r e t u r n np . p i / 2 . 0
22 else :
23 return atan ( v [ 1 ] / v [ 0 ] )
24
25 print " \nLa d i r e c c i o n del vector u : " , direccionVectorR2 (u)
26 print " \n en g r a d o s e s : " , ( 1 8 0 . 0 ∗ d i r e c c i o n V e c t o r R 2 ( u ) ) /np . p i
27
28 print " \nLa d i r e c c i o n del vector v : " , direccionVectorR2 (v )
29 print " \n en g r a d o s e s : " , ( 1 8 0 . 0 ∗ d i r e c c i o n V e c t o r R 2 ( v ) ) /np . p i
30
31 def vectorUnitario (v) :
32 k =1.0/ l o n g V e c to rR 2 ( v )
228 5.1. Nociones básicas de vectores en R2

33 r e t u r n k∗ v
34
35 print " \ nEl v e c t o r u n i t a r i o del vector u : " , vectorUnitario (u)
36 print " \ nEl v e c t o r u n i t a r i o del vector v : " , vectorUnitario (v)
37
38 def anguloEntreVectores (u , v ) :
39 t =(u [ 0 ] ∗ v [ 0 ] + u [ 1 ] ∗ v [ 1 ] ) / ( l o n g V e c to rR 2 ( u ) ∗ l o n g V e c to r R 2 ( v ) )
40 return acos ( t )
41
42 print " \ nEl a n g u l o e n t r e u y v e s : " , a n g u l o E n t r e V e c t o r e s ( u , v )
43 print " \n en g r a d o s e s : " , ( 1 8 0 . 0 ∗ a n g u l o E n t r e V e c t o r e s ( u , v ) ) /np . p i
44
45 def vectorProyeccion (u , v) :
46 k=(u [ 0 ] ∗ v [ 0 ] + u [ 1 ] ∗ v [ 1 ] ) / ( l o n g V e c to rR 2 ( v ) ∗ ∗ 2 )
47 r e t u r n k∗ v
48
49 print " \ nEl v e c t o r proyuv e s : " , v e c t o r P r o y e c c i o n ( u , v )
50 print " \ nEl v e c t o r proyvu e s : " , v e c t o r P r o y e c c i o n ( v , u )

El programa anterior produce la siguiente salida:

1 >>>
2 Definimos l o s v e c t o r e s u y v
3
4 El v e c t o r u : [ 2. 5.]
5
6 El v e c t o r v : [ 6. 1.]
7
8 La l o n g i t u d d e l v e c t o r u e s : 5.38516480713
9
10 La l o n g i t u d d e l v e c t o r v e s : 6.0827625303
11
12 La d i r e c c i o n del vector u : 1.19028994968
13
14 en g r a d o s e s : 68.1985905136
15
16 La d i r e c c i o n del vector v : 0.165148677415
17
18 en g r a d o s e s : 9.46232220803
19
20 El v e c t o r u n i t a r i o del vector u : [ 0.37139068 0.92847669]
21
22 El v e c t o r u n i t a r i o del vector v : [ 0.98639392 0.16439899]
23
24 El a n g u l o e n t r e u y v e s : 1.02514127227
25
26 en g r a d o s e s : 58.7362683056
27
28 El v e c t o r proyuv e s : [ 2.75675676 0.45945946]
5. Vectores y Espacios vectoriales 229

29
30 El v e c t o r proyvu e s : [ 1.17241379 2.93103448]
31 >>>

El Algoritmo 5.1, define varias funciones, las cuales describiremos a continuación:

longVectorR2(v): Esta función retorna la longitud (norma) de un vector en R2 ,


de acuerdo a la Definición 5.4; se utiliza la función [Link](x) de Numpy, para
calcular la raíz cuadrada de las componentes elevadas al cuadrado del vector: return
[Link](v[0]**2 + v[1]**2) (líneas 12 a 13).

direccionVectorR2(v): Retorna la dirección del vector en radianes, de acuerdo a la


Definición 5.5. La función pregunta si la primera componente del vector es cero, en
cuyo caso, retorna π2 , esto se logra con la función [Link], la cual devuelve el valor de
la constante π = 3.141592653589793. Si la primera componente no es cero, entonces
la función retorna atan(v[1]/v[0]), para hallar el ángulo; este se imprime en grados
sexagesimales (líneas 19 a 23).

vectorUnitario(v): Retorna el vector unitario, de acuerdo a la Definición 5.9. Esta


función, almacena en la variable k el inverso multiplicativo de la longitud del
vector, haciendo un llamado a la función longVectorR2(v) descrita anteriormente.
Posteriormente, la función retorna el vector unitario resultante de multiplicar k por
el vector, (líneas 31 a 33).

anguloEntreVectores(u,v): Devuelve el ángulo entre los vectores u y v. La función


calcula la variable t de acuerdo a la Definición 5.10, de tal forma que t=(u[0]*v[0] +
u[1]*v[1])/(longVectorR2(u)*longVectorR2(v)). En ésta se requiere llamar la función
longVectorR2, para obtener la longitud de los vectores u y v. Finalmente, se retorna
acos(t), para hallar el ángulo (lineas 38 a 40).

vectorProyeccion(u,v): Retorna el vector proyección proyv u, de acuerdo con la


Definición 5.12. La función almacena en la constante k el escalar necesario para
la proyección: k=(u[0]*v[0] + u[1]*v[1])/(longVectorR2(v)**2). Finalmente, retorna
k*v (líneas 45 a 47).

El Algoritmo 5.1 es muy simple en cuanto a su implementación, la mayoría de las líneas


imprimen los resultados de las llamadas de las funciones. En las secciones siguientes
llevaremos los conceptos aquí planteados de R2 a Rn .
230 5.2. Vectores en Rn

5.2. Vectores en Rn
El concepto de vector en el plano puede llevarse a más dimensiones, sólo debemos
aumentar la cantidad de componentes del vector. Sin embargo, sólo podemos tener una
representación gráfica hasta R3 , de ahí en adelante, no es posible hacer la gráfica de un
vector pero, si podemos hacer las mismas operaciones que hacíamos con los vectores en
R2 . Para iniciar, haremos una definición más amplia de lo que es un vector en Rn .

.:Definición 5.13 (Vector en Rn )


Un vector en Rn , es una n tupla de números reales (a1 , a2 , a3 . . . an ). donde cada
ai ∈ R.

Cuando hablamos de una n tupla, nos referimos a una secuencia ordenada de objetos, en
este caso las componentes del vector. Así por ejemplo, los vectores en el espacio llamado
R3 , tienen tres componentes:

v = (x, y, z)
Su representación gráfica ya no se ciñe al plano xy, ahora debemos tener en cuenta el eje
z, el cual es perpendicular (ortogonal) al plano xy. En la figura 5.16 se ilustra la posición
del nuevo eje.

Figura 5.16: El espacio R3

La notación es usada ampliamente, incluso en ámbitos que aparentemente no son


matemáticos, por ejemplo, en las películas y los videojuegos, donde es común oír
expresiones como “película en 3D” o “juego 3D”. En ambos casos, en realidad lo que
se tiene es una transformación2 de R3 en R2 , pues, sin importar la calidad de la película
o videojuego, el procesador del computador debe convertir los puntos y vectores de R3
en R2 para que sean desplegados en una pantalla plana de un televisor (R2 ).

2 El concepto de transformación lineal será estudiado más adelante.


5. Vectores y Espacios vectoriales 231

En el espacio, es muy fácil graficar un vector, sólo debemos tener en cuenta la nueva
componente z. Tomemos como ejemplo los vectores u = (2, 1, 3), v = (−2, 3, 4) y
w = (3, 3, 0) hagamos su representación gráfica en el espacio.

b
v

u
b

x y
b

Figura 5.17: Los vectores u, v y w en R3

El despliegue de los tres ejes coordenados, implica la aparición de tres planos coordenados,
llamados xy, yz y xz. Desafortunadamente, no podemos tener una representación gráfica
de vectores con dimensión mayor a tres. Sin embargo, si podemos realizar las mismas
operaciones, por ejemplo, la suma, la diferencia, el vector proyector, etc.
232 5.2. Vectores en Rn

5.2.1. Norma de un vector en Rn


.:Definición 5.14 (Magnitud o norma de un vector en Rn )
Dado un vector v de Rn con componentes (a1 , a2 , . . . , an ). La magnitud o norma
de v, es la distancia del segmento dirigido que lo representa, dicha distancia se
calcula de la siguiente forma:
q
|v| = a21 + a22 + · · · + a2n
La notación |v|, denota la distancia entre el origen del sistema y el punto
(a1 , a2 , . . . , an ).

.:Ejemplo 5.9

Tomemos los vectores u = (−3, 5, −1) de R3 y el vector v = (1, −2, 4, 8, 7) de R5 y


encontremos su norma:

Para u tenemos:
p
|u| = (−3)2 + 52 + (−1)2

√ √
= 9 + 25 + 1 = 35 = 5.9160798

Para v:

p
|u| = 12 + (−2)2 + 42 + 82 + 72

√ √
= 1 + 4 + 16 + 64 + 49 = 134 = 11.575837

Como vemos el concepto es el mismo, sólo que lo extendemos a las diferentes dimensiones.

.:Definición 5.15 (Suma y diferencia de vectores en Rn )


Dados los vectores v1 y v2 de Rn , tales que v1 = (a1 , a2 , a3 , . . . , an ) y v2 =
(b1 , b2 , b3 , . . . , bn ), la suma de vectores se define como:

v1 + v2 = ((a1 + b1 ) , (a2 + b2 ) , (a3 + b3 ) , . . . , (an + bn ))

La diferencia de vectores está dada por:

v1 − v2 = ((a1 − b1 ) , (a2 − b2 ) , (a3 − b3 ) , . . . , (an − bn ))


5. Vectores y Espacios vectoriales 233

.:Ejemplo 5.10

Tomemos los vectores en R3 u = (3, 2, 1) y v = (1, −1, 2), su suma está dada por:

u+v = (3 + 1, 2 + (−1), 1 + 2)

= (4, 1, 3)

Su diferencia está dada por:

u−v = (3 − 1, 2 − (−1), 1 − 2)

= (2, 3, −1)

z z

b b

u+v b
v v

b b
u y u
u+v y
x x

(a) u + v (b) u − v

Figura 5.18: Los vectores u, v, u + v y u − v

Tanto la suma como la diferencia, se comportan de la misma manera que en R2 , en


la figura 5.18 vemos ilustrada la situación. De igual manera para la multiplicación por
escalar, en esta nueva definición, veremos que el concepto se extiende para vectores en
Rn .
234 5.2. Vectores en Rn

5.2.2. Multiplicación por escalar en un vector en Rn


.:Definición 5.16 (Multiplicación de un vector por un escalar en Rn )
Dado el vector v = (a1 , a2 , a3 , . . . , an ) y el escalar k ∈ R, La multiplicación de un
vector por un escalar está dada por:

kv = (ka1 , ka2 , ka3 , . . . , kan )

.:Ejemplo 5.11

Tomemos el vector en R3 u = (1, 2, 1) y el escalar k = 2:

kv = 2(1, 2, 1)
= (2, 4, 2)

En la figura 5.19, se muestra el vector v y el vector kv, en este ejemplo de puede ver
que el concepto es el mismo que en plano xy, el vector amplía su longitud k veces, si es
negativo lo ampliará en el sentido contrario, mientras que si 0 < k < 1, provocará que el
vector se reduzca.

v
b
kv
b

y
x

Figura 5.19: Los vectores v y kv

La siguiente definición es clave para entender la dirección de un vector en Rn .


5. Vectores y Espacios vectoriales 235

5.2.3. Vectores unitarios


.:Definición 5.17 (Vector unitario en Rn )
Sea v ∈ Rn tal que v = (a1 , a2 , . . . , an ) , entonces v es unitario si |v| = 1, es decir:
q
a21 + a22 + · · · + a2n = 1

.:Ejemplo 5.12

Tomemos los vectores en R3 v = (0.2672612, 0.5345225 0.8017837) y comprobemos si es


un vector unitario:

p
|v| = 0.26726122 + 0.53452252 + 0.80178372
= 1

Luego el vector es unitario.

Al igual que en un vector en R2 , para obtener un vector unitario a partir de otro vector
no unitario, sólo se multiplica el vector, por el reciproco de su norma:

.:Ejemplo 5.13

Sea v un vector de R3 , tal que v = (1, 5, 2), a partir de este vector encontraremos el vector
unitario u, tal que v y u tengan la misma dirección. Primero hallamos la norma de v:

p
|v| = 12 + 52 + 22

= 30

Ahora, obtenemos u de la siguiente forma:

1
u = v
|v|
1
= √ (1, 5, 2)
30

= (0.1825742, 0.9128709, 0.3651484)

Es fácil comprobar que |u| = 1.


236 5.2. Vectores en Rn

Ahora bien, ya hemos tratado el tema de las longitudes de los vectores. Sin embargo, y
como vimos en el caso de R2 , en el espacio no es posible tener sólo un eje de referencia,
necesitamos el ángulo tomado desde los demás ejes.

5.2.4. Ángulos directores en R3


.:Definición 5.18 (Ángulos directores en R3 )
Sea v ∈ R3 tal que v = (a, b, c) y sean los ángulos α, β y γ los ángulos directores
del vector v, definidos de la siguiente forma:
α en ángulo entre el vector v y la parte positiva del eje x.

β en ángulo entre el vector v y la parte positiva del eje y.


γ en ángulo entre el vector v y la parte positiva del eje z.
donde
a b c
cos α = , cos β = , cos γ =
|v| |v| |v|

Gráficamente, podemos apreciar que los ángulos directores, son en realidad el mismo
concepto de dirección de un vector en R2 pero llevado al espacio. Los ángulos directores,
tienen en cuenta todos los ejes para determinar su dirección.

(0, 0, c)
(a, b, c)

α
(0, b, 0)
(a, 0, 0)
β

Figura 5.20: Representación gráfica de los ángulos directores en R3

La figura 5.20, muestra la disposición de los ángulos directores del vector v = (a, b, c).
Los cosenos de dichos ángulos son comúnmente llamados cosenos directores, y cumplen
5. Vectores y Espacios vectoriales 237

con la siguiente relación:

a2 + b 2 + c2 a2 + b 2 + c2
cos2 α + cos2 β + cos2 γ = = 2 =1
|v| a + b 2 + c2
donde los ángulos, α, β y γ están en el intervalo [0, π].

.:Ejemplo 5.14

Encuentre los cosenos directores del vector v = (1, 3, −5):

Inicialmente calculamos la norma del vector:


p √
|v| = 12 + 32 + (−5)2 = 35 ≈ 5.9160798

Ahora:

1
cos α = √ = 0.1690309
35
3
cos β = √ = 0.5070926
35
−5
cos γ = √ = −0.8451543
35
Así como en el plano hallamos el ángulo entre dos vectores, de igual forma lo podemos
hacer entre dos vectores en el espacio. Sólo debemos tener encuentra los demás ejes
coordenados.

5.2.5. Ángulo entre dos vectores en R3


Para comenzar tendremos en cuenta la siguiente definición:

.:Definición 5.19 (Ángulo entre dos vectores en R3 )


Sean los vectores en el espacio no nulos u y v. Entonces, el ángulo θ positivo más
pequeño entre los vectores u y v se llama ángulo entre u y v.

Ahora bien, este ángulo θ debe ser calculado usando los componentes de los vectores u y
v.
238 5.2. Vectores en Rn

.:Teorema 5.1 Si θ es el ángulo entre dos vectores no nulos en el espacio u y v, entonces


el coseno del ángulo θ está dado por:
u·v
cos θ =
|u| |v|

El siguiente ejemplo ilustra cómo podemos encontrar el ángulo entre dos vectores en el
espacio.

.:Ejemplo 5.15

Dado u = (1, −2, 3) y v = (1, 1, 2) encuentre el coseno del ángulo entre u y v:

Primero hallamos las normas de u y v:


p √
|u| = 12 + (−2)2 + 32 = 14

p √
|v| = 12 + 12 + 22 = 6
Luego:

u·v (1, −2, 3) · (1, 1, 2) 5


cos θ = = √ √ = √ = 0.5455447
|u| |v| 14 6 84
Ahora bien, cos θ = 0.5455447, lo que implica que θ = 0.9937574, es decir, θ = 56.938105o.
Como se muestra en la figura 5.21.

En el espacio, es difícil tener una percepción adecuada de los objetos geométricos en


general, pues la perspectiva hace que veamos algunos objetos aparentemente en forma
incorrecta, cuando en realidad están bien ubicados. Recuerde lo que decía Henri Poincaré:
“La geometría es el arte de dibujar mal y de pensar bien”.

Tengamos en cuenta que si dos vectores son paralelos, entonces el ángulo entre ellos es π
o cero, mientras que si son ortogonales o perpendiculares, el ángulo entre ellos es π2 , es
decir, 90o .

.:Teorema 5.2 Si u y v son dos vectores no nulos y paralelos, entonces:

u = kv
para algún k 6= 0
5. Vectores y Espacios vectoriales 239

u b

b
v
θ

Figura 5.21: Los vectores u y v y el ángulo θ

Lo que nos dice el teorema anterior, es que los vectores que son paralelos, pueden tener
la misma dirección o la dirección contraria; lo que varía en ellos es el tamaño.

.:Teorema 5.3 Si u y v son dos vectores no nulos y ortogonales , entonces:

u·v = 0

La siguiente definición, ilustra el concepto de vector proyección en el espacio.

.:Definición 5.20 (Vector proyector en R3 )


Sean los vectores u y v dos vectores en el espacio no nulos. La proyección de u
sobre v denotada como proyv u está dada por:
u·v
proyv u = 2 v
|v|

.:Ejemplo 5.16
240 5.2. Vectores en Rn

Dado u = (1, −2, 3) y v = (1, 1, 2) encontrar proyv u

u·v (1, −2, 3) · (1, 1, 2)


proyv u = 2 v= √ 2 (1, 1, 2)
|v| 6
 
5 5 5 5
= (1, 1, 2) = , ,
6 6 6 3

5 5 5

Entonces proyv u = 6, 6, 3 = (0.8333333, 0.8333333, 1.6666667) (figura 5.22)

ub

v
b
b

Figura 5.22: Los vectores u y v y el vector proyv u

5.2.6. Producto cruz entre vectores de R3


El producto punto o producto escalar, toma dos vectores y entrega un escalar que en
este caso es un número real. El producto cruz o producto vectorial, toma dos vectores del
espacio y entrega un nuevo vector; hay que aclarar que el producto cruz sólo esta definido
para vectores en R3 .
5. Vectores y Espacios vectoriales 241

.:Definición 5.21 (Producto cruz en R3 )


Sean los vectores u = a1 i + b1 j + c1 k y v = a2 i + b2j + c2 k dos vectores en el espacio
no nulos. El producto cruz entre u y v denotada como u × v está dada por:

u × v = (b1 c2 − c1 b2 ) i + (c1 a2 − a1 c2 ) j + (a1 b2 − b1 a2 ) k

Como vemos el producto cruz entre los vectores genera otro vector que es ortogonal a los
vectores iniciales. El principal ejemplo que encontramos del producto cruz es el eje z, el
cual es ortogonal a los ejes x y y.

.:Ejemplo 5.17

Sean los vectores u = i + 2j + k y v = i − j + k, encuentre u × v y v × u:

u×v = (b1 c2 − c1 b2 ) i + (c1 a2 − a1 c2 ) j + (a1 b2 − b1 a2 ) k

= ((2)(1) − (1)(−1)) i + ((1)(1) − (1)(1)) j + ((1)(−1) − (2)(1)) k

= 3i + 0j − 3k

Usando el mismo procedimiento, calculamos v × u

v×u = −3i + 0j + 3k

Gráficamente podemos apreciar la diferencia entre ambos productos.

En la figura 5.23, podemos ver que u × v es muy diferente a v × u, aunque tienen el mismo
tamaño, tiene direcciones opuestas, en cuyo caso u × v = −(v × u). Además, podemos
apreciar que u×v y v×u son ortogonales a los vectores u y v, lo cual es fácil de corroborar:

u · (u × v) = (1, 2, 1) · (3, 0, −3)

= (1)(3) + (2)(0) + (1)(−3)

= 0

Ahora v · (u × v)
242 5.2. Vectores en Rn

v×u

v b

y
x

b
u×v

Figura 5.23: Los vectores u, v, u × v y v × u

v · (u × v) = (1, −1, 1) · (3, 0, −3)

= (1)(3) + (−1)(0) + (1)(−3)

= 0

De igual forma con los productos v · (v × u) y u · (v × u).

El producto vectorial, se puede representar por medio del determinante de una matriz de
3 × 3; si vemos las definiciones 5.21 y 4.3, observamos que los procesos son similares.

.:Teorema 5.4 Si u = a1 i + b1 j + c1 k y v = a2 i + b2 j + c2 k son dos vectores no nulos,


entonces, usando la notación de los determinantes, tenemos que:
5. Vectores y Espacios vectoriales 243

i j k
b1 c1 a1 c1 a1 b1
u×v = a1 b1 c1 =i −j +k
b2 c2 a2 c2 a2 b2
a2 b2 c2

El desarrollo de los determinantes de 2 × 2 da como resultado la definición del producto


vectorial.

.:Ejemplo 5.18

Sean los vectores u = (4, −1, 2) y v = (−5, 0, 1), usar los determinantes para hallar el
producto vectorial o producto cruz.

i j k
−1 2 4 2 4 −1
u×v = 4 −1 2 =i −j +k
0 1 −5 1 −5 0
−5 0 1

= −1i − 14j − 5k = (−1, −14, −5)

Ya hemos visto que el producto cruz o producto vectorial, tiene algunas propiedades como
lo hemos señalado en los ejemplos anteriores. El siguiente teorema lista las propiedades
más significativas del producto vectorial:

.:Teorema 5.5 Sean u, v y w tres vectores no nulos de R3 , entonces:

1. u × 0 = 0 × u = 0 (Siendo 0 el vector nulo)

2. si k ∈ R entonces (ku) × v = k(u × v)

3. u × v = −(v × u)

4. u × (v + w) = (u × v) + (u × w)

5. (u × v) · w = u · (v × w) (regla llamada triple producto escalar entre u, v y w)


6. u · (u × v) = v · (u × v) = 0

.:Ejemplo 5.19

Tomemos los vectores u = (3, −1, −1), v = (5, 1, 0) y w = (1, −2, 7). El triple producto
escalar entre u, v y w se calcula de la siguiente forma:
244 5.2. Vectores en Rn

(u × v) · w = [(3, −1, −1) × (5, 1, 0)] · (1, −2, 7)

= [(1, −5, 8)] · (1, −2, 7) = 67

Como vemos, las operaciones en R2 , R3 y otras dimensiones son muy similares. El siguiente
algoritmo, implementa algunos de estos procesos:

.:Algoritmo 5.2

1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p r i n t " D e f i n i m o s l o s v e c t o r e s u y v\n"
5
6 u=np . a r r a y ( [ 5 , −2, 7 ] , dtype=f l o a t )
7 v=np . a r r a y ( [ 2 , −1, 3 ] , dtype=f l o a t )
8
9 p r i n t " El v e c t o r u : " , u , " \n"
10 p r i n t " El v e c t o r v : " , v , " \n"
11
12 d e f NormaRn ( v ) :
13 suma=0.0
14 for i in v :
15 suma=suma+i ∗∗2
16 r e t u r n np . s q r t ( suma )
17
18 p r i n t "La l o n g i t u d d e l v e c t o r u e s : " , NormaRn ( u )
19 print " "
20 p r i n t "La l o n g i t u d d e l v e c t o r v e s : " , NormaRn ( v )
21
22 def vectorUnitario (v) :
23 k =1.0/NormaRn ( v )
24 r e t u r n k∗ v
25
26 print " \ nEl v e c t o r u n i t a r i o del vector u : " , vectorUnitario (u)
27 print " \ nEl v e c t o r u n i t a r i o del vector v : " , vectorUnitario (v)
28
29 def CosenosDirectores (v) :
30 Lista =[]
31 n=NormaRn ( v )
32 for i in v :
33 L i s t a . append ( i /n )
34 return Lista
35
36 print " \ nLos c o s e n o s d i r e c t o r e s del vector u : " , CosenosDirectores (u)
37 print " \ nLos c o s e n o s d i r e c t o r e s del vector v : " , CosenosDirectores (v)
38
39 d e f A n g u l o E n tre V e c t o r e s ( u , v ) :
40 cosT=(u . dot ( v . T) ) / ( NormaRn ( u ) ∗NormaRn ( v ) )
5. Vectores y Espacios vectoriales 245

41 return a c o s ( cosT )
42
43 p r i n t " \ nEl a n g u l o e n t r e l o s v e c t o r e s u y v : " , A n g u l o E n tre V e c t o r e s ( u , v ) , "
rad "
44 p r i n t " \ nen g r a d o s s e x a g e s i m a l e s e s : " , ( 1 8 0 . 0 ∗ A n g u l o E n tre V e c to r e s ( u , v ) ) /np
. pi
45
46 def vectorProyeccion (u , v) :
47 k=(u . dot ( v . T) ) / ( NormaRn ( v ) ∗ ∗ 2 )
48 r e t u r n k∗ v
49
50 print " \ nEl v e c t o r proyuv e s : " , v e c t o r P r o y e c c i o n ( u , v )
51 print " \ nEl v e c t o r proyvu e s : " , v e c t o r P r o y e c c i o n ( v , u )
52
53 d e f ProductoCruz ( u , v ) :
54 k0=u [ 1 ] ∗ v [ 2 ] − u [ 2 ] ∗ v [ 1 ]
55 k1=u [ 2 ] ∗ v [ 0 ] − u [ 0 ] ∗ v [ 2 ]
56 k2=u [ 0 ] ∗ v [ 1 ] − u [ 1 ] ∗ v [ 0 ]
57 r e t u r n np . a r r a y ( [ k0 , k1 , k2 ] )
58
59 print " \ nEl v e c t o r uxv : " , ProductoCruz ( u , v )
60 print " \ nEl v e c t o r vxu : " , ProductoCruz ( v , u )

El programa anterior produce la siguiente salida:

1 >>>
2 Definimos l o s v e c t o r e s u y v
3
4 El v e c t o r u : [ 5 . −2. 7.]
5
6 El v e c t o r v : [ 2 . −1. 3.]
7
8 La l o n g i t u d d e l v e c t o r u e s : 8.83176086633
9
10 La l o n g i t u d d e l v e c t o r v e s : 3.74165738677
11
12 El v e c t o r u n i t a r i o del vector u : [ 0 . 5 6 6 1 3 8 5 2 −0.22645541 0.79259392]
13
14 El v e c t o r u n i t a r i o del vector v : [ 0 . 5 3 4 5 2 2 4 8 −0.26726124 0.80178373]
15
16 Los c o s e n o s d i r e c t o r e s del vector u : [0.56613851707229779 ,
−0.22645540682891913 , 0.79259392390121697]
17
18 Los c o s e n o s d i r e c t o r e s del vector v : [0.53452248382484879 ,
−0.2672612419124244 , 0.80178372573727319]
19
20 El a n g u l o e n t r e l o s v e c t o r e s u y v : 0 . 0 5 2 4 3 8 2 7 0 7 4 9 rad
21
22 en g r a d o s s e x a g e s i m a l e s e s : 3.00449159888
246 5.2. Vectores en Rn

23
24 El v e c t o r proyuv e s : [ 4 . 7 1 4 2 8 5 7 1 −2.35714286 7.07142857]
25
26 El v e c t o r proyvu e s : [ 2 . 1 1 5 3 8 4 6 2 −0.84615385 2.96153846]
27
28 El v e c t o r uxv : [ 1 . −1. − 1 . ]
29
30 El v e c t o r vxu : [ −1. 1. 1.]
31 >>>

El Algoritmo 5.2, consta de las siguientes funciones:


NormaRn(v): Esta función calcula la longitud de un vector en Rn , sin importar su
tamaño. La función toma en un ciclo for, cada elemento del vector y lo eleva al
cuadrado, posteriormente, calcula la suma total (líneas 14 a 15). Finalmente evalúa
y entrega la raíz cuadrada de la suma total.
vectorUnitario(v): El vector unitario, se calcula multiplicando el inverso multiplicativo
de la longitud del vector, por el mismo vector; todo se almacena en la variable k.
Finalmente, la función entrega k*v (líneas 22 a 24). Esta función no tiene en cuenta
el tamaño del vector.
CosenosDirectores(v): Esta función, toma la longitud de un vector en Rn y la
almacena en la variable n. Luego, con una lista vacía y un ciclo for, se agregan los
elementos del vector sobre el tamaño del mismo. La función no retorna el ángulo,
sólo una lista con los valores de los cosenos directores. (líneas 29 a 34)
AnguloEntreVectores(u,v): La función toma la variable cosT y almacena en ella el
cociente entre el producto punto entre el vector u y el vector v y, la norma del
vector u por la norma del vector v. La función retorna el arcocoseno de dicho valor.
(líneas 39 a 41).
vectorProyeccion(u,v): Esta función, almacena en la variable k el cociente entre el
producto punto entre u y v, y la norma del vector v al cuadrado. Posteriormente,
retorna k*v. (líneas 46 a 48)
ProductoCruz(u,v): En esta función, se calculan tres constantes k0=u[1]*v[2]-
u[2]*v[1], k1=u[2]*v[0]-u[0]*v[2] y k2=u[0]*v[1]-u[1]*v[0] ; La función retorna un
vector de tamaño 1 × 3 usando dichas constantes en cada uno de los componentes
del vector. (líneas 53 a 57)
.:Ejercicios 5.1
1. Dados los siguientes vectores, encuentre la magnitud. Si el vector está en el plano,
encontrar la dirección, si está en el espacio o dimensiones superiores, hallar los
cosenos directores.
5. Vectores y Espacios vectoriales 247

√ √ √
a) u = (2, 3, −5) e) u = ( 45, 7, 28)
b) u = (7, 1, 8) f ) u = (1, 1, 1, 1)
c) u = (5, 6, 3, −9, −8, 7, 4) g) u = (1, 0, 0, 1, 0, 1)
 
d ) u = π, π2 , π4 , π6 h) u = π, π2 , π4 , π6 , . . . 2n
π

2. Dados los vectores u = (4π, 5e) y v = (2e, −9π) encuentre:

a) 3u + 2v d) u − v π 5
g) u− v
3 e
b) 5u − 8v e) −u + 5v
π e
c) 5u − πv f ) πeu + ev h) v + u
e π

Haga la gráfica en cada caso.


3. Dados los siguientes vectores, encuentre el vector unitario:

a) (2, 4, 9, −3) d ) (3, 6, 1) g) (12, −9, −8)


b) (−8, 2, 5) e) (0, 1, −4) π e e 
c) (4, 5, −9) f ) (π, π) h) , , , e, e, π
e π π

4. Dada la longitud y la dirección encuentre el vector de R2 :



a) |u| = 3.2 y dirección π3 d ) |u| = 2.32147 y dirección 6
π
b) |u| = 6.547 y dirección 4
π
c) |u| = 9 y dirección π e) |u| = 1 y dirección 2

5. Determine si los vectores dados a continuación, son paralelos, ortogonales o ninguno


de los dos:

a) u = (1, 2, 9) y v = (2, −1, 9) d ) u = (4, 4, −8) y v = (1, 1, −5)


b) u = (−1, 8) y v = (−1, −8) e) u = (5, 0, −1) y v = (2, 3, 7)
c) u = (2, 5, 9, 7) y v = (4, 10, 18, 14) f ) u = (0, 0, 2) y v = (1, 1, 5)

6. Sean los vectores u = 4k1 i + 7k2 j y v = k1 i − 2k2 j. Encuentre los valores de k1 y k2


tal que:

π
a) u y v sean ortogonales. c) El ángulo entre u y v sea de 6
π
b) u y v sean paralelos. d ) El ángulo entre u y v sea de 2
248 5.2. Vectores en Rn

7. Determine proyv u y proyu v si u y v están dados de la siguiente forma:

a) u = (4, 4, 2) y v = (7, 5, 9) d ) u = (0, 0, 1) y v = (5, 4, 7)


b) u = (−9, 3) y v = (2, 0) e) u = (0, −1) y v = (4, 7)
c) u = (4, 5, 3, −9) y v = (−9, 3, 5, 4) f ) u = (2, 5, 47) y v = (2, −2, 5)

8. Dados u y v encuentre u × v y v × u:

a) u = (3, 2, 1) y v = (4, 6, 9) e) u = (7, 1, 2) y v = (4, 4, 0)


b) u = (0, 1, 0) y v = (1, 0, 0)
f ) u = (1, −2, 1) y v = (1, 2, 1)
c) u = (3, 3 − 4) y v = (4, 5, 7)
d) u = (0, 1, 1) y v = (2, 3, 0) g) u = (0, 0, 2) y v = (5, 4, 8)

9. Implemente un algoritmo con las siguientes características:


1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 def productocruz (u , v ) :
5 .
6 .
7 .
8 return w

La función productocruz(u,v): debe recibir como parámetros dos vectores u y


v; y debe devolver el vector w, es decir, el producto cruz entre ellos usando
determinantes.

10. Implemente un algoritmo con las siguientes características:


1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 d e f t r i p l e p r o d u c t o e s c a l a r ( u , v , w) :
5 .
6 .
7 .
8 return k

La función tripleproductoescalar(u,v,w): debe recibir como parámetros dos vectores


u, v y w; y debe devolver la variable k con el triple producto escalar entre los tres
vectores.
5. Vectores y Espacios vectoriales 249

Nota: Antes de programar este algoritmo, demuestre que si u = (a1 , b1 , c1 ),


v = (a2 , b2 , c2 ) y u = (a3 , b3 , c3 ), entonces:

a1 b1 c1
u · (v × w) = a2 b2 c2
a3 b3 c3

11. Demuestre los teoremas 5.1, 5.2, 5.3 y 5.4.

5.3. Espacio vectorial


Los espacios vectoriales son en realidad un conjunto de vectores que cumplen con
ciertas propiedades. Algunos textos de Álgebra Lineal, consideran este tema como el
más importante, de hecho, para estos textos el primer capítulo es este. Sin embargo, es
difícil entender el concepto de Espacio vectorial sin antes comprender conceptos como los
de matrices y vectores. Veamos la definición de espacio vectorial.

.:Definición 5.22 Diremos que el conjunto de vectores V , con dos operaciones, adición
+ y producto por escalar (·), son un espacio vectorial si satisfacen los siguientes axiomas:

1. Si v1 y v2 están en V , entonces v1 + v2 pertenece a V , diremos entonces que la


suma es cerrada en V .

2. (v1 + v2 ) + v3 = v1 + (v2 + v3 ) para todo v1 , v2 , v3 ∈ V . La ley asociativa.

3. Existe un elemento 0 que pertenece a V , tal que v1 + 0 = 0 + v1 = v1 para toda


v1 ∈ V . Elemento neutro de la suma o vector idéntico aditivo3 .

4. Para cada v que pertenece a V , existe un elemento −v en V , tal que v + (−v) = 0.


Elemento inverso de la suma.

5. v1 + v2 = v2 + v1 para todo v1 , v2 en V . Ley conmutativa de la suma de vectores.

6. Si v ∈ V y α es un escalar (α ∈ R o α ∈ C), entonces αv ∈ V . Diremos que V es


cerrado bajo producto escalar.

3 El símbolo 0, hace referencia al vector nulo y no al cero de los números reales.


250 5.3. Espacio vectorial

7. Para todo escalar α y para todo v1 y v2 ∈ V , se cumple que α(v1 + v2 ) = αv1 + αv2 .
Distributiva del producto escalar frente a la suma de vectores.

8. Para todo α, β escalares y v ∈ V , se cumple que4 (α + β)v = αv + βv .

9. Para todo α, β escalares y v ∈ V , se cumple que α(βv) = (αβ)v .

10. Si se tienen el escalar 1, 1v = v para todo v ∈ V .

Si los elementos que componen los vectores de un espacio vectorial V , pertenecen a los
reales; diremos que es un espacio vectorial real. Si dichos elementos son números complejos,
diremos que es un espacio vectorial complejo.

Ahora bien: ¿todo conjunto de vectores es un espacio vectorial?. Los dos ejemplos
mostrados a continuación, son comunes en varios textos de Álgebra Lineal, en este caso
tomaremos el ejemplo de [11] para ilustrar qué es y qué no es un espacio vectorial.

.:Ejemplo 5.20 Sea V , el conjunto de vectores de la forma v = (x, y) tal que:

V = {v = (x, y) : ax + by = 0, a, b ∈ R}
podemos ver que V es un conjunto de vectores que están sobre las lineas rectas que pasan
por el origen del plano xy.

Para ajustarnos a la definición 5.22, debemos demostrar que V cumple los 10 axiomas:
1. Sean v1 = (x1 , y1 ) y v2 = (x2 , y2 ), de forma que v1 , v2 ∈ V , entonces debemos
demostrar que v1 + v2 también pertenece a V .
Si v1 ∈ V entonces se cumple que:

ax1 + by1 = 0 (5.1)

de igual forma si v2 ∈ V , se cumple que:

ax2 + by2 = 0 (5.2)

Sumando las ecuaciones 5.1 y 5.2 tenemos que:

ax1 + by1 + ax2 + by2 = 0


4 Elsigno + del lado izquierdo de la ecuación, hace referencia a la operación aritmética suma. El signo
+ del lado derecho hace referencia a la suma de vectores.
5. Vectores y Espacios vectoriales 251

Sacando factor común y agrupando tenemos:

ax1 + ax2 + by1 + by2 = 0


a(x1 + x2 ) + b(y1 + y2 ) = 0

Lo que muestra, que es una recta que pasa por el origen de R2 .


2. Sean v1 = (x1 , y1 ), v2 = (x2 , y2 ) y v3 = (x3 , y3 ) de forma que v1 , v2 , v3 ∈ V , entonces
debemos demostrar que v1 + (v2 + v3 ) = (v1 + v2 ) + v3 .
Si v1 ∈ V entonces, ax1 + by1 = 0, de igual forma con v2 tendríamos ax2 + by2 = 0
y con v3 , ax3 + by3 = 0, entonces v2 + v3 ∈ V y por el paso 1 tenemos:

a(x2 + x3 ) + b(y2 + y2 ) = 0

Ahora bien, si a la ecuación anterior le agregamos v1 tendremos que:

a(x1 + x2 + x3 ) + b(y1 + y2 + y2 ) = 0

En esta ecuación, podemos aplicar la ley asociativa de los números reales de la


siguiente forma:
a ((x1 + x2 ) + x3 ) + b ((y1 + y2 ) + y2 ) = 0

lo que implica que: (v1 + v2 ) + v3 = v1 + (v2 + v3 ).


3. Sea 0 = (0, 0), entonces a0 + b0 = 0, luego 0 es el elemento neutro de la suma o
vector idéntico aditivo.
4. Sea v1 que pertenecen a V , si tenemos v1 = (x1 , y1 ), entonces existe v1′ = (−x1 , −y1 ),
pues recordemos que los componentes de los vectores son los números reales. Si
sumamos v1 + v1′ , tenemos:

v1 + v1′ = (x1 + (−x1 ), y1 + (−y1 ))


= (0, 0)

5. Tenemos v1 = (x1 , y1 ) y v2 = (x2 , y2 ), con v1 , v2 ∈ V , si tomamos v1 + v2 por el


punto uno sabemos que:

a(x1 + x2 ) + b(y1 + y2 ) = 0

Aplicando la ley conmutativa de la suma en los números reales, podemos reescribir


la ecuación anterior de la siguiente forma:

a(x2 + x1 ) + b(y2 + y1 ) = 0

Luego v1 + v2 = v2 + v1 .
252 5.3. Espacio vectorial

6. Tomemos v1 = (x1 , y1 ), tal que v1 ∈ V y sea α ∈ R. Entonces αv1 = (αx1 , αy1 )


estaría dado de la siguiente forma:

a(αx1 ) + b(αy1 ) = 0

y seguiría representando una recta que pasa por el origen.

7. Sea α ∈ R y v1 , v2 ∈ V , entonces α(v1 + v2 ), estaría dado por α(x1 + x2 , y1 + y2 )


que es igual a (α (x1 + x2 ) , α (y1 + y2 )) que representa la ecuación

aα(x1 + x2 ) + bα(y1 + y2 ) = 0

reescribiendo la ecuación anterior tenemos:

aαx1 + aαx2 + bαy1 + bαy2 = 0


aαx1 + bαy1 + aαx2 + bαy2 = 0
α(ax1 + by1 ) + α(ax2 + by2 ) = 0

Lo que implica que α(v1 + v2 ) = αv1 + αv2

8. Sea α, β ∈ R y v1 = (x1 , y1 ) ∈ V , Si tenemos (α + β)v1 = ((α + β)x1 , (α + β)y1 )


entonces:
a(α + β)x1 + b(α + β)y1 = 0
Reescribiendo la ecuación anterior:

aαx1 + aβx1 + bαy1 + bβy1 = 0


aαx1 + bαy1 + aβx1 + bβy1 = 0
α(ax1 + by1 ) + β(ax1 + by1 ) = 0

Lo que implica que (α + β)v1 = αv1 + βv1 .

9. Para todo α, β ∈ R y v1 ∈ V , se tiene que α(βv1 ) = α (β(x1 , y1 )) = α (βx1 , βy1 ), lo


que implica que:

α (βax1 + βby2 ) = 0

aplicando las propiedades de los números reales tenemos:

αβax1 + αβby2 = 0

Lo que implica que (αβ)v1 .


5. Vectores y Espacios vectoriales 253

10. Sea v1 ∈ V , si se tienen el escalar 1, (1)v1 = (1)(x1 , y1 ), lo que implica:

(1)(ax1 + by1 ) = 0
ax1 + by1 = 0

Lo que implica que (1)v1 = v1 .

Como vemos, los puntos de una recta que pasan por el origen del plano xy genera un
espacio vectorial. Ahora veremos un ejemplo de lo que no es, un espacio vectorial. Para
ello, tomaremos las rectas que no pasan por el origen del sistema, es decir:

.:Ejemplo 5.21 Sea V , el conjunto de vectores de la forma v = (x, y) tal que:

V = {v = (x, y) : ax + by + c = 0, a, b, c ∈ R y (c 6= 0)}
Podemos ver que V es un conjunto de vectores que están sobre las líneas rectas que no
pasan por el origen del plano xy.

Ahora debemos demostrar que cumplen con los 10 axiomas:

1. Sean v1 = (x1 , y1 ) y v2 = (x2 , y2 ), de forma que v1 , v2 ∈ V , entonces debemos


demostrar que v1 + v2 también pertenece a V .
Si v1 ∈ V entonces puede tener la forma:

ax1 + by1 + c = 0
Ahora bien, v2 ∈ V puede tener la siguiente forma:

ax2 + by2 + c = 0

Se supone que v1 + v2 ∈ V , pero veamos que es v1 + v2 :

v1 + v2 = ax1 + by1 + c + ax2 + by2 + c = 0


= a(x1 + x2 ) + b(y1 + y2 ) + 2c = 0

Como vemos, v1 + v2 es a(x1 + x2 ) + b(y1 + y2 ) + 2c = 0 y donde el término 2c no


coincide con la definición del conjunto que es c. Esto implica que este conjunto no
es cerrado bajo la suma, lo que implica que no es un espacio vectorial.

Antes de continuar con otros ejemplos, veremos la definición de polinomios:


254 5.3. Espacio vectorial

.:Definición 5.23 Definimos Pn como el conjunto de todos los polinomios que


tienen grado igual o menor a n. de modo que:

Pn = p|p(x) = an xn + an−1 xn−1 + . . . + a1 x + a0

donde a1 , a2 , . . . , an ∈ R.

El siguiente ejemplo tomado de [11], muestra que los polinomios se pueden ver como
vectores de coeficientes y por lo tanto pueden formar espacios vectoriales, siempre que
estos conjuntos se adapten a la definición.

.:Ejemplo 5.22 Sea V , definido de la siguiente forma:



V = P2 : ax2 + bx + c, a, b, c ∈ R
Es decir, los polinomios de grado menor o igual a dos. Determine si V es un espacio
vectorial.
1. Sean p y q dos polinomios que pertenecen a V , tal que p = a1 x2 + b1 x + c1 y
q = a2 x2 + b2 x + c2 , entonces p + q estaría dado de la siguiente forma:
p+q = a1 x2 + b1 x + c1 + a2 x2 + b2 x + c2
= (a1 + a2 ) x2 + (b1 + b2 ) x + (c1 + c2 )

Que también es un polinomio de grado menor o igual a dos, lo que implica que
(p + q) ∈ V .
2. Supongamos que p, q, r ∈ V , de modo que p = a1 x2 + b1 x + c1 , q = a2 x2 + b2 x + c2
y r = a3 x2 + b3 x + c3 , entonces

p + (q + r) = a1 x2 + b1 x + c1 + a2 x2 + b2 x + c2 + a3 x2 + b3 x + c3

= a1 x2 + b1 x + c1 + a2 x2 + b2 x + c2 + a3 x2 + b3 x + c3
= (p + q) + r
Luego p + (q + r) = (p + q) + r, además, el polinomio (p + q) + r y el polinomio
p + (q + r) pertenecen a V por ser polinomios de grado menor o igual a dos.
3. Sea p ∈ V y sea 0 = 0x2 + 0x + 0 el polinomio de grado cero5 , entonces al hacer la
suma p + 0 tenemos:
p+0 = a1 x2 + b1 x + c1 + 0x2 + 0x + 0
= a1 x2 + b1 x + c1
= p
luego p + 0 = p
5 En este caso 0 representa el polinomio cero o nulo
5. Vectores y Espacios vectoriales 255

4. Tomemos p = a1 x2 + b1 x + c1 que pertenece a V , y −p = (−a1 )x2 + (−b1 )x + (−c1 )


también pertenece a V , entonces p + (−p) esta dado por:
p + (−p) = a1 x2 + b1 x + c1 + (−a1 )x2 + (−b1 )x + (−c1 )
= 0x2 + 0x + 0
= 0
luego p + (−p) = 0
5. Sea p = a1 x2 + b1 x + c1 y q = a2 x2 + b2 x + c2 que pertenecen a V . Entonces:
p+q = a1 x2 + b1 x + c1 + a2 x2 + b2 x + c2
= a2 x2 + b2 x + c2 + a1 x2 + b1 x + c1
= q+p
Luego p + q = q + p.
6. Si p ∈ V y α es un escalar y p = ax2 + bx + c entonces αp = α(ax2 + bx + c), de lo
cual se obtiene que αp = αax2 + αbx + αc, el cual pertenece a V . Diremos entonces
que V es cerrado con respecto al producto escalar.

7. Sea α ∈ R un escalar y p y q ∈ V , entonces α(p + q) sería:


α(p + q) = α(a1 x2 + b1 x + c1 + a2 x2 + b2 x + c2 )
= αa1 x2 + αb1 x + αc1 + αa2 x2 + αb2 x + αc2
 
= αa1 x2 + αb1 x + αc1 + αa2 x2 + αb2 x + αc2
 
= α a1 x2 + b1 x + c1 + α a2 x2 + b2 x + c2
= αp + αq
Por lo cual se cumple la propiedad distributiva del producto escalar frente a la suma
de vectores.

8. Para α, β ∈ R escalares y p ∈ V , si se tiene que:


(α + β)p = (α + β)(a1 x2 + b1 x + c1 )
= (α + β)a1 x2 + (α + β)b1 x + (α + β)c1
= αa1 x2 + βa1 x2 + αb1 x + βb1 x + αc1 + βc1
= αa1 x2 + αb1 x + αc1 + βa1 x2 + βb1 x + βc1
 
= αa1 x2 + αb1 x + αc1 + βa1 x2 + βb1 x + βc1
 
= α a1 x2 + b1 x + c1 + β a1 x2 + b1 x + c1
= αp + βp
Lo que implica que (α + β)p = αp + βp.
256 5.3. Espacio vectorial

9. Para α, β ∈ R escalares y p ∈ V , se tiene que:



α(βp) = α β a1 x2 + b1 x + c1

= (αβ) a1 x2 + b1 x + c1
= (αβ) p

10. Dado p ∈ V entonces (1) p = (1)(a1 x2 + b1 x + c1 ) = a1 x2 + b1 x + c1 = p.

Ya hemos visto la manera de demostrar que un grupo de vectores es un espacio vectorial.


Los siguientes conjuntos de vectores no son espacios vectoriales, y por lo tanto, veremos
que no cumplen con algunos items de la definición 5.22.

.:Ejemplo 5.23 Dado


V = {P2 | p(0) = 5}
Es decir, el conjunto de polinomios de grado menor o igual a dos tal que al evaluarse en
cero da como resultado 5; esto se puede interpretar como los polinomios de grado menor
o igual a 2 tales que sean de la forma:

ax2 + bx + 5 = 0

Si tomamos dos polinomio de este espacio vectorial p1 = a1 x2 +b1 x+5 y p2 = a2 x2 +b2 x+5,
al sumarlos tenemos:

p1 + p2 = a1 x2 + b1 x + 5 + a2 x2 + b2 x + 5

= (a1 + a2 )x2 + (b1 + b2 )x + 10

Luego p1 + p2 no esta en V . Ahora veamos que también falla el item 6 de la definición


5.22. Tomemos α ∈ R y p ∈ V , es decir, p debería ser de la forma

p(x) = ax2 + bx + 5 con a, b ∈ R

Al multiplicar α por p tenemos

αp(x) = αax2 + αbx + α5


pero este polinomio no pertenece a V , pues al evaluarlo en cero da como resultado α5 y
no 5.

SciPy y Numpy, tienen una librería especial para polinomios llamada polinomials. El
siguiente Algoritmo muestra cómo implementar los polinomios en Python:
5. Vectores y Espacios vectoriales 257

.:Algoritmo 5.3

1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p r i n t "Tenemos dos p o l i n o m i o s p y q : "
5
6 p = np . p o l y 1 d ( [ 1 , 2 , 1 ] ) ;
7 q = np . p o l y 1 d ( [ 3 , 2 , −5, 6 ] ) ;
8
9 p r i n t " \ nEl p o l i n o m i o p : \ n" , p
10 p r i n t " \n\ nEl p o l i n o m i o q : \ n" , q
11
12 p r i n t " \n E v a l u a r p ( 3 . 8 ) : " , p ( 3 . 8 8 5 4 7 )
13 p r i n t " \n E v a l u a r q ( 5 ) : " , q ( 5 )
14
15 p r i n t " \n El o rd e n de p : " , p . o r d e r
16 p r i n t " \n El o rd e n de q : " , q . o r d e r
17
18 p r i n t " \n Los c o e f i c i e n t e s de p: " , p. coeffs
19 p r i n t " \n Los c o e f i c i e n t e s de q: " , q. coeffs
20
21 p r i n t " \n l a v a r i a b l e de p : " , p . v a r i a b l e
22 p r i n t " \n l a v a r i a b l e de q : " , q . v a r i a b l e
23
24 p r i n t " \n l a s r a i c e s de p:" , p. r
25 p r i n t " \n l a s r a i c e s de q:", q. r
26
27 p r i n t " \n El c o e f i c i e n t e de x^2 de p : " , p [ 2 ]
28 p r i n t " \n El c o e f i c i e n t e de x^1 de q : " , q [ 1 ]
29
30 w = np . p o l y 1 d ( [ 2 , 0 , 1 ] , v a r i a b l e = ’ z ’ )
31
32 p r i n t " \n El p o l i n o m i o w con v a r i a b l e z : \ n" , w
33
34 p r i n t " \n O p e r a c i o n e s con p o l i n o m i o s \n "
35
36 p r i n t " \n E s c a l a r por un p o l i n o m i o : 4p=\n" , 4∗ p
37
38 p r i n t " \n Suma de p o l i n o m i o s : p+q=\n" , p+q
39
40 p r i n t " \n m u l t i p l i c a c i o n de p o l i n o m i o s : p∗q=\n" , p∗q
41
42 p r i n t " \n O p e r a c i o n e s en g e n e r a l 4∗ p+5∗q−w=\n" , 4∗p+5∗q−w
43
44 p r i n t " \n C o n t r u i r un p o l i n o m i o a p a r t i r de s u s r a i c e s : \ n"
45
46 k=np . p o l y 1 d ( [ 5 , −3, −8] , True )
47
48 p r i n t " \n El p o l i n o m i o r \n" , np . p o l y 1 d ( k )
49
50 p r i n t " \n Las r a i c e s de k=\n" , k . r
258 5.3. Espacio vectorial

El programa anterior produce la siguiente salida:

1 >>>
2 Tenemos dos p o l i n o m i o s p y q :
3
4 El p o l i n o m i o p :
5 2
6 1 x + 2 x + 1
7
8
9 El p o l i n o m i o q :
10 3 2
11 3 x + 2 x − 5 x + 6
12
13 Evaluar p ( 3 . 8 ) : 23.8678171209
14
15 E v a l u a r q ( 5 ) : 406
16
17 El o rd e n de p : 2
18
19 El o rd e n de q : 3
20
21 Los c o e f i c i e n t e s de p : [1 2 1]
22
23 Los c o e f i c i e n t e s de q: [ 3 2 −5 6]
24
25 l a v a r i a b l e de p : x
26
27 l a v a r i a b l e de q : x
28
29 l a s r a i c e s de p : [ −1. −1.]
30
31 l a s r a i c e s de q : [ − 2 . 0 0 0 0 0 0 0 0 + 0 . j 0 . 6 6 6 6 6 6 6 7 + 0 . 7 4 5 3 5 5 9 9 j
0.66666667 −0.74535599 j ]
32
33 El c o e f i c i e n t e de x^2 de p : 1
34
35 El c o e f i c i e n t e de x^1 de q : −5
36
37 El p o l i n o m i o w con v a r i a b l e z :
38 2
39 2 z + 1
40
41 O p e r a c i o n e s con p o l i n o m i o s
42
43 E s c a l a r por un p o l i n o m i o : 4p=
44 2
45 4 x + 8 x + 4
5. Vectores y Espacios vectoriales 259

46
47 Suma de p o l i n o m i o s : p+q=
48 3 2
49 3 x + 3 x − 3 x + 7
50
51 m u l t i p l i c a c i o n de p o l i n o m i o s : p∗q=
52 5 4 3 2
53 3 x + 8 x + 2 x − 2 x + 7 x + 6
54
55 O p e r a c i o n e s en g e n e r a l 4∗p+5∗q−w=
56 3 2
57 15 x + 12 x − 17 x + 33
58
59 C o n t r u i r un p o l i n o m i o a p a r t i r de s u s r a i c e s :
60
61
62 El p o l i n o m i o r
63 3 2
64 1 x + 6 x − 31 x − 120
65
66 Las r a i c e s de k=
67 [ 5 . −8. − 3 . ]
68
69 >>>

El Algoritmo 5.3 toma dos polinomio p(x) = x2 + 2x + 1 y q(x) = 3x3 + 2x2 − 5x + 6, cada
uno de ellos se genera con el comando p=np.poly1d([1, 2, 1]); la función poly1d([1, 2, 1]),
recibe como parámetros una lista con los coeficientes del polinomio. Los polinomios p y q
se declaran en las líneas 6 y 7.

Además, podemos obtener las siguientes funciones:

p(k): Evalúa un polinomio en un número k. En las líneas 12 y 13 podemos ver que se


evaluó p(3.88547) y q(5).

[Link] : Esta función no tiene parámetros y entrega el orden del polinomio. En las líneas
15 y 16 vemos que p es de orden 2 y q es de orden 3. El tamaño de la lista de los
coeficientes está relacionado con el orden del polinomio, si la lista es de tamaño n
el polinomio es de tamaño n − 1.

[Link]: Al igual que la función order, coeffs tampoco tiene parámetros. La función
entrega la lista con los coeficientes del polinomio, líneas 18 y 19.

[Link]: Esta función no tiene parámetros. En las líneas 21 y 22, vemos que entrega
la variable en la que está definida el polinomio.
260 5.3. Espacio vectorial

p.r : Con esta función, obtenemos las raíces del polinomio. En las líneas 24 y 25
obtenemos la lista con las raíces del polinomio p que son [−1.0, −1.0] y las de q
son [−2.00000000 + 0j, 0.66666667 + 0.74535599j, 0.66666667 − 0.74535599j] (la
primera es una raíz real, las demás son complejas).
p[k]: Esta opción, es diferente a p(k); en esta se hace referencia a la lista de coeficientes,
y entrega el coeficiente que tenga la variable x con la potencia k. En las líneas 27 y
28, se puede ver como obtenemos el coeficiente de x2 de p y el coeficiente de x de q
(líneas 27 a 28).
Con la opción w = np.poly1d([2,0,1], variable=’z’), podemos declarar un polinomio con la
variable z y no x como es común. Además, podemos realizar operaciones entre polinomios
como 4p, p + q, p ∗ q, 4 ∗ p + 5 ∗ q − w, en este último caso, p y q son polinomios con
variable x y w es con variable z, pero Python los suma sin mostrar un error (líneas 30 a
42).

Con la opción k=np.poly1d([5, -3, -8], True), creamos un polinomio con una lista de raíces
y no de coeficientes como hicimos anteriormente. Luego imprimimos el polinomio k y sus
raíces (líneas 44 a 50).

5.3.1. Propiedades de los espacio vectoriales


.:Teorema 5.6 Sea V un espacio vectorial, que cumple con los axiomas de la definición
5.22. Entonces:

1. El 0 o vector nulo de V , es único.


2. Para todo x ∈ V existe un único x′ ∈ V tal que x + x′ = 0.
3. α0 = 0 para todo escalar α ∈ R.
4. 0x = 0 para todo x ∈ V .
5. Si αx = 0, entonces tenemos tres posibilidades, primero que α = 0, que x = 0 o
ambos casos.
6. Si se toma el escalar -1, entonces (−1)x = −x para todo x ∈ V .

.:Ejercicios 5.2

1. Demuestre que:

a) Rn es un espacio vectorial.
5. Vectores y Espacios vectoriales 261

b) Pn es un espacio vectorial.
c) Mmn es un espacio vectorial. (Con la suma y multiplicación por escalar)
d ) Mnn es un espacio vectorial. (Con la suma y multiplicación por escalar)

2. En los siguientes ejercicios determine si V es o no espacio vectorial

a) V el conjunto de todos los vectores (x, y) con y ≤ 0, con las operaciones usuales
en R2 .
b) V = {0}, con las operaciones ordinarias de suma y multiplicación en R.
c) V = {k} (donde k ∈ R) con las operaciones de suma y producto en R.
d ) V = R, con las operaciones ordinarias de suma y multiplicación en R.

e) V = (x, y, z) ∈ R3 /x = 0, , y, z ∈ R con las operaciones usuales de R3 .
f ) V el conjunto de matrices invertibles n × n con las operaciones matriciales
ordinarias.
g) V el conjunto de matrices no invertibles n × n con las operaciones matriciales
ordinarias.

3. El comando p = np.poly1d([1, 2, 1]), genera el polinomio p(x) = x2 +2x+1. Numpy


en su librería polinomial ya tiene incorporado el comando para calcular la derivada
y la integral, como se muestra en el ejemplo:
1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p = np . p o l y 1 d ( [ 1 , 2 , 1 ] )
5 print p
6 print " "
7 print p . deriv (1)
8 print " "
9 print p . integ (2)

La salida de dicho programa se vería:


1 >>>
2 2
3 1 x + 2 x + 1
4
5 2 x + 2
6
7 4 3 2
8 0.08333 x + 0.3333 x + 0.5 x
9 >>>
262 5.3. Espacio vectorial

Como vemos, el programa imprime el polinomio, su primera derivada y la primera


integral. Para la derivada se utiliza el comando [Link](k), donde k es el orden de
la derivada. La integral se logra con [Link](k) donde k es el orden de la integral.

a) Construya una función en Python con las siguientes características:


1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p = np . p o l y 1 d ( [ 1 , 2 , 1 ] )
5
6 def derivada (p , k ) :
7 .
8 .
9 .
10 return (q , r )

Donde la función derivada(p,k), recibe como parámetros un polinomio p y un


valor real k ; la función debe retornar una tupla con la derivada del polinomio
(en q) y la evaluación de la derivada del polinomio en k en r. No puede usar
la función [Link](k).
b) Construya una función en Python con las siguientes características:
1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p = np . p o l y 1 d ( [ 1 , 2 , 1 ] )
5
6 def i ntegral D ef (p , a , b) :
7 .
8 .
9 .
10 return (q , r )

Donde la función integralDef(p,a,b), recibe como parámetros un polinomio p y


los límites de integración a y b (donde a es el inferior y b es el superior); la
función debe retornar una tupla con la integral del polinomio (en q) y el valor
r de la integral definida entre [a, b] de p, en otras palabras:
ˆ b
r= p(x)dx
a

Recuerde: no puede usar la función [Link](k).


5. Vectores y Espacios vectoriales 263

5.4. Subespacio vectorial


Un Subespacio vectorial es un subconjunto de un espacio vectorial, es decir, es un conjunto
de vectores que cumple con los 10 axiomas descritos en la definición 5.22.

.:Definición 5.24 Subespacio vectorial:


Sea H un subconjunto de un espacio vectorial V y suponga que H en sí mismo es un
espacio vectorial con las operaciones de suma y multiplicación por un escalar definidas en
V . Entonces se afirma que H es un subespacio de V .

De acuerdo a la definición anterior, un subespacio tiene las siguientes características:

.:Teorema 5.7 Sea V un espacio vectorial sobre un campo K. Decimos que H es un


subespacio de V si H satisface las siguientes cuatro condiciones:

1. H es subconjunto de V

2. H es diferente de vacío.

3. H es cerrado con respecto a la suma, es decir, si x ∈ H e y ∈ H, entonces x+y ∈ H

4. H es cerrado con respecto a la multiplicación por escalar, es decir, si x ∈ H,


entonces αx ∈ H para todo escalar α.

Los subespacios no vacíos son relativamente más fáciles de identificar, pues sólo falta
comprobar las reglas 3 y 4 del Teorema 5.7 , el cual, establece que para ser subespacio
vectorial, sólo se debe comprobar la cerradura bajo la suma y la cerradura bajo la
multiplicación por escalar. Además, debemos garantizar que el subespacio de un espacio
vectorial V contenga el vector nulo 0.

Según la teoría de conjuntos, tanto el conjunto mismo como el conjunto vacío, son
subconjuntos del conjunto original; en el caso de los espacios vectoriales, pasa exactamente
lo mismo: si V es un espacio vectorial, entonces V es un subespacio de V y el conjunto
vacío ∅ también es subespacio de V . De igual manera ocurre con {0}, es decir, el conjunto
unitario que sólo contiene el vector nulo.

Los siguientes ejemplos, muestran como determinar que un subconjunto de vectores, es


subespacio de un espacio vectorial V :


.:Ejemplo 5.24 Sea H = (x, y) ∈ R2 /xy ≥ 0 y V = R2 . Comprobar que H es
subespacio de V .
264 5.4. Subespacio vectorial

Bien, el espacio vectorial V es el plano, es decir, nuestros vectores representan todos los
puntos que están en el plano xy. Ahora bien, el subconjunto H, representa todos los
puntos del plano, tales que al multiplicar las componentes del punto, esta multiplicación
debe ser positiva. En este caso, H estaría representando los puntos del plano que están en
el primer y tercer cuadrante. Por ejemplo, el punto v = (2, 3) esta en H, pues 2 ∗ 3 ≥ 0,
u = (−2, −5) también esta en H pues −2 ∗ (−5) ≥ 0; sin embrago, el vector w = (2, −1)
no pertenece a H, pues 2 ∗ (−1) 6≥ 0. Veamos ahora, como es el proceso para determinar
si H es subespacio de V :

1. H ⊆ V : pues H es el conjunto de puntos en el plano, que están en el primer y tercer


cuadrante incluyendo los puntos de los ejes coordenados.

2. El punto (0, 0) ∈ H, luego H es diferente de vacío.

3. Si v1 = (x
1 , y1 ) y v2= (x2 , y2 ) y v1 , v2 ∈ H, entonces x1 y1 ≥ 0 y x2 , y2 ≥ 0 y
x1 + x2
v1 +v2 = , pero en este caso, puede suceder que (x1 + x2 ) (y1 + y2 ) < 0,
y1 + y2
por ejemplo, si v1 = (−8, −10) y v2 = (3, 15), ambos pertenecen a H,
pero v1 + v2 = (−5, 5), el cual, no pertenece a H, pues (x1 + x2 ) (y1 + y2 ) =
(−8 + 3) (−10 + 15) = −25 < 0, luego, se concluye que H no es cerrado con respecto
a la suma y por tanto H no es subespacio de R2 .

.:Ejemplo 5.25 Sea H = (x, y) ∈ R2 /y = 0 y V = R2 . Comprobar que H es
subespacio de V .

El subconjunto H, representa todos los puntos del espacio que están en la recta real x, es
decir, son todos los puntos del plano que están sobre el eje x. Por ejemplo, el punto (3, 0)
y (−5, 0) pertenecen a H, pero (2, −4) y (1, 5) no están en H.

1. H ⊆ V : pues H es el conjunto de puntos en el plano, que están en el eje x.

2. El punto (0, 0) ∈ H, luego H es diferente de vacío.

3. Si v1 = (x1 , 0) y v2 = (x2 , 0) y v1 , v2 ∈ H, entonces v1 + v2 = (x1 + x2 , 0 + 0) =


(x1 + x2 , 0), luego v1 + v2 ∈ H. Como vemos, dos vectores de H al sumarsen, nos
dan como resultado otro vector cuya componente y es cero, por tanto, se cumple la
cerradura bajo la suma.

4. Si v1 = (x1 , 0), α ∈ R y v1 ∈ H, entonces αv1 = (αx1 , α0) = (αx1 , 0), luego


αv1 ∈ H. Como vemos, si tomamos un vector de H y lo multiplicamos por un escalar,
el resultado es otro vector que tiene la componente y = 0, por tanto, perteneces a
H.

.:Ejemplo 5.26 Sea H = {p(x) ∈ P2 /p(0) = 0} y V = P2 . Comprobar que H es


subespacio de V .
5. Vectores y Espacios vectoriales 265

El conjunto V está conformado por los polinomios de grado menor o igual a 2. H está
conformado por los polinomios de grado 2, que al evaluarlos en cero, da como resultado
cero; en pocas palabras, son los polinomios de grado menor o igual a dos, donde el
coeficiente de x0 es cero. Por ejemplo x2 + 2x y 3x pertenecen a H, pero 7x2 + x − 6 y
3x + 9 no pertenecen a H.

1. H ⊆ V : pues H es el conjunto de polinomios donde el coeficiente de x0 es cero.


2. El punto 0 ∈ H, pues 0x2 + 0x + 0 es el polinomio nulo, luego H es diferente de
vacío.
3. Si p1 , p2 ∈ H, y p1 = a1 x2 b1 x y p2 = a2 x2 b2 x, entonces p1 + p2 = a1 x2 b1 x + a2 x2 b2 x
= (a1 + a2 )x2 + (b1 + b2 )x, luego p1 + p2 ∈ H. Como vemos, dos polinomios de H
al sumarse, nos dan como resultado otro polinomio de H, por tanto, se cumple la
cerradura bajo la suma.
4. Si p1 = a1 x2 + bx, α ∈ R y p1 ∈ H, entonces αp1 = αa1 x2 + αb1 x, luego αp1 ∈ H.
Como vemos, si tomamos un polinomio de de H y lo multiplicamos por un escalar,
el resultado es otro polinomio de H.

.:Ejercicios 5.3

1. En los siguientes ejercicios, dado el espacio vectorial V y el subconjunto H.


Comprobar si H es un subespacio de V

a) V = R2 , H = {(x, y) : y = 0}
b) V = R2 , H = {(x, y) : x = 2y}
c) V = R2 , H = {(x, y) : x − 7y + 5 = 0}
d ) V = P4 , W = {p ∈ P4 : p (0) = k, Para k ∈ R}
e) V = Mnn , H = {A ∈ Mnn : A es simétrica}
f ) V = Mnn , H = {A ∈ Mnn : A es antisimétrica}
g) V = Mnn , H = {A ∈ Mnn : A es triangular superior}
h) V = Mnn , H = {A ∈ Mnn : A es invertible}

i) V = R3 , H = (x, y, z) : x2 + y 2 + z 2 = 16
  
a 0
j ) V = M22 , H = A ∈ M22 : A =
0 b
k ) V = Mnn y H = {A ∈ Mnn : trA = 0}
   
a b c
l ) V = M23 , H = A ∈ M23 : A = , donde b = 2a + c .
d 0 0

2. Demuestre que:
266 5.5. Combinación lineal de vectores

a) Si H1 y H2 son subespacios de un espacio vectorial V . Entonces H1 ∩ H2 es


un subespacio de V .
b) Si H1 y H2 son subespacios de un espacio vectorial V . Entonces H1 ∪ H2 no
necesariamente es un subespacio de V .

5.5. Combinación lineal de vectores


El concepto de combinación lineal se usará en otros conceptos que veremos en el transcurso
de este texto, pero además, lo usaremos en otras ramas de las matemáticas.

.:Definición 5.25 (Combinación lineal)


Sean v1 , v2 ,. . .,vn ∈ V . Decimos que x es combinación lineal de v1 , v2 ,. . .,vn si
existen escalares α1 , α2 ,. . .,αn , tales que:

x = α1 v1 + α2 v2 + · · · + αn vn
Xn
= αi vi
i=1

El concepto de combinación lineal, generalmente se asocia a un conjunto de vectores, pero


en realidad estamos hablando de un sólo vector. Dicho vector se crea con un conjunto de
vectores del mismo tamaño y del mismo espacio vectorial, que luego se multiplican por
escalares del mismo campo, es decir, si estamos trabajando con vectores de número reales,
los escalares deben ser números reales. El nuevo vector que es la combinación lineal, es la
suma de los vectores dados inicialmente, multiplicados por los correspondientes escalares.

Un vector x, se puede escribir como una combinación lineal de si mismo x = 1x.


Así mismo, el vector nulo se puede escribir como la combinación lineal de cualquier
cantidad de vectores 0 = 0x1 + 0x2 + · · · + 0xn . Los polinomios se pueden ver como
una combinación lineal, entre un conjunto de variables y un conjunto de constantes que
serían los coeficientes del vector.

Los siguientes ejemplos ilustran el concepto de combinación lineal.

.:Ejemplo 5.27
   
−1 2
Tomemos los vectores en R3 : v1 =  2  y v2 =  −4 , tomando α1 = 3 y α2 = −1,
9 7
5. Vectores y Espacios vectoriales 267

obtenemos:
     
2 −1 2
 −4  = 3  2  + (−1)  −4 
7 9 7
   
−3 −2
=  6 + 4 
27 −7
 
−5
=  10 
20
 
−5
Decimos que  10  es combinación lineal de v1 y v2 con los escalares α1 = 3 y α2 = −1.
20

.:Ejemplo 5.28
   
3 7 1 4
Las matrices de M22 : A = yB = , tomando α1 = 9 y α2 = −2,
0 1 5 −1
obtenemos:      
25 55 3 7 1 4
= (9) + (−2)
−10 11 0 1 5 −1
 
25 55
La matriz es combinación lineal de las matrices A y B, con α1 = 9 y
−10 11
α2 = −2.

.:Ejemplo 5.29

En P3 , tenemos los polinomios P (x) = 2x3 − x2 + 6 y Q (x) = 5x2 + 18

H(x) = 7P (x) + 8Q(x)


= 7(2x3 − x2 + 6) + 8(5x2 + 18)
= 14x3 − 7x2 + 42 + 40x2 + 144
= 14x3 + 33x2 + 186

Luego, el polinomio H(x) es una combinación lineal de los polinomios P (x) y Q(x) con
α1 = 7 y α2 = 8
268 5.5. Combinación lineal de vectores

5.5.1. Conjunto generador


El conjunto generador, es un concepto que nos permite ver el alcance de un conjunto de
vectores, es decir, qué clase de vectores se pueden generar como combinación lineal, con
el conjunto inicial de vectores. El conjunto generador, es fundamental para el concepto
de bases.

.:Definición 5.26 Sea V un espacio vectorial sobre un campo K y sea S =


{v1 , v2 , . . . , vr } un subconjunto finito, no vacío de V . El subespacio H que consta de
todas las combinaciones lineales de v1 , v2 , . . . , vr , es llamado subespacio generado
por S y se denota por gen {S} o gen {v1 , v2 , . . . , vr }

.:Ejemplo 5.30
   
1 0
Los vectores y , se conocen como bases canónicas de R2 . de igual manera, los
0 1
     
1 0 0
vectores  0  ,  1  y  0 , se conocen como bases canónicas de R3 . En términos
0 0 1
     
1 0 0
 0   1   0 
     
generales, los vectores  .  ,  .  · · ·  . , se conocen como la base canónica para
 ..   ..   .. 
0 0 1
Rn .


3
Si queremos construir el vector  5  de R3 , entonces, podemos generarlo de la
−2
siguiente forma:
       
3 1 0 0
 5  = 3 0 +5 1  −2 0 
−2 0 0 1
Como podemos apreciar,
bastacon
 cambiar
  los 
escalares
 para generar el vector deseado.
 1 0 0 
Esto implica que gen  0  ,  1  ,  0  genera a R3 . De la misma manera
 
0 0  1   
 1 4 2 
con Rn . La pregunta es: ¿gen  2  ,  −7  ,  1  también puede generar
 
1 2 5
 
3
 5 ?
−2
5. Vectores y Espacios vectoriales 269

     
 1 4 2 
.:Ejemplo 5.31 Determine si  2  ,  −7  ,  1  puede generar a
 
  1 2 5
3
 5 :
−2
Sólo debemos determinar si existen escalares k1 , k2 y k3 tales que:
       
3 1 4 2
 5  = k1  2  + k2  −7  + k3  1 
−2 1 2 5
Si realizamos las operaciones planteadas, obtendremos la siguiente igualdad entre vectores:
   
3 k1 + 4k2 + 2k3
 5  =  2k1 − 7k2 + k3 
−2 k1 + 2k2 + 5k3
Lo que equivale a resolver el sistema:

k1 + 4k2 + 2k3 = 3
2k1 − 7k2 + k3 = 5
k1 + 2k2 + 5k3 = −2
que al resolverlo, obtenemos k1 = 4.4509804, k2 = 0.3529412 y k3 = −1.4313725,
entonces:
       
3 1 4 2
 5  = 4.4509804  2  + 0.3529412  −7  − 1.4313725  1 
−2 1 2 5
Bien, en este caso si es posible comprobar, si un conjunto de vectores genera un vector;
pero podemos preguntarnos: ¿cualquier conjunto de tres vectores puede generar un vector
dado de R3 ?, ¿dos vectores de R3 , pueden generar cualquier vector de R3 ? mejor aun ¿un
vector de R3 , pueden generar cualquier vector de R3 ?. Los siguientes ejemplos pueden
ilustrar la repuesta a nuestra pregunta:

     
 4 2  3
.:Ejemplo 5.32 Determine si  −7  ,  1  puede generar a  5  :
 
2 5 −2
Aplicamos la misma estrategia, debemos encontrar escalares k1 y k2 tales que:
     
3 4 2
 5  = k2  −7  + k3  1 
−2 2 5
270 5.5. Combinación lineal de vectores

Lo que implica que:


   
3 4k2 + 2k3
 5  =  −7k2 + k3 
−2 2k2 + 5k3

Que resulta en el sistema:

4k2 + 2k3 = 3
−7k2 + k3 = 5
2k2 + 5k3 = −2

Este sistema tiene tres ecuaciones


 (filas)
  y dos
variables (columnas), yno tiene
 solución,
 4 2  3
por lo tanto, los vectores  −7  ,  1  no pueden generar a  5 .
 
2 5 −2

.:Ejemplo 5.33 Pn representa todo polinomio de grado menor o igual a n, se


puede expresar cualquier polinomio como una combinación lineal de los monomios
1, x, x2 , . . . , xn ; luego generan a Pn .

El polinomio 3x2 + 2x + 9 se puede expresar como combinación lineal de los monomios


1, x, x2 , . . . , xn

3x2 + 2x + 9 = 0xn + 0xn−1 + · · · + 3x2 + 2x + 9


 
a b
.:Ejemplo 5.34 M22 es el conjunto de matrices de tamaño 2 × 2, si M22 = ,.
       cd
1 0 0 1 0 0 0 0
se puede generar con el conjunto , , ,
0 0 0 0 1 0 0 1
 
2 −1
La matriz se puede expresar:
4 5
         
2 −1 1 0 0 1 0 0 0 0
= (2) + (−1) + (4) + (5) .
4 5 0 0 0 0 1 0 0 1
 
2 −1
=
4 5
       
1 0 0 1 0 0 0 0
Entonces, , , , generan M22 .
0 0 0 0 1 0 0 1
5. Vectores y Espacios vectoriales 271

5.5.2. Espacio generado


.:Definición 5.27 (Espacio generado)
Sean v1 , v2 , . . . , vn , n vectores de un espacio vectorial V . El conjunto de todas las
combinaciones lineales de los vectores v1 , v2 , . . . , vn , se conoce como el generado
de v1 , v2 , . . . , vn y se denota:

gen {v1 , v2 , . . . , vn } = {x : x = α1 v1 , α2 v2 , . . . , αn vn }

donde α1 , α2 , . . . , αn son escalares.

Podemos interpretar el espacio generado, como el posible espacio vectorial que se puede
obtener, al agrupar un número finito de vectores. Ahora bien, podríamos preguntarnos
¿todo subconjunto de vectores de un espacio vectorial, es subespacio del espacio vectorial
original? El siguiente teorema nos aclara la situación.

.:Teorema 5.8 Si v1 , v2 , . . . , vn vectores del espacio vectorial V , el gen{v1 , v2 , . . . , vn } es


un subespacio de V .

Como vemos, un conjunto tiene el potencial de ser subespacio vectorial, sólo se requiere
verificar la cantidad de elementos del subconjunto.

 
3
.:Ejemplo 5.35 Tomemos el espacio vectorial R2 y el conjunto S = ,
−7
entonces:

        
3 x x 3
gen = =α , α∈R
−7 y y −7
   
x α3
=
y −α7
Luego

x = 3α
y = −α7

Donde
x
α=
3
x
Luego y = −α7, es decir, y = − 3 7, lo que me representa el conjunto de puntos en el
plano que está sobre la recta y = − 73 x. Por ejemplo tomemos α = 5, entonces
272 5.5. Combinación lineal de vectores

     
x (5)3 15
= =
y −(5)7 −35

En los siguientes ejemplos tomados de [11], se muestra como un conjunto de dos vectores,
genera un plano en el espacio y como dos polinomios generan los polinomios de grado 1:

   
 1 1 
.:Ejemplo 5.36 Tomemos R3 y el conjunto S =  2  ,  0  , entonces:
 
−1 1
             
 1 1   x x 1 1 
gen  2  ,  0  =  y   y  = α1  2  + α2  0  , α1 , α2 ∈ R
   
−1 1 z z −1 1

Para encontrar la relación entre x, y y z y los vectores, tomamos:


   
x α1 + α2
 y = 2α1 
z −α1 + α2

x = α1 + α2
y = 2α1
z = −α1 + α2
En forma matricial tenemos:
 
1 1 | x
 2 0 | y 
−1 1 | z
Ahora procedemos aplicar eliminación Gaussiana.
   
1 1 | x 1 1 x
 2 0 | y  f2 → f2 + (−2)f1  0 −2 −2x + y 
−1 1 | z −−−−−−−−−−−−→ −1 1 z
   
1 1 x 1 1 x
 0 −2 −2x + y  f3 → f3 + f1  0 −2 −2x + y 
−1 1 z −−−−−−−−−→ 0 0 −x + y + z
Luego los elementos de gen {S} deben satisfacer.

−x + y + z = 0
5. Vectores y Espacios vectoriales 273

  
 x 
Entonces gen {S} =  y  − x + y + z = 0 , lo que representa los puntos de R3
 
z
que están sobre el plano que pasa por el origen.

.:Ejemplo 5.37 Describa el espacio generado por los siguientes polinomios:


P1 (x) = 3x + 2
P2 (x) = −x − 4

El problema consiste en determinar que clase de polinomios se generan de las posibles


combinaciones lineales de dichos vectores. Entonces sea P = {3x + 2, −x − 4}

gen(P) = {P (x)/P (x) = k1 (3x + 2) + k2 (−x − 4), k1 , k2 ∈ R}


Sumando las componentes internas tenemos:

gen(P) = {P (x)/P (x) = 3k1 x + 2k1 − xk2 − 4k2 , k1 , k2 ∈ R}


Agrupando términos semejantes:

gen(P) = {P (x)/P (x) = 3k1 x − xk2 + 2k1 − 4k2 , k1 , k2 ∈ R}

= {P (x)/P (x) = (3k1 − k2 )x + 2(k1 − 2k2 ), k1 , k2 ∈ R}

El espacio generado son todos los polinomios de grado menor o igual a 1.

El siguiente teorema nos muestra que podemos agregar vectores

.:Teorema 5.9 Sean v1 , v2 , . . . , vn , vn+1 , n + 1 vectores de un espacio vectorial V . Si


v1 , v2 , . . . , vn genera a V , entonces v1 , v2 , . . . , vn , vn+1 también genera a V .

.:Ejemplo 5.38 El espacio vectorial R2 puede ser generado por el conjunto


   
1 0
A= ,
0 1

Muestre que se puede generar R2 con el conjunto de vectores:


     
1 0 3
S= , ,
0 1 −2
274 5.5. Combinación lineal de vectores

Tomamos:        
1 0 3 x
α1 + α2 + α3 =
0 1 −2 y
Ahora, tomamos α3 = 0 y se tiene que:

       
1 0 3 x
α1 + α2 + (0) =
0 1 −2 y
     
1 0 x
α1 + α2 =
0 1 y

Quedando el sistema

α1 = x
α2 = y
   
x α1
Entonces = , por que se concluye que, el conjunto de vectores S genera el
y α2
espacio vectorial R2 .

.:Ejercicios 5.4

1. Encuentre el subespacio generado por cada uno de los siguientes conjuntos de


vectores, en el espacio vectorial correspondiente:
   
 −1 −6 
a) S =  −1  ,  44 
 
0 −1
   
 −9 1 
b) S =  1  ,  7 
 
1 0
   
−4 −1
c) S = ,
−1 −2
   
0 0
d) S = ,
3 1
   
1 0 0 0
e) S = ,
0 0 0 1
     
0 1 1 1 0 0
f) S = , ,
−1 0 0 0 −1 1
 2
g) S = x + 2x, x4 + 2x, x3 + 2x
5. Vectores y Espacios vectoriales 275

2. Sean p1 = x2 −x, p2 = x3 −x−1, p3 = x4 −x. Determine si los siguientes polinomios


son combinación lineal de p1 , p2 y p3 .

a) x2 + 4x
b) x3 + 4x − 2
c) 4x3 − 2x2 + 2
d ) −5x5 + 7x2 − x
     
1 4 0
3. Sean v1 =  1 , v2 =  5 , v3 =  1 . Determine (si es posible) los
2 −1 0
escalares apropiados para que los vectores generen el vector dado.
   
5 5
a)  3  d)  2 
2 7
   
2 −2
b)  3  e)  −1 
4 −1
   
8 1
c)  4  f)  1 
1 0

4. Dado el espacio vectorial dado, determine si los vectores generan dicho espacio
vectorial.
   
1 3
a) R2 con , .
0 7
 
2 0
b) En R ; .
6
     
1 1 −1
c) En R3 ;  4 ,  4 ,  −5 .
0 9 0
       
1 0 7 0
d ) En R2 ;  −1 ,  −1 ,  4  ,  0 
1 4 2 −1

5. Muestre que un conjunto de n − 1 vectores de Rn no puede generar a Rn .

6. Construya una función en Python con las siguientes características:


276 5.6. Dependencia e independencia lineal de vectores

1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4
5
6 d e f e s p a c i o g e n e r a d o ( ConjunV , n ) :
7 .
8 .
9 .
10 return l i s t a

Donde la función espaciogenerado(ConjunV,n), recibe como parámetros un una lista


de vectores en la variable ConjunV, que representa una lista de vectores que serán
el conjunto generador. La variable n, es la cantidad de elementos de ese espacio
generado, que vamos a retornar en la variable lista.

5.6. Dependencia e independencia lineal de vectores


El concepto de dependencia lineal, nos permiten determinar si un conjunto de vectores
están relacionados, es decir, si un nuevo vector es o no producto de la combinación lineal
de dicho conjunto de vectores.

.:Definición 5.28 (Linealmente independiente y Linealmente dependiente)


Sea S = v1 , v2 , . . . , vn , n vectores distintos del espacio vectorial V . Se dice
que los vectores de S son linealmente dependiente o LD, si existen n escalares
k1 , k2 , . . . , kn , no todos cero, tales que:

k1 v1 + k2 v2 + . . . + kn vn = 0 (5.3)

Si los vectores no son linealmente dependientes, entonces se les llama linealmente


independientes, LI, es decir, si la ecuación:

k1 v1 + k2 v2 + . . . + kn vn = 0

es válida si y solamente si k1 = k2 = · · · = kn = 0.

La ecuación (5.3) puede llegar a ser cero si escogemos todos los k iguales a cero, es decir,
k1 = k2 = · · · = kn = 0. Lo interesante sería averiguar, si existe un conjunto de vectores
es L.D, el cual, no utilice constantes k distintas de cero.

   
1 2
.:Ejemplo 5.39 En R2 , sea A = , , determine si este conjunto de
4 3
5. Vectores y Espacios vectoriales 277

vectores es LI o LD.

La tarea es determinar, si existen constantes c1 y c2 , tales que su combinación lineal de


como resultado el vector nulo:
     
1 2 0
c1 + c2 =
4 3 0
Queda como resultado el siguiente sistema de ecuaciones lineales:

c1 + 2c2 = 0
4c1 + 3c2 = 0

Al resolver el sistema, vemos que es un sistema homogéneo con solución única, de modo
que c1 = c2 = 0. Por lo tanto, el conjunto de vectores es L.I

     
 1 2 4 
.:Ejemplo 5.40 En R3 , sea A =  1  ,  1  ,  2  , Determine si este
 
−2 1 2
conjunto de vectores es LI o LD.

Solución:

Ahora, planteamos la ecuación:


       
1 2 4 0
c1  1  + c2  1  + c3  2  =  0 
−2 1 2 0

Luego se obtiene que:

c1 + 2c2 + 4c3 = 0
c1 + c2 + 2c3 = 0
−2c1 + c2 + 2c3 = 0

Simplicando el sistema de ecuaciones:


 
1 2 4 0
 1 1 2 0 
−2 1 2 0
278 5.6. Dependencia e independencia lineal de vectores

Si realizamos la eliminación Gaussiana a esta matriz aumentada, veremos que no tiene


solución única y por tanto, si existen constantes c1 , c2 y c3 diferentes de cero; esto implica
que el conjunto de vectores es LD.

.:Teorema 5.10 Sean v1 y v2 dos vectores de un espacio vectorial V . Entonces v1 y v2


son L.D si y sólo si uno de ellos es múltiplo escalar del otro.

No es muy difícil deducir este teorema, pues al multiplicar un vector por un escalar, el
nuevo vector, es dependiente del anterior, pues fue creado a partir de este.

.:Teorema 5.11 Sea S un conjunto de n vectores de Rm , si n > m, es decir, la dimensión


de los vectores es más grande que la cantidad de vectores, entonces S es L.D

Cuando tenemos más columnas que filas, se genera un sistema no cuadrado, por lo tanto,
siempre tendrá múltiples soluciones. Veamos el siguiente ejemplo:

     
1 3 6
.:Ejemplo 5.41 Tomemos v1 = y v2 = y v3 =
0 4 1

Ahora construimos el sistema

c1 + 3c2 + 6c3 = 0
4c2 + 7c3 = 0

Resolviendo el sistema tenemos que:

c1 + 5.25c3 = 0
c2 + 0.25c3 = 0

de donde deducimos que c2 = −0.25c3 y c1 = −5.25c3, luego todas las soluciones estarían
dadas por los múltiplos escalares del vector:
 
−5.25
c3
−0.25
Esto nos dice que el conjunto de vectores v1 , v2 y v3 son LD.
5. Vectores y Espacios vectoriales 279

.:Ejercicios 5.5

1. En los siguientes ejercicios determine si el conjunto de vectores dados es L.D o L.I

a) v1 = (5, 3), v2 = (1, −19), en R2 .

b) v1 = (4, 4, 6), v2 = (1, 7, −9), v3 = (1, 8, 6), v4 = (6, 6, 9), en R3 .

c) P1 = 5x2 − 6, P2 = 0.002x2 + 4, en P2 .
d ) P1 = 2 + 4x + 2x2 , P2 = 4 + 7x + x2 , P3 = 3 + 4x + 8x2 , en P2 .
     
4 8 8 0 0 0 0 1 0
e) A1 = , A2 = , A3 = , en M23 .
1 1 0 0 1 0 0 0 1

2. Si {v1 , v2 , v3 } es L.I, demuestre {v1 , v2 } , {v1 , v3 } , {v1 } , {v2 } es L.I.

3. Si {v1 , . . . , vn } es L.I, demuestre que todo subconjunto diferente de vacío de este


conjunto es LI.

4. Si {v1 , . . . , vn } es L.D, pruebe que {v1 , . . . , vn , vn+1 , . . . , vk } también es L.D.

5. Demuestre que todo conjunto de vectores L.I en Rn contiene máximo n vectores.

6. Demuestre que si los vectores v1 , v2 , . . . vn son L.D en Rm y si vn+1 es cualquier


otro vector en Rm , entonces el conjunto v1 , v2 , . . . vn , vn+1 es L.D .

7. Sea A una matriz de n × n que tiene como columnas a los vectores v1 , v2 , . . . , vn .


Demuestre que v1 , v2 , . . . , vn son L.I si y sólo si A, está en la forma escalonada
reducida por filas y no puede tener filas nulas.

8. Prueba que todo n + 2 polinomios en Pn , son LD.

9. Demuestre que si los vectores v1 y v2 diferentes de cero en Rn son ortogonales,


entonces el conjunto {v1 , v2 } es L.I.

10. Demuestre que si H = {v1 , v2 , . . . vn }, n vectores en Rn , y sea A una matriz n × n


que tiene como columnas a los vectores v1 , v2 , . . . vn . Entonces v1 , v2 , . . . vn son L.I
si y sólo si, la única solución al sistema homogéneo Ax = 0 es la trivial, es decir,
sólo cuando x = 0.
280 5.6. Dependencia e independencia lineal de vectores

11. Sea:

 
a11 a12 · · · a1n

 a21 a22 · · · a2n 

A= .. .. .. 
 . . . 
am1 am2 · · · amn

Demuestre que las columnas de A se consideran como vectores L.D, si y sólo si, el
sistema AX = 0 tiene soluciones no triviales.

12. Demuestre que si A es una matriz de tamaño n × n. Entonces, el detA 6= 0 si y sólo


si las columnas de A son L.I.

13. Demuestre que si H = {v1 , v2 , . . . , vn } un conjunto de n vectores L.I en Rn , entonces


H genera Rn .

14. Demuestre que si H = {v1 , v2 , . . . , vn } un subconjunto de un espacio vectorial V ,


H es L.D si y sólo si existe al menos un vector de H que pueda expresarse como
combinación lineal de los vectores restantes de H.

15. Si H es L.D, y genera a V , al eliminar en H el vector que es combinación lineal de


los otros vectores de H generando así mismo el espacio vectorial V .

16. Para cada uno de los conjuntos H dados a continuación:

Probar que H es L.I


Hallar el espacio generado por H.
Hallar, si es posible, un vector v, del espacio vectorial correspondiente, tal que
el conjunto H ′ obtenido al agregar a H el vector v sea también L.I
     

 2 6 −1 
   
4   0   ,  −2 

a) V = R4 , H =  ,
 1   0   0 

 
 
1 1 9
   
2 1 0
b) V = R , H = ,
0 3
   
 3


1  
 4   1 
c) V = R4 , H =  ,
   −3 

 1

 

1 1
5. Vectores y Espacios vectoriales 281

5.7. Bases y dimensión de un espacio vectorial


El concepto de base, se relaciona directamente con el conjunto generador. Para que un
conjunto de vectores sea base de un espacio vectorial, debemos asegurar que los vectores
que lo componen sean LI.

.:Definición 5.29 (Bases de un espacio vectorial)


Un conjunto finito de vectores {v1 , v2 , . . . , vn } es base para el espacio vectorial V
sí:
i. {v1 , v2 , . . . , vn } es linealmente independiente.

ii. {v1 , v2 , . . . , vn } genera a V .

Tengamos en cuenta que todo conjunto de n vectores L.I de Rn es una base en Rn .

.:Ejemplo 5.42 Los vectores e1 = (1, 0) y e2 = (0, 1) forman una base de R2 , basta con
escoger los escalares apropiados:
     
5 1 0
=5 + (−7)
−7 0 1


.:Ejemplo 5.43 En Pn el conjunto 1, x, x2 , . . . , xn es la base estándar para los
polinomios de grado n. Todo polinomio se puede escribir usando los elementos de esta
base. Tomemos el polinomio:

x3 + 5x + 2

x3 + 5x + 2 = (1)x3 + (0)x2 + (5)x + (2)x0

  
 x 
.:Ejemplo 5.44 Sea H =  y  : x-y + z = 0 un subespacio de R3 . Determine una
 
z
base para H.
282 5.8. Dimensión de un espacio vectorial

Inicialmente despejamos una de las variables

z = −x + y
Luego los vectores deben ser de la forma:
 
x
 y 
−x + y

Para cualquier x e y , expandimos el vector en dos nuevos vectores para simplificar la


suma interna:      
x 1 0
 y  = x 0  + y 1 
−x + y −1 1
   
1 0
Los vectores  0  ,  1  son L.I Luego, cualquier vector que pertenezca a H se
−1 1    
 1 0 
puede escribir como combinación lineal de estos dos vectores, luego  0  ,  1 
 
−1 1
forman una base para H.

5.8. Dimensión de un espacio vectorial


.:Definición 5.30 (Dimensión de un espacio vectorial)
Sea V un espacio vectorial no nulo. La dimensión del espacio vectorial V , es el
número de vectores en la base de V , y se denota como:

dim (V )

Como el conjunto {0} es linealmente dependiente, se dice que el espacio vectorial


{0} tiene dimensión cero.

En este texto hablaremos de espacios vectoriales de dimensión finita.

Veamos los siguientes ejemplos:

.:Ejemplo 5.45 Rn , dim (Rn ) = n, pues su base tiene n vectores.


5. Vectores y Espacios vectoriales 283

.:Ejemplo 5.46 Pn , dim (Pn ) = n + 1, pues se necesitan n elementos para las variables
y un elemento para las constantes.

.:Ejemplo 5.47 Mn×m , dim (Mn×m ) = nm, es decir, multiplicar el número de filas por
el número de columnas.

Los siguientes teoremas, muestran algunas propiedades importantes respecto de la


dimensión de un espacio vectorial.

.:Teorema 5.12 Si dim (V ) = n y {v1 , v2 , . . . , vm } es un conjunto L.I de m vectores de


V , entonces m ≤ n.

Si el conjunto de vectores tiene más vectores que el número de la dimensión, tendríamos


un conjunto de vectores L.D.

.:Teorema 5.13 Sea V un espacio vectorial de dimensión finita y sea H un subespacio


de V , entonces, dim (H) ≤ dim (V ).

.:Teorema 5.14 Sea V un espacio vectorial de dimensión n y sea H = {v1 , v2 , . . . , vn }


un conjunto de n vectores en V .

i. Si H es L.I, es una base para V .

ii. Si H genera a V , entonces es una base para V .

El teorema nos permite apreciar las propiedades que debe tener un subconjunto de
vectores para generar un espacio vectorial:

1. Si tenemos un espacio vectorial V tal que dim (V ) = n entonces, el número de


vectores necesarios para obtener un subconjunto que sea base de V es n. Si tenemos
más elementos, el conjunto deja de ser LI y pasaría a ser LD; si tenemos menos de
n, entonces, no podríamos generar todos los vectores de V .

2. La otra condición hace referencia a que dicho subconjunto H, debe generar a V , es


decir, que cualquier vector de V , debe ser generado por una combinación lineal de
los vectores de H.

.:Ejercicios 5.6
284 5.8. Dimensión de un espacio vectorial

1. Determine si el conjunto de vectores forma una base para el espacio vectorial dado
(Justifique la respuesta):

a) v1 = (1, −6) , v2 = (8, 1) , v3 = (0, −1) , con R2


     
1 4 5
 1   4   1 
b) v1 =  , v1 =  , v1 =  
     con R4
0 1 0 
2 1 1
       
1 4 3 11
 −1   2   5   23 
c) v1 =   con R4
 1 , v1 =  0 , v1 =  4 , v1 =  3
     

−1 0 1 1
d ) P1 = x4 + x2 , P2 = x4 , P3 = x, P4 = x + 1, con P5 .

2. Dado el espacio vectorial, determine una base y halle su dimensión.

a) Todos los vectores en R3 cuyas componentes suman 1.


b) Todas las matrices simétricas de 2 × 2 diagonales superiores.
c) Todas las matrices antisimétricas de n × n.
d) Todos los vectores de R3 que pertenecen al plano x − 5y − 9z = 0.
e) Todos los polinomios de P2 de la forma a0 + a1 x + a2 x2 , con a0 = 0

3. Determine una base para R4 que contenga los siguientes vectores:


(1, 1, 4, 2), (1, 2, 3, 8), (5, 4, 7, 8)
4. Demuestre que si {v1 , v2 , . . . , vn } es una base de V y si v ∈ V , entonces existe un y
sólo un conjunto de escalares c1 , c2 , . . . , cn tal que:
v = c1 v1 + c2 v2 + · · · + cn vn

5. Demuestre que si {u1 , u2 , . . . , um } y {v1 , v2 , . . . , vn } son bases del mismo espacio


vectorial V , entonces m = n.
6. Determine  2 
los posibles valores de k, para que el conjunto k , 0, 1 , (0, k, 2) , (1, 0, 1) sea
una base para R3 .
7. Demuestre que si V es un espacio vectorial de dimensión finita, y H un conjunto
L.I de vectores de V . Entonces, existe una base B para V que contiene a H.
5. Vectores y Espacios vectoriales 285

5.9. Subespacios asociados con una matriz


.:Definición 5.31 (Espacio nulo de una matriz)
Sea A una matriz m × n. El conjunto

N (A) = {x ∈ Rn /Ax = 0}

Se llama espacio nulo de A y se denota por N (A). A la dimensión de N (A) se le


llama nulidad de A y se denota por v (A).

El siguiente ejemplo, tomado de [11], muestra como podemos hallar N (A)

 
1 0 −1 4 2
.:Ejemplo 5.48 Sea A =  0 −5 2 1 2  . Determine N (A)
7 −3 0 4 −1

La matriz A de coeficientes del sistema

x − z + 4v + 2w = 0
−5y + 2z + v + 2w = 0
7x − 3y + 4v − w = 0
Resolvemos el sistema homogéneo
   
1 0 −1 4 2 1 0 −1 4 2
 0 −5 2 1 2  f3 → f3 + (−7)f1  0 −5 2 1 2 
7 −3 0 4 −1 −−−−−−−−−−−−→ 0 −3 7 −24 −15
   
1 0 −1 4 2   1 0 −1 4 2
3
 0 −5 2 1 2  f3 → f3 + − f2  0 −5 2 1 2 
5 29 123
0 −3 7 −24 −15 −−−−−−−−−−−−−−→ 0 0 5 − 5 − 81
5
   
1 0 −1 4 2   1 0 −1 4 2
 0 −5 2 5
1 2  f3 → f3  0 −5 2 1 2 
29 29
0 0 5 − 123
5 − 81
5 −−−−−−−−−−→ 0 0 1 − 123
29
81
− 29
 7

  1 0 0 − 29 − 23
29
1 0 −1 4 2  
f1 → f1 + f3  275 220

 0 −5 2 1 2   0 −5 0 29 29

f2 → f2 + (−2)f3  
0 0 1 − 123
29
81
− 29 −−−−−−−−−−−−−−→  
0 0 1 − 123
29 − 81
29
286 5.9. Subespacios asociados con una matriz

 7 23

  1 0 0 − 29 − 29
7
1 0 0 − 29 − 23
29 




275 220
 0 −5 0 29 29
 f2 → − 1 f2  0
5 1 0 − 275
145
220 
− 145
0 0 1 − 123 − 81 −−−−−−−−−−−→ 



29 29
0 0 1 − 123
29
81
− 29
Las variables libres son v y w, por lo tanto la solución sería:
 7 23
  7   23 
29 v + 29 w 29 29
     
   275 220
    
x  275   220
 145 v + 145 w 
  
 145   145 
 y       
   123 81
    
 z = v + w  = v  123  + w  81 
   29 29   29   29 
 v       
     
w 
 v 

 1 
 
 0



     
w 0 1
 7   23 
 
 29   29 

 


 

 
 
275   220 



  145   145  


    

    
123   81 
N (A) = gen  29  ,  29  , v (A) = 2.


   

 
   





 1   0 
   


    

 

 
0 1
Veamos la definición de Espacio Fila y Espacio Columna:

.:Definición 5.32 (Espacio Fila)


Sea A de tamaño m × n
 
a11 a12 ··· a1n
 a21
 a22 ··· a2n 

A= . .. .. ..
 ..

. . . 
am1 am2 ··· amn

El espacio generado por las filas de A,

f1 = (a11 , a12 , . . . , a1n ) , f2 = (a21 , a22 , . . . , a2n ) , . . . , fm = (a11 , a12 , . . . , a1n )

es un subespacio de Rn llamado espacio fila de A y se denota F (A).


5. Vectores y Espacios vectoriales 287

.:Definición 5.33 (Espacio Columna)


Sea A de tamaño m × n
 
a11 a12 ··· a1n
 a21 a22
 ··· a2n 

A= . .. .. ..
 ..

. . . 
am1 am2 ··· amn

El espacio generado por las columnas de A


     
a11 a12 a1n
 a21   a22   a2n 
     
c1 =  .  , c2 =  .  , . . . , cn =  ..
.
 .   ..   .


am1 am2 amn

Es un subespacio de Rm llamado espacio columna de A y se denota C(A).

5.9.1. Propiedades
Los siguientes teoremas, conforman las principales propiedades de los espacios asociados
a una matriz:

.:Teorema 5.15 Si A y B son matrices m×n equivalentes por filas, entonces los espacios
generados por las filas de A y de B son iguales.

.:Teorema 5.16 Sea B una matriz m × n en la forma escalonada por filas. Las columnas
de B que contienen los pivotes forman una base para C(B) y, por tanto, dim (C(B)) es
igual al número de pivotes de B.

.:Teorema 5.17 Sea A de tamaño m × n y B es la matriz de tamaño m × n que


resulta al reducir A a su forma escalonada. Los vectores columna de B que contienen
los pivotes forman una base para C(B) y, esto implica que los vectores construidos con
las columnas de A, formarán la base para C(A) y, en consecuencia podemos tener los
siguientes resultados:
dim (C(A)) = dim (C(B))
F (A) = F (B)
288 5.9. Subespacios asociados con una matriz

k : número de pivotes de B, entonces, dim (F (B)) = dim (F (A)) = k

dim (C(B)) = k

dim (C(B)) = dim (C(A))

Por lo tanto dim (C(A)) = dim (F (A)) = k.

La siguiente definición hace referencia a la dimensión de los espacios fila y columna de A,


es decir de F (A) y C(A).

.:Definición 5.34 El rango de A, denotado por ρ(A), es la dimensión


del espacio fila y el espacio columna de A.

.:Ejemplo 5.49 En el ejemplo 5.48, estudiamos la matriz:

 
1 0 −1 4 2
A =  0 −5 2 1 2 
7 −3 0 4 −1

En el ejemplo encontramos F (A), el cual tiene dimensión 2, pues tiene dos vectores :

 7
  23


 29 29 


    

     


  275   220 

  145   145 

 

 
  


123   81 
29  , 

  29 

    

    




 1 
 
 0 




    

 

 
0 1
Luego ρ(A) = 2.

El siguiente teorema, muestra la relación entre los diferentes espacios y sus dimensiones.

.:Teorema 5.18 Sea A es una matriz m × n, entonces:


5. Vectores y Espacios vectoriales 289

dim (F (A)) + dim (N (A)) = n


dim (C(A)) + dim (N (A)) = n

Es decir:
ρ(A) + v(A) = n

Ahora bien, el siguiente teorema muestra la forma como se relaciona el espacio fila con el
espacio nulo de A.

.:Teorema 5.19 Sea A de tamaño n × m, entonces, cada vector del espacio fila de A,
F (A) es ortogonal a todo vector del espacio nulo de A, N (A), es decir (F (A) ⊥ N (A))

El siguiente ejemplo tomado de [11], muestra como se relacionan los diferentes espacios
asociados a una matriz:

.:Ejemplo 5.50 Sea  


1 −1 2 3
 −2 2 −4 −6 
A=
 2 −2

4 6 
3 −3 6 9
Determinemos N (A), F (A), ρ(A), v(A).

Tomemos la matriz y efectuemos las operaciones elementales por fila:


   
1 −1 2 3 1 −1 2 3
 −2 f2 → f2 + (2)f1 
 2 −4 −6   f → f3 + (−2)f1  0 0 0 0 

 2 −2 4 6  3  0 0 0 0 
f4 → f4 + (−3)f1
3 −3 6 9 −−−−−−−−−−−−−−→ 0 0 0 0
Tenemos tres variables libres: y,z y w, luego la solución sería:
         
x y − 2z − 3w 1 −2 −3
 y   y  1   0
+w 0 
   
 z =
    =y +z
z   0   1   0 
w w 0 0 1
Entonces N (A) está determinado por:
290 5.9. Subespacios asociados con una matriz

     

 1 −2 −3 

     0 
1   0
gen  0 , 1
, 
  0 

 
 
0 0 1
Entonces v(A) = 3.
 
Ahora bien, F (A) = gen 1, −1, 2, 3 , pues es la única fila que tiene pivote,
además es la única que no se anuló. Luego, ρ(A) = 1, y donde podemos apreciar que
v(A) + ρ(A) = 4.

Los siguientes teoremas muestran las relaciones entre una matriz y su rango:

.:Teorema 5.20 Sea A una matriz de n × n. Entonces A es invertible si y solo si:

a. v(A) = 0
b. ρ(A) = n

Si una matriz de tamaño n × n es invertible, es por que tiene n pivotes, lo que implica
que tiene n filas no nulas. El sistema homogéneo asociado a dicha matriz tendrá solución
trivial, lo que implica N (A) no tendrá elementos y por tanto v(A) = 0.

.:Ejercicios 5.7

1. Halle una base para los espacios fila, nulo y columna de la matriz dada. Encuentre
el rango y la nulidad.

a)   c)  
2 3 4 6 5 4 3
 7 6 5  −8 6 5 1
 
 −9 7 6 
5 2 9 d)  
2 1 5 7
b)  6

2 4 8

 5 4 3 

 2  6 9 7 5 
7 5 
9 8 5 4
0 1 0

2. Dados los siguientes conjuntos de vectores, encuentre una base para el espacio
generado por dichos vectores.
5. Vectores y Espacios vectoriales 291

   
4 1
a) ,
5 −1
     
4 2 3
 5   1   2 
b) 
 1   −1  , 
,   
1 
1 2 1

3. Si A es una matriz demuestre:

a) ρ (A) = ρ (At )
b) Si A es una matriz diagonal. Demuestre que ρ (A) representa es el número de
elementos distintos de cero que aparecen en la diagonal.
c) Si A una matriz triangular n × n con ceros en la diagonal. Demuestre que
ρ (A) < n.

4. Demuestre que si A es de tamaño m × n. El sistema Ax = b tiene solución, si y solo


si b ∈ C(A).
5. Observe la siguiente función implementada en Python:
1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4
5 d e f rho (A) :
6 .
7 .
8 .
9 return n

Investigue e implemente la función rho(A), la cual, recibe como parámetro una


matriz A y retorna ρ(A) tal como se muestra en la definición 5.34.
292 5.9. Subespacios asociados con una matriz
“La cortesía es hermana de la caridad, que apaga el odio y
fomenta el amor”
San Francisco de Asís

Transformaciones Lineales
6
6.1. Introducción
Las Transformaciones Lineales son uno de los temas más relevantes en el Álgebra lineal.
Ellas nos permiten convertir o “transformar” un elemento en otro; así por ejemplo, si un
función f se evalúa en un valor x0 , lo que obtenemos es f (x0 ), que es en sí otro valor que
resulta de evaluar x0 en f , en este caso la función f actúa como el “ente transformador”,
pues toma el valor x0 y lo transforma en otro valor al que llamamos f (x0 ).

Uno de los mejores ejemplo de una transformación lineal, son los video juegos, en ellos
se recrea un ambiente 3D en una pantalla 2D. Se requiere una transformación especial,
que tome un objeto 3D como un cubo y lo proyecte en un plano o 2D. La figura 6.1,
muestra como un cubo se muestra como un cuadrado cuando lo proyectamos sobre una
pantalla (plano 2D); esto ocurre sólo cuando estamos justo en frente del cubo. Dicha
transformación, implica tomar un vector de R3 y convertirlo en un punto en el plano R2 .

En Álgebra lineal, se tomará un vector o una matriz y se transformará en otro vector o


matriz. Veamos la definición formal de Transformación.

.:Definición 6.1 Una transformación T de Rn (dominio de la transformación)


en Rm (rango o codominio de la transformación) que se denota T : Rn → Rm , es
una regla que asigna a cada vector u en Rn un vector único v en Rm .

293
294 6.1. Introducción

Pantalla 2D

Objeto 3D

Representación del objeto 3D en 2D

Observador

Figura 6.1: Transformación de un objeto 3D en 2D.

El concepto es muy simple, la transformación T actúa como una función f en cálculo, sólo
que en lugar de enviarle valores reales y obtener valores reales, a la transformación T , le
enviamos vectores y obtenemos como resultado otro vector. Si u ∈ Rn , al evaluarlo en la
transformación T (u) = v; obtenemos otro vector llamado v; entonces a v lo llamaremos
la imagen de u bajo la transformación T .

.:Ejemplo 6.1 Considere la transformación T : R3 → R2 , definida mediante


T (x , y , z) = (x, y).

El dominio de T es R3 , y el codominio o rango es R2 . La imagen del vector (5, 7, 1) es:

T (5, 7, 1) = (5, 7)
6. Transformaciones Lineales 295

Esta transformación es muy simple, pues toma un vector de R3 y lo convierte en un vector


de R2 ; esto se logra simplemente quitando la variable z del vector original.

Bien, no toda transformación es lineal, por ejemplo:

.:Ejemplo 6.2 Considere la transformación T : R3 → R3 , definida mediante


T (x , y , z) = (ex , ey , ez ).

Esta transformación convierte un vector en R3 en otro vector en R3 , pero usando


los exponenciales
 de los valores originales del vector. Así por ejemplo T (1, 2, −4) =
e1 , e2 , e−4 . Esta es una transformación, pero no es lineal. La siguiente definición, nos
permite identificar cuándo una transformación es lineal y cuándo no lo es.

.:Definición 6.2 (Transformación Lineal)


Sea V y W espacios vectoriales reales. Una transformación lineal T : V → W es
una función que asigna a cada vector u ∈ V un único vector T (u) ∈ W y que
satisface que para cada u y v en V y cada α ∈ R.
1. T (u + v) = T (u) + T (v)
2. T (αu) = αT (u)

.:Ejemplo 6.3 Determine si la transformación T : R3 → R2 , definida mediante


T (x , y , z) = (x, y) es lineal.

Sólo debemos corroborar las dos propiedades de la Definición 6.2:

1. T (u + v) = T (u) + T (v): Veamos que es T (u + v):


Sea u = (x1 , y1 , z1 ) ∈ R3 y v = (x2 , y2 , z2 ) ∈ R3 , entonces:

u + v = ((x1 + x2 ), (y1 + y2 ), (z1 + z2 ))


Al aplicarle la transformación T :
T (u + v) = ((x1 + x2 ), (y1 + y2 ))
Ahora bien, T (u) = (x1 , y1 ) y T (v) = (x2 , y2 ), luego:
T (u) + T (v) = ((x1 + x2 ), (y1 + y2 ))
Lo que implica que T (u + v) = T (u) + T (v).
296 6.1. Introducción

2. T (αu) = αT (u): Veamos que es T (αu):


Sea u = (x1 , y1 , z1 ) ∈ R3 y α ∈ R, entonces:
αu = (αx1 , αy1 , αz1 )
Al aplicarle la transformación T :
T (αu) = (αx1 , αy1 )
Ahora bien, T (u) = (x1 , y1 ), Luego:
αT (u) = α(x1 , y1 )
= (αx1 , αy1 )
Lo que implica que T (αu) = αT (u).
Como ambas igualdades se cumplen, entonces la transformación T si es lineal.

.:Ejemplo 6.4 Determine si la transformación T : R3 → R3 , definida mediante


T (x , y , z) = (ex , ey , ez ) es lineal.

De nuevo, usamos la Definición 6.2:

1. T (u + v) = T (u) + T (v): Veamos que es T (u + v):


Sea u = (x1 , y1 , z1 ) ∈ R3 y v = (x2 , y2 , z2 ) ∈ R3 , entonces:

u + v = ((x1 + x2 ), (y1 + y2 ), (z1 + z2 ))


Al aplicarle la transformación T :
 
T (u + v) = e(x1 +x2 ) , e(y1 +y2 ) , e(z1 +z2 )

Ahora bien, T (u) = (ex1 , ey1 , ez1 ) y T (v) = (ex2 , ey2 , ez2 ), luego:

T (u) + T (v) = ((ex1 + ex2 ) , (ey1 + ey2 ) , (ez1 + ez2 ))


Lo que implica que T (u + v) 6= T (u) + T (v). y por lo tanto no es una transformación
lineal pues:

ex1 +x2 6= ex1 + ex2


En este caso T es una transformación, pero no es una transformación lineal.
6. Transformaciones Lineales 297

6.2. La multiplicación de matrices como una


transformación lineal
La multiplicación de matrices, puede interpretarse como una transformación; cuando
multiplicamos dos matrices, supongamos A y B obtenemos una matriz nueva llamada
C, que en realidad es el resultado de usar B, para transformar A en C.

De la misma manera, cuando multiplicamos una matriz A de tamaño n × m y un vector b


de tamaño m × 1, obtenemos un nuevo vector c de tamaño n × 1. En este caso usamos la
matriz A para transformar el vector b en el vector c. Ahora bien, ¿dicha transformación
es lineal?

.:Teorema 6.1 Sea A una matriz m × n. Sea x un elemento de Rn , interpretado como


una matriz columna. La transformación T : Rn → Rm , definida por T (x) = Ax, es lineal.
En dicha transformación lineal A recibe el nombre de matriz de transformación, es decir,
la matriz asociada a la transformación.

El teorema anterior , es muy fácil de demostrar, pues la suma entre matrices y la


multiplicación por escalar cumplen con la Definición 6.2. En realidad, una transformación
tiene mucho en común con una función real; por ejemplo, cuando decimos f (x) = 2x, el
2 es el elemento que hace la transformación (como la matriz A).

Si tenemos la matriz A y el vector b, definidos de la siguiente forma:

   
6 7 8 1
A= 9 1 2  y b= 3 
0 5 2 −9
Al realizar la multiplicación Ab, obtenemos un nuevo vector c de tamaño 3 × 1:

    
6 7 8 1 −45
 9 1 2   3  =  −6 
0 5 2 −9 −3
La matriz A transformó el vector b en el vector c.

.:Ejemplo 6.5 Dada la transformación T : R2 → R2 definida como:


 
1 −1
T (x) = Ax, con A =
2 1
298 6.2. La multiplicación de matrices como una transformación lineal

 
1
Encuentre T :
−2
 
1
La transformación consiste en multiplicar el vector con la matriz A:
−2
      
1 1 −1 1 3
T = =
−2 2 1 −2 0
Luego:    
1 3
T =
−2 0

.:Teorema 6.2 La transformación compuesta T de las dos transformaciones matriciales


T1 : Rn → Rm y T2 : Rm → Rs , definidas por las matrices A1 y A2 respectivamente, es
una transformación matricial T : Rn → Rs , definida por el producto matricial A2 A1 .

La función compuesta de dos transformaciones matriciales, se reduce a la multiplicación


de las matrices de cada una de las transformaciones.

.:Ejemplo 6.6 Sean T1 (x) = A1 x y T2 (x) = A2 x, definidas por las siguientes matrices
A1 y A2 .

     
1 0 −1 1 7
A1 = , A2 = y x=
0 −1 0 1 −2

Sea, además, T = T2 ◦ T1 . Determine la imagen del vector x bajo T.

T se encuentra definida por el producto matricial A2 A1 . Se tiene que


    
−1 1 1 0 −1 −1
A2 A1 = =
0 1 0 −1 0 −1
Por lo tanto,
    
−1 −1 7 −5
T (x) = =
0 −1 −2 2

.:Teorema 6.3 Sea T1 , . . . , Tn una sucesión de transformaciones lineales en Rp , · · · , Rs ,


definidas por las matrices A1 , . . . , An . La composición T = Tn ◦ · · · ◦ T1 , está determinada
por el producto de matrices An · · · A1 , si el producto existe.
6. Transformaciones Lineales 299

El teorema 6.3, nos dice que podemos componer indefinidamente transformaciones


lineales, sólo debemos tener cuidado con los tamaños de las matrices.

.:Definición 6.3 Sea T : U → V una transformación lineal.


El conjunto de vectores transformados en el vector cero de V , recibe el nombre de
Núcleo, espacio nulo o kernel, es decir,

Núcleo (T ) = {x ∈ V | T (x) = 0}

El núcleo se representa por Núcleo (T )a


El conjunto de vectores en V que constituyen las imágenes de los vectores en U ,
recibe el nombre de rango de T , es decir,

Im (T ) = {y ∈ V | ∃x ∈ U y T (x) = y}

El rango se representa por Im (T ).

a En algunos textos lo escriben como N u(T ) o Núcleo(T )

El Núcleo (T ) son todos aquellos vectores de un espacio vectorial U , tal que al transformar
dichos vectores, sus imágenes sólo pueden ser el vector nulo de V . La imagen de T Im (T ),
hace referencia a todos los vectores del espacio vectorial V que son ligados o relacionados
con U por medio de la transformación T .

Los siguientes teoremas, nos muestran la naturaleza del núcleo y de la imagen de una
transformación:

.:Teorema 6.4 Sea T : U → V una transformación lineal. El Núcleo (T ) es un subespacio


de U.

.:Teorema 6.5 Sea T : U → V una transformación lineal. El rango de T es un subespacio


de V.

Como podemos ver, el núcleo de una transformación, es un subespacio del dominio de la


transformación, mientras que la imagen es un subespacio del rango de la transformación.
El siguiente ejemplo en [11], nos muestra como hallar el núcleo y el rango de una
transformación lineal.
300 6.2. La multiplicación de matrices como una transformación lineal

.:Ejemplo 6.7 Determine el núcleo y el rango del operador lineal T (x, y, z) = (x, 0, z)

Puesto que el operador lineal T transforma R3 en R3 , el núcleo y el rango serán subespacios


de R3 .

El núcleo : Núcleo (T ) es el subconjunto transformado en (0, 0, 0) . Teniendo en cuenta


T (x, y, z) = (x, 0, z) = (0, 0, 0) , si x = 0, z = 0

Sin embargo, Núcleo (T ) es el conjunto de vectores (0, y, 0) ; lo anterior se expresa como


Núcleo (T ) = {(0, y, 0)} .

Según la perspectiva geométrica, el Núcleo (T ) es el conjunto de vectores que se localizan


en el eje y.

El rango de T es el conjunto de vectores de la forma (x, 0, z) .

Entonces, rango(T ) = {(x, 0, z)} .

El rango(T ) es el conjunto de vectores que se localizan en el plano xz.

Imagínese que T proyecta el vector (x, y, z) en el vector (x, 0, z) en el plano xz. Donde
T es un ejemplo de operador de proyección.

Lo anterior permite afirmar que f (x, y, z) = (x, 0, z) .


No debemos buscar muy lejos para hallar el rango de una transformación, los vectores
columna de la matriz de transformación, poseen la clave para encontrarlo:

.:Teorema 6.6 Los vectores columna de A generan el rango de T : Rn → Rm , definido


por T (u) = Au.

.:Teorema 6.7 Sea T : U → V una transformación lineal, así: Dim Núcleo (T ) +


Dim Im (T ) = Dim Dominio(T )

.:Ejemplo 6.8 Determine las dimensiones del núcleo y el rango de la transformación


lineal T definida por la matriz
 
1 0 5
A= 0 1 3 
0 0 0
6. Transformaciones Lineales 301

Solución:
Como la matriz A tiene forma escalonada. Los vectores renglón son linealmente
independientes.

Por lo tanto, el Rango(A) = 2, lo que implica que Dim Rango(T ) = 2.

El dominio de T pertenece a R3 ; Dim Dominio(T ) = 3.

Por lo tanto, Dim Núcleo (T ) = 1.

.:Teorema 6.8 (Teorema de Rango y nulidad)


Si dim (Núcleo (T )) recibe el nombre de nulidad, y la dim (Im (T )) recibe el nombre
de rango de la transformación. El teorema de Rango y Nulidad y se expresa de la
siguiente forma:

dim (Núcleo (T )) + dim (Im (T )) = dim (Dominio(T ))

El teorema anterior es considerado el Teorema fundamental del Álgebra lineal. Podemos


encontrar una demostración de este en [19]. Básicamente, nos dice que la dimensión del
dominio de la transformación es igual a la suma de las dimensiones del núcleo de la
transformación, más la dimensión de la imagen de T . En la siguiente sección, veremos
algunos ejemplos de este teorema.

6.3. Transformaciones lineales uno a uno y sobre


Una de las primeras caracterizaciones sobre transformaciones lineales, es determinar si
una transformación T es uno a uno.

.:Definición 6.4 Se dice que una transformación T es uno a uno si cada elemento
del rango de T corresponde exactamente a un elemento del dominio de T. Esto
significa que T es uno a uno si T (u) = T (v) implica que u = v.

Este concepto es muy similar al concepto de función uno a uno en cálculo. Los siguientes
teoremas determinan propiedades especiales de las transformaciones lineales uno a uno.

.:Teorema 6.9 Una transformación lineal T es uno a uno, si y sólo si el núcleo es el


vector cero.
302 6.3. Transformaciones lineales uno a uno y sobre

.:Teorema 6.10 La transformación T : Rn → Rn , definida por T (x) = Ax, es uno a


uno si y sólo si A es no singular.

.:Teorema 6.11 Sea T : U → V una transformación lineal uno a uno. Si el conjunto


{u1 , u2 , . . . un } es linealmente independiente en U, entonces {T (u1 ) , . . . , T (un )} es
linealmente independiente en .

Los anteriores teoremas nos dicen que una transformación lineal, que sea uno a uno,
conservan la independencia lineal.

.:Definición 6.5 Sea V y W dos espacios vectoriales y T una transformación lineal


de la forma:

T :V →W
Se dice que T es sobre W si para todo w ∈ W existe al menos una v ∈ V tal que:

T (v) = w

La definición anterior nos dice que la Im (T ) es todo el conjunto W , es decir, una


transformación T es sobre si todos los elementos de la imagen o rango de la transformación,
son relacionados (por medio de T ) por como mínimo un vector en V .

.:Ejemplo 6.9 Sea T : R2 → R2 , definida de la siguiente forma:


   
x x+y
T : =
y y

Determine si T es uno a uno y sobre:

Para determinar que T es uno a uno debemos verificar: Núcleo (T ), dim (Núcleo (T )) y
dim (Im (T )), Es fácil ver que la matriz de la transformación es:
 
1 1
AT =
0 1
AT tiene dos pivotes, por lo tanto el Núcleo (T ) = 0, es decir, el sistema homogéneo
asociado a dicha matriz tiene solución única y es el vector nulo; de lo anterior podemos
deducir que dim (Núcleo (T )) = 0 y dim (Im (T )) = 2, esto implica que T es uno a uno.

Ahora bien, para determinar que T es sobre, sólo debemos comparar


 dim (Im (T )), y
dim (dominio(T )). El dominio de T es R2 , por lo tanto, dim R2 = 2 y dim (Im (T )) = 2,
6. Transformaciones Lineales 303

luego T es sobre.

Ahora bien, ¿cómo determinar cuando una transformación no es uno a uno y sobre?.
La respuesta la podemos deducir del ejemplo anterior, pues si la matriz asociada a la
transformación no es cuadrada, en particular, si tiene más columnas que filas, es decir,
cuando la dimensión del dominio (V ) es mayor que la dimensión del codominio (W ),
entonces T no es uno a uno, pero si ocurre el caso contrario, cuando la dimensión de
codominio es mayor que la dimensión del dominio, entonces podemos hallar múltiples
soluciones con dicha matriz, y por lo tanto, el núcleo de T sería diferente de 0, haciendo
que T no sea sobre.

.:Ejercicios 6.1

1. Muestre que la transformación T : R2 → R2 , definida por T (x, y) = (2x, x − y) es


lineal.
Determine las imágenes de los elementos (1, 2) y (−1, 4) bajo esta transformación.

2. Muestre que T : R3 → R3 , definida por T (x, y, z) = (0, 0, 0) es lineal.


Esta transformación recibe el nombre proyección ¿Por qué es adecuado el término?

3. Muestre que las transformaciones siguientes T : R3 → R2 , no son lineales.


Para T (x, y, z) = (3x, y 2 ) o T (x, y, z) = (x + 3, 6y).

4. Determine si la transformación es lineal para T : R3 → R2 , donde T (x, y, z) =


(2x, y).

5. Determine si la transformación es lineal para T : R2 → R3 , donde T (x, y) =


(x, y, z), cuando z = 2 ó z = −1.

6. Determine si la transformación es lineal para T : R3 → R3 , donde T (x, y, z) =


(x + 2y, x + y + z, 3z).

7. Considere la transformación lineal T : R2 → R3 , definida por la siguiente matriz A.


Determine las imágenes de los vectores dados z, y z
 
1 2      
−1 2 5
A =  −1 3 ;x=
 ,y= ,z=
1 3 2
1 2

8. Sean T1 (x, y) = (2x, −y) y T2 (x, y) = (0, x + y) .


Sea T = T2 ◦ T1 . Encuentre una ecuación para T y utilícela para determinar la
imagen de (2, −3) bajo T.
304 6.3. Transformaciones lineales uno a uno y sobre

9. Sean T1 (x, y) = (x + y, 2x, 3y) y T2 (x, y, z) = (x, x + y, 2x − z) .


Sea T = T2 ◦ T1 . Encuentre una ecuación para T y utilícela para determinar la
imagen de (−2, 5) bajo T.
10. Demuestre que la transformación
 T : P2 → P2 , definida de la manera siguiente es
lineal: T ax2 + bx + c = cx2 + a.
Encuentre la imagen de 3x2 − x + 2. Determine otro elemento de P2 con la misma
imagen.
11. Considere la transformación lineal T, definida por cada una de las matrices
siguientes. Determine el núcleo y el rango de cada transformación.
Muestre que Dim Núcleo (T ) + Dim Rango (T ) = Dim Dominio (T ) para cada
transformación.
   
1 2 1 2 1
a) A =
4 0 d ) A =  −1 −2 0 
  2 4 1
1 2 3
b) A =
0 1 2
   
1 0 0 1 1 3
c) A =  0 2 0  e) A =  0 1 3 
0 0 3 2 1 7

12. Determine el núcleo y el rango para cada una de las transformaciones siguientes:
Demuestre que Dim Núcleo (T ) + Dim Rango (T ) = Dim Dominio (T ) para cada
transformación.
a) T (x, y, z) = (x, 0, 0) de R3 → R3
b) T (x, y, z) = (x + y, z) de R3 → R2
c) T (x, y) = (x, x − y, y) de R2 → R3
13. Aplique el teorema del rango y la nulidad para calcular la dimensión del núcleo
y el rango de cada una de las transformaciones lineales definidas por las matrices
siguientes. Indique si las transformación es uno a uno.
   
1 8 2 1 2 3 4
a) A =  0 1 4  c) A =  1 −1 6 7 
0 0 0 0 0 7 2
 
  1 2 −3
2 7 14  −2 4 −6 
d) A =  
b) A = 0 9 1
   0 1 −2 
0 0 1 0 4 −2
6. Transformaciones Lineales 305

14. Use determinantes para decidir si las transformaciones lineales definidas por las
matrices siguientes son uno a uno.
   
3 5 1 7 −5 3
a) A =  0 4 4  c) A =  2 11 1 
0 0 4 0 9 −8
 
  6 4 3 2
7 6 5  −1 3 −4 14 
d) A =  
b) A =  4 8 6   6 5 4 5 
5− 9 8 5 5 −43 8

15. Demuestre los teoremas encontrados en las secciones 6.1 a 6.3.

6.4. Transformaciones en el plano


Las siguientes transformaciones, son las más relevantes en la geometría computacional,
pues en ellas, se describen los principales movimientos de un vector sobre un plano: la
reflexión, la rotación, la traslación y escalado:

6.4.1. Transformación de reflexión


[Link]. Reflexión sobre los ejes x y y

Esta transformación, consiste en tomar un vector de R2 y hacer una reflexión sobre el eje
x o sobre el eje y.

Reflexión sobre el eje x: Su componente x se conserva igual y la coordenada y cambia


de signo:

2 2
T : R → R
 
x x

y −y

La reflexión sobre el eje x, se puede expresar en forma matricial de la siguiente forma:


      ′ 
x 1 0 0 x x
T  y  =  0 −1 0   y  =  y′ 
1 0 0 1 1 1
306 6.4. Transformaciones en el plano

 
x′
Donde  y ′  es el vector reflejado sobre el eje x. Aunque estamos trabajando con
1
vectores de R2 , usamos una matriz de 3 × 3, con la tercera componente fija en 1, esto
generaliza la transformación para R2 .

b
A

b
B

Figura 6.2: Reflexión eje x

Reflexión sobre el eje y: Su componente y se conserva igual y la coordenada x cambia


de signo:

2 2
T : R → R
 
x −x

y y

La reflexión sobre el eje y, se puede expresar en forma matricial de la siguiente forma:


      ′ 
x −1 0 0 x x
T y = 0 1 0   y  =  y′ 
1 0 0 1 1 1
 
x′
Donde  y ′  es el vector reflejado sobre el eje y.
1

.:Ejemplo 6.10
6. Transformaciones Lineales 307

B a A
b b

v u

Figura 6.3: Reflexión eje y

Tomemos el triángulo formado por los puntos A(3, 3), B(2, 1) y C(4, 1) y apliquemos
una reflexión sobre el eje x y otra sobre el eje y:

Tomamos cada uno de los puntos y aplicamos la transformación:

La transformación para el eje x:

A(3, 3):

     
3 1 0 0 3 3
T 3 = 0 −1 0   3  =  −3 
1 0 0 1 1 1

B(2, 1):

     
2 1 0 0 2 2
T 1 = 0 −1 0   1  =  −1 
1 0 0 1 1 1

C(4, 1):

     
4 1 0 0 4 4
T 1 = 0 −1 0   1  =  −1 
1 0 0 1 1 1

La transformación para el eje y:

A(3, 3):

     
3 −1 0 0 3 −3
T 3 = 0 1 0  3  =  3 
1 0 0 1 1 1
308 6.4. Transformaciones en el plano

B(2, 1): 
     
2 −1 0 0 2 −2
T 1 = 0 1 0  1  =  1 
1 0 0 1 1 1

C(4, 1): 
     
4 −1 0 0 4 −4
T 1 = 0 1 0  1  =  1 
1 0 0 1 1 1

m
G A
b
3 b

g h a b
2

n
I H Bb C
b b
1 b
i c
p

l j k
−5 −4 −3 −2 −1 1 2 3 4
E d F
−1 b b

−2 f e

−3 b
D

−4

Figura 6.4: El triángulo ABC y las reflexiones sobre los ejes x y y

Como podemos ver en la figura 6.4, el triángulo ABC se reflejó sobre el eje x, formando
el triángulo EF D, el cual, conserva la misma forma y tamaño del triángulo ABC pero
no la misma posición. De igual forma, con la reflexión sobre el eje y; en este caso se
formó el triángulo GHI, que también tiene la misma forma y tamaño pero no la misma
posición. En la figura 6.4, podemos observar que en ambas reflexiones, hubo un cambio
de cuadrante, el triángulo EF D quedó en el cuarto cuadrante, mientras que el triángulo
GHI quedó en el segundo cuadrante.

El siguiente algoritmo, muestra como implementar la reflexión sobre el eje x y y en Python:


6. Transformaciones Lineales 309

.:Algoritmo 6.1

1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p r i n t " T ra n s f o rm a c i o n de r e f l e x i o n : \ n"
5
6 def ReflexionEjeX (x ) :
7 MatrizRefEjeX=np . a r r a y ( [ [ 1 , 0 , 0 ] ,
8 [0 , −1 , 0 ] ,
9 [0 , 0, 1]])
10 r e t u r n MatrizRefEjeX . dot ( x . T)
11
12 def ReflexionEjeY (x ) :
13 MatrizRefEjeY=np . a r r a y ( [ [ − 1 , 0 , 0 ] ,
14 [0 ,1 ,0] ,
15 [0 ,0 ,1]])
16 r e t u r n MatrizRefEjeY . dot ( x . T)
17
18
19 Punto1=np . a r r a y ( [ 3 , 3 , 1 ] )
20 Punto2=np . a r r a y ( [ 2 , 1 , 1 ] )
21 Punto3=np . a r r a y ( [ 4 , 1 , 1 ] )
22
23 print " punto del triangulo (3 ,3) , (2 ,1) , (4 ,1) "
24 print " Punto 1 : " , Punto1
25 print " Punto 2 : " , Punto2
26 print " Punto 3 : " , Punto3
27
28 p r i n t " \n l o s nuevos p u n to s r e f l e j a d o s con r e s p e c t o a l e j e x son : \ n"
29
30 print " punto 1 r e f l e j a d o : \ n " , R e f l e x i o n E j e X ( Punto1 )
31
32 print " punto 2 r e f l e j a d o : \ n " , R e f l e x i o n E j e X ( Punto2 )
33
34 print " punto 3 r e f l e j a d o : \ n " , R e f l e x i o n E j e X ( Punto3 )
35
36
37 p r i n t " \n l o s nuevos p u n to s r e f l e j a d o s con r e s p e c t o a l e j e y son : \ n"
38
39 print " punto 1 r e f l e j a d o : \ n " , R e f l e x i o n E j e Y ( Punto1 )
40
41 print " punto 2 r e f l e j a d o : \ n " , R e f l e x i o n E j e Y ( Punto2 )
42
43 print " punto 3 r e f l e j a d o : \ n " , R e f l e x i o n E j e Y ( Punto3 )

El programa anterior produce la siguiente salida:


310 6.4. Transformaciones en el plano

1 >>>
2 T ra n s f o rm a c i o n de r e f l e x i o n :
3
4 punto del triangulo (3 ,3) , (2 ,1) , (4 ,1)
5 Punto 1: [3 3 1]
6 Punto 2: [2 1 1]
7 Punto 3: [4 1 1]
8
9 l o s nuevos p u n to s r e f l e j a d o s con r e s p e c t o a l e j e x son :
10
11 punto 1 reflejado :
12 [ 3 −3 1 ]
13 punto 2 reflejado :
14 [ 2 −1 1 ]
15 punto 3 reflejado :
16 [ 4 −1 1 ]
17
18 l o s nuevos p u n to s r e f l e j a d o s con r e s p e c t o a l e j e y son :
19
20 punto 1 r e f l e j a d o :
21 [ −3 3 1 ]
22 punto 2 r e f l e j a d o :
23 [ −2 1 1 ]
24 punto 3 r e f l e j a d o :
25 [ −4 1 1 ]
26 >>>

El Algoritmo 6.1, implementa dos funciones ReflexionEjeX(x) y ReflexionEjeY(x). La


primera hace la reflexión sobre el eje x y la segunda sobre el eje y. Su código interno
muestra como definimos las matrices de transformación, en este caso MatrizRefEjeX y
MatrizRefEjeY. El resultado final, se calcula multiplicando el vector x que entró como
parámetro y su respectiva matriz. Como ejemplo, declaramos los puntos del triángulo
ABC con vértices (3, 3), (2, 1), (4, 1) y los transformamos en (3, −3), (2, −1), (4, −1)
y (−3, 3), (−2, 1), (−4, 1).

[Link]. Reflexión sobre la recta y = x

En este tipo de transformaciones, se toma un vector en R2 y se entrega un vector en R2


el cual, se refleja tomando como eje de simetría la recta y = x. Esta reflexión se puede
hacer de dos formas, la primera hace que el vector reflejado quede sobre la recta y = x,
mientras que la segunda hace que el vector reflejado quede a lados opuestos de la recta
y = x.

Reflexión a lo largo de la recta y = x: Sus componentes cambian de signo


6. Transformaciones Lineales 311

2 2
T : R → R
 
x −x

y −y

En forma matricial se puede expresar de la siguiente forma:


      ′ 
x −1 0 0 x x
T  y  =  0 −1 0   y  =  y′ 
1 0 0 1 1 1
Donde x′ es el vector reflejado a lo largo de la recta y = x.

Reflexión a lados opuestos de la recta y = x: Sus componentes cambian de posición:

2
T : R → R2
 
x y

y x

En forma matricial se puede expresar de la siguiente forma:


      ′ 
x 0 1 0 x x
T y = 1 0 0   y  =  y′ 
1 0 0 1 1 1
Donde x′ es el vector reflejado al lado opuesto de la recta y = x.

.:Ejemplo 6.11

De nuevo, tomaremos el triángulo formado por los puntos A(3, 3), B(2, 1) y C(4, 1) y
apliquemos una reflexión a lo largo de la recta y = x y otra a lados opuestos de la recta
y = x.

Tomemos cada uno de los puntos y aplicamos la transformación:

La transformación a lo largo de la recta y = x:

A(3, 3):       
3 −1 0 0 3 −3
T  3  =  0 −1 0   3  =  −3 
1 0 0 1 1 1
312 6.4. Transformaciones en el plano

B(2, 1):       
2 −1 0 0 2 −2
T  1  =  0 −1 0   1  =  −1 
1 0 0 1 1 1

C(4, 1):       
4 −1 0 0 4 −4
T  1  =  0 −1 0   1  =  −1 
1 0 0 1 1 1

La transformación a lados opuestos de la recta y = x:


A(3, 3):       
3 0 1 0 3 3
T 3 = 1 0 0  3  =  3 
1 0 0 1 1 1

B(2, 1):       
2 0 1 0 2 1
T 1 = 1 0 0  1  =  2 
1 0 0 1 1 1

C(4, 1):       
4 0 1 0 4 1
T 1 = 1 0 0  1  =  4 
1 0 0 1 1 1

Como podemos ver en la figura 6.5, el triángulo ABC se reflejó a lo largo de la recta
y = x, conservando la misma forma, pero cambiando de posición, en este caso pasó del
primer cuadrante al tercero. El triángulo ABC se transformó en el triángulo F ED. En
el otro tipo de reflexión, se puede observar que la recta y = x actúa como un “espejo”
donde el triángulo ABC se refleja en el triángulo HGA, conservando la misma forma,
pero cambiando la posición.

El siguiente algoritmo, muestra cómo implementar la reflexión a lo largo de la recta y = x


en Python:

.:Algoritmo 6.2

1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p r i n t " T ra n s f o rm a c i o n de r e f l e x i o n en l a r e c t a y=x : \ n"
5
6. Transformaciones Lineales 313

H
4 b
i

j A
3 b

h b
2 b
a
G

Bb C
1 b

c
y=x

−5 −4 −3 −2 −1 1 2 3 4
F e E
b b
−1

f
g −2

b
−3
D

−4

Figura 6.5: El triángulo ABC y las reflexiones sobre y a lo largo de la recta y = x

6 d e f ReflexionEjeYX( x ) :
7 MatrizRefEjeYX=np . a r r a y ( [ [ − 1 , 0 , 0 ] , [ 0 , − 1 , 0 ] , [ 0 , 0 , 1 ] ] )
8 r e t u r n MatrizRefEjeYX . dot ( x .T)
9
10 d e f ReflexionEjeXY( x ) :
11 MatrizRefEjeYX=np . a r r a y ( [ [ 0 , 1 , 0 ] , [ 1 , 0 , 0 ] , [ 0 , 0 , 1 ] ] )
12 r e t u r n MatrizRefEjeYX . dot ( x .T)
13
14 Punto1=np . a r r a y ( [ 3 , 3 , 1 ] )
15 Punto2=np . a r r a y ( [ 2 , 1 , 1 ] )
16 Punto3=np . a r r a y ( [ 4 , 1 , 1 ] )
17
18 print " p u n to s d e l triangulo (3 ,3) , (2 ,1) , (4 ,1)"
19 print " Punto 1 : " , Punto1
20 print " Punto 2 : " , Punto2
21 print " Punto 3 : " , Punto3
22
23 p r i n t " \n l o s nuevos p u n to s r e f l e j a d o s con r e s p e c t o a l a r e c t a y=x son : \ n"
24
25 print " punto 1 r e f l e j a d o : \ n " , R e f l e x i o n E j e Y X ( Punto1 )
26
27 print " punto 2 r e f l e j a d o : \ n " , R e f l e x i o n E j e Y X ( Punto2 )
314 6.4. Transformaciones en el plano

28
29 print " punto 3 r e f l e j a d o : \ n " , R e f l e x i o n E j e Y X ( Punto3 )
30
31
32 p r i n t " \n l o s nuevos p u n to s r e f l e j a d o s a l l a d o o p u e s t o de y=x son : \ n"
33
34 print " punto 1 r e f l e j a d o : \ n " , R e f l e x i o n E j e X Y ( Punto1 )
35
36 print " punto 2 r e f l e j a d o : \ n " , R e f l e x i o n E j e X Y ( Punto2 )
37
38 print " punto 3 r e f l e j a d o : \ n " , R e f l e x i o n E j e X Y ( Punto3 )

El programa anterior produce la siguiente salida:

1 >>>
2 T ra n s f o rm a c i o n de r e f l e x i o n en l a r e c t a y=x :
3
4 p u n to s d e l t r i a n g u l o ( 3 , 3 ) , ( 2 , 1 ) , ( 4 , 1 )
5 Punto 1 : [ 3 3 1 ]
6 Punto 2 : [ 2 1 1 ]
7 Punto 3 : [ 4 1 1 ]
8
9 l o s nuevos p u n to s r e f l e j a d o s con r e s p e c t o a l a r e c t a y=x son :
10
11 punto 1 reflejado :
12 [ −3 −3 1 ]
13 punto 2 reflejado :
14 [ −2 −1 1 ]
15 punto 3 reflejado :
16 [ −4 −1 1 ]
17
18 l o s nuevos p u n to s r e f l e j a d o s a l l a d o o p u e s t o de y=x son :
19
20 punto 1 r e f l e j a d o :
21 [3 3 1]
22 punto 2 r e f l e j a d o :
23 [1 2 1]
24 punto 3 r e f l e j a d o :
25 [1 4 1]
26 >>>

El Algoritmo 6.2, es muy parecido al algoritmo 6.1, se implementan dos funciones:


ReflexionEjeYX(x) y ReflexionEjeXY(x):, ambas reciben el vector a transformar, el
cual es multiplicado por la matriz correspondiente. De nuevo, reflejamos los puntos
6. Transformaciones Lineales 315

(3, 3), (2, 1), (4, 1), los cuales quedan reflejados en (−3, −3), (−2, −1), (−4, −1) y
(3, 3), (1, 2), (1, 4).

6.4.2. Transformación de rotación


En este tipo de transformación, se toma un vector de R2 y se entrega otro del mismo tipo
pero rotado θ grados en sentido anti horario:

2 2
T : R → R
 ′ 
x x

y y′

P ′ (x′ , y ′ )
6 b

v
3

2 b

P (x, y)
1
θ u

φ
b

−1 O 1 2 3 4 5 6

−1

Figura 6.6: Rotación en el plano

Para hallar las coordenadas del punto (x′ , y ′ ) a partir de (x, y) ubicaremos ambos puntos
en el plano como se muestra en la figura 6.6. Según Pettofrezzo [24], tomamos el vector
−−→
OP y obtenemos su descomposición en forma de vectores unitarios, teniendo en cuenta
−−→
que tenemos dos ángulos: el ángulo φ comprendido entre el eje x y OP y el ángulo θ entre
−−→ −−→
los vectores OP y OP ′ . Entonces:
316 6.4. Transformaciones en el plano

−−→
OP = xi + yj

−−→ −−→
= OP cos φi + OP sin φj

−−→′ −−→
= OP cos φi + OP ′ sin φj

Ahora bien, aplicando trigonometría tenemos:

−−→′
OP = x′ i + y ′ j

−−→′ −−→
= OP cos (θ + φ) i + OP ′ sin (θ + φ) j

−−→′ −−→
= OP (cos θ cos φ − sin θ sin φ) i + OP ′ (sin θ cos φ + cos θ sin φ) i

= (x cos θ − y sin θ) i + (x sin θ − y cos θ) j

Lo que implica que:

x′ = x cos θ − y sin θ
y′ = x sin θ + y cos θ

En forma matricial tenemos que:


      ′ 
x cos θ − sin θ 0 x x
T  y  =  sin θ cos θ 0   y  =  y′ 
1 0 0 1 1 1
Donde
 
cos θ − sin θ 0
 sin θ cos θ 0  (6.1)
0 0 1
La matriz de la ecuación 6.1, se conoce como matriz de rotación o matriz rotacional.
Recordemos que el ángulo θ se forma en sentido anti horario.

.:Ejemplo 6.12
6. Transformaciones Lineales 317

Siguiendo con el ejemplo del triángulo ABC, tomaremos los puntos A(3, 3), B(2, 1) y
C(4, 1) y apliquemos una rotación con centro en el origen con un ángulo de θ = π3 .

Tomamos cada uno de los puntos y aplicamos la transformación:

A(3, 3):
   π
 π
    
3 cos 3 − sin 3 0 3 −1.09807621
π π
T  3  =  sin 3 cos 3 0   3  =  4.09807621 
1 0 0 1 1 1

B(2, 1):
  π
 π
    
2 cos 3 − sin 3 0 2 0.1339746
π π
T  1  =  sin 3 cos 3 0   1  =  2.23205081 
1 0 0 1 1 1

C(4, 1):
  π
 π
    
4 cos 3 − sin 3 0 4 1.1339746
π π
T  1  =  sin 3 cos 3 0   1  =  3.96410162 
1 0 0 1 1 1

D
b
4 b
F

A
3 b

b
E
2

B C
1 b b

b
G
−2 −1 1 2 3 4

−1
π
Figura 6.7: El triángulo ABC rotado
3
318 6.4. Transformaciones en el plano

Como podemos ver en la figura 6.7, el triángulo ABC rotó π3 (60o ) en sentido anti horario,
este nuevo triángulo lo llamaremos DF E. El triángulo DF E tiene el mismo tamaño y la
misma forma que el triángulo ABC, sólo cambia la posición.

El siguiente algoritmo, muestra cómo implementar la rotación de un vector con un ángulo


de θ en Python:

.:Algoritmo 6.3

1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p r i n t " T ra n s f o rm a c i o n de r o t a c i o n : \ n"
5
6 def rotaci on (x , theta ) :
7 M a tri z R o ta c i o n =np . a r r a y ( [ [ np . c o s ( t h e t a ) , −1∗np . s i n ( t h e t a ) , 0 ] ,
8 [ np . s i n ( t h e t a ) , np . c o s ( t h e t a ) , 0 ] ,
9 [0 , 0 , 1]])
10 r e t u r n M a tri z R o ta c i o n . dot ( x )
11
12 Punto1=np . a r r a y ( [ 3 , 3 , 1 ] )
13 Punto2=np . a r r a y ( [ 2 , 1 , 1 ] )
14 Punto3=np . a r r a y ( [ 4 , 1 , 1 ] )
15
16 print " p u n to s d e l triangulo (3 ,3) , (2 ,1) , (4 ,1)"
17 print " Punto 1 : " , Punto1
18 print " Punto 2 : " , Punto2
19 print " Punto 3 : " , Punto3
20
21 p r i n t " \n l o s nuevos p u n to s Rotados : \ n"
22
23 print " punto 1 r o t a d o : \ n " , r o t a c i o n ( Punto1 , np . p i / 3 )
24
25 print " punto 2 r o t a d o : \ n " , r o t a c i o n ( Punto2 , np . p i / 3 )
26
27 print " punto 3 r o t a d o : \ n " , r o t a c i o n ( Punto3 , np . p i / 3 )

El programa anterior produce la siguiente salida:

1 >>>
2 T ra n s f o rm a c i o n de r o t a c i o n :
3
4 p u n to s d e l t r i a n g u l o ( 3 , 3 ) , ( 2 , 1 ) , ( 4 , 1 )
5 Punto 1 : [ 3 3 1 ]
6 Punto 2 : [ 2 1 1 ]
7 Punto 3 : [ 4 1 1 ]
6. Transformaciones Lineales 319

8
9 l o s nuevos p u n to s Rotados :
10
11 punto 1 r o t a d o :
12 [ −1.09807621 4.09807621 1. ]
13 punto 2 r o t a d o :
14 [ 0.1339746 2.23205081 1. ]
15 punto 3 r o t a d o :
16 [ 1.1339746 3.96410162 1. ]
17 >>>

El Algoritmo 6.3, implementa una función llamada rotacion(x,theta), el cual, recibe


dos parámetros, el primero es el vector a rotar y el segundo es el ángulo deseado
(0 < θ < 2π). Dicha función calcula la matriz de rotación llamada MatrizRotacion y
finalmente multiplica el vector por dicha matriz. De nuevo, los puntos (3, 3), (2, 1), (4, 1)
fueron rotados π3 , quedando en los siguientes puntos: (−1.09807621, 4.09807621),
(0.1339746, 2.23205081), (1.1339746, 3.96410162).

6.4.3. Transformación de traslación


La transformación de traslación, consiste en tomar un punto del plano y trasladarlo a
otro punto.

2 2
T : R → R
 ′ 
x x

y y′

Matricialmente podemos representar esta transformación de la siguiente forma:


      ′ 
x 1 0 h x x
T y = 0 1 k   y  =  y′ 
1 0 0 1 1 1
Donde h es el desplazamiento en el eje x y k es el desplazamiento sobre el eje y:
En la figura 6.8, podemos ver que el vector u con punto final A(3, 1), suma h unidades
en la componente x y k unidades en el eje y: el nuevo punto D(6, 3) representa el nuevo
vector v resultado de la traslación.

.:Ejemplo 6.13
320 6.4. Transformaciones en el plano

3 b D

2 k
v

1 b b

A h C
u
b
B

−1 1 2 3 4 5 6 7 8

−1

Figura 6.8: Traslación de un punto en el plano

Tomando triángulo ABC, con vértices A(3, 3), B(2, 1) y C(4, 1). Aplicaremos una
transformación con h = 2 y k = −3:

Tomamos cada uno de los puntos y aplicamos la transformación:

A(3, 3): 
     
3 1 0 2 3 5
T 3 = 0 1 −3   3  =  0 
1 0 0 1 1 1

B(2, 1):       
2 1 0 2 2 4
T 1 = 0 1 −3   1  =  −2 
1 0 0 1 1 1

C(4, 1):       
4 1 0 2 4 6
T 1 = 0 1 −3   1  =  −2 
1 0 0 1 1 1

En la figura 6.9, el triángulo ABC se trasladó en el eje x, 2 unidades y en el eje y, -3


unidades. El nuevo triángulo DEF conserva la misma forma, pero cambia la posición.

El siguiente algoritmo, muestra la implementación de la función de traslación en Python:

.:Algoritmo 6.4
6. Transformaciones Lineales 321

A
b

a b

g
B b b
C
c

x b
D
1 2 3 4 5 6
i h
d f

E b b F
e

Figura 6.9: Traslación del triángulo ABC con h = 2 y k = −3

1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p r i n t " T ra n s f o rm a c i o n de t r a s l a c i o n : \ n"
5
6 def tr a sl a ci o n (x , h , k) :
7 M a t r i z T r a s l a c i o =np . a r r a y ( [ [ 1 , 0 , h ] ,
8 [ 0, 1, k] ,
9 [ 0, 0, 1]])
10 r e t u r n M a t r i z T r a s l a c i o . dot ( x )
11
12 Punto1=np . a r r a y ( [ 3 , 3 , 1 ] )
13 Punto2=np . a r r a y ( [ 2 , 1 , 1 ] )
14 Punto3=np . a r r a y ( [ 4 , 1 , 1 ] )
15
16 print " p u n to s d e l triangulo (3 ,3) , (2 ,1) , (4 ,1)"
17 print " Punto 1 : " , Punto1
18 print " Punto 2 : " , Punto2
19 print " Punto 3 : " , Punto3
20
21 p r i n t " \n l o s nuevos p u n to s t r a s l a d a d o s : \ n"
22
23 print " punto 1 r o t a d o : \ n " , t r a s l a c i o n ( Punto1 , 2 , − 3 )
24
25 print " punto 2 r o t a d o : \ n " , t r a s l a c i o n ( Punto2 , 2 , − 3 )
26
27 print " punto 3 r o t a d o : \ n " , t r a s l a c i o n ( Punto3 , 2 , − 3 )
322 6.4. Transformaciones en el plano

El programa anterior produce la siguiente salida:

1 >>>
2 T ra n s f o rm a c i o n de t r a s l a c i o n :
3
4 p u n to s d e l t r i a n g u l o ( 3 , 3 ) , ( 2 , 1 ) , ( 4 , 1 )
5 Punto 1 : [ 3 3 1 ]
6 Punto 2 : [ 2 1 1 ]
7 Punto 3 : [ 4 1 1 ]
8
9 l o s nuevos p u n to s t r a s l a d a d o s :
10
11 punto 1 r o t a d o :
12 [5 0 1]
13 punto 2 r o t a d o :
14 [ 4 −2 1 ]
15 punto 3 r o t a d o :
16 [ 6 −2 1 ]
17 >>>

El Algoritmo 6.4, implementa una función llamada traslacion(x,h,k), la cual recibe como
parámetros: el vector a transformar, y dos valores llamados h y k; el primero es el
aumento en x del vector y el segundo es el aumento en y del mismo. La función, declara
la matriz de traslación en una variable llamada MatrizTraslacio. De nuevo, los puntos
(3, 3), (2, 1), (4, 1), son trasladados con los valores h = 2 y k = 3, dando como resultado:
(5, 0), (4, −2), (6, −2).

6.4.4. Transformación de escalado


La transformación de escalado, consiste en tomar un punto en el plano y aumenta o
disminuye la magnitud del vector asociado a dicho vector.

2 2
T : R → R
 ′ 
x x

y y′

Matricialmente podemos representar esta transformación de la siguiente forma:


6. Transformaciones Lineales 323

      ′ 
x Dx 0 0 x x
T y = 0 Dy 0   y  =  y ′ 
1 0 0 1 1 1
Donde Dx es el factor de escalamiento sobre el eje x y Dy es el factor de escalamiento
sobre el eje y. En la figura 6.10, se puede ver como el punto extremo A del vector u,
se transformó en el punto extremo C del vector v. Si Dx y Dy son negativos, el vector
cambia de dirección. Si Dx y Dy se encuentran en el intervalo (0, 1), el tamaño del vector
se reduce.

4 b
C

3
v

2 b

1 u

−1 O 1 2 3 4 5 6

−1

Figura 6.10: Escalado de un punto en el plano

.:Ejemplo 6.14
El triángulo ABC, con vértices A(3, 3), B(2, 1) y C(4, 1). Aplicaremos una
transformación de escalado con Dx = 2 y Dy = 2:

Tomamos cada uno de los puntos y aplicamos la transformación:

A(3, 3):      
3 2 0 0 3 6
T 3 = 0 2 0  3  =  6 
1 0 0 1 1 1
B(2, 1):      
2 2 0 0 2 4
T 1 = 0 2 0  1  =  2 
1 0 0 1 1 1
324 6.4. Transformaciones en el plano

C(4, 1):      
4 2 0 0 4 8
T 1 = 0 2 0  1  =  2 
1 0 0 1 1 1

D
b

A F
b E b b

b b

B C

x
1 2 3 4 5 6 7 8

Figura 6.11: Triángulo ABC escalado con con Dx = 2 y Dy = 2

En la figura 6.11, se muestra como el triángulo ABC se escala con Dx = 2 y Dy = 2;


resultado un nuevo triángulo llamado DEF , éste triángulo no conserva la misma posición,
pues también tiene un corrimiento (en este caso a la derecha). Su tamaño se amplió de
acuerdo al factor de escalamiento, en este caso, el nuevo triángulo es el doble de grande
al anterior.

El siguiente algoritmo, muestra la implementación de la función de escalado en Python:

.:Algoritmo 6.5

1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p r i n t " T ra n s f o rm a c i o n de e s c a l a d o : \ n"
5
6. Transformaciones Lineales 325

6 d e f e s c a l a d o ( x , Dx , Dy) :
7 M a t r i z e s c a l a d o= np . a r r a y ( [ [ Dx , 0 , 0] ,
8 [ 0, Dy , 0 ] ,
9 [ 0, 0, 1]])
10 r e t u r n M a t r i z e s c a l a d o . dot ( x )
11
12 Punto1=np . a r r a y ( [ 3 , 3 , 1 ] )
13 Punto2=np . a r r a y ( [ 2 , 1 , 1 ] )
14 Punto3=np . a r r a y ( [ 4 , 1 , 1 ] )
15
16 print " Punto del triangulo (3 ,3) , (2 ,1) , (4 ,1) "
17 print " Punto 1 : " , Punto1
18 print " Punto 2 : " , Punto2
19 print " Punto 3 : " , Punto3
20
21 p r i n t " \n l o s nuevos p u n to s E s c a l a d o s : \ n"
22
23 print " punto 1 e s c a l a d o : \ n " , e s c a l a d o ( Punto1 , 2 , 2 )
24
25 print " punto 2 e s c a l a d o : \ n " , e s c a l a d o ( Punto2 , 2 , 2 )
26
27 print " punto 3 e s c a l a d o : \ n " , e s c a l a d o ( Punto3 , 2 , 2 )
28
29 p=np . a r r a y ( [ 3 , 2 , 1 ] )
30 print escalado (p , 2 , 2)

El programa anterior produce la siguiente salida:

1 >>>
2 T ra n s f o rm a c i o n de e s c a l a d o :
3
4 Punto del triangulo (3 ,3) , (2 ,1) , (4 ,1)
5 Punto 1: [3 3 1]
6 Punto 2: [2 1 1]
7 Punto 3: [4 1 1]
8
9 l o s nuevos p u n to s E s c a l a d o s :
10
11 punto 1 e s c a l a d o :
12 [6 6 1]
13 punto 2 e s c a l a d o :
14 [4 2 1]
15 punto 3 e s c a l a d o :
16 [8 2 1]
17
18 >>>
326 6.4. Transformaciones en el plano

El Algoritmo 6.5, implementa una función llamada escalado(x,Dx,Dy), la cual recibe como
parámetros: el vector a transformar, y dos valores llamados Dx y Dy, el primero representa
el valor de escalado de x del vector, el segundo hace lo mismo pero con el eje y. La
función, declara la matriz de escalado en una variable llamada Matrizescalado. De nuevo,
los puntos (3, 3), (2, 1), (4, 1), son escalados con los valores Dx = 2 y Dy = 2, dando
como resultado: (6, 6), (4, 2), (8, 2); además, el triángulo ABC al escalarse es el doble
de grande al original.

.:Ejercicios 6.2

1. Observe la siguiente función implementada en Python:


1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4
5 d e f RotadoXY ( x , th e ta , xp , yp ) :
6 .
7 .
8 .
9 return x

Investigue e implemente la función RotadoXY(x,theta, xp,yp), la cual, rota un punto


en el plano alrededor de un punto. Los parámetros son x el vector a rotar, theta, el
ángulo, y xp y yp, son las coordenadas del punto a partir del cual se va a rotar.

2. Observe la siguiente función implementada en Python:


1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4
5 d e f reflexionYeqnMXplusB ( x ,m, b ) :
6 .
7 .
8 .
9 return x

Investigue e implemente la función reflexionYeqnMXplusB(x,m,b). Esta función


toma un vector x y lo refleja con respecto a una recta de la forma y = mx + b.
La función recibe como parámetros el vector x, el valor de la pendiente m y el valor
de b.
6. Transformaciones Lineales 327

3. Investigue e implemente en Python las funciones de reflexión, traslación, rotación y


escalado para R3 . Para más información, consulte [24, 25, 19]
328 6.4. Transformaciones en el plano
“Todavía estaba yo hablando en oración, cuando Gabriel,
el hombre a quien había visto en la visión al principio, se
me acercó, estando yo muy cansado, como a la hora de la
ofrenda de la tarde. Me instruyó, habló conmigo y dijo: Daniel,
he salido ahora para darte sabiduría y entendimiento. Al
principio de tus súplicas se dio la orden, y he venido para
explicártela , porque eres muy estimado; pon atención a la
orden y entiende la visión.”
Daniel 9: 21 - 23

Vectores y valores propios


7
En una transformación lineal T : V → W , un vector x que pertenezca al dominio de la
transformación (V ), al evaluarse en la transformación T , se produce como resultado un
múltiplo escalar de x, al que llamaremos λx, es decir, que se produce un vector paralelo
al vector evaluado; esto también implica que ambos vectores, x y λx tienen la misma
dirección, pero diferente magnitud. Ahora bien, en el capítulo anterior, observamos que
una transformación T , puede expresarse como la multiplicación de una matriz por el vector
que vamos a transformar, en cuyo caso obtendríamos la siguiente igualdad: Ax = λx (ver
figura 7.1)

λx

Figura 7.1: Ax = λx

329
330 7.1. Vectores y valores propios

7.1. Vectores y valores propios


.:Definición 7.1 Sea T : Rn → Rn ,una transformación lineal. Diremos que λ ∈ R
es un valor propio o Eigenvalor de la transformación T si existe un x ∈ Rn con x
no nulo, tal que:

T (x) = λx (7.1)
Si T está determinada por una matriz A de n × n, entonces se obtiene la expresión

Ax = λx (7.2)

Este x se le denomina un vector propio o Eigenvector de T (o de la matriz A)


correspondiente a λ.

Ahora bien, ¿cómo podemos hallar dichos valores y vectores propios?. Para encontrar el
valor de λ, es necesario hacer una especie de “despeje” de la siguiente ecuación:

Ax = λx (7.3)

Bien, si suponemos que λ es un valor propio de A, esto implica que debe existir un
vector propio x no nulo. Para hacer este despeje multiplicamos el valor de λ por la matriz
identidad, entonces la ecuación 7.3, se transforma en:

(A − λI) x = 0 (7.4)

En el producto de la ecuación 7.4, debemos tener en cuenta que x es no nulo, por lo tanto:

A − λI = 0 (7.5)

Como A es una matriz n × n, la ecuación (7.3) es un sistema homogéneo y como x 6= 0,


el sistema tiene soluciones no triviales, por lo tanto:

det (A − λI) = 0 (7.6)

El sistema 7.7, es la forma expandida de la ecuación 7.5:

(a11 − λ)x1 + a12 x2 + · · · + a1n xn = 0


a21 x1 + (a22 − λ)x2 + · · · + a2n xn = 0
.. .. .. (7.7)
. . .
an1 x1 + an2 x2 + · · · + (ann − λ)xn = 0

Si el sistema de la ecuación 7.7 tiene solución no trivial, entonces el determinante de la


7. Vectores y valores propios 331

matriz del sistema es nulo. Es decir, que:

a11 − λ a12 ··· a1n


a21 a22 − λ · · · a2n
.. .. .. .. =0
. . . .
an1 an2 · · · ann − λ

Al calcular el determinante, obtenemos los valores propios de la transformación T


representada por A. Pero al desarrollar este determinante obtenemos un polinomio de
grado n cuyas raíces son los valores propios de la transformación T ; dicho polinomio
se denomina polinomio característico. La teoría presentada anteriormente, se puede
resumir en el siguiente teorema:

.:Teorema 7.1 Sea A ∈ C de tamaño n × n, entonces λ ∈ C es un valor propio de A si


y sólo si:

P (λ) = det (A − λI) = 0


Donde P (λ) es el polinomio característico de la transformación T y P (λ) = 0 se le
denomina la Ecuación Característica de T .

Por el teorema fundamental del Álgebra, este polinomio característico tiene n raíces, que
pueden ser reales, complejas o una combinación entre reales y complejas. El siguiente
ejemplo nos ilustra cómo obtener los valores y los vectores propios de una transformación
T.

.:Ejemplo 7.1

Sea A una matriz asociada a una transformación T . Encuentre los valores propios de T ,
si la matriz A está definida de la siguiente forma:
 
2 40 −6
A =  1 15 1 
0 −7 3
Bien, para encontrar los valores propios, debemos encontrar el determinante:

(2 − λ) 40 −6
1 (15 − λ) 1 =0
0 −7 (3 − λ)
Expandimos el determinante:
332 7.1. Vectores y valores propios

(15 − λ) 1 1 −6 1 (15 − λ)
(2 − λ) − 40 + (−6)
−7 (3 − λ) 0 (3 − λ) 0 −7
Luego,

(2 − λ)((15 − λ) (3 − λ) + 7) − 40(3 − λ) − 6(−7)


Expandiendo y organizando los términos, obtenemos el polinomio característico P (λ) =
−λ3 + 20λ2−48λ + 26, cuyas raíces son λ = 0.7937879142791794, λ = 1.891731022596512
y λ = 17.31448106312431.

Ahora bien, ¿qué características tiene éste polinomio?, el siguiente teorema nos puede dar
una idea:

.:Teorema 7.2 Sea A una matriz de n × n, la matriz de una transformación. Entonces


det (A − λI) es un polinomio de grado n, donde el coeficiente de λn es (−1)n y su término
n
independiente es detA; es decir, det (A − λI) = (−1) λn + an−1 λn−1 + · · · + a1 λ + a0
donde a0 = detA

En el ejemplo inmediatamente anterior, el coeficiente de λn es -1 que es igual a (−1)3 =


−1. Además, el determinante de la matriz A es detA = 26 que corresponde con el término
constante del polinomio.

El siguiente algoritmo, muestra cómo obtener el polinomio característico y los valores


propios como raíces del mismo:

.:Algoritmo 7.1

1 i m p o rt numpy a s np
2 from sympy i m p o rt ∗
3 from numpy . p o l y n o m i a l i m p o rt ∗
4
5 p r i n t " P o l i n o m i o c a r a c t e r i s t i c o : \ n"
6
7 A = np . a r r a y ( [ [ 2 , 8, 6 ,] ,
8 [ 9, 5, 6 ,] ,
9 [ 1, 8, 7 , ] ] , dtype=f l o a t )
10
11 p r i n t "La m a t r i z A: \ n" , A
12
13 B=Matrix (A)
14
15 z = Symbol ( ’ x ’ )
7. Vectores y valores propios 333

16 p=Poly (B . c h a r p o l y ( z ) )
17
18 Coef = p . a l l _ c o e f f s ( )
19 p r i n t " \n La l i s t a de l o s c o e f i c i e n t e s d e l p o l i n o m i o : \ n" , Coef
20 q=np . p o l y 1 d ( Coef )
21
22 p r i n t " \ nEl p o l i n o m i o c a r a c t e r i s t i c o : \ n" , q
23
24 p r i n t " \n Los v a l o r e s p r o p i o s de A: \ n" , q . r

El programa anterior produce la siguiente salida:

1 >>>
2 Polinomio c a r a c t e r i s t i c o :
3
4 La m a t r i z A:
5 [[ 2. 8. 6.]
6 [ 9. 5. 6.]
7 [ 1. 8. 7.]]
8
9 La l i s t a de l o s c o e f i c i e n t e s d e l p o l i n o m i o :
10 [ 1. 00000000000000 , −14.0000000000000 , −67.0000000000000 , 80.0000000000000]
11
12 El p o l i n o m i o c a r a c t e r i s t i c o :
13 3 2
14 1 x − 14 x − 67 x + 80
15
16 Los v a l o r e s p r o p i o s de A:
17 [ 17.55667219 −4.55667219 1. ]
18 >>>

El Algoritmo 7.1, declara la matriz A (línea 7) de la siguiente forma:


 
2 8 6
A= 9 5 6 
1 8 7
Esto se hace de la manera habitual, como lo hicimos en algoritmos anteriores. Sin embargo,
aquí haremos uso de una herramienta nueva, se trata de la librería Sympy1 , la cual, se
carga con el comando from sympy import * y permite manejar cálculos simbólicos. En
este caso, convertiremos un arreglo de Numpy en una matriz de Sympy con el comando
B=Matrix(A); La variable A, sigue siendo una matriz de tipo Numpy y B es una variable
1 Para más información, consultar la página [Link]
334 7.1. Vectores y valores propios

que almacena la misma matriz, pero en el formato de Sympy. La nueva matriz B, permite
usar símbolos, en este caso la “x” del polinomio, esto se logra con el comando z =
Symbol(’x’) (línea 13). La variable z es de tipo símbolo y contiene la variable “x”.

Ahora, obtenemos el polinomio característico con el comando p=Poly([Link](z)) (ver


línea 16). El comando [Link](z), obtiene el polinomio característico de la matriz B,
enviándole como parámetro la variable z. El comando charpoly, utiliza el algoritmo de
Berkowitz2 para obtener el polinomio característico, pero este se encuentra en un formato
llamado PurePoly, el cual, si se imprime, obtendremos algo como:

PurePoly(1.0*x**3 - 14.0*x**2 - 67.0*x + 80.0, x, domain=’RR’)

Donde se puede ver la forma del polinomio y su dominio (en este caso los reales). Para
visualizarlo mejor, convertiremos la variable p, del formato Sympy al formato Numpy. Esto
lo hacemos con el comando Coef = p.all_coeffs(), donde la variable Coef es una lista con
los coeficientes del polinomio que se obtuvo gracias al método all_coeffs() (línea 18).
La lista se utiliza para crear el polinomio de Numpy con el comando q=np.poly1d(Coef )
(línea 20), el cual, recibe como parámetro la lista Coef con los coeficientes del polinomio.
La variable q es un polinomio de Numpy, y podemos obtener sus raíces con el comando
q.r (líneas 22 y 24).

Ahora bien, Python y Numpy, permiten obtener los valores y los vectores propios. El
siguiente algoritmo, muestra como obtener los valores propios en Python:

.:Algoritmo 7.2

1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3
4 p r i n t " V a l o r e s p r o p i o s : \ n"
5
6 A = np . a r r a y ( [ [ 2 , 8, 6 ,] ,
7 [ 9, 5, 6 ,] ,
8 [ 1, 8, 7 , ] ] , dtype=f l o a t )
9
10 V a l o re s P = l i n a l g . e i g v a l s (A)
11
12 print "La m a t r i z A: \ n"
13
14 print A
15 print " "
16 p r i n t " Los v a l o r e s p r o p i o s de A: \ n" , V a l o re s P
2 Para
más información sobre el Algoritmo de Berkowitz, ver la página [Link]
1/modules/[Link]
7. Vectores y valores propios 335

El programa anterior produce la siguiente salida:

1 >>>
2 Valores propios :
3 La m a t r i z A:
4
5 [ [ 2. 8. 6.]
6 [ 9. 5. 6.]
7 [ 1. 8. 7.]]
8
9 Los v a l o r e s p r o p i o s de A:
10 [ 17.55667219 −4.55667219 1. ]
11 >>>

El Algoritmo 7.2, toma la matriz A y obtiene los valores propios, usando la función
[Link](A) (línea 10), la cual, recibe como parámetro la matriz en cuestión y retorna
un vector con los valores propios de A.

.:Ejemplo 7.2
 
2 1
Dada la matriz A = , encuentre los valores y los vectores propios de A.
6 7
Bien, primero hallamos los valores propios de la matriz, entonces debemos hallar el
determinante:

2−λ 1
=0
6 7−λ
el cual nos da el polinomio característico λ2 − 9λ + 8 = 0 que tiene como raíces λ = 1
y λ = 8. Ahora, hallamos los vectores propios, teniendo en cuenta que (A − λI)v = 0,
donde v es el vector propio que vamos a calcular.

Tomaremos el primer valor propio λ = 1


   
2 1 1 0
− (1) =0
6 7 0 1
El cual da como resultado el sistema homogéneo:
336 7.1. Vectores y valores propios

 
1 1 0
6 6 0
Entonces, al hacer las operaciones elementales por fila, obtenemos el siguiente sistema:
 
1 1 0
0 0 0
Luego v1 + v2 =0, entonces v1 = −v2 , lo que implica que el vector propio asociado a
−1
λ = 1 es . Ahora, hacemos el mismo proceso para el segundo valor propio, en
1
este caso λ = 8.

   
2 1 1 0
− (8) =0
6 7 0 1
Donde el sistema homogéneo resultante es:
 
−6 1 0
6 1 0
Al realizar las operaciones elementales por fila, obtenemos:
 
−6 1 0
0 0 0
1
Donde −6v1 + v2 = 0, luego −6v1 = −v2 , de donde  concluir que v1 = 6 v2 . En
 podemos
1/6
conclusión, para λ = 8 el valor propio asociado es .
1
El siguiente algoritmo, calcula tanto los valores como los vectores propios de una matriz:

.:Algoritmo 7.3

1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3
4 p r i n t " V a l o r e s p r o p i o s : \ n"
5
6 A = np . a r r a y ( [ [ 2 , 8, 6 ,] ,
7 [ 9, 5, 6 ,] ,
8 [ 1, 8, 7 , ] ] , dtype=f l o a t )
9
10 v e c t o r e s P r o p i o s=np . l i n a l g . e i g (A)
11
12 print "La m a t r i z A: \ n" , A, " \n"
7. Vectores y valores propios 337

13
14 p r i n t " Los v a l o r e s p r o p i o s son : \ n" , v e c t o r e s P r o p i o s [ 0 ] , " \n"
15
16 p r i n t " Los v e c t o r e s p r o p i o s son : \ n" , v e c t o r e s P r o p i o s [ 1 ] , " \n"

El programa anterior produce la siguiente salida:

1 >>>
2 Valores propios :
3
4 La m a t r i z A:
5 [[ 2. 8. 6.]
6 [ 9. 5. 6.]
7 [ 1. 8. 7.]]
8
9 Los v a l o r e s p r o p i o s son :
10 [ 17.55667219 −4.55667219 1. ]
11
12 Los v e c t o r e s p r o p i o s son :
13 [ [ − 0 . 5 4 0 1 8 3 0 9 −0.47332305 − 0 . 2 7 7 0 5 4 2 6 ]
14 [ −0.64529409 0.7429203 −0.55410852]
15 [ − 0 . 5 4 0 1 8 3 0 9 −0.47332305 0 . 7 8 4 9 8 7 0 6 ] ]
16 >>>

El Algoritmo 7.3, toma la matriz A y obtiene los valores propios, usando la función
[Link](A) (línea 10), la cual, recibe como parámetro la matriz en cuestión y retorna
una tupla, cuya primera componente es un vector con los valores propios de A; el
segundo parámetro de la tupla, es una matriz cuyas columnas son los vectores propios
correspondientes al vector de valores propios, es decir, la primera columna de la matriz, es
el vector propio asociado al primer elemento del vector de valores propios. Estos vectores
propios están normalizados con respecto a la longitud.

7.1.1. Propiedades de los valores propios


Tomemos tres matrices triangulares: A de tamaño 2 × 2, B de tamaño 3 × 3 y C de 4 × 4,
definidas de la siguiente forma:
 
  1 0 0 0
  5 4 1
2 3  2 5 0 0 
A= , B= 0 7 2 , B= 
0 4  5 3 4 0 
0 0 6
3 4 7 3
338 7.1. Vectores y valores propios

Si aplicamos el Algoritmo 7.3, obtendremos que los valores propios de la matriz A son 2
y 4. Los valores propios de la matriz B son 5,7 y 6 y finalmente, la matriz C tiene a 1,
5, 4 y 3 como valores propios. Esto, nos indica que en las matrices triangulares (al igual
que las diagonales) los valores de la diagonal, corresponden con los valores propios. El
siguiente teorema generaliza esta afirmación:

.:Teorema 7.3 Sea A ∈ C de tamaño n×n es una matriz triangular, entonces los valores
propios de A, contando sus multiplicidades, están dados por λ1 = a11 , λ2 = a22 , · · · , λn =
ann , donde a11 , a22 , . . . , ann son las entradas de la diagonal principal de A.

Ahora tomemos la matriz A definida de la siguiente forma:


 
2 1
A=
6 7
Sus valores propios como vimos son λ = 1 y λ = 8, los valores propios de At son 1 y 8.
El resultado anterior se puede resumir en el siguiente teorema:

.:Teorema 7.4 Si una matriz A de tamaño n × n y tiene valores propios λ1 , λ2 , · · · , λk


entonces, los valores propios de At son λ1 , λ2 , · · · , λk

No es muy difícil demostrar este teorema, recordemos que el cálculo de los valores propios
recae en un determinante, por tanto, son sus propiedades las que debemos tener en cuenta
para demostrar éstos resultados. Veamos otros teoremas que se pueden demostrar teniendo
en cuenta las propiedades de los determinantes.

.:Teorema 7.5 Si una matriz A de tamaño n × n y tiene valores propios λ1 , λ2 , · · · , λk


entonces, los valores propios de αA son αλ1 , αλ2 , · · · , αλk .

.:Ejemplo 7.3

Sea A definida de la siguiente forma:


 
2 1
A=
6 7
Donde, A tiene valores propios λ = 1 y λ = 8. Ahora, multipliquemos A por el escalar
α = 3, entonces:
7. Vectores y valores propios 339

 
6 3
αA =
18 21
Los valores propios de αA son λ = 3 y λ = 24, que corresponden a 3(1) y 3(8).

Tengamos en cuenta el siguiente teorema:

.:Teorema 7.6 Si A es de tamaño de n × n, entonces A−1 existe si y sólo si, sus valores
propios son todos diferentes de cero.

Este teorema debe ser analizado de dos formas:

1. Si A−1 existe, entonces los valores propios deben ser diferentes de cero: No es muy
difícil comprobar esta afirmación, pues como vimos, toda matriz de n × n invertible
tiene n pivotes al convertirla en una matriz triangular (ver teorema 1.12), por tanto,
y por el teorema 7.3, podemos decir que los valores propios son diferentes de cero.

2. Si una matriz tiene todos sus valores propios diferentes de cero, entonces es
invertible: Al igual que en el punto anterior, sus valores propios estarán en la
diagonal de la matriz triangular equivalente. Como todos son diferentes de cero,
tendrá n pivotes diferentes de cero y por tanto será invertible.

Ahora, tomemos una matriz y su inversa y comparemos los valores propios en ambos
casos. Tomemos de nuevo la matriz A:

 
2 1
A=
6 7
Ahora tomamos su inversa:
 
0.875 −0.125
A−1 =
−0.75 0.25

Recordemos que los valores propios de A son λ = 1 y λ = 8 y los de A−1 son λ = 1 y


1
λ = = 0.125. Esto nos muestra que los valores propios de una matriz y su inversa están
8
relacionados de la siguiente forma:

.:Teorema 7.7 Si A es de tamaño de n×n e invertible, con valores propios λ1 .λ2 , . . . , λn ,


entonces los valores propios de A−1 son λ11 , λ12 , . . . , λ1n .
340 7.1. Vectores y valores propios

Como vemos, los valores propios de la inversa de una matriz, son los inversos
multiplicativos de los valores propios de la matriz original. De igual forma, el determinante
esta relacionado con los valores propios.

.:Teorema 7.8 Sea A de tamaño n × n y λ1 , λ2 , · · · , λn los valores propios de A,


entonces, detA = λ1 . λ2 .λ3 · · · λn

.:Ejemplo 7.4

Sea la matriz A definida de la siguiente forma:


 
1 −2 −4
A= 0 3 7 
0 0 2
Por el teorema 7.3, sabemos que los valores propios de A son λ = 1, λ = 3 y λ = 2. Ahora,
por el teorema 4.8, tenemos que el detA = (1) · (3) · (2) = 6.

.:Ejercicios 7.1

1. Calcule los valores y los vectores propios de las siguientes matrices:


   
1 4 3 4 3 1
a)
1 2  2 3 21 1 
  e)  2 3 31 4 

i −i
b) 7 63 38 4
9 1
   
2 4 6 −1 −1 1 −1
c)  3 4 3   1 −1 1 −1 
f)  1 −1

6 2 4 1 1 
  1 −1 −1 −1
2 2 3
d )  1 4i 4 
1 2 3

2. Demuestre que para cualquier número real a y b, la matriz


 
a b
A=
−b a
   
1 1
Tiene vectores propios y
i −i
7. Vectores y valores propios 341

3. Demuestre que si una matriz A de tamaño n×n y tiene valores propios λ1 , λ2 , · · · , λk


entonces:

a) Los valores propios de Am son λm


1 , λ2 , · · · , λk .
m m

b) La trA = λ1 + λ2 + λ3 + · · · + λn .
c) Los valores propios de At son λ1 , λ2 , λ3 , . . . , λn .
d ) αA tiene valores propios αλ1 , αλ2 , αλ3 , . . . , αλn .
e) Si A es invertible, entonces todos los valores propios de A−1 son distintos de
cero y son λ11 , λ12 , λ13 , . . . , λ1n y además, A y A−1 tienen los mismos vectores
característicos.

4. Demuestre los teoremas 7.2 hasta 7.8.


5. Escriba un algoritmo en Python que tenga las siguientes características:
1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3 from sympy i m p o rt ∗
4
5 p r i n t " V a l o r e s y v e c t o r e s p r o p i o s : \ n"
6
7 A = np . a r r a y ( [ [ 2 , 8, 6 ,] ,
8 [ 9, 5, 6 ,] ,
9 [ 1, 8, 7 , ] ] , dtype=f l o a t )
10
11 d e f V a l y V e c P ro p i o s (A) :
12 ∗
13 ∗
14 ∗
15 r e t u r n ValVec

Se debe implementar la función ValyVecPropios(A), la cual recibe como parámetro


una matriz de n × n. Se debe calcular sus valores y vectores propios usando las
definiciones dadas anteriormente; la función debe retornar una tupla en la variable
ValVec con los valores y los vectores propios. De ser necesario, puede hacer uso
de la librería Sympy. Nota: No puedes usar las funciones dadas anteriormente para
calcular los valores y los vectores propios.
6. Escriba un algoritmo en Python que tenga las siguientes características:
1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3 from sympy i m p o rt ∗
4
5 p r i n t " V a l o r e s y v e c t o r e s p r o p i o s : \ n"
6
342 7.2. Métodos numéricos para hallar los valores propios

7 L = [1 , 3 , 5]
8
9 d e f M a t r i z V a l P r o p i o s (L) :
10 ∗
11 ∗
12 ∗
13 return M

Se debe implementar la función MatrizValPropios(L), la cual recibe como parámetro


una lista de tamaño n. Se debe generar una matriz de tamaño n × n en la variable
M. Esta matriz, debe tener como valores propios la lista que se introdujo como
parámetro.

7.2. Métodos numéricos para hallar los valores propios


Como hemos visto, el método para hallar el polinomio característico depende de un
determinante. Esto implica, que el método que presentamos en la sección anterior, no es
muy eficiente para matrices grandes. Para estos casos, usaremos métodos numéricos que
nos permitirán tener una aproximación de los valores propios. En esta sección, veremos dos
métodos, el primero llamado Método de la Potencia y el segundo usando la factorización
QR, la cual vimos en la sección 2.4.

7.2.1. Método de la potencia


Sea A una matriz de tamaño n × n, que tiene n valores propios λ1 , λ2 , . . . , λn y un
conjunto de n vectores propios v1 , v2 , . . . , vn , asociados a cada valor propio. Ahora bien,
supongamos que los valores propios de A se pueden ordenar de la siguiente forma:

|λ1 | > |λ2 | ≥ |λ3 | ≥ · · · ≥ |λn | ≥ 0

Esto implica que |λ1 | es el mayor valor propio, a este se le conoce como radio espectral,
concepto que ya habíamos visto en la definición 3.2. Este método3 , realiza un proceso
iterativo, que se ejecuta hasta que converge al valor propio más grande. Para comenzar,
debemos tener en cuenta como deben ser los vectores propios de un matriz:

.:Teorema 7.9 Sea A una matriz de tamaño de n × n, con valores propios λ1 .λ2 , . . . , λn ,
y con v1 , v2 , . . . , vn como vectores vectores propios. Entonces, {v1 , v2 , . . . , vn } son
linealmente independientes.
3 Para una demostración del método ver [2]
7. Vectores y valores propios 343

Ahora bien, si podemos decir que el conjunto de vectores propios forman un conjunto de
vectores que son LI, entonces podemos concluir que los vectores propios forman una base
para Rn .

.:Teorema 7.10 Sea A una matriz de tamaño de n×n, con valores propios λ1 .λ2 , . . . , λn ,
y con v1 , v2 , . . . , vn como vectores propios. Entonces, {v1 , v2 , . . . , vn } forman una base para
Rn .

Con estos antecedentes, podemos tomar un vector arbitrario x ∈ Rn , y por el teorema 7.9,
podemos escribirlo como una combinación lineal de los vectores propios, es decir, existen
constantes k1 , k2 , . . . , kn tal que:
n
X
x= ki vi (7.8)
i=1

Ahora, multiplicamos a ambos lados de la ecuación 7.8 por las potencias de la matriz A,
es decir, A, A2 , A3 , . . . , Am .

n
X n
X
Ax = ki Avi = ki λi vi
i=1 i=1
Xn Xn
A2 x = ki A2 vi = ki λ2i vi
i=1 i=1
.. .. ..
. . .
n
X n
X
m m
A x = ki A vi = ki λm
i vi (7.9)
i=1 i=1

Recordemos que en el sistema de ecuaciones 7.9, reemplazamos la matriz A, por su


correspondiente valor propio, de acuerdo a la definición 7.1. Ahora, factorizamos λm
1
de la ecuación 7.9:
n  
X λm
Am x = λm
1 ki i
vi
i=1
λm
1

λm
Recordemos que λm 1 es el mayor valor propio de A, razón por la cual el cociente
i
λm
1
tenderá a cero cuando m tienda a infinito:

lı́m Am x = lı́m λm
1 k1 v1
m→∞ m→∞
344 7.2. Métodos numéricos para hallar los valores propios

Ahora bien, si |λ1 | < 1, la sucesión va a converger a cero, pero si |λ1 | ≥ 1 la sucesión va
a divergir.

El método de las potencias me proporciona dos sucesiones, la primera v (k) k∈N con el
 (k)
vector propio asociado al mayor valor propio, el cual se obtiene de λ k∈N
. El siguiente
Algoritmo, muestra la implementación del método de la potencia en Python.

.:Algoritmo 7.4

1 i m p o rt numpy a s np
2 from numpy . p o l y n o m i a l i m p o rt ∗
3 from math i m p o rt ∗
4
5 p r i n t " Valor y v ector p ro p i o , metodo de l a p o t e n c i a : \ n"
6
7 A = np . a r r a y ( [ [ 2, 5, 2, 4] ,
8 [ 1, 5, 1, 1] ,
9 [ 0, 2, 1, 3] ,
10 [ 0, 1, 8, 5 ] ] , dtype=f l o a t )
11
12 v e c t o r e s P r o p i o s=np . l i n a l g . e i g (A)
13
14 print "La m a t r i z A: \ n" , A, " \n"
15
16 p r i n t " Los v a l o r e s p r o p i o s son : \ n" , v e c t o r e s P r o p i o s [ 0 ] , " \n"
17
18 p r i n t " Los v e c t o r e s p r o p i o s son : \ n" , v e c t o r e s P r o p i o s [ 1 ] , " \n"
19
20 v0=np . a r r a y ( [ 1 , 1 , 0 , 0 ] ) .T
21
22 p r i n t " El v e c t o r i n i c i a l : \ n" , v0 , " \n"
23
24 d e f medPotencia (A, v0 ) :
25 n=1000
26 t o l =0.0000000001
27 l a n =0.0
28 x=v0
29 y=(1/ np . l i n a l g . norm ( x ) ) ∗x
30 f o r i i n ra n g e ( n ) :
31 x=A. dot ( y )
32 y=(1/ np . l i n a l g . norm ( x ) ) ∗x
33 l a n c=x . dot ( y )
34 i f np . abs ( l a n −l a n c )< t o l :
35 return (y , lan )
36 l a n=l a n c
37 return (y , lan )
38
39 r e s=medPotencia (A, v0 )
40
41 p r i n t " El mayor valor propio es : " , res [ 1 ]
7. Vectores y valores propios 345

42 p r i n t " El v e c t o r propio asociado es : " , res [ 0 ]

El programa anterior produce la siguiente salida:

1 >>>
2 Valor y v ector p ro p i o , metodo de l a p o t e n c i a :
3
4 La m a t r i z A:
5 [[ 2. 5. 2. 4.]
6 [ 1. 5. 1. 1.]
7 [ 0. 2. 1. 3.]
8 [ 0. 1. 8. 5.]]
9
10 Los v a l o r e s p r o p i o s son :
11 [ 9.4704704 4.72204942 1.17875953 −2.37127934]
12
13 Los v e c t o r e s p r o p i o s son :
14 [[ −0.64191574 0.42963642 0 . 9 4 0 6 2 0 6 2 −0.382907 ]
15 [ −0.34797686 0 . 7 0 7 2 5 3 2 2 −0.28045874 0 . 0 4 5 5 1 3 5 3 ]
16 [ − 0 . 2 9 9 6 4 4 8 3 −0.06904846 −0.05274966 − 0 . 6 2 8 2 8 4 8 2 ]
17 [ − 0 . 6 1 4 0 5 9 6 6 −0.5571694 0.18382932 0.67569885]]
18
19 El v e c t o r i n i c i a l :
20 [1 1 0 0]
21
22 El mayor v a l o r p r o p i o e s : 9.47047039541
23 El v e c t o r propio asociado es : [ 0.64191574 0.34797686 0.29964483
0.61405966]
24 >>>

El Algoritmo 7.4, define la matriz A, de la siguiente forma:


 
2 5 2 4
 1 5 1 1 
A=  0

2 1 3 
0 1 8 5
En la línea 12, se calculan los valores y vectores propios usando la función [Link](A),
el resultado es una tupla que se almacena en la variable vectoresPropios. Los resultados
se imprimen en la líneas 14, 16 y 18.

En la línea 20, tomamos un vector inicial en la variable v0=[Link]([1, 1, 0, 0]).T.


Posteriormente, en la línea 24, definimos la función medPotencia(A,v0). Esta función
346 7.2. Métodos numéricos para hallar los valores propios

recibe dos parámetros, el primero es la matriz y el segundo es el vector inicial, el cual,


se usará para el proceso iterativo. La función toma una variable n, la cual me contará la
cantidad de iteraciones (línea 25), posteriormente, se define la variable tol, que permite
determinar que tan cerca estamos de la solución. La variable lan almacena el valor propio,
y la variable x el vector propio, que inicialmente será el vector inicial que le dimos a la
función. Finalmente, la variable y, es el vector x multiplicado por el inverso de la norma
de x.

En el proceso iterativo, el vector x se calcula multiplicando la matriz por el vector y (línea


31). Posteriormente, se calcula de nuevo y (línea 32). En la variable lanc se almacena la
multiplicación de x y y (línea 33). En este punto se calcula en error comparando el valor
propio calculado con el actual, si la diferencia entre ambos es menor a la tol, la función
detiene el ciclo y devuelve la tupla, con el vector propio calculado y con la variable lan,
que es el valor propio asociado (línea 34). Finalmente, se actualiza (línea 36) el valor
propio y se retorna la tupla.

La limitación de este método, consiste en que sólo encuentra el mayor valor propio y el
vector propio asociado a este, existen algoritmos basados en el método de la potencia,
para hallar los demás valores propios. El siguiente método, encuentra todos los valores
propios de una matriz simétrica.

7.2.2. Método de factorización QR para hallar los valores propios


Antes de describir el método, debemos tener en cuenta la siguiente definición:

.:Definición 7.2 (Matrices semejantes)


Dos matrices A y B de tamaño n×n, son semejantes si existe un matriz P invertible
de tamaño n × n tal que:

P −1 AP = B

Ahora bien, con el método de la factorización QR, lo que pretendemos, es encontrar una
matriz Am , que sea semejante a la matriz A original; estas dos matrices, por ser semejantes
tienen el mismo rango, el mismo determinante, y sobre todo, los mismos valores propios.

Como vimos en la sección 2.4 del capítulo 2, la factorización QR sólo se puede efectuar
sobre matrices simétricas, por lo tanto, sólo podremos hallar los valores propios con este
método a matrices simétricas de orden n. Bien, recordemos que si A = QR, la matriz
Q es una matriz ortogonal, lo que implica que sus columnas constituyen un conjunto
ortonormal de vectores, en otras palabras Qt = Q−1 . La otra matriz R, es una matriz
triangular superior.
7. Vectores y valores propios 347

Supongamos que A = A1 , entonces A1 = R1 Q1 y como Q1 y R1 son invertibles, entonces


A2 = R1 A1 R1−1 = Q−1
1 A1 Q1 , lo que implica que A1 y A2 son semejantes y por lo tanto,
tienen los mismos valores propios.

Como A2 es invertible y simétrica4 , entonces podemos escribirla como A2 = Q2 R2 , lo


que nos permite formar A3 = R2 Q2 . La matriz A3 es semejante a la matriz A2 . Dicho
proceso continúa, de tal forma que siempre tendremos Ak = Qk Rk y su matriz semejante
Ak+1 = Rk Qk . Si el proceso se continúa, es posible demostrar que en la diagonal de la
matriz R aparecerán los valores propios de la matriz A.

El siguiente algoritmo, muestra la implementación del método de factorización QR, para


hallar los valores propios de una matriz simétrica.

.:Algoritmo 7.5

1 i m p o rt numpy a s np
2 from math i m p o rt ∗
3
4 p r i n t " V a l o r e s p r o p i o s , metodo de QR: \ n"
5
6 A = np . a r r a y ( [ [ 2, 7, 0, 0] ,
7 [ 7, 5, 2, 1] ,
8 [ 0, 2, 1, 8] ,
9 [ 0, 1, 8, 5 ] ] , dtype=f l o a t )
10
11 v e c t o r e s P r o p i o s=np . l i n a l g . e i g (A)
12
13 print "La m a t r i z A: \ n" , A, " \n"
14
15 p r i n t " Los v a l o r e s p r o p i o s son : \ n" , v e c t o r e s P r o p i o s [ 0 ] , " \n"
16
17 p r i n t " Los v e c t o r e s p r o p i o s son : \ n" , v e c t o r e s P r o p i o s [ 1 ] , " \n"
18
19 tam=np . shape (A) [ 0 ]
20 Q=np . e y e ( ( tam ) , dtype=f l o a t )
21 R=np . e y e ( ( tam ) , dtype=f l o a t )
22
23 Z=np . z e r o s ( ( tam , tam ) )
24
25 l a n n=1
26 l a n =0
27 i =1
28 t o l =0.000001
29
30 while t o l <np . abs ( ( lann−l a n ) / l a n n ) :
31 l a n=l a n n

4 El lector debe entender el por qué la matriz A2 , tiene estas características.


348 7.2. Métodos numéricos para hallar los valores propios

32 Z=A. dot (Q)


33 Q,R=np . l i n a l g . q r (Z )
34 l a n n=np . d i a g (R) . min ( )
35 i=i +1
36 i f i >1000:
37 p r i n t "no hay c o n v e r g e n c i a "
38 b re a k
39
40
41 p r i n t " El a l g o r i t m o i t e r o " , i , " v e c e s \n"
42
43 p r i n t " Los v a l o r e s p r o p i o s en l a d i a g o n a l de R: \ n" , np . d i a g (R)

El programa anterior produce la siguiente salida:

1 >>>
2 V a l o r e s p r o p i o s , metodo de QR:
3
4 La m a t r i z A:
5 [[ 2. 7. 0. 0.]
6 [ 7. 5. 2. 1.]
7 [ 0. 2. 1. 8.]
8 [ 0. 1. 8. 5.]]
9
10 Los v a l o r e s p r o p i o s son :
11 [ 12.623607 9.42466011 −3.55337118 −5.49489593]
12
13 Los v e c t o r e s p r o p i o s son :
14 [ [ 0 . 3 4 7 9 6 7 0 4 −0.53360823 0 . 7 3 6 4 2 3 7 9 − 0 . 2 2 7 7 3 0 5 4 ]
15 [ 0 . 5 2 8 0 9 5 0 1 −0.56597996 −0.58423352 0 . 2 4 3 8 3 0 9 5 ]
16 [ 0.49877434 0 . 3 5 6 8 5 0 3 8 −0.21236558 − 0 . 7 6 0 7 7 7 7 8 ]
17 [ 0.59267086 0.51728788 0.2669308 0.55668882]]
18
19 El a l g o r i t m o i t e r o 19 v e c e s
20
21 Los v a l o r e s p r o p i o s en l a d i a g o n a l de R:
22 [ 12.6232891 9.42489726 −5.49489351 −3.55337282]
23 >>>

El Algoritmo 7.5, define la matriz A, de la siguiente forma (línea 6):


 
2 7 0 0
 7 5 2 1 
A=  0
 (7.10)
2 1 8 
0 1 8 5
7. Vectores y valores propios 349

En las líneas 11 a 17 obtenemos los valores y los vectores propios de la forma


usual. En la línea 19, obtenemos el tamaño de la matriz (variable tam) con
la función tam=[Link](A)[0] ; luego creamos dos matrices Q y R que por el
momento, se inicializarán con 1’s en sus componentes: Q=[Link]((tam), dtype=float)
y R=[Link]((tam), dtype=float), recordemos que la función [Link] crea una matriz con
todos sus componentes en uno. Luego, creamos una matriz nula del mismo tamaño que
A, con la instrucción Z=[Link]((tam, tam)).

Las variables lann y lan, se inicializan en cero y uno respectaivamente, estas almacenarán
el valor propio más pequeño. La variable i es un contador y la variable tol, me determina
la tolerancia mínima del error, al encontrar los valores propios.

El ciclo de la línea 30, hace el proceso iterativo, en la variable Z, se almacena la


multiplicación de las matrices Q y R, que inicialmente son matrices con 1’s. En la línea
33, recalculamos las matrices Q y R partiendo de la matriz Z Q,R=[Link](Z). Luego
calculamos el valor propio más pequeño obtenido de la diagonal de la matriz R.

Como el poceso es iterativo, para este ejemplo se requieren 19 iteraciones. En el cuadro


7.1, podemos apreciar el proceso.

.:Ejercicios 7.2

1. Escriba un algoritmo en Python que tenga las siguientes características:


1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3 from sympy i m p o rt ∗
4
5 p r i n t " V a l o r e s y v e c t o r e s p r o p i o s : \ n"
6
7 A = np . a r r a y ( [ [ 2 , 8, 6 ,] ,
8 [ 9, 5, 6 ,] ,
9 [ 1, 8, 7 , ] ] , dtype=f l o a t )
10
11 d e f P o t e n c i a I n v e r s a (A) :
12 ∗
13 ∗
14 ∗
15 r e t u r n ValVec

Para este ejercicio, se debe investigar el método de la Potencia inversa.


350 7.2. Métodos numéricos para hallar los valores propios

Iteración λ1 λ2 λ3 λ4
0 1.00000000 1.00000000 1.00000000 1.00000000
1 -7.28010989 5.8050076 -7.9890042 -6.880434
2 10.14517266 -5.20847243 8.73845869 -5.03088696
3 11.26338291 -6.88679564 7.11605094 -4.20846885
4 11.76947262 -8.79679595 5.82956123 -3.8488574
5 12.09278446 -9.47370225 -5.5044928 3.68371361
6 12.30530619 9.56488786 -5.46806982 -3.60946514
7 12.43810102 9.5336231 -5.47645747 -3.57715231
8 12.51747455 9.49443015 -5.48531692 -3.56337775
9 12.56355894 9.4663602 -5.49035465 -3.55756713
10 12.58985228 9.44880866 -5.49283167 -3.55512791
11 12.60470259 9.43841741 -5.49397943 -3.55410618
12 12.61304165 9.43242684 -5.49449506 -3.55367861
13 12.61770914 9.42902208 -5.49472239 -3.55349975
14 12.62031682 9.42710244 -5.49482137 -3.55342495
15 12.62177221 9.42602514 -5.49486408 -3.55339366
16 12.62258403 9.42542221 -5.49488239 -3.55338058
17 12.62303672 9.42508532 -5.49489019 -3.55337511
18 12.6232891 9.42489726 -5.49489351 -3.55337282

Cuadro 7.1: Iteraciones en el método de factorización QR para la matriz A de la ecuación


7.10.

Se debe implementar la función PotenciaInversa(A), la cual recibe como


parámetro una matriz de n × n. Se debe calcular sus valores y vectores propios
usando el algoritmo de la Potencia Inversa; la función debe retornar una tupla
en la variable ValVec, con los valores y los vectores propios. De ser necesario,
puede hacer uso de la librería Sympy. Nota: No puedes usar las funciones dadas
anteriormente para calcular los valores y los vectores propios.

2. Escriba un algoritmo en Python que tenga las siguientes características:


1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3 from sympy i m p o rt ∗
4
5 p r i n t " V a l o r e s y v e c t o r e s p r o p i o s : \ n"
6
7 A = np . a r r a y ( [ [ 2 , 8, 6 ,] ,
8 [ 9, 5, 6 ,] ,
9 [ 1, 8, 7 , ] ] , dtype=f l o a t )
10
11 d e f H e s s e n b e rg (A) :
12 ∗
7. Vectores y valores propios 351

13 ∗
14 ∗
15 r e t u r n ValVec

Para este ejercicio, se debe investigar el método de Hessenberg.


Se debe implementar la función Hessenberg(A), la cual recibe como parámetro
una matriz de n × n. Se debe calcular sus valores y vectores propios usando
el algoritmo de Hessenberg; la función debe retornar una tupla en la variable
ValVec, con los valores y los vectores propios. De ser necesario, puede hacer uso
de la librería Sympy. Nota: No puedes usar las funciones dadas anteriormente
para calcular los valores y los vectores propios.
3. Escriba un algoritmo en Python que tenga las siguientes características:
1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3 from sympy i m p o rt ∗
4
5 p r i n t " V a l o r e s y v e c t o r e s p r o p i o s : \ n"
6
7 A = np . a r r a y ( [ [ 2 , 8, 6 ,] ,
8 [ 9, 5, 6 ,] ,
9 [ 1, 8, 7 , ] ] , dtype=f l o a t )
10
11 d e f Metodo_de_Jacobi (A) :
12 ∗
13 ∗
14 ∗
15 r e t u r n ValVec

Para este ejercicio, se debe investigar el Método de Jacobi.


Se debe implementar la función Metodo_de_Jacobi(A), la cual recibe como
parámetro una matriz de n × n. Se debe calcular sus valores y vectores propios
usando el Método de Jacobi; la función debe retornar una tupla en la variable
ValVec, con los valores y los vectores propios. De ser necesario, puede hacer uso
de la librería Sympy. Nota: No puedes usar las funciones dadas anteriormente
para calcular los valores y los vectores propios.

7.3. Teorema de Cayley - Hamilton


Este teorema, nos dice que una matriz cuadrada satisface su propio polinomio
característico:
352 7.3. Teorema de Cayley - Hamilton

.:Teorema 7.11 (Teorema de Cayley - Hamilton) Sea A una matriz cuadrada de


tamaño n×n, si P (X) es el polinomio característico de la matriz A, es decir, si P (λ) = 0,
entonces P (A) = 0.

Este resultado anterior, se puede usar para el cálculo de la matriz inversa de la matriz
original. Veamos el siguiente ejemplo:

.:Ejemplo 7.5
 
2 1
Dada la matriz A = , encuentre los valores y los vectores propios de A y evalúe
6 7
la matriz en el polinomio característico:

Bien, el polinomio característico es λ2 − 9λ + 8 = 0, por tanto sus valores propios son


λ = 1 y λ = 8, Ahora evaluamos la matriz A en el polinomio:

P (A) = A2 − 9A + 8I
 2    
2 1 2 1 1 0
= −9 +8
6 7 6 7 0 1
     
10 9 18 9 8 0
= − +
54 7 53 63 0 8
 
0 0
=
0 0

Como vemos, al evaluar la matriz original, en el polinomio característico, obtenemos la


matriz nula. Este resultado se puede utilizar para obtener la inversa de la matriz. La
Inversa de A la podemos obtener de acuerdo a la siguiente ecuación:

1 
A−1 = −An−1 − an−1 An−2 − · · · − a2 A − a1 I (7.11)
a0
Donde n es el tamaño de la matriz, y a0 es el coeficiente del término independiente del
polinomio característico. Observemos que en el nuevo polinomio cambian todos signos, y
se disminuye en 1 el grado del polinomio, veamos un ejemplo:

.:Ejemplo 7.6
 
2 1
Dada la matriz A = , encuentre la inversa usando el polinomio característico:
6 7
7. Vectores y valores propios 353

Sabemos que el polinomio característico es λ2 − 9λ + 8 = 0 y los valores propios son λ = 1


y λ = 8, entonces, al aplicar la ecuación 7.11, tenemos:

1 
A−1 = −A2−1 − (−9I)
8
1
= (−A + 9I)
8
 
0.875 −0.125
=
−0.75 0.25

Luego la inversa de la matriz A es:


 
−1 0.875 −0.125
A =
−0.75 0.25

.:Ejercicios 7.3

1. Escriba un algoritmo en Python que tenga las siguientes características:


1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3 from sympy i m p o rt ∗
4
5 p r i n t "La i n v e r s a de una m a t r i z : \ n"
6
7 A = np . a r r a y ( [ [ 2 , 8, 6 ,] ,
8 [ 9, 5, 6 ,] ,
9 [ 1, 8, 7 , ] ] , dtype=f l o a t )
10
11 d e f I n v e r s a (A) :
12 ∗
13 ∗
14 ∗
15 r e t u r n invA

Se debe implementar la función Inversa(A), la cual recibe como parámetro una


matriz de n×n. Se debe calcular su inversa usando el teorema de Cayley - Hamilton,
es decir, usando la ecuación 7.11; la función debe retornar una matriz en la variable
invA, de tal forma que sea la inversa de la matriz original.

2. Dada una matriz invertible de tamaño n × n, demuestre que la ecuación 7.2, retorna
la inversa de la matriz dada.
354 7.4. Diagonalización

7.4. Diagonalización
Recordemos la definición 7.2, que nos dice que dos matrices A y B de tamaño n × n, son
semejantes si existe una matriz P invertible de tamaño n × n tal que P −1 AP = B. El
siguiente ejemplo tomado de [11], nos muestra un ejemplo de matrices semejantes:

.:Ejemplo 7.7

Dos matrices semejantes


     
3 2 3 5.2 5 4
Sea A = ,B= y C= como:
0 −4 0 −4 0 −1
detC 6= 0 entonces C −1 existe

    
5 4 3 5.2 15 10
CB = =
0 −1 0 −4 0 4
    
3 2 5 4 15 10
AC = =
0 −4 0 −1 0 4
Entonces: CB = AC ⇒ A y B son semejantes, además, observemos que C −1 existe:
 
0.2 0.8
C −1 =
0 −1
Entonces si usamos la definición 7.2, tenemos:

   C −1 AC
 = B
 
0.2 0.8 3 2 5 4 3 5.2
=
0 −1 0 −4 0 −1 0 −4
   
3 5.2 3 5.2
=
0 −4 0 −4

Esto confirma que A y B son semejantes. Bien, pero ¿qué otra relación existe entre A y
B?, el siguiente teorema, muestra que otras características tienen en común dos matrices
que son semejantes:

.:Teorema 7.12 Si dos matrices A y B son semejantes, entonces:

1. A y B tienen el mismo polinomio característico


7. Vectores y valores propios 355

2. A y B tienen los mismos valores propios, con las mismas multiplicidades algebráicas.
3. El detA = detB
4. tr(A)=tr(B)
5. rango(A)=rango(B)
 
3 2
Es fácil ver algunas de estas propiedades en las matrices A = y B =
0 −4
 
3 5.2
0 −4
La matriz A tiene como valores propios λ1 = −4 y λ2 = 3 y el polinomio característico
PA (λ) = λ2 + λ − 12, el detA = −12, de igual manera ocurre con la matriz B, pues tiene
λ1 = −4 y λ2 = 3 y el polinomio característico PB (λ) = λ2 + λ − 12, el detB = −12.

En los primeros capítulos de este libro, hemos visto que las matrices diagonales son
ideales para hallar el determinante, las soluciones de sistemas asociados a estas, los valores
propios, etc. El proceso de Diagonalización, consiste en encontrar una matriz diagonal,
que sea semejante a una matriz dada.

.:Definición 7.3 Una matriz A de tamaño n × n es diagonalizable si existe una matriz


diagonal D tal que A es semejante a D.

La importancia de la diagonalización, consiste en que, la matriz diagonal, simplifica en


gran medida, los cálculos asociados a la matriz, por ejemplo; el determinante se reduce
simplemente a multiplicar los elementos de la diagonal. Si existe un sistema asociado a la
matriz, con la matriz diagonal es muy simple encontrar las soluciones. Veamos el siguiente
ejemplo:

.:Ejemplo 7.8

Tomemos la matriz A definida de la siguiente forma:


 
3 0 −2
A= 0 2 0 
−2 0 3
La matriz D definida de la siguiente forma :
 
5 0 0
D= 0 2 0 
0 0 1
356 7.4. Diagonalización

Verifiquemos que ambas matrices sean semejantes, para ello necesitamos una matriz P
tal que P −1 AP = D, definamos P de la siguiente forma:
 
1 0 1
P = 0 1 0 
1 0 −1
Comprobamos que A y D sean semejantes:
 
0.5 0 0.5
P −1 =  0 1 0 
0.5 0 −0.5
Entonces:

   P −1 DP
 = A
 
0.5 0 0.5 5 0 0 1 0 1 3 0 −2
 0 1 0  0 2 0  0 1 0  =  0 2 0 
0.5 0 −0.5 0 0 1 1 0 −1 −2 0 3

Ambas matrices tienen los mismos valores propios, λ1 = 1, λ2 = 2 y λ3 = 5, de igual


forma, ambas tiene el mismo determinante detA = detD = 10.

.:Teorema 7.13 Una matriz A es de tamaño n × n es diagonalizable si y sólo si tiene n


vectores propios linealmente independientes. En tal caso, la matriz diagonal D semejante
a A está dada por:
 
λ1 0 ··· ··· 0
 0 λ2 · · · · · · 0 
 
D=
 0 0 λ3 · · · 0  
 .. .. .. .. 
 . . . ··· . 
0 0 0 · · · λn
Donde los λi son los valores propios de A.

Si C es una matriz cuyas columnas son los vectores propios linealmente independientes
de A, entonces:

D = C −1 AC

El teorema 7.13, nos dice que la matriz D es fácil de calcular, pues se construye con los
valores propios de la matriz; esto nos diría que si una matriz tiene n valores propios todos
7. Vectores y valores propios 357

diferentes, entonces A es diagonalizable.

.:Corolario 7.1 Si la matriz A de tamaño n × n, tiene n valores propios diferentes,


entonces A es diagonalizable.

El siguiente ejemplo, muestra como construir la matriz D:

.:Ejemplo 7.9 Sea A definido de la siguiente forma:


 1 
− 2 0 − 52
A= 0 7 0 
5 1
−2 0 −2

encuentre la matriz diagonal D.

Lo primero es hallar los valores propios de A:



− 12 − λ 0 − 52
|A − λI| = 0 (7 − λ) 0
− 52 0 − 21 − λ
Al realizar el determinante obtenemos el polinomio P (λ) = λ3 − 6λ2 − 13λ + 42 cuyas
raíces son λ1 = 7, λ2 = −3 y λ3 = 2. Entonces, nuestra nueva matriz D está dada por:
 
−3 0 0
D= 0 7 0 
0 0 2
Ahora bien, este resultado, se puede usar para cualquier potencia de A y de D:

.:Teorema 7.14 Si A es semejante con B, es decir, B = C −1 AC entonces

An = CB n C −1 n ∈ Z +

El siguiente ejemplo ilustra lo indicado en el teorema:

.:Ejemplo 7.10

Sean A y D definidas de la siguiente forma:


 1     
− 2 0 − 52 1 0 1 −3 0 0
A= 0 7 0 , P =  0 1 0  y D= 0 7 0 
− 52 0 − 12 1 0 −1 0 0 2
358 7.4. Diagonalización

Calcular A3 :

Bien, recordemos que P −1 DP = A, Ahora calculamos D3 , que por ser una matriz diagonal
es posible hallar esta potencia fácilmente:

   
−33 0 0 −27 0 0
3
D = 0 73 0 = 0 343 0 
0 0 23 0 0 8
Como P −1 DP = A, según el teorema P −1 D3 P = A3 , entonces:

A3 P −1 D3 P
=    
0.5 0 0.5 −27 0 0 1 0 1
=  0 1 0  0 343 0   0 1 0 
0.5 0 −0.5 0 0 8 1 0 −1
 
−9.5 0 −17.5
=  0 343 0 
−17.5 0 −9.5

La diagonalización tiene muchas aplicaciones, por ejemplo, en la solución numérica de


ecuaciones diferenciales, en los modelos biológicos, en la física, etc. Precisamente, en la
sección 7.2.2 encontramos el método de factorización QR, el cual, nos permite hallar los
valores propios, usando el mismo principio de las matrices semejantes.

Es importante, que el lector tenga en cuenta que los algoritmos planteados en los ejercicios,
son clave para entender la dinámica de los conceptos planteados en este texto. De igual
forma, se recomienda tener presente la teoría en la ejecución de los mismos.

.:Ejercicios 7.4

1. En la siguiente lista de matrices, determine si cada una de ellas es diagonalizable,


si lo es, encuentre el polinomio característico, la matriz C y la matriz D, tal que
D = C −1 AC
   
−1 3 3 4 4
a)
2 3 c)  0 3 −4 
0 1 1
 
10 −9
b)
1 11
7. Vectores y valores propios 359

   
3 3 6 13 3 2 0
d)  2 2 8   54 3 −2 0 
f)  
0 7 7  2 1 1 0 

1 1 0 −1
 6 −7 1 6
 1 1 −1 1 
e)  
 −1 0 −1 1 
1 1 −1 0

2. Dada la matriz A de tamaño 2 × 2


 
a b
A=
c d

Encuentre un criterio sobre a, b, c y d para determinar si A es diagonalizable.


3. De muestre que si A es semejante a B, entonces

a) An es semejante a B n , n ∈ Z +
b) detA = detB.

4. Demuestre que si A tiene λ1 , λ2 , λ3 , . . . , λn valores propios, entonces detA =


λ1 · λ2 · λ3 · · · λn .
5. Si A tiene un valor propio λi = 0, entonces A es una matriz Singular.
6. Si la siguiente afirmación “Una matriz es semejante a dos matrices diagonales
distintas” es verdadera, demuéstrela, de lo contrario de un contra ejemplo.
7. Pruebe que la siguiente matriz es diagonalizable
 
cos θ − sin θ
A=
sin θ cos θ

Sin importar el valor de θ.


8. Escriba un algoritmo en Python que tenga las siguientes características:
1 i m p o rt numpy a s np
2 from s c i p y . l i n a l g i m p o rt ∗
3 from sympy i m p o rt ∗
4
5 p r i n t "La i n v e r s a de una m a t r i z : \ n"
6
7 A = np . a r r a y ( [ [ 2 , 8, 6 ,] ,
8 [ 9, 5, 6 ,] ,
9 [ 1, 8, 7 , ] ] , dtype=f l o a t )
10
11 d e f I n f T o t a l (A, b ) :
360 7.4. Diagonalización

12 ∗
13 ∗
14 ∗
15 return i n f

Se debe implementar la función InfTotal(A,b), la cual, recibe como parámetros una


matriz A de n × n y un vector columna de tamaño n × 1. Se debe calcular: El
determinante de A, los valores propios, los vectores propios y además, resolver el
sistema Ax = b, todo en la tupla inf. Dicha función, no puede usar los comandos de
Python para hallar el determinante, ni para resolución de sistemas de ecuaciones,
sólo el de los valores y vectores propios.
Bibliografía

[1] Chapra, S, Canale, R, (1999), Métodos numéricos para ingenieros,


Mexico, McGraw-Hill.

[2] Burden, R, (2002), Análisis numérico, Mexico, Thomson Le-arning.

[3] Flórez, T, (2008), Métodos numéricos para estudiantes de ingeniería.


Bogotá, Unibiblos - Universidad Nacional de Colombia.

[4] Gutierrez, J, Olmos, M y Casillas, J, (2010), Análisis Numérico.


México, McGraw-Hill.

[5] Kincaid, D y Cheney, W, (1996), Análisis Numérico, Wilington, Delawere


EEUU, Addison-Wesley Iberoamericana.

[6] Nakanura, S, (1992), Métodos numéricos aplicados con software, México,


Prentice-Hall.

[7] Nieves, A y Dominguez, F, (2002), Cálculo y métodos numéricos


aplicados a la ingeniería, México, CECSA.

[8] Mantilla, I, (2004), Análisis Numérico, Bogotá, Unibiblos - Universidad


Nacional de Colombia.

[9] Maron, M, (1995), Análisis numérico - un enfoque práctico, México,


CECSA.

[10] Tabares, H, (2009), Métodos Numéricos, Medellin, ITM - Instituto


Tecnológico Metropolitano.

[11] Ospina, L. Garcia, J. Alonso, A. (2011) Introducción al Álgebra


Lineal, Editorial Elizcom SAS, Universidad del Quindío, Armenia Quindío
Colombia.

[12] NumPy community, (2012), NumPy User Guide - Release [Link]-


7a6239e, Disponible en: [Link]

361
362 BIBLIOGRAFÍA

[13] Marmolejo, M. & Villegas M. (2009), Álgebra Lineal, Departamento


de Matemáticas Universidad del Valle, Colombia. Sitio web disponible
en: [Link] Consultado en
septiembre 10 de 2013.

[14] Aranda, E. (2013), Álgebra lineal con aplicaciones y Python,


Departamento de Matemáticas de la Universidad de Castilla, Sitio
web disponible en [Link]
uploads/downloads/2013/10/[Link]. Consultado en julio 2 de
2013.

[15] Wong D. (2004), Factorizaciones, procesos y algoritmos de solución o


iterados para sistemas de ecuaciones lineales. Universidad de Trujillo
Peru, Sitio web disponible en [Link]
[Link]. Consultado en septiembre 17 de 2013.

[16] Mora H. (2013), Métodos numéricos con Scilab. Universidad Nacional de


Colombia, Bogotá, Sitio web disponible en [Link]
[Link]. Consultado en septiembre 17 de 2013.

[17] Atkinson, K. (1988), An introduction to Numerical Analysis 2ed, edt Jhon


Wiley and Sons, Iowa Estados unidos.

[18] Golub, G & Van Loan, C. (1996), Matrix Computations third edition,
The Johns Hopkins University Press, Baltimore Meryland EEUU.

[19] Grossman, S. (2008), Álgebra lineal sexta edición, Edt McGraw-Hill,


México, México, D.F.

[20] Restrepo P, Franco R, Sierra L. (1995), Álgebra lineal con


aplicaciones, Universidad Nacional de Colombia, Sede Medellín. Medellín
Colombia.

[21] González, R. (2011), Python para todos, Sitio web disponible en: http:
//[Link]/tutorial-python/. Consultado en abril de 2013.

[22] Marzal, A. & Gracia I. (2010), Introducción a la programación con


Python, Publicacions de la Universitat Jaume I. Servei de Comunicació i
Publicacions Campus del Riu Sec. Edifici Rectorat i Serveis Centrals. 12071
Castelló de la Plana. Sitio web disponible en: [Link]
publ/edicions/[Link]. Consultado en abril de 2013.

[23] Bahit, E. (2012), Python para Principiantes, Sitio web disponible en: www.
[Link]/biblioteca/python-para-principiantes/. Consultado
en abril de 2013.
BIBLIOGRAFÍA 363

[24] Pettofrezzo, A, (1966), Matrices y Transformadas, EUDEBA S.E.M,


Editorial Universitaria de Buenos Aires, Buenos Aires - Argentina.
[25] Plastock, R. Kalley, G. (1987) Gráficas por computadora, Edt McGraw
- Hill, serie Schaum, Mexico, Mexico Df.
364 BIBLIOGRAFÍA
“¿Acaso no lo sabes? ¿Es que no lo has oído? El Dios eterno,
el SEÑOR, el creador de los confines de la tierra no se fatiga
ni se cansa. Su entendimiento es inescrutable. El da fuerzas
al fatigado, y al que no tiene fuerzas, aumenta el vigor. Aun
los mancebos se fatigan y se cansan, y los jóvenes tropiezan
y vacilan, pero los que esperan en el SEÑOR renovarán sus
fuerzas; se remontarán con alas como las águilas, correrán y
no se cansarán, caminarán y no se fatigarán.”
Isaías 40: 28 - 31

Introducción a Python
A
El siguiente apéndice, tiene como objetivo hacer una pequeña introducción al lenguaje de
programación Python1 . En él, encontraremos los siguientes temas:
Instalación
El lenguaje Python
La indentación
La instrucción print
Estructura de control de decisiones
Estructura de control de ciclos
Funciones
Diccionarios y listas
Programación orientada a objetos
De igual forma, veremos la metodología necesaria para realizar los programas y ejercicios
propuestos en este libro. Si el lector desea conocer a fondo el lenguaje, por favor consulte
los textos [14, 23, 21, 22, 12].
1 Toda la información sobre el lenguaje y la instalación en los diferentes sistemas operativos, puede
consultarse en [Link]

365
366 A.1. Instalación

A.1. Instalación
Dependiendo del sistema operativo en que trabajemos, podemos hacer una instalación
rápida y sencilla. Recordemos que necesitamos las librerías de SciPy para realizar los
Algoritmos propuestos.

A.1.1. Linux
En Linux, debemos tener en cuenta la distribución en la que estemos trabajando. Esta
parte puede resultar un poco compleja para el usuario sin experiencia en Linux. En este
libro, los ejemplos y algoritmos, fueron corridos en Linux Ubuntu, pero existen otras
distribuciones como OpenSuse, Redhat, etc. Ubuntu es la distribución de Linux más
común, y por muchos la indicada para usuarios con poca experiencia, además Python ya
viene preinstalado en Ubuntu, pues lo usa para algunas de sus librerías.

Para instalarlo en Ubuntu, sólo necesitamos abrir una terminal y teclear:

sudo aptitude install python

sudo apt-get install python

Estos dos comandos, instalan la versión 2.*2 , con la cual trabajaremos. Para
otras distribuciones de Linux consulta la página [Link]
Python2orPython3, Ahí encontraras la información necesaria para instalarlo.

Para instalar la librería ScyPy en Ubunto o Debian, escriba en una terminal:

sudo apt-get install python-numpy python-scipy python-matplotlib ipython


ipython-notebook python-pandas python-sympy python-nose.

Posteriormente use el comando:

sudo apt-get update

y luego:

sudo apt-get upgrade

2 La
notación 2.*, hace referencia a cualquiera de las versiones que dependen de la versión 2, de igual
manera 3.* hace referencia a las versiones que dependen de la versión 3.
A. Introducción a Python 367

para actualizar los repositorios.

Para otras distribuciones de Linux consulte la página [Link]


html.

A.1.2. Windows
En Windows, es relativamente más fácil, sólo necesita bajar el instalador que
encontramos en: [Link] recordemos que para
nuestro trabajo con este texto, usaremos la versión 2.*, por eso recomendamos la versión
más actualizada. Luego de bajarlo, simplemente lo instalamos. Python trae un programa
IDE (Integrated Development Environment), que es muy primitivo, pero que servirá para
hacer los primeros pasos con Python.

La librería Scipy se puede instalar usando el programa pythonxy3 , el cual provee las
librerías necesarias, así como el IDE Spyder 2 para la implementación del código.

A.1.3. MacOS
En Mac, recomiendo la versión de Python de la empresa Continuum4 , el cual, distribuye
una versión llamada Anaconda Pyhon, que incluye: El lenguaje Python, el IDE Spyder y
la consola IPython. La instalación se hace bajando un archivo *.dmg de la página http:
//[Link]/downloads; una vez descargada, se puede usar sin hacer configuraciones
posteriores. Esta versión ya tiene las librerías SciPy instaladas.

A.1.4. El IDE (Integrated Development Environment)


Un IDE es un programa que te permite comunicarte con un lenguaje de programación.
En Linux, puedes encontrar IDEs gratuitos como NINJA-IDE5 , SPE6 y mi recomendado
Spyder 27 , estos IDEs se pueden encontrar para las plataformas Windows, Linux y
MacOS. En la página de Python podemos encontrar una larga lista de estos programas:
[Link]

A.2. Python
Python es un lenguaje de programación creado por Guido van Rossum en el CWI,
Centrum Wiskunde & Informatica, en los Países Bajos. Es un lenguaje de programación
3 Paramás información consultar: [Link]
4 Paramás información sobre la empresa Continuum consulte la página [Link]
5 NINJA-IDE disponible en[Link]
6 SPE disponible en [Link]
7 Spyder 2 disponible en [Link]
368 A.2. Python

que soporta tres paradigmas de programación: Programación Estructurada (PE),


Programación Orientada a Objetos (POO) y Programación Funcional (PF).

Python tiene una filosofía que hace énfasis en sintaxis correcta y legible. En este momento,
se encuentra administrado por la fundación Python Software Foundation. y tiene una
licencia especial que se conoce como Python Software Foundation License, la cual, es
completamente compatible con la licencia pública general de GNU. Es usado en una
amplia gama de aplicaciones, entre ellas programas en 3D como Blender, que lo usa como
lenguaje base para sus scrips, Panda3D, es un motor de juegos desarrollado en Python
y C++. Algunos sistemas operativos como Ubuntu y Debian, lo usan como lenguaje
base de algunas de sus bibliotecas. De igual manera, para implementación de aplicaciones
científicas y como una posible alternativa a Matlab. Para manejo de páginas web y scrips,
así como el manejo de bases de datos.

La versión de Python que usaremos en este texto es la versión 2.*; Sin embargo, existen
varias versiones: La primera versión o versión 1, fue un “prototipo”, hoy en día no se usa.
La versión 2 se creó precisamente para romper con la compatibilidad de la versión 2, esta
versión es la más usada y desarrollada, actualmente está en la versión 2.7.7. La versión
3 fue lanzada en diciembre de 2008, y tenia como objetivo romper con la versión 2, pero
este objetivo no ha sido posible, debido a que los programadores se sienten cómodos con
lo que ofrece la versión 2. Por esta razón, la versión 3 se desarrolla en paralelo con la
versión 2.

A.2.1. Ventajas de usar Python


Amplia versatilidad: Python soporta los tres paradigmas de programación más
comunes, Programación Estructurada (PE), Programación Orientada a Objetos (POO)
y Programación Funcional (PF). Lo anterior, junto con una sintaxis clara y legible, nos
permite crear aplicaciones para diferentes plataformas en cuestión de minutos. Además,
es ideal para los estudiantes que quieren iniciarse el mundo de la programación, pues le
permite tener una visión del problema, sin enredarse con una complicada sintaxis.

El código es claro y legible: La filosofía de Python está basada en una forma de


implementar el código que sea claro y legible, el lenguaje “fuerza” al usuario a que sea
ordenado para programar, pues una condición sintáctica. Esto hace de nuestros programas
verdaderas “obras de arte”.

El tipeado dinámico: Python es un lenguaje de programación con tipeado dinámico, es


decir que no es necesario declarar el tipo de una variable, pues el lenguaje lo autoinfiere,
aunque es posible ligar el tipo de una variable. Sin embargo, es fuertemente tipeado, es
decir, Python permite modificar el tipo de una variable.
A. Introducción a Python 369

El garbage collector: En Python, los objetos se crean en forma dinámica, cuando


un objeto no está referenciado por una variable, el garbage collector, elimina
automáticamente este espacio en memoria, esto hace que nuestros programas sean más
óptimos con el manejo de la misma. Sin embargo, es posible eliminar manualmente la
memoria usada por una variable.

Lenguaje Interpretado: Los lenguajes interpretados tienen ciertas ventajas frente a los
compilados. En primer lugar, cuando hacemos un programa en un lenguaje compilado,
se crea un archivo con una serie de comandos estáticos, que no se pueden modificar. En
un lenguaje interpretado como Python, los programas se ejecutan, esto se logra con el
Python Runtime, que es como un ejecutable “vacío”, que se llena cuando corremos nuestro
programa. Esto permite hacer cosas que con lenguajes compilados no se pueden hacer; por
ejemplo, podemos alimentar de código en tiempo de ejecución, es decir, podemos hacer
un programa, que reciba una cadena de código, y la incluya dentro de su código fuente.

A.3. La indentación en Python


Uno de las principales características de Python, es la forma en que hace la delimitación
de los bloques de código. Generalmente, los lenguajes de programación utilizan caracteres
especiales para este propósito, por ejemplo, en Pascal, todas las líneas de código deben
terminar en punto y coma “;”. De igual manera, en los bloques de código como los ciclos,
decisiones y demás, su alcance es delimitado por corchetes, en Pascal por ejemplo se usan
las palabras reservadas Begin y end. En Python, no se requiere de estos delimítadores,
la indentación o sangría que se deja después de cada línea o de un bloque de código, le
dice a Python cual es el alcance del delimitador.

Si dos líneas de código están seguidas, en el mismo bloque de código, estas tendrán la
misma indentación, por ejemplo:

.:Algoritmo A.1

1 p r i n t " h o l a mundo"
2 p r i n t " Hola como e s t a s "

El programa anterior produce la siguiente salida:

1 >>>
2 h o l a mundo
3 Hola como e s t a s
4 >>>
370 A.3. La indentación en Python

Pero si modificamos la indentación, aunque sea un espacio, se produce un error. Veamos


el siguiente ejemplo:

.:Algoritmo A.2

1 p r i n t " h o l a mundo"
2 p r i n t " Hola como e s t a s "

El programa anterior produce la siguiente salida:

1 >>>
2 p r i n t " Hola como e s t a s "
3 ^
4 I n d e n t a t i o n E r r o r : u n e x p e c te d i n d e n t
5 >>>

Este tipo de errores son muy comunes cuando se inicia en la programación en Python,
sobre todo si ya conocías otros lenguajes como C++ o Pascal. De igual manera, los
bloques de código como los ciclos y las decisiones, requieren de una indentación cada vez
que aparezca un nuevo bloque. Veamos el siguiente ejemplo:

.:Algoritmo A.3

1 def funcion (x) :


2 par=True
3 y= x /2
4 i f x > 0:
5 p r i n t "x e s p o s i t i v a "
6 y=−1∗x
7 else :
8 p r i n t "x e s n e g a t i v a "
9 y=1−x
10 par=F a l s e
11 return y
12
13 print funcion (5)
14 print f u n c i o n ( −3)
A. Introducción a Python 371

El programa anterior produce la siguiente salida:

1 >>>
2 x es p o s i t i v a
3 −5
4 x es negativa
5 4
6 >>>

Bien, el Algoritmo A.3, declara una función con la palabra reservada def. Después, aparece
el nombre de la función que en este caso es “funcion” sin tildes, esta tiene un argumento
llamado “x”, seguido de dos puntos “:”; esto le dice a Python, que una nueva función va a
comenzar. Seguidamente aparece la implementación de la función, y como podemos ver,
las líneas pertenecientes a la función, tienen una indentación de 4 espacios.

Si aumentamos la indentación de una de las líneas, obtendremos un error como el


producido en el algoritmo anterior. En la línea 4, aparece un bloque de código para una
decisión, en este caso la sentencia if. Las líneas de código pertenecientes a la sentencia if,
tienen un mayor grado de indentación (8 espacios), esto nos indican que pertenecen al if
y no al flujo de código de la función. De igual manera, en la línea 7, aparece la sentencia
else del if, y aquí, nuevamente debe indentarse las líneas de código de este bloque. En
la línea 11 aparece un comando llamado return, este tiene la misma indentación que las
líneas 2 y 3, indicando que no pertenecen al bloque de código del if ni del else, sólo a la
implementación de la función. Finalmente, en las líneas 13 y 14 aparecen dos comandos
print, pero estos no pertenecen a la función, pues no tiene ninguna indentación.

Como vemos, la indentación, hace las veces de corchetes o de Begin y end en los bloques
de código. El estudiante, debe tener cuidado con esta forma de delimitar los bloques de
código, pues el cambio de la indentación no necesariamente produce un error sintáctico,
puede generar que una linea de código se ejecute el otro bloque de código diferente, y esto
puede provocar fallas en el comportamiento de nuestros programas.

A.4. Mi primer programa en Python


Existen dos formas de trabajar en Python, la primera de ellas es usando la consola,
pero esta forma sólo se recomienda para hacer pequeñas pruebas. La segunda consiste en
pedirle a Python que ejecute un programa en un archivo de extensión *.py. Inicialmente,
cuando cargamos Python, ya carga las librerías necesarias para el manejo de texto, así
que como es costumbre, haremos nuestro programa “hola mundo”:
372 A.5. La instrucción print

.:Algoritmo A.4

1 p r i n t " h o l a mundo"

El programa anterior produce la siguiente salida:

1 >>>
2 h o l a mundo
3 >>>

Como vemos, no necesitamos cargar ninguna librería ni hacer llamados a funciones


complicadas, el comando print, recibe una cadena que se incluye en comillas dobles, y
la imprime en la consola.

Python por defecto, viene con librerías para el trabajo de funciones matemáticas,
incluyendo números reales y complejos. Además, posee una completa librería para el
trabajo de números aleatorios, también se incluye librerías para criptografía y el manejo
de archivos y archivos comprimidos en formatos zlib, gzip, bzip2 y tar. De igual forma,
el manejo de bases de datos, funciones para control de conexiones TCP/IP, web, correo
electrónico, etc; así como el acceso al sistema operativo.

A.5. La instrucción print


En Python, print es una instrucción y no una función, por esta razón, sus argumentos no
necesitan paréntesis como las funciones. El siguiente ejemplo muestra el comportamiento
de la instrucción print :

.:Algoritmo A.5

1 p r i n t " h o l a mundo"
2
3 print ’ h o l a mundo ’
4
5 a=10
6 b =2.23450983
7
8 p r i n t " l a v a r i a b l e a t i e n e un a v l o r de " , a
9
10 p r i n t " l a v a r i a b l e b t i e n e un v a l o r de " , b
A. Introducción a Python 373

11
12 p r i n t " a=" , a , " \ t b=" , b , " \n"
13
14 c=a /b
15
16 p r i n t " %.3 f e s e l c o c i e n t e e n t r e %.4 f y %.5 f " % ( c , a , b )

El programa anterior produce la siguiente salida:

1 >>>
2 h o l a mundo
3 h o l a mundo
4 l a v a r i a b l e a t i e n e un a v l o r de 10
5 l a v a r i a b l e b t i e n e un v a l o r de 2.23450983
6 a= 10 b= 2 . 2 3 4 5 0 9 8 3
7
8 4.475 es e l coci ente entre 10.0000 y 2.23451
9 >>>

En el Algoritmo A.5, podemos ver en las líneas 1 y 3, que se imprime la misma cadena de
caracteres, sólo que en el primero se incluye con doble comillas y el segundo con comillas
sencillas; en ambos casos, el resultado es igual.

En las líneas 5 y 6 se incluyen dos variables a y b. Con la variable a, Python infiere que
es un número entero, pues no tiene punto decimal. Con b, Python deduce que es de tipo
real, pues si tiene punto decimal. Posteriormente, en las líneas 8 y 10, se usa la instrucción
print para imprimir las dos variables, observemos que primero se imprime la cadena y
posteriormente la variable separados por una coma “,”. Esta notación, permite imprimir
varias variables a la vez, por ejemplo, podemos imprimir cuatro variables de diferentes
tipos, separadas por una coma: print a,b,c,d.

De igual forma, en la línea 12, se hace un ejercicio similar, sólo que aquí, se intercambian
cadenas y variables, cada una separada por una coma. Además, se incluye el símbolo “\n”
que equivale a un enter; razón por la cual, en la salida se ve un espacio mayor entre las
líneas. En la línea 14, hacemos el cálculo c=a/b, Python infiere que este cociente es entre
un número entero y un número real, y por lo tanto, asigna a la variable c, el valor de
dicho cociente como un número real.

La línea 16, es muy especial, en ella, observamos como podemos formatear una cadena,
para que imprima variables numéricas, con una cantidad limitada de valores decimales.
Para ello, nos valemos del símbolo que imprime el valor numérico de punto flotante, que
374 A.6. Decisiones

es igual al de otros lenguajes de programación, “ %f”; Al final de las cadenas, ponemos


el símbolo “ % ” seguido de la lista de variables entre paréntesis (en el orden estricto en
que se quieran imprimir). Esto le indica a Python, que se va a imprimir un valor real. La
variante: “ %.3f”, indica que es un número real y que de él, sólo se imprimirá tres cifras
decimales. De igual forma, existe “ %d” que es para enteros, “ %s” que es para cadenas y
“ %e” que es para notación científica; por ejemplo, si ejecutamos la línea:

print " %.3e es el cociente entre %.4f y %.5f" % (c,a,b)

Obtendremos como resultado:

4.475e+00 es el cociente entre 10.0000 y 2.23451

Estos formatos, nos permiten hacer impresiones de procesos iterativos, logrando una mejor
visualización de los resultados, y dejándolos listos, para incluirlos en nuestros libros o
informes.

El cuadro A.1, muestra los operadores aritméticos de Python:

Operador Descripción
+ Suma
- Resta
- Negación
* Multiplicación
** Exponente
/ División
// División entera
% Módulo

Cuadro A.1: Operadores aritméticos de Python

Recuerde que el usuario puede implementar sus propias funciones. Para más información
consultar [21].

A.6. Decisiones
A diferencia de los demás lenguajes de programación, Python sólo tiene un tipo de
decisión, de tipo “si - entonces” o “si - entonces - de lo contrario”. En Python no existe la
sentencia “case”. La sentencia “if” tiene la siguiente forma:
A. Introducción a Python 375

if condición :
instrucción 1
instrucción 2
.
.
.

Recordemos que las instrucciones que pertenecen al if, deben estar indentadas por lo
menos un espacio. Al igual que en otros lenguajes, si la condición es verdadera, se ejecutan
las instrucciones que están en el condicional, de lo contrario, estas no se ejecutan.

Si el condicional if requiere que se implemente el caso en que la condición no se cumple,


existe la instrucción “if - else” que tiene la siguiente forma:

if condición :
instrucción 1
instrucción 2
.
.
.
else:
instrucción 1
instrucción 2
.
.
.

Si la condición es verdadera, se ejecutan las instrucciones que están debajo del if, pero si
la condición es falsa, se ejecutan las instrucciones que están debajo del else. Después de la
instrucción if, siempre se pone dos puntos “:” para indicarle a Python que ya se finalizó la
condición; también se debe poner después del comando else. El siguiente ejemplo ilustra
la manera de usar el condicional if.

.:Algoritmo A.6

1 from math i m p o rt ∗
2
3 p r i n t " R a i c e s de una e c u a c i o n d e segundo g ra d o "
4
5 print " ingrese los valores de l o s c o e f i c i e n t e s segun ax^2 + bx + c "
6 a=f l o a t ( raw_input ( " i n g r e s e el v a l o r de a : " ) )
7 b=f l o a t ( raw_input ( " i n g r e s e el v a l o r de b : " ) )
8 c=f l o a t ( raw_input ( " i n g r e s e el v a l o r de c : " ) )
376 A.6. Decisiones

9
10
11 d i s=b ∗∗2 − 4∗ a ∗ c
12 p r i n t " El d i s c r i m i n a t e e s : " , d i s
13
14 if d i s >= 0 :
15 p r i n t "La e c u a c i o n t i e n e r a i c e s r e a l e s : "
16 x r1=(−b . r e a l + s q r t ( d i s ) ) / (2 ∗ a . r e a l )
17 x r2=(−b . r e a l − s q r t ( d i s ) ) / (2 ∗ a . r e a l )
18 p r i n t " l a p ri m e ra s o l u c i o n x1 : " , x r1
19 p r i n t " l a segunda s o l u c i o n x1 : " , x r2
20 else :
21 p r i n t "La e c u a c i o n t i e n e r a i c e s c o m p l e j a s : "
22 xc1=(−b + s q r t ( abs ( d i s ) ) ∗1 j ) / (2 ∗ a )
23 xc2=(−b − s q r t ( abs ( d i s ) ) ∗1 j ) / (2 ∗ a )
24 p r i n t " l a p ri m e ra s o l u c i o n x1 : " , xc1
25 p r i n t " l a segunda s o l u c i o n x1 : " , xc2

El programa anterior produce la siguiente salida:

1 >>>
2 R a i c e s de una e c u a c i o n d e segundo g ra d o
3 i n g r e s e l o s v a l o r e s de l o s c o e f i c i e n t e s segun ax^2 + bx + c
4 i n g r e s e e l v a l o r de a : 2
5 i n g r e s e e l v a l o r de b : 3
6 i n g r e s e e l v a l o r de c : 5
7 El d i s c r i m i n a t e e s : −31.0
8 La e c u a c i o n t i e n e r a i c e s c o m p l e j a s :
9 l a p ri m e ra s o l u c i o n x1 : ( −0.75+1.39194 10 9 07 1 j )
10 l a segunda s o l u c i o n x1 : ( −0.75 −1.39194109071 j )
11 >>>

En el Algoritmo A.6, muestra como implementar un programa que calcule la solución de


una ecuación de segundo grado, usando la fórmula tradicional:

−b ± b2 − 4ac
x1,2 = (A.1)
2a
Teniendo en cuenta si tiene raíces reales o complejas. Para entender en algoritmo, debemos
estudiarlas siguientes instrucciones:

1. La instrucción from math import * : Con esta instrucción, le decimos a Python


que cargue la librería de matemáticas (línea 1).
A. Introducción a Python 377

2. raw_input("texto de entrada"): Este comando, permite desplegar un texto para


pedir el valor de una variable por teclado, en las líneas 6,7 y 8 se piden los coeficientes
de una ecuación de segundo grado, esta función devuelve una variable de tipo texto.

3. float: Como la función raw_input devuelve una variable de tipo texto, debemos
convertir estos valores a variables reales, así que usamos la función float, que
convierte una variable a un valor real, independientemente de que sea un entero
o una cadena.

Teniendo los coeficientes a, b y c de una ecuación de segundo grado de la forma ax2 +bx+c,
podemos calcular el discriminante, el cual, me indica si la ecuación tiene raíces reales o
complejas. En la línea 11 calculamos dicho discriminante en la variable dis.

A continuación viene la decisión: En la línea 14, preguntamos si la variable dis es mayor


que cero, esto indica que la ecuación de segundo grado tiene raíces reales, y por lo tanto,
se calculan fácilmente usando la ecuación A.1; en este caso se ejecutan las líneas 15 a 19,
las cuales, calculan las raíces en las variables xr1 y xr2, finalizando con la impresión por
pantalla de las mismas.

Si la variable dis es menor que cero, entonces las líneas 15 a 19 no se ejecutan, en su lugar
se ejecutan las líneas 21 a 25, que me permiten calcular las raíces complejas, multiplicando
la raíz cuadrada del valor absoluto del discriminante por 1j, que es la unidad imaginaria
usada por Python, esto le dice al compilador, que las variables xc1 y xc2 son de tipo
complejas y no reales. En el Algoritmo A.6, usamos los coeficientes 2, 3 y 5, que equivalen a
la ecuación 2x2 +3x+5 = 0, dicha ecuación tiene como soluciones a -0.75+1.39194109071j
y -0.75-1.39194109071j. Si cambiamos estos coeficientes por 1, 3 y 1, es decir, la ecuación
x2 + 3x + 1 = 0, obtendremos -0.38196601125 y -2.61803398875 como soluciones.

El cuadro A.2, muestra los operadores relacionales que se usan en los condicionales:

Otra forma de usar el condicional, es usando la instrucción if con la siguiente estructura:

variable=(P if condición else Q )

Este esquema de condicional, permite resumir en una línea de código, una decisión que
tomaría cerca de cuatro líneas. En este caso, todo recae en una variable, a la que se le
asigna el valor de P si la condición es verdadera, y Q si la condición es falsa. Veamos el
siguiente Algoritmo:

.:Algoritmo A.7
378 A.6. Decisiones

Operador Descripción
x == y ¿x es igual a y?
x! = y ¿x es diferente de y?
x>y ¿x es mayor que y?
x >= ¿x es mayor o igual que y?
x<y ¿x es menor que y?
x <= y ¿x es menor o igual que y?
x and y La sentencia es verdadera si x y
y es verdadera, en caso contrario
es falsa.
x or y La sentencia es verdadera si x
es verdadero o y es verdadera, si
ambas son falsas, la sentencia es
falsa
not x Cambia el sentido a la variable x;
si es verdadera, la convierte en
falsa, si es falsa la convierte en
verdadera.

Cuadro A.2: Operadores booleanos de Python

1 from math i m p o rt ∗
2
3 p r i n t " Valor ob s ol u to "
4
5 a=f l o a t ( raw_input ( " i n g r e s a un v a l o r : " ) )
6
7 k = a i f a>= 0 e l s e −1∗a
8
9 p r i n t " El v a l o r a b s o l u t o de tu numero e s : " , k

El programa anterior produce la siguiente salida:

1 >>>
2 Valor ob s ol u to
3 i n g r e s a un v a l o r : −5
4 El v a l o r a b s o l u t o de tu numero e s : 5.0
5 >>>
A. Introducción a Python 379

En el Algoritmo A.7, implementamos la función valor absoluto, en este caso se le pide al


usuario que ingrese un valor numérico en la variable a, el cual, se convierte a un valor
real; posteriormente en la línea 7, aparece una sentencia if sobre la variable k, donde, si el
valor que entra el usuario es positivo, la variable k queda con el valor inicial de la variable
a, pero si ingresa un valor negativo, se ejecuta el else, y por lo tanto, al valor entrado por
el usuario se multiplica por -1. Esta forma de hacer condicionales, permite implementar
funciones a trozos, muy útiles en matemáticas.

Python implementa la sentencia elif para decisiones de múltiple escogencia. La siguiente


es la estructura:

if condición 1:
instrucción 1
instrucción 2
instrucción 3
.
.
.
elif condición 2:
instrucción 1
instrucción 2
instrucción 3
.
.
.
elif condición 2:
instrucción 1
instrucción 2
instrucción 3
.
.
.
else:
instrucción 1
instrucción 2
instrucción 3
.
.
.
Si la condición inicial no se cumple, se pasa al primer elif, si la condición de este no se
cumple, se pasa al segundo elif, de esa forma hasta terminar; si no se cumple ninguna
condición, se ejecutan las instrucciones que están en el else, pero este es opcional. Veamos
380 A.7. Listas

el siguiente ejemplo:

.:Algoritmo A.8

1 from random i m p o rt ∗
2
3 a=round (1 0 ∗ random ( ) )
4
5 if a==0:
6 print " El numero e s c e r o "
7 e l i f a<=9 and a >8:
8 print " El numero e s t a e n t r e 8 y 9 "
9 e l i f a<=8 and a >7:
10 print " El numero e s t a e n t r e 8 y 7 "
11 else :
12 print " El numero e s menor que 7 "

El programa anterior produce la siguiente salida:

1 >>>
2 El numero e s menor que 7
3 >>>

El comando from random import * importa la librería random, que permite obtener
números aleatorios. La función random() de la línea 3, retorna un número aleatorio entre
cero y uno, que al ser multiplicado por 10, amplía su rango de cero a 10. La función round
redondea dicho número para eliminar la parte decimal.

Inicialmente, se pregunta si el número es cero, si no lo es, se pregunta si está en el


intervalo [9, 8]; posteriormente, se pregunta si esta en el intervalo [8, 7] y finalmente, si
ninguna condición se cumple, se ejecutan las sentencias del else.

A.7. Listas
Esta sección, rompe con el esquema planteado que hemos utilizado para describir las
sentencias de control. Esta pausa, la hemos hecho para describir una de las ventajas más
representativas de Python. Generalmente, los lenguajes de tipo declarativo como Lisp,
Haskell o Mozat-OZ, ya tienen un manejador de listas, pero en los lenguajes imperativos
como C++ y Pascal, no es común tener este tipo de datos. Python, propone una manejo
A. Introducción a Python 381

de listas claro y muy eficiente, con una sintaxis que es muy simple y fácil de entender.

Una Lista en Python, es un arreglo “de cualquier tamaño”, que puede albergar variables de
cualquier tipo, inclusive, si creamos tipos u objetos propios. Las listas en Python pueden
ser de uno o varios tipos. Las listas se inicializan con corchetes y los elementos se separan
con comas. Veamos el siguiente ejemplo:

.:Algoritmo A.9

1 p r i n t " Manejo de l i s t a s "


2
3 a=4
4 b=5.6
5 c= " h o l a mundo"
6
7 l =[a , b , c ]
8
9 print l

El programa anterior produce la siguiente salida:

1 >>>
2 Manejo de l i s t a s
3 [ 4 , 5 . 6 , ’ h o l a mundo ’ ]
4 >>>

En el Algoritmo anterior, declaramos tres variables, la variable a de tipo entero, la variable


b de tipo real y la variable c de tipo cadena, posteriormente se crea una lista en una
variable l, con estos tres elementos. Como podemos ver, la lista se crea fácilmente, sólo
se incluyen las variables, separadas por comas.

A.7.1. Índices en listas


El acceso a los valores de las listas, se hace accediendo a los valores por medio de los
corchetes, así por ejemplo, si tenemos la lista del Algoritmo A.9, podemos acceder a los
valores de la siguiente forma:

1 >>> l [ 0 ]
2 4
382 A.7. Listas

3 >>> l [ 1 ]
4 5.6
5 >>> l [ 2 ]
6 ’ h o l a mundo ’
7 >>> l [ 3 ]
8 Traceback ( most r e c e n t c a l l l a s t ) :
9 F i l e "<s t d i n >" , l i n e 1 , i n <module>
10 I n d e x E r r o r : l i s t i n d e x out o f ra n g e

Las listas en Python comienzan en cero, por eso al teclear l[0], obtenemos el primer valor
de la lista. Como la lista tiene sólo tres elementos, por tanto al teclear l[3] obtenemos un
error “IndexError: list index out of range”.

También podemos hacer sublistas, las cuales se logran definiendo el índice inicial y el final
dentro de la lista principal:

.:Algoritmo A.10

1 p r i n t " Manejo de l i s t a s "


2
3 l =[ " a " , "b" , " c " , 2 , 5 . 6 , 9 ]
4
5 print l
6
7 print l [ 2 : 4 ]
8
9 print l [ 0 : 4 ]
10
11 p r i n t l [ −1]
12
13 p r i n t l [ −2]
14
15 p r i n t l [ −6]

El programa anterior produce la siguiente salida:

1 >>>
2 Manejo de l i s t a s
3 [ ’ a ’ , ’b ’ , ’ c ’ , 2 , 5.6 , 9]
4 [ ’ c ’ , 2]
5 [ ’ a ’ , ’b ’ , ’ c ’ , 2]
6 9
7 5.6
8 a
A. Introducción a Python 383

9 >>>

Cuando invocamos el comando l[2:4], obtenemos una sublista que comienza en el índice
2 y termina en el índice 3, es decir, termina en el elemento anterior. Los índices negativos
son otra de las ventajas de Python, en los cuales, sin importar el tamaño de la lista, el
elemento con índice -1 es el elemento final, el -2 es el penúltimo y así sucesivamente; si
nuestra lista tiene seis elementos, al invocar l[-6] obtendremos el primer elemento de la
lista. Tenga en cuenta que li = li−T (l) , donde T (l) es el tamaño de la lista.

A.7.2. Operadores y funciones con listas


El siguiente algoritmo resume las principales funciones y operaciones que se pueden hacer
con las listas en Python:

.:Algoritmo A.11

1 p r i n t " Manejo de l i s t a s "


2
3 l 1 =[ " a " , "b" , " c " ]
4
5 p r i n t " l a p ri m e ra l i s t a " , l 1
6
7 l 2 =[3 ,5 ,8 ,1 , " hola " ]
8
9 p r i n t " l a segunda l i s t a " , l 2
10
11 l 3=l 1+l 2
12
13 p r i n t " l a u n i o n de l 1 y l 2 " , l 3
14
15 l 3 += [ ’ nuevo e l e m e n to ’ ]
16
17 p r i n t " Agregando un nuevo e l e m e n to " , l 3
18
19 p r i n t " R e p e t i c i o n de l i s t a s " , l 1 ∗3
20
21 l 1 . append ( " h o l a de nuevo " )
22 p r i n t " Agregando v a l o r e s a l a l i s t a " , l 1
23
24 l 1 . i n s e r t ( 2 , " s o y nuevo " )
25 p r i n t " Agregar un e l e m e n to a l a l i s t a con i n s e r t " , l 1
26
27 l 1 . remove ( " a " )
28 p r i n t " Eliminando e l e m e n t o s de l a l i s t a " , l 1
384 A.7. Listas

29
30 k=l 1 . i n d e x ( " c " )
31 p r i n t " Imprime e l i n d i c e c o r r e s p o n d i e n t e a l e l e m e n to c : " , k
32
33 p r i n t " Imprime l a c a n t i d a d de e l e m e n t o s p r e s e n t e s en l a l i s t a " , l 1 . count ( "
h o l a de nuevo " )
34
35 l 1 . append ( [ " h o l a " , "mundo" ] )
36
37 p r i n t " Agregamos una s u b l i s t a a l a l i s t a " , l 1
38
39 l 1 . e x te n d ( [ " a d i o s " , " a t o d o s " ] )
40 p r i n t " Agregamos una s u b l i s t a con e l comando e x te n d " , l1
41
42 l 1 . pop ( )
43 p r i n t " Eliminamos e l u l t i m o e l e m e n to con l a f u n c i o n pop " , l 1
44
45 l1 . reverse ()
46 p r i n t " Imprimimos l a l i s t a a l r e v e s " , l 1
47
48 l1 . sort ()
49 p r i n t "La l i s t a ordenada : " , l 1
50
51 cadena= ’Me e n c a n ta Python e s muy f a c i l ’ . s p l i t ( )
52
53 p r i n t cadena

El programa anterior produce la siguiente salida:

1 >>>
2 Manejo de l i s t a s
3
4 l a p ri m e ra l i s t a [ ’ a ’ , ’b ’ , ’ c ’ ]
5
6 l a segunda l i s t a [ 3 , 5 , 8 , 1 , ’ hola ’ ]
7
8 l a u n i o n de l 1 y l 2 [ ’ a ’ , ’b ’ , ’ c ’ , 3 , 5 , 8 , 1 , ’ hola ’ ]
9
10 Agregando un nuevo e l e m e n to [ ’ a ’ , ’ b ’ , ’ c ’ , 3 , 5 , 8 , 1 , ’ h o l a ’ , ’ nuevo
e l e m e n to ’ ]
11
12 R e p e t i c i o n de l i s t a s [ ’a ’ , ’b ’ , ’ c ’ , ’a ’ , ’b ’ , ’ c ’ , ’a ’ , ’b ’ , ’ c ’ ]
13
14 Agregando v a l o r e s a l a l i s t a [ ’ a ’ , ’ b ’ , ’ c ’ , ’ h o l a de nuevo ’ ]
15
16 Agregar un e l e m n to a l a l i s t a con i n s e r t [ ’ a ’ , ’ b ’ , ’ s o y nuevo ’ , ’ c ’ , ’ h o l a
de nuevo ’ ]
17
18 Eliminando e l e m e n t o s de l a l i s t a [ ’ b ’ , ’ s o y nuevo ’ , ’ c ’ , ’ h o l a de nuevo ’ ]
19
20 Imprime e l i n d i c e c o r r e s p o n d i e n t e a l e l e m e n to c : 2
A. Introducción a Python 385

21
22 Imprime l a c a n t i d a d de e l e m e n t o s p r e s e n t e s en l a l i s t a 1
23
24 Agregamos una s u b l i s t a a l a l i s t a [ ’ b ’ , ’ s o y nuevo ’ , ’ c ’ , ’ h o l a de nuevo ’ ,
[ ’ h o l a ’ , ’ mundo ’ ] ]
25
26 Agregamos una s u b l i s t a con e l comando e x te n d [ ’ b ’ , ’ s o y nuevo ’ , ’ c ’ , ’
h o l a de nuevo ’ , [ ’ h o l a ’ , ’ mundo ’ ] , ’ a d i o s ’ , ’ a t o d o s ’ ]
27
28 Eliminamos e l u l t i m o e l e m e n to con l a f u n c i o n pop [ ’ b ’ , ’ s o y nuevo ’ , ’ c ’ , ’
h o l a de nuevo ’ , [ ’ h o l a ’ , ’ mundo ’ ] , ’ a d i o s ’ ]
29
30 Imprimimos l a l i s t a a l r e v e s [ ’ a d i o s ’ , [ ’ h o l a ’ , ’ mundo ’ ] , ’ h o l a de nuevo ’ ,
’ c ’ , ’ s o y nuevo ’ , ’ b ’ ]
31
32 La l i s t a ordenada : [ [ ’ h o l a ’ , ’ mundo ’ ] , ’ a d i o s ’ , ’ b ’ , ’ c ’ , ’ h o l a de nuevo ’ ,
’ s o y nuevo ’ ]
33
34 [ ’Me ’ , ’ e n c a n ta ’ , ’ Python ’ , ’ e s ’ , ’muy ’ , ’ f a c i l ’ ]
35 >>>

El Algoritmo A.11, muestra las siguientes funciones8 y operadores con listas:


Unir dos listas con el operador +: En las líneas 3 y 7 declaramos dos listas l1 y l2 :
el operador +, une ambas listas en una lista nueva, en este caso en la variable l3,
como se ve en la línea 11 y 13.
Agregar un nuevo elemento a la lista con += : En la línea 15, podemos observar,
que usamos este comando de la misma manera que cuando decimos i=i+1.
Repetir una lista con el operador *: En la línea 19, tomamos la lista l1 y repetimos
tres veces.
Agregar un nuevo elemento a la lista con la función append : Esta función agrega
un nuevo elemento a la lista, pero siempre los hace al final; el resultado se puede
ver en las líneas 21 y 22.
Agregar un elemento a la lista con la función insert: Esta función también agrega
elementos a la lista, pero esta lo hace en un índice específico. En la línea 24, vemos
que la función tiene dos parámetros, el primero es el índice donde se requiere el
nuevo elemento, y el segundo es el elemento en si.
Eliminando elementos de la lista con la función remove: En la línea 27, aplicamos
la función remove para eliminar el elemento “a”. La función, busca dicho elemento
y lo elimina de la lista, posteriormente acomoda los elementos; no es necesario darle
el índice para eliminar el elemento.
8 Técnicamente no son funciones de Python, son funciones implementadas dentro de la clase lista.
386 A.8. Ciclos

Obtener el índice de un elemento con la función index : En este caso, la función


index, recibe como parámetro el elemento al cual, le queremos obtener el índice, la
función de vuelve este valor, como se muestra en la línea 30.
Agregar elementos con la función extend : Para entender el funcionamiento de esta
función, vemos lo que ocurre cuando agregamos una lista con la función append
a otra lista, como se ve en la línea 35. En la salida del algoritmo, (línea 24 de la
salida) vemos que se agregó una sublista a la lista dada. Ahora bien, con el comando
extend (línea 39), se logra que la nueva lista que se quiere agregar, no entre como
una sublista, sino que los nuevos elementos de la segunda lista, sean agregados a la
primera.
Eliminar elementos con la función pop: La línea 42, muestra el llamado de la función
pop, la cual no tiene parámetros. La función toma la lista y elimina el último
elemento.
Invertir una lista con el comando reverse: La función toma la lista e invierte el
orden en que aparece. Su funcionamiento lo podemos ver en la línea 45.
Ordenando una lista con la función sort: En la línea 48, se hace un llamado a la
función sort, que en este caso específico no tiene parámetros. La función, ordena
la lista según sea su contenido; si la lista es de números, los ordena en orden
ascendente, si son cadenas, las ordena en orden alfabético, pero si son de diferente
tipo, como en nuestro caso, las ordena según su tipo, es decir, las cadenas las ordena
alfabéticamente, luego ordena los números y finalmente ubica los demás objetos que
no puede ordenar. Esta función, puede recibir por parámetro, que hace las veces de
“condición” para hacer la ordenación.
Finalmente, en la línea 51 se declara la variable cadena, la cual, tiene un mensaje en
formato cadena. En la línea 53 se imprime el resultado de la función split(), el cual toma
la cadena y devuelve una lista con las subcadenas.

A.8. Ciclos
Python sólo maneja dos tipos de ciclos, el primero es el tipo for, que se usa cuando
sabemos exactamente cuántas veces se va a ejecutar el ciclo. El otro tipo, es el while, el
cual, se usa cuando no conocemos cuantas veces se va a ejecutar el ciclo.

A.8.1. El ciclo for


El ciclo for tiene la siguiente estructura:

for variable in lista:


A. Introducción a Python 387

instrucción 1
instrucción 2
instrucción 3
.
.
.

Este tipo de ciclo, es diferente a los demás ciclos for de otros lenguajes. En primer lugar,
los for se ejecutan sobre los componentes de una lista o cadena. La primera vez que se
ejecuta, la variable toma el valor de la primera componente de la lista, la segunda vez que
se ejecuta, toma el valor del segundo componente de la lista y así sucesivamente, hasta
terminar con el último componente. Esto implica, que el for se ejecuta tantas veces como
elementos tenga la lista.

Para emular el comportamiento de el for tradicional de otros lenguajes, se usa la función


range(n), el cual genera una lista de 0 a n-1 elementos. El siguiente ejemplo ilustra la
forma de usar los ciclos for :

.:Algoritmo A.12

1 from random i m p o rt ∗
2
3 n=i n t (1 0 ∗ random ( ) )
4
5 f o r i i n ra n g e ( n ) :
6 print i
7
8 p r i n t " ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ \ n"
9
10 f o r i in " hola " :
11 print i
12
13 p r i n t " ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ \ n"
14
15 f o r i in [ 1 , 2 , 4. 6 , " hola " , [ 3 , 5 ] ] :
16 print i

El programa anterior produce la siguiente salida:

1 >>>
2 0
3 1
4 2
5 3
388 A.8. Ciclos

6 4
7 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
8
9 h
10 o
11 l
12 a
13 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
14
15 1
16 2
17 4.6
18 hola
19 [3 , 5]
20 >>>

En el Algoritmo A.12, vemos tres for, el primero (línea 5), usa la función range(5), que
genera una lista con números enteros de 0 a 4, el ciclo imprime la variable del for. El
segundo (línea 10), actúa sobre una cadena, en este caso, la variable i asume cada letra
de la cadena. En la línea 15, el for actúa sobre una lista de 4 elementos, que está compuesta
por dos enteros, un real y una sublista, en cuyo caso, la variable i asumirá cada tipo.

A.8.2. Ciclo while


En Python, un ciclo while ejecuta un grupo de instrucciones mientras una condición es
verdadera. El ciclo while tiene la siguiente sintaxis:

while condición:
instrucción 1
instrucción 2
instrucción 3
.
.
.

Recordemos que las instrucciones del while deben estar indentadas. Cuando la condición
sea falsa, entonces el ciclo se detiene. El siguiente ejemplo muestra la funcionalidad del
ciclo while:

.:Algoritmo A.13
A. Introducción a Python 389

1 from random i m p o rt ∗
2
3 n=4
4 w h i l e n <7:
5 n=i n t (1 0 ∗ random ( ) )
6 p r i n t "n= " , n
7
8 p r i n t " ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ \ n"
9
10 i = 1.0
11 w h i l e i <= 1 0 :
12 p r i n t " %.5 f \ t %.5 f \ t %.5 f " % (1 / i , 1/ i ∗ ∗ 2 , 1/ i ∗ ∗ 3 )
13 i = i + 1
14
15 k = f l o a t ( raw_input ( "Dame un numero e n t r e 0 y 9 : " ) )
16 w h i l e not ( k>=0 and k <= 9 ) :
17 p r i n t ( " Numero f u e r a d e l rango , i n t e n t a l o de nuevo : " )
18 k = f l o a t ( raw_input ( "Dame un numero e n t r e 0 y 9 : " ) )
19 p r i n t ( "Hemos te rm i n a d o " )

El programa anterior produce la siguiente salida:

1 >>>
2 n= 6
3 n= 1
4 n= 1
5 n= 6
6 n= 6
7 n= 2
8 n= 4
9 n= 9
10 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
11
12 1.00000 1.00000 1.00000
13 0.50000 0.25000 0.12500
14 0.33333 0.11111 0.03704
15 0.25000 0.06250 0.01562
16 0.20000 0.04000 0.00800
17 0.16667 0.02778 0.00463
18 0.14286 0.02041 0.00292
19 0.12500 0.01562 0.00195
20 0.11111 0.01235 0.00137
21 0.10000 0.01000 0.00100
22
23 Dame un numero e n t r e 0 y 9 : 33
24 Numero f u e r a d e l rango , i n t e n t a l o de nuevo :
25
26 Dame un numero e n t r e 0 y 9 : 44
27 Numero f u e r a d e l rango , i n t e n t a l o de nuevo :
28
390 A.9. Funciones

29 Dame un numero e n t r e 0 y 9 : 66
30 Numero f u e r a d e l rango , i n t e n t a l o de nuevo :
31
32 Dame un numero e n t r e 0 y 9 : 2
33 Hemos te rm i n a d o
34
35 >>>

En el Algoritmo A.13, encontramos 3 ciclos while:

1. En la línea 3, iniciamos la variable n=4 ; en la línea 4 el ciclo while tiene la condición


n < 7, como n = 4, el ciclo se inicia, en la primera línea se escoge un número aleatorio
menor que 10, que posteriormente se imprime. Este ciclo puede ejecutarse muchas
veces, hasta que se encuentre un número mayor que 7. En la salida del algoritmo,
vemos que (sólo en esta corrida) el ciclo itero 7 veces, de los cuales en la última se
puede ver que se encontró un número mayor que este (en nuestro caso el 9).

2. En el segundo while (línea 11), se inicia una variable i=1.0 previamente. En el print
se formatea una cadena con 5 cifras decimales, que imprimirán los recíprocos de las
potencias de la variable i. Recordemos que el caracter “\n” equivale a la tecla enter y
el caracter “\t” equivale a la tecla tab, así que imprimimos los resultados separados
por una tecla tab.

3. En la línea 15, le pedimos al usuario que ingrese un número entre 0 y 9. En el ciclo


se impone la condición not(k>=0 and k <= 9) que se puede entender como “no es
cierto que k es mayor que 0 y menor que 9”. Si le damos un número fuera de este
rango, el while imprime un mensaje pidiendo de nuevo el número, esto se detendrá
cuando le demos un número entre 0 y 9. En la salida del Algoritmo, vemos que se
intentó con tres número diferentes 33, 44 y 66, finalmente al darle el número 2 el
ciclo terminó.

Existen otras formas de terminar un ciclo, la instrucción break rompe un ciclo bien sea un
for o un while. Sin embargo, debemos tener cuidado de donde ubicamos esta instrucción,
pues puede detener el ciclo antes de que el programa haya alcanzado su objetivo.

A.9. Funciones
Las funciones en Python, son bloques de código que se ejecutan en el momento en que
las invoquemos. Estas se declaran con la instrucción del de la siguiente forma:

def nombre_de_la_Función(parámetro 1, parámetro 2, ...):


instrucción 1
A. Introducción a Python 391

instrucción 2
instrucción 3
.
.
.

Después de la palabra reservada def, se pone el nombre con el cual se identifica a la


función, seguidamente, entre paréntesis se ponen los parámetros separados por comas.
Las funciones generalmente retornan un valor, que puede ser un tipo básico de Python u
otro creado por nosotros mismos; para ello usamos el comando return, si este comando
no se usa en la función, esta devuelve None.

.:Algoritmo A.14

1 from random i m p o rt ∗
2 from math i m p o rt ∗
3
4 d e f C a rte A p o l a r ( x , y ) :
5 r=s q r t ( x ∗∗2 + y ∗ ∗ 2 )
6 t=atan ( y/ f l o a t ( x ) )
7 return ( r , t )
8
9 d e f PolarACarte ( r , t ) :
10 x=r ∗ c o s ( t )
11 y=r ∗ s i n ( t )
12 return (x , y)
13
14
15
16 p r i n t " El punto ( 3 , 4 ) en c a t e s i a n a s e q u i v a l e a " , C a rte A p o l a r ( 3 , 4 ) , " en
p o l a r e s \n"
17
18 p r i n t " El punto ( 3 , p i ) en p o l a r e s e q u i v a l e a " , PolarACarte ( 3 , p i ) , " en
cartesianas"

El programa anterior produce la siguiente salida:

1 >>>
2 El punto ( 3 , 4 ) en c a t e s i a n a s e q u i v a l e a ( 5 . 0 , 0 . 9 2 7 2 9 5 2 1 8 0 0 1 6 1 2 2 ) en
polares
3
4 El punto ( 3 , p i ) en p o l a r e s e q u i v a l e a ( − 3 . 0 , 3 . 6 7 3 9 4 0 3 9 7 4 4 2 0 5 9 4 e −16) en
cartesianas
5 >>>
392 A.9. Funciones

En el Algoritmo A.14, se crean dos funciones, la primera llamada CarteApolar(x,y), esta


recibe como parámetros dos coordenadas x, y y, las convierte a coordenadas polares, el
resultado se devuelve en una tupla. En Python, una tupla es un empaquetamiento no
dinámico, es decir, actúa como una lista, pero una vez creada no se puede hacer ningún
tipo de cambio (agregar, borrar, etc).

La segunda función se llama PolarACarte(r,t), y en este caso, el cálculo se realiza con


las funciones trigonométricas respectivas. Esta función también retorna una tupla con
las coordenadas en cartesianas. Para usar las tuplas, sólo necesitamos asignársela a una
lista de variables, por ejemplo: c=PolarACarte(3,pi), la variable c es una tupla, que se
comporta igual que una lista, sólo que no podemos editarla; también podemos asignarle
directamente una lista: [a,b]=PolarACarte(3,pi), en este caso, las variables de la lista
toma los valores de la tupla.

A.9.1. Listas con un número indeterminado de argumentos


En algunos casos, se requiere que una función reciba como parámetro un número
indeterminado de argumentos, algo que en otros lenguajes no es posible (por lo menos
no directamente). El siguiente ejemplo, muestra como implementar una función de esta
clase:

.:Algoritmo A.15

1 from random i m p o rt ∗
2 from math i m p o rt ∗
3
4 d e f promedio (∗ a rg ) :
5 n=f l o a t ( l e n ( a rg ) )
6 suma=0.0
7 f o r i i n a rg :
8 suma = suma + i
9 r e t u r n suma/n
10
11
12 p r i n t " El promedio de 1 , 2 , 3 , 4 , 5 e s " , promedio ( 1 , 2 , 3 , 4 , 5 )
13 p r i n t " El promedio de 2 . 3 , 5 . 6 , 7 . 1 e s " , promedio ( 2 . 3 , 5 . 6 , 7 . 1 )

El programa anterior produce la siguiente salida:

1 >>>
2 El promedio de 1 , 2 , 3 , 4 , 5 es 3.0
A. Introducción a Python 393

3 El promedio de 2 . 3 , 5 . 6 , 7 . 1 es 5.0
4 >>>

En el Algoritmo A.15, implementa la función promedio(*arg) para obtener el promedio o


media de un conjunto indefinido de datos. Esta función, tiene como parámetro una sola
variable llamada *arg, esta es un apuntador a una variable de tipo lista, es decir, arg, es
en realidad una lista indefinida. En la línea 5, vemos que con la función len obtenemos
el tamaño de la lista; luego en la variable suma de tipo real es inicializada en cero,
posteriormente con un ciclo for calculamos la suma de los elementos de la lista, para
finalmente, en la línea 9, retornar el cociente entre la suma y el total de datos.

A.10. Manejo de Diccionarios


Un diccionario o tabla Hash, es una lista de items de la forma {clave : valor}, la
clave permite hacer las búsquedas de los valores. El siguiente ejemplo, muestra la
implementación de un diccionario:

.:Algoritmo A.16

1 semana = { " l u n e s " : " 1 " , " m a rte s " : " 2 " , " m i e r c o l e s " : " 3 " , " j u e v e s " : " 4 " }
2
3 p r i n t semana [ " l u n e s " ]
4
5 semana [ " v i e r n e s "]= " 5 "
6
7 p r i n t semana
8
9 p r i n t semana . i t e m s ( )
10
11 p r i n t semana . has_key ( " m a rte s " )
12
13 p r i n t semana . g e t ( " domingo " , " E s te v a l o r no e s t a " )
14
15 p r i n t semana . k e y s ( )
16
17 p r i n t semana . v a l u e s ( )
18
19 p r i n t semana . pop ( " j u e v e s " )
20 p r i n t semana
21
22 semana . c l e a r ( )
23
24 p r i n t semana
394 A.10. Manejo de Diccionarios

El programa anterior produce la siguiente salida:

1 >>>
2 1
3 { ’ l u n e s ’ : ’ 1 ’ , ’ j u e v e s ’ : ’ 4 ’ , ’ m i e r c o l e s ’ : ’ 3 ’ , ’ m a rte s ’ : ’ 2 ’ , ’ v i e r n e s ’ : ’
5 ’}
4 [ ( ’ l u n e s ’ , ’ 1 ’ ) , ( ’ j u e v e s ’ , ’ 4 ’ ) , ( ’ m i e r c o l e s ’ , ’ 3 ’ ) , ( ’ m a rte s ’ , ’ 2 ’ ) , ( ’
viernes ’ , ’ 5 ’ ) ]
5 True
6 E s te v a l o r no e s t a
7 [ ’ l u n e s ’ , ’ j u e v e s ’ , ’ m i e r c o l e s ’ , ’ m a rte s ’ , ’ v i e r n e s ’ ]
8 [ ’1 ’ , ’4 ’ , ’3 ’ , ’2 ’ , ’5 ’ ]
9 4
10 { ’ l u n e s ’ : ’ 1 ’ , ’ m i e r c o l e s ’ : ’ 3 ’ , ’ m a rte s ’ : ’ 2 ’ , ’ v i e r n e s ’ : ’ 5 ’ }
11 None
12 {}
13 >>>

El Algoritmo A.16, muestra el diccionario semana, el cual tiene sólo cuatro días. Como
podemos observar, al día lunes le corresponde la clave 1, a la clave martes le corresponde
el valor 2, etc. Esto permite obtener valores en una búsqueda, mucho más rápido en una
lista normal.

En la línea 1, encontramos la implementación del diccionario, en él, vemos la clave con


su correspondiente valor, estas claves pueden ser de tipo numérico o de texto, los valores
pueden ser de cualquier tipo. En la línea 3 imprimimos el valor correspondiente a la clave
lunes, que en este caso es el número 1. En la línea 5, agregamos un nuevo valor, en este
caso, el día viernes como clave y 5 como valor.

En la línea 7 imprimimos todo el diccionario, esto muestra la lista de claves y valores.


En la línea 9 se muestra la lista de items, la cual es muy similar a cuando imprimimos el
diccionario, pero con el comando [Link](), podemos obtener la misma información
pero de una manera más clara. La función semana.has_key(“martes”), retorna True, si
esa clave existe en la lista de claves, de los contrario retorna False.

La función [Link]("domingo","Este valor no esta"), determina si una clave está en


la lista de claves, si no está, retorna el valor del segundo parámetro, que en nuestro
caso es “Este valor no esta”. En la línea 15, imprimimos la lista de claves con el comando
[Link](). De igual manera, con el comando [Link]() imprimimos los valores.
La función [Link]("jueves"), elimina el item “jueves”, es decir, el último elemento y
A. Introducción a Python 395

retorna el tamaño de la lista hasta antes de que se eliminara dicho item (ver línea 19 y
línea 9 de la salida). La función [Link](), elimina todos los item del diccionario,
dejando un diccionario vacío.

A.11. Programación orientada a objetos


La POO es una de las metodologías más usadas en los lenguajes de programación
modernos. Una de las aplicaciones más importantes implementadas en esta metodología,
son los sistemas operativos (windows, linux, etc) son construidos con lenguajes de
programación que soportan POO. Para entender esta metodología debemos entender los
siguientes conceptos:

Clase: Una clase es una abstracción de un esquema o de un concepto. Por ejemplo,


pensemos en la clase Mamífero; bajo este concepto, están los animales
correspondientes con las características principales, que es alimentar a sus
crías con leche: perros, gatos, caballos , etc. También podemos saber que
animales no no pertenecen, por ejemplo, las tortugas no están incluidas en
esta clase. Pensemos en una clase como un molde para hacer galletas, si le
hacemos cambios al molde, los cambios se verán reflejados en las galletas
(objetos)9 .

Objeto: Un objeto es una abstracción de una clase, es decir, un individuo en particular


de la clase (Según en ejemplo del profesor Gutierrez sería una galleta). En la
clase mamífero, podemos definir otras subclases, como la clase perros, de la
clase perros podemos obtener por ejemplo 2 objetos Perro1 y Perro2, ambos
son mamíferos, pero perro1 es más grande que perro2.

Atributo: Un atributo es una propiedad de cada objeto, por ejemplo el color, el tamaño,
la raza.

Método: Un método es una función o procedimiento que tiene cada objeto, por ejemplo
la función comer en los perros; si tuviéramos la clase Alumno, tendría un
procedimiento llamado calcularNota.

Herencia: Esta característica es una de las más importantes en POO, pues permite crear
subclases que “heredan” atributos y métodos a nuevas subclases, a las cuales
se les puede agregar nuevas características.

En Python una clase se crea con la palabra reservada class, con la siguiente forma:

class nombre_de_la_clase(Clase_Padre):
atributo 1
9 Este concepto de clase, se debe al profesor Julián Esteban Gutierrez de la Universidad del Quindío.
396 A.11. Programación orientada a objetos

atributo 2
atributo 3
.
.
.
Método 1
Método 2
Método 3
Método 4
.
.
.
El siguiente ejemplo muestra la implementación de dos clases, la clase punto y la clase
punto medio:

.:Algoritmo A.17

1 from math i m p o rt ∗
2
3 c l a s s Punto :
4 x =0.0
5 y =0.0
6
7 d e f __init__ ( s e l f , x0 , y0 ) :
8 s e l f . x=f l o a t ( x0 )
9 s e l f . y=f l o a t ( y0 )
10
11 d e f __str__ ( s e l f ) :
12 cadena=" ( "+ s t r ( s e l f . x ) + ’ , ’ + s t r ( s e l f . y ) + " ) "
13 r e t u r n cadena
14
15 def cuadrante ( s e l f ) :
16 i f s e l f . x>=0 and s e l f . y>=0:
17 return " I "
18 elif s e l f . x<=0 and s e l f . y>=0:
19 return " II "
20 elif s e l f . x<=0 and s e l f . y<=0:
21 return " I I I "
22 elif s e l f . x>=0 and s e l f . y<=0:
23 r e t u r n "IV"
24 else :
25 r e t u r n " In d e te rm i n a d o , r e v i s e l a s c o rd e n a d a s d e l punto "
26
27 d e f d i s t a n c i a ( s e l f , p2 ) :
28 r=s q r t ( ( p2 . x − s e l f . x ) ∗∗2 + ( p2 . y − s e l f . y ) ∗ ∗ 2 )
29 return r
30
31 d e f PuntoMedio ( s e l f , p2 ) :
A. Introducción a Python 397

32 x r =(p2 . x + s e l f . x ) / 2 . 0
33 y r =(p2 . y + s e l f . y ) / 2 . 0
34 r e t u r n ( xr , y r )
35
36
37
38 c l a s s PuntoMedio ( Punto ) :
39
40 d e f __init__ ( s e l f , p1 , p2 ) :
41 s e l f . x , s e l f . y = p1 . PuntoMedio ( p2 )
42
43
44
45 p1=Punto ( −3 , −6)
46 p2=Punto ( 5 , 7 )
47
48 p r i n t " El p ri m e r punto " , p1 , " Esta en e l c u a d r a n t e " , p1 . c u a d r a n t e ( )
49
50 p r i n t " El segundo punto " , p2 , " Esta en e l c u a d r a n t e " , p2 . c u a d r a n t e ( )
51
52 p r i n t "La d i s t a n c i a e n t r e p1 y p2 e s " , p1 . d i s t a n c i a ( p2 )
53
54 p3=PuntoMedio ( p1 , p2 )
55
56 p r i n t " El punto medio e s " , p3 , " que e s t a en e l c u a d r n a t e " , p3 .
cuadrante ()

El programa anterior produce la siguiente salida:

1 >>>
2 El p ri m e r punto ( − 3 . 0 , − 6 . 0 ) Esta en e l c u a d r a n t e III
3 El segundo punto (5.0 ,7.0) Esta en e l c u a d r a n t e I
4 La d i s t a n c i a e n t r e p1 y p2 e s 15.2643375225
5 El punto medio e s ( 1 . 0 , 0 . 5 ) que e s t a en e l c u a d r n a t e I
6 >>>

El Algoritmo A.17, crea dos clases, la primera clase se inicia en la línea 3, y en las líneas
4 y 5 se crean dos atributos, que son dos variables de tipo real x y y que corresponden a
las coordenadas.

En la línea 7 se crea el método def __init__(self, x0,y0), este método tiene 3 parámetros,
el primero es self, que hace referencia a la clase en sí misma, x0 y y0 son los parámetros de
construcción, es decir las coordenadas iniciales del punto. Este método es conocido como
el constructor, el cual se ejecuta en el momento en que se crea el objeto. Esta función lo
398 A.11. Programación orientada a objetos

único que hace es pasar los parámetros a las atributos x y y.

El método def __str__(self ): en la línea 11, nos permite implementar la impresión del
objeto, es decir, cuando imprimimos nuestro objeto con la instrucción print, en nuestro
caso, tomamos la variable cadena e imprimimos en ella las coordenadas del punto entre
paréntesis. cadena="("+ str(self.x) + ’,’ + str(self.y) + ")". Finalmente, se retorna dicha
variable cadena; esta variable es la que aparece cuando imprimimos un objeto de esta clase.

En la línea 15 implementamos el método cuadrante, el cual, simplemente retorna en qué


cuadrante está el punto según sus coordenadas. En la línea 27 se implementa el método
distancia, el cual recibe como parámetro otra variable de tipo Punto; cos las coordenadas
de este se calcula la distancia entre el punto original y el punto pasado como parámetro.

En la línea 31, se define el método PuntoMedio(self, p2), este recibe otro objeto del mismo
tipo, con el nuevo punto se calculan las coordenadas del punto medio, el cual se retorna
en una tupla.

La segunda clase, que está en la línea 38, implementa la clase PuntoMedio, la cual,
es heredada del la clase Punto, cuando declaramos la nueva clase escribimos class
PuntoMedio(Punto), el parámetro en el nombre de la clase es la clase padre. Al ser
PuntoMedio “hijo” de la clase Punto, hereda todas sus atributos y métodos, sólo que
en el método def __init__(self, p1,p2) , recibe como parámetros dos puntos, y con
estos, se calculan las nuevas coordenadas del punto medio. Finalmente, en las líneas 45
y 46 se crean dos objetos de tipo Punto: p1=Punto(-3,-6) y p2=Punto(5,7), con ellos
imprimimos sus coordenadas, sus cuadrantes y sobre todo, creamos el objeto p3, el cual
es de tipo PuntoMedio (línea 54) e imprimimos en que cuadrante esta.
“Mejor es el fin de un asunto que su comienzo; mejor es la
paciencia de espíritu que la altivez de espíritu.”
Eclesiastés 7: 8

Ejemplo de solución de un sistema de tamaño


B
100 × 100

En este apéndice, ofrecemos al lector la matriz de coeficientes A, el vector de términos


independientes b y el vector solución x del ejemplo 3.10. La matriz de coeficientes esta
introducida por filas, cada fila separada por espacio vacío, los vectores b y x son vectores
columna, pero aparecen como vectores fila para ahorrar espacio.

La matriz A
5.3337e+02, 1.2217e+00, 9.9866e+00, 7.4055e+00, 1.0348e+00, 9.4815e+00, 1.3381e+00, 5.9059e+00,
2.6787e+00, 6.5635e+00, 3.0136e+00, 2.0218e-01, 3.8869e+00, 4.6438e+00, 7.7213e+00, 9.5082e+00,
2.7991e-01, 3.2537e+00, 2.8685e+00, 3.0649e+00, 8.1308e+00, 2.2563e+00, 1.1933e+00, 1.2126e+00,
8.6279e+00, 7.4192e+00, 1.0246e+00, 2.6924e+00, 5.8971e-01, 3.7989e+00, 8.2521e+00, 7.3946e+00,
5.3726e+00, 6.7438e+00, 6.9977e+00, 1.1485e+00, 8.1436e+00, 5.6497e+00, 4.2210e+00, 7.9502e+00,
7.6378e+00, 9.5064e+00, 2.9510e-01, 7.8217e+00, 5.0417e+00, 7.1064e+00, 6.4018e+00, 2.7274e+00,
3.3122e+00, 4.0626e+00, 9.6308e+00, 5.9688e+00, 2.1467e+00, 4.2461e+00, 8.8840e+00, 8.5333e+00,
4.4624e+00, 5.4204e+00, 6.0144e+00, 1.3248e+00, 5.1277e+00, 8.9558e+00, 6.3782e+00, 9.0739e+00,
6.7431e+00, 9.1566e+00, 9.2799e+00, 3.7359e+00, 8.3458e+00, 4.3977e-01, 4.6581e+00, 2.1294e+00,
3.0848e-01, 2.4772e+00, 5.6401e-01, 3.4921e+00, 4.1684e+00, 9.4537e+00, 9.9839e+00, 9.8218e+00,
6.0538e+00, 7.3704e+00, 8.5746e+00, 7.9014e+00, 5.3993e+00, 6.0975e+00, 7.1798e+00, 4.3838e+00,
9.5566e+00, 5.7614e+00, 6.3829e+00, 6.5769e+00, 1.1392e+00, 4.6730e+00, 5.3197e-01, 4.6627e+00,
7.3951e+00, 5.5511e+00, 7.4967e+00, 4.2316e+00

399
400

2.2812e+00, 5.1172e+02, 4.2204e-01, 5.1602e+00, 2.4186e+00, 6.1726e+00, 5.7554e+00, 2.8209e-01,


9.1820e+00, 1.7570e+00, 8.6952e+00, 3.9724e+00, 4.1165e+00, 6.5713e-01, 1.3410e+00, 5.5416e+00,
8.4340e+00, 9.3417e+00, 1.5494e-02, 8.7549e-01, 1.2350e+00, 7.2419e+00, 4.8506e+00, 4.4245e+00,
4.1520e+00, 9.0087e+00, 3.7410e+00, 9.5088e+00, 2.3624e+00, 1.5883e+00, 6.6240e+00, 9.9186e+00,
2.9734e+00, 3.5425e+00, 2.4880e+00, 9.3590e+00, 6.5807e+00, 9.5643e+00, 9.7002e+00, 1.7721e+00,
2.4620e+00, 9.2268e+00, 1.0835e+00, 8.4597e+00, 1.9043e+00, 6.3704e+00, 2.3583e+00, 3.1274e+00,
8.3225e+00, 3.7045e-01, 5.4644e+00, 2.7397e+00, 7.7677e+00, 9.4483e+00, 7.6003e+00, 6.4174e+00,
7.9383e+00, 9.4016e+00, 9.3783e+00, 3.1227e+00, 5.5876e-01, 6.5039e+00, 9.6542e+00, 9.6039e+00,
4.7141e+00, 9.0924e+00, 5.4526e+00, 4.8317e+00, 4.2053e+00, 9.1284e+00, 1.4850e+00, 5.0752e+00,
5.4998e+00, 2.1371e+00, 7.0685e-01, 5.1342e+00, 4.0529e+00, 9.1590e+00, 6.5123e+00, 2.9386e+00,
4.7514e+00, 1.5416e+00, 3.2164e+00, 6.5995e+00, 3.1308e+00, 8.9206e+00, 2.3423e+00, 1.7074e+00,
9.7857e+00, 6.5638e-01, 3.6010e+00, 8.4139e+00, 5.0620e+00, 3.3331e+00, 2.0523e+00, 2.7744e+00,
2.8122e+00, 9.5859e+00, 7.1735e+00, 2.9282e+00

9.5769e+00, 7.2128e+00, 4.9896e+02, 7.6653e+00, 6.5749e+00, 3.4411e+00, 8.8238e-01, 6.0964e+00,


4.8719e+00, 4.3270e+00, 1.7575e+00, 7.5678e+00, 9.7579e+00, 2.1831e+00, 2.9464e+00, 9.3835e+00,
1.2920e+00, 2.5817e+00, 2.8049e+00, 2.7502e+00, 2.9831e+00, 9.6441e-01, 9.1165e+00, 1.8472e+00,
4.6226e+00, 2.0736e+00, 5.9553e+00, 1.3232e+00, 4.5413e+00, 7.4725e+00, 3.2586e-01, 1.0090e+00,
4.3284e+00, 1.0847e+00, 5.0063e+00, 3.4371e+00, 9.4561e+00, 7.4714e+00, 5.5539e+00, 5.3807e+00,
6.0410e+00, 2.1205e+00, 3.4918e+00, 1.8320e+00, 8.9327e+00, 1.7453e+00, 5.8792e+00, 2.0259e+00,
1.4390e+00, 5.5872e+00, 5.9865e-01, 8.0966e+00, 6.6086e+00, 5.7038e+00, 3.0655e-01, 2.6815e+00,
4.9396e+00, 7.1445e+00, 5.5478e+00, 4.0034e+00, 2.4531e+00, 2.6883e+00, 9.2719e+00, 2.0243e+00,
9.6008e+00, 8.3005e+00, 3.0340e+00, 7.7701e+00, 8.6591e+00, 9.3287e+00, 2.5666e+00, 4.4593e+00,
6.5877e+00, 8.6410e-02, 3.6663e+00, 9.7271e+00, 2.3013e+00, 8.9379e+00, 6.0328e+00, 8.4391e-02,
3.1351e+00, 8.9947e+00, 7.6939e+00, 4.0261e+00, 5.7324e+00, 8.6546e+00, 5.9146e+00, 8.5879e+00,
6.0013e+00, 4.1152e+00, 3.5652e+00, 3.6073e+00, 9.9718e+00, 6.3801e+00, 6.1788e+00, 8.9697e+00,
9.1899e+00, 3.4052e+00, 9.7784e+00, 2.6096e+00

5.7534e-01, 9.6445e+00, 3.1246e+00, 4.8998e+02, 8.1084e-01, 5.1897e+00, 5.6502e+00, 2.9529e+00,


6.1624e+00, 5.2635e-01, 3.4229e+00, 5.2913e+00, 5.6102e+00, 5.0682e+00, 1.2000e+00, 4.3838e+00,
4.1811e+00, 4.5353e+00, 4.6291e+00, 3.9664e+00, 7.0870e+00, 8.4201e+00, 6.6344e-01, 7.2250e+00,
1.5909e+00, 3.0782e+00, 4.0833e-01, 5.0178e+00, 5.9777e+00, 8.1274e+00, 2.7798e+00, 1.9524e+00,
1.8813e+00, 6.8189e+00, 2.7956e+00, 1.1516e+00, 5.4039e+00, 8.0117e+00, 4.3784e+00, 6.0801e+00,
3.0926e+00, 2.8062e+00, 9.0263e+00, 5.7814e+00, 6.8031e+00, 7.1374e+00, 6.9304e+00, 5.5984e+00,
9.6188e+00, 9.9098e-01, 5.0582e+00, 1.7378e-01, 4.3068e+00, 9.9022e+00, 6.2162e+00, 5.2507e+00,
8.5134e+00, 9.3775e+00, 9.8165e+00, 8.9320e+00, 2.1473e+00, 8.5394e+00, 4.8203e+00, 6.9557e+00,
4.1067e-02, 5.3694e+00, 1.0108e+00, 1.0151e+00, 4.5542e+00, 6.4317e+00, 1.7431e+00, 5.8709e+00,
5.7321e-01, 8.7662e-01, 1.0230e-01, 7.4032e+00, 1.0171e+00, 7.3524e+00, 7.4403e+00, 3.9016e+00,
9.6399e+00, 7.8143e+00, 5.7602e+00, 2.5920e+00, 4.5453e-01, 4.6462e+00, 7.4005e-03, 4.4677e+00,
7.9270e+00, 6.4483e+00, 2.9472e+00, 9.3045e+00, 1.4973e+00, 3.5184e+00, 2.2655e+00, 5.9432e+00,
5.7992e+00, 6.6062e+00, 8.5398e+00, 9.6729e+00

6.8581e+00, 5.9852e+00, 2.0119e-01, 5.6236e+00, 5.4898e+02, 4.3665e+00, 9.8965e+00, 8.1995e+00,


5.4442e+00, 3.9578e+00, 5.6321e+00, 8.6721e+00, 1.5425e+00, 1.8000e+00, 8.7805e+00, 8.3036e+00,
8.2606e+00, 6.6164e+00, 3.3407e+00, 7.4345e+00, 6.2776e+00, 1.0594e+00, 4.0032e+00, 6.9879e+00,
6.6184e+00, 4.3138e+00, 2.1989e+00, 6.9043e+00, 6.0995e+00, 2.2554e+00, 1.2430e+00, 5.2040e+00,
1.4637e+00, 4.2085e+00, 9.0982e+00, 7.6421e+00, 9.9402e+00, 4.4822e+00, 5.0384e+00, 3.5558e-01,
2.8216e+00, 5.8321e+00, 9.2742e+00, 9.3429e+00, 2.3687e+00, 5.6892e+00, 8.7150e+00, 2.5895e-01,
4.3945e-02, 2.8333e+00, 9.5621e+00, 4.9966e+00, 6.0497e+00, 2.2483e+00, 8.8678e+00, 7.2082e+00,
8.8459e+00, 5.7298e+00, 1.3580e-01, 6.4422e+00, 9.0404e+00, 6.1705e+00, 8.4164e+00, 7.1821e+00,
8.9434e+00, 9.6997e-01, 2.2112e+00, 5.8346e+00, 9.6499e+00, 6.3049e-01, 7.1217e-01, 6.7749e+00,
4.0279e+00, 2.6389e+00, 8.2101e+00, 4.2842e+00, 9.2960e+00, 6.8359e+00, 9.5265e+00, 8.9390e-01,
3.2131e+00, 6.2127e+00, 1.6825e-01, 3.2681e+00, 5.7223e+00, 1.1952e+00, 5.3173e+00, 3.8911e+00,
B. Ejemplo de solución de un sistema de tamaño 100 × 100 401

5.0483e+00, 5.8347e+00, 9.9785e+00, 4.1125e+00, 2.6711e+00, 9.5198e+00, 9.9381e+00, 5.1377e+00,


8.3197e+00, 7.4864e+00, 3.7723e+00, 6.5187e+00

4.5945e+00, 3.1362e+00, 2.1730e-02, 3.8938e+00, 1.9656e+00, 4.9066e+02, 3.3936e+00, 2.1160e+00,


2.3223e+00, 7.3477e+00, 8.9520e+00, 7.2908e+00, 3.1371e+00, 6.9167e+00, 9.1347e+00, 2.3444e+00,
2.1755e+00, 5.7864e+00, 8.0930e-01, 1.4291e+00, 6.7806e+00, 9.0099e-01, 1.3047e+00, 3.0996e+00,
4.0745e+00, 3.2811e+00, 8.2719e+00, 4.9095e+00, 7.7236e+00, 4.6529e+00, 2.3214e+00, 4.1200e+00,
7.2988e+00, 7.2836e+00, 7.8034e+00, 9.5716e+00, 9.4070e+00, 2.7252e+00, 5.9306e+00, 1.6272e+00,
9.6096e+00, 5.3751e+00, 8.5899e+00, 4.5639e+00, 6.8910e+00, 2.4706e+00, 7.8395e+00, 5.1151e-01,
3.0050e+00, 9.4710e+00, 1.1890e+00, 7.4245e+00, 1.5564e+00, 1.0810e+00, 2.6263e+00, 2.1663e+00,
1.2496e+00, 2.9055e+00, 3.0468e+00, 8.8571e+00, 8.1741e+00, 7.2779e+00, 2.5116e+00, 7.2209e+00,
3.0036e+00, 7.4206e-01, 7.0511e+00, 8.1893e+00, 7.4967e+00, 2.7093e+00, 8.0023e+00, 5.3958e+00,
3.5116e+00, 2.2889e+00, 9.5854e+00, 7.7359e-01, 6.8586e+00, 4.1911e+00, 4.9722e+00, 8.8310e+00,
5.9719e+00, 6.8169e+00, 1.9343e+00, 3.3474e+00, 4.4978e+00, 3.0173e+00, 8.2944e+00, 3.9089e+00,
1.5299e+00, 2.1729e+00, 8.9211e+00, 8.0655e+00, 9.8800e+00, 2.3379e+00, 4.9722e+00, 2.5338e+00,
7.8708e+00, 2.9815e+00, 6.0424e+00, 8.4391e+00

8.8091e+00, 7.5724e+00, 1.5724e+00, 1.2994e+00, 5.5023e+00, 8.5980e-01, 4.8557e+02, 9.0946e+00,


9.6155e+00, 2.5375e+00, 5.0266e+00, 8.9564e-01, 6.4837e+00, 4.8359e+00, 8.6711e+00, 7.8323e-01,
1.8240e+00, 1.1314e+00, 7.1322e+00, 1.9104e-01, 2.9044e+00, 1.1456e+00, 7.2803e+00, 4.4436e+00,
9.1205e+00, 9.4811e+00, 4.3623e+00, 2.9680e+00, 1.1487e+00, 4.8161e+00, 6.6112e+00, 5.3907e+00,
3.5922e+00, 7.8553e+00, 3.7538e-01, 9.4429e+00, 7.8793e+00, 7.2113e+00, 8.5344e+00, 1.6464e+00,
2.7106e+00, 4.7353e-01, 2.9025e+00, 9.3321e+00, 5.4487e+00, 6.3634e-01, 2.9248e+00, 3.2644e+00,
9.2346e+00, 1.0025e+00, 5.6554e+00, 2.0063e+00, 6.0088e+00, 6.5728e+00, 1.3952e+00, 2.0249e+00,
7.2169e+00, 1.7779e+00, 7.6559e+00, 8.6238e+00, 7.6426e+00, 7.7548e+00, 7.2694e+00, 9.3002e-01,
3.2556e-01, 1.6115e+00, 5.1878e+00, 1.0444e+00, 7.1275e+00, 8.6208e+00, 9.4166e+00, 2.4671e+00,
2.9648e+00, 9.1813e+00, 8.9357e+00, 1.5348e+00, 3.9233e+00, 3.9284e+00, 6.2547e+00, 9.1241e-01,
8.5215e+00, 8.4064e-01, 5.3350e+00, 8.6201e+00, 6.3066e+00, 9.2130e+00, 1.1478e+00, 9.9471e+00,
6.0661e+00, 7.7167e-01, 4.5058e+00, 5.6068e+00, 5.3749e+00, 8.1065e+00, 8.6310e+00, 4.4458e+00,
5.1113e+00, 1.5696e+00, 5.3650e+00, 9.6489e-01

6.5267e+00, 4.1768e+00, 1.8811e+00, 6.2037e+00, 4.7124e+00, 4.4833e+00, 5.5803e+00, 4.9577e+02,


9.8787e-01, 2.2280e+00, 4.2742e+00, 8.7134e+00, 7.2117e+00, 4.8066e+00, 9.6019e+00, 4.3564e+00,
8.0493e+00, 2.6287e+00, 6.4261e+00, 1.0084e-01, 1.5980e+00, 8.5523e+00, 9.9626e+00, 4.1886e+00,
8.6230e+00, 6.6391e-01, 9.8709e+00, 2.4654e-01, 4.1393e+00, 2.5707e+00, 1.2811e+00, 3.2089e+00,
4.6203e+00, 1.1262e+00, 1.0600e+00, 7.9641e+00, 8.2346e+00, 8.1160e+00, 5.8637e+00, 7.0043e+00,
6.6791e+00, 2.4208e+00, 7.9595e+00, 1.0455e+00, 8.3875e+00, 2.2294e+00, 9.2270e+00, 8.2899e-01,
2.7848e+00, 4.7940e+00, 6.0804e+00, 7.0362e+00, 9.4291e+00, 7.4369e+00, 3.8389e+00, 8.7978e+00,
5.0721e+00, 2.1651e-01, 3.2566e+00, 3.4265e+00, 3.3827e+00, 3.2460e+00, 1.8474e+00, 7.9529e+00,
5.2320e+00, 1.6265e+00, 3.0679e+00, 5.8041e+00, 5.5234e+00, 2.9877e+00, 9.0178e+00, 7.5245e+00,
6.8735e+00, 5.3270e+00, 4.0866e+00, 9.2405e+00, 5.9155e+00, 3.4916e-01, 5.8131e+00, 6.7858e-02,
5.6240e+00, 3.5736e+00, 8.8855e+00, 2.7062e+00, 5.3491e+00, 5.1309e+00, 7.2637e+00, 2.5681e+00,
3.0734e+00, 2.0753e+00, 7.9467e+00, 5.6318e+00, 2.1126e-01, 6.4892e+00, 8.1042e+00, 9.8016e+00,
3.7750e+00, 1.4866e+00, 5.4549e+00, 8.6273e+00

6.5732e+00, 5.2431e+00, 7.4749e+00, 1.1871e+00, 6.5805e+00, 1.5074e+00, 7.2794e+00, 2.1725e+00,


4.6700e+02, 5.8765e+00, 1.8585e+00, 4.5157e+00, 8.2199e+00, 3.0671e+00, 3.3431e+00, 3.3028e+00,
3.9618e+00, 1.7636e+00, 7.1457e+00, 7.9499e-01, 6.5506e+00, 2.1393e+00, 6.5527e+00, 2.8438e+00,
3.4829e+00, 9.6742e+00, 1.2584e+00, 3.6382e+00, 7.8971e+00, 9.4806e+00, 8.2975e+00, 4.6611e+00,
4.5047e-01, 5.2031e-01, 4.2265e+00, 1.7777e+00, 4.4695e+00, 4.7548e+00, 3.8322e+00, 4.2817e-01,
1.5844e+00, 8.1514e+00, 2.7059e+00, 6.4124e+00, 4.0718e+00, 1.4513e+00, 1.3618e-01, 5.6746e-01,
6.1835e+00, 5.9210e+00, 5.1218e+00, 1.4014e+00, 5.1676e+00, 9.6380e+00, 9.3756e+00, 5.6810e+00,
1.1071e-01, 4.4848e+00, 5.8719e+00, 5.6786e+00, 9.8356e+00, 6.1795e+00, 9.5360e+00, 1.0921e-01,
402

2.8322e+00, 4.4597e+00, 4.6789e+00, 9.3268e+00, 8.3875e+00, 1.8625e+00, 5.6511e+00, 7.0386e+00,


7.6915e+00, 4.8580e+00, 5.0879e-01, 1.0116e-03, 4.4816e+00, 4.3732e-01, 7.7321e+00, 3.6401e+00,
2.2349e+00, 8.8358e+00, 5.1131e+00, 5.0008e+00, 7.2027e+00, 3.9618e+00, 4.8721e-01, 6.8363e+00,
5.0444e+00, 7.3724e+00, 4.9006e+00, 6.0327e+00, 5.9888e+00, 3.9944e+00, 8.3281e+00, 3.5135e+00,
1.7505e+00, 9.7330e+00, 9.8043e+00, 1.8349e+00

6.9651e+00, 6.0779e+00, 2.2657e-01, 2.4015e-01, 1.8593e-01, 3.4078e+00, 2.9480e+00, 4.8214e+00,


5.8812e+00, 4.8298e+02, 9.7123e+00, 1.6074e+00, 3.3041e+00, 8.4576e+00, 7.6253e+00, 7.6272e+00,
4.5935e+00, 1.0022e+00, 2.7459e+00, 8.9840e+00, 8.6198e+00, 1.8893e+00, 7.4884e+00, 3.8173e+00,
2.1604e-01, 4.3434e+00, 5.6256e+00, 9.0879e+00, 7.2717e+00, 7.5592e+00, 4.4194e+00, 2.8244e-02,
5.2102e+00, 1.5859e+00, 7.5360e-01, 6.5784e+00, 3.4725e+00, 4.6372e+00, 9.5686e+00, 2.1865e+00,
1.9836e+00, 3.1588e+00, 5.4686e+00, 5.3680e+00, 9.8668e+00, 6.8041e-01, 5.1517e+00, 2.1791e+00,
3.8791e+00, 2.6363e+00, 1.8548e+00, 9.3439e+00, 8.5116e+00, 8.1103e+00, 7.3001e+00, 4.6809e+00,
3.8964e+00, 9.5981e-01, 8.9078e+00, 4.8370e+00, 1.3091e+00, 8.3310e+00, 5.3061e+00, 9.1400e+00,
7.0201e+00, 4.6289e+00, 5.6244e+00, 5.7852e+00, 3.7114e+00, 5.8955e+00, 9.5162e+00, 3.6766e+00,
2.7379e-01, 7.6182e+00, 2.8830e+00, 5.8492e+00, 7.1368e+00, 7.9167e+00, 4.9208e+00, 5.9490e-01,
2.9911e+00, 3.4353e+00, 9.0659e+00, 2.2103e+00, 5.5806e+00, 1.7365e+00, 4.4383e-01, 5.3766e+00,
3.6529e+00, 6.3992e+00, 9.2016e-01, 2.2005e-01, 8.8628e+00, 7.0419e+00, 7.4515e+00, 3.6741e+00,
9.5752e+00, 5.1740e+00, 5.3120e+00, 6.3674e+00

5.6024e+00, 7.7913e+00, 9.2821e+00, 5.4157e+00, 1.8336e+00, 7.7393e-01, 8.6008e+00, 2.5014e+00,


6.2454e+00, 3.1109e+00, 5.3413e+02, 7.5167e+00, 1.4886e-01, 3.0642e+00, 9.8372e+00, 3.1089e+00,
9.2894e-01, 3.6908e+00, 2.3506e-01, 2.1193e+00, 3.8583e+00, 3.2437e+00, 9.1198e+00, 4.3954e-01,
8.7763e+00, 4.1814e+00, 1.5758e+00, 3.4495e+00, 8.6572e+00, 9.9778e+00, 8.4395e+00, 2.4544e+00,
6.1908e+00, 7.9236e-01, 5.3421e+00, 7.4924e+00, 6.4370e+00, 2.5904e+00, 3.8418e+00, 8.4285e+00,
7.7952e+00, 1.0185e-01, 7.3157e+00, 3.9094e+00, 3.3143e+00, 1.0266e+00, 8.2975e+00, 6.3688e+00,
6.2044e-02, 7.9105e-01, 9.8464e+00, 3.8471e+00, 9.5930e+00, 5.9779e+00, 5.6206e+00, 5.5986e+00,
7.4314e+00, 8.8408e+00, 5.2375e+00, 7.1682e+00, 8.3346e+00, 2.1339e+00, 4.1127e+00, 7.6622e+00,
6.9208e+00, 1.4726e-01, 5.5432e+00, 4.8632e+00, 6.7034e+00, 1.6057e+00, 6.9457e+00, 2.7464e+00,
4.4550e+00, 7.6280e+00, 7.1783e-01, 7.4731e+00, 8.4559e+00, 4.9023e+00, 4.2478e+00, 3.7163e+00,
3.1579e+00, 5.9765e+00, 9.9139e+00, 3.9610e+00, 9.2996e+00, 6.1397e+00, 1.7718e+00, 8.8786e+00,
9.8523e+00, 5.1919e+00, 9.9055e+00, 2.1197e+00, 5.9906e+00, 7.1841e+00, 9.8906e+00, 5.9747e+00,
5.6570e+00, 1.8803e+00, 1.1402e-01, 7.9464e+00

2.8338e+00, 6.4759e+00, 2.3960e+00, 1.0999e+00, 8.3809e+00, 5.6778e-01, 1.2181e+00, 9.1003e+00,


1.9132e+00, 1.6402e+00, 5.8885e+00, 4.8809e+02, 5.8164e+00, 4.8162e+00, 6.4730e-02, 2.2115e+00,
9.1227e+00, 8.6778e+00, 8.9858e+00, 6.6826e+00, 2.7043e+00, 5.2262e+00, 5.1991e+00, 8.3690e+00,
7.3118e+00, 3.7106e+00, 8.3545e+00, 8.8507e+00, 9.0603e-01, 5.0951e+00, 5.1102e+00, 5.1283e-02,
7.4887e+00, 5.1853e+00, 3.7793e+00, 2.0179e+00, 1.8944e+00, 3.2584e+00, 6.0137e+00, 4.9948e+00,
1.8971e+00, 1.0021e+00, 6.4592e+00, 7.6126e+00, 8.8697e+00, 8.5444e-01, 3.7828e+00, 7.5753e+00,
6.4156e+00, 1.1759e+00, 1.9977e+00, 1.1266e+00, 9.7178e+00, 9.6084e+00, 7.6679e+00, 9.0236e-02,
2.4240e+00, 9.7305e+00, 2.4392e+00, 8.0781e+00, 9.5168e+00, 5.8951e-01, 4.3438e+00, 8.0006e+00,
2.8245e+00, 3.5848e+00, 4.1919e-01, 5.3672e+00, 9.3256e+00, 6.0633e+00, 7.5026e+00, 3.6017e+00,
7.8336e+00, 7.8506e+00, 6.4539e+00, 2.9496e+00, 6.2624e+00, 2.1062e+00, 1.8472e-01, 7.4623e+00,
7.3042e+00, 6.0948e+00, 8.4756e+00, 4.1571e+00, 5.0272e+00, 1.3205e+00, 7.6404e+00, 2.6460e-01,
4.9185e-01, 2.5016e+00, 8.3209e+00, 5.7064e-01, 1.4569e+00, 8.4954e+00, 4.1222e+00, 2.0445e+00,
7.0945e+00, 9.1887e+00, 1.2232e+00, 9.5288e-02

2.0392e+00, 3.8625e+00, 1.9001e+00, 8.8414e+00, 4.5998e+00, 8.5951e+00, 7.2552e+00, 7.1760e+00,


8.7838e+00, 3.5627e+00, 9.8945e+00, 2.9009e+00, 4.4465e+02, 5.7024e+00, 3.4929e+00, 6.4755e+00,
3.8929e+00, 9.2160e+00, 4.9713e-01, 5.9611e+00, 4.5758e+00, 7.1659e+00, 6.6902e+00, 2.8280e+00,
1.6226e+00, 5.2012e+00, 3.8183e+00, 4.9428e+00, 5.4791e+00, 6.0726e+00, 9.2289e-01, 4.3381e+00,
3.7715e-01, 6.9680e-01, 6.0496e+00, 2.3558e-01, 8.7956e+00, 6.7535e+00, 5.0105e-01, 6.7766e-01,
B. Ejemplo de solución de un sistema de tamaño 100 × 100 403

3.1264e+00, 7.8958e-01, 1.6384e+00, 2.8252e+00, 9.6548e+00, 4.0981e+00, 2.8882e+00, 2.4723e+00,


8.7525e+00, 4.3380e+00, 2.2944e-01, 3.6953e+00, 7.0618e+00, 9.9481e+00, 1.0082e+00, 4.2515e+00,
2.5426e+00, 3.0089e+00, 9.1954e+00, 7.2357e+00, 1.0021e+00, 3.5952e+00, 6.5461e-01, 1.0204e+00,
6.8129e+00, 3.3044e+00, 5.1361e+00, 5.9703e+00, 4.0615e+00, 2.4961e+00, 3.7642e+00, 5.7618e+00,
6.1211e-01, 7.1650e+00, 7.7897e-01, 8.2028e+00, 8.8427e+00, 9.9860e+00, 4.1744e+00, 1.8651e+00,
8.6013e+00, 9.2060e+00, 8.2573e+00, 2.7051e+00, 2.9007e+00, 9.6057e+00, 6.5343e+00, 2.9559e-01,
2.2658e+00, 1.2594e+00, 1.6013e+00, 1.6279e+00, 8.5476e+00, 1.7369e+00, 1.7357e+00, 5.2593e+00,
1.1087e+00, 6.6898e+00, 4.7890e-01, 4.2730e+00

4.6672e+00, 6.1430e+00, 8.6334e+00, 8.8146e+00, 7.0670e+00, 6.3351e+00, 2.6502e+00, 9.6906e+00,


4.4417e+00, 4.4458e+00, 4.1654e+00, 9.3815e+00, 9.9660e+00, 4.8646e+02, 5.5554e+00, 9.1434e+00,
9.8390e-01, 5.0396e+00, 6.4773e+00, 7.5813e-01, 3.4022e+00, 5.9653e+00, 1.9147e+00, 1.5480e+00,
5.5814e+00, 4.1231e+00, 4.9526e+00, 9.1190e+00, 9.1117e+00, 4.5216e+00, 2.0531e+00, 3.6078e+00,
4.8040e+00, 8.7940e+00, 6.1176e+00, 5.9653e+00, 2.7049e-02, 1.3044e+00, 9.2185e+00, 2.9762e+00,
8.5376e+00, 4.1377e+00, 3.2780e+00, 3.3112e+00, 8.9966e+00, 4.4905e+00, 7.9251e+00, 1.2464e+00,
3.8839e+00, 5.4578e+00, 3.7577e+00, 3.4939e+00, 9.1586e+00, 2.9919e+00, 6.4007e+00, 1.6002e+00,
8.9817e+00, 6.1770e+00, 8.3099e+00, 5.6406e+00, 1.0162e+00, 8.3947e+00, 1.2735e+00, 3.5642e+00,
1.0458e+00, 7.4886e+00, 4.6396e+00, 4.3562e+00, 7.9720e+00, 4.0383e+00, 7.7848e+00, 4.4766e+00,
3.0595e+00, 6.7648e+00, 9.9315e-01, 2.8347e+00, 2.4955e+00, 8.1515e-02, 5.6871e-01, 1.3270e+00,
5.7665e-02, 5.6353e+00, 6.6453e+00, 7.3685e-01, 3.5072e-01, 8.6205e+00, 6.0663e+00, 5.2699e+00,
5.5877e+00, 7.9667e+00, 3.6210e+00, 1.8978e+00, 2.4286e+00, 8.2405e+00, 2.1093e+00, 3.9045e+00,
4.5177e+00, 5.3844e+00, 6.2725e+00, 1.9523e+00
8.6665e-01, 2.5971e+00, 9.1072e+00, 5.4350e+00, 1.5333e+00, 3.3164e+00, 4.0133e+00, 7.8940e+00,
9.0185e+00, 9.9192e+00, 7.5724e+00, 5.2665e+00, 1.4791e+00, 1.1104e-01, 5.4137e+02, 6.1890e+00,
3.0572e+00, 3.2243e+00, 7.1623e-01, 9.3228e+00, 1.8087e+00, 4.6510e+00, 4.1674e+00, 9.7201e+00,
3.0114e+00, 2.3545e+00, 8.9739e+00, 9.6066e+00, 3.0973e+00, 6.8708e+00, 8.4991e+00, 6.5121e-01,
6.1683e+00, 2.1386e+00, 4.1641e+00, 9.0124e+00, 6.4361e+00, 4.8571e-02, 1.4190e+00, 2.9914e+00,
9.1047e+00, 4.6843e+00, 3.7562e+00, 2.1935e+00, 5.2563e+00, 5.4507e+00, 7.6663e+00, 5.8260e+00,
5.7719e+00, 3.7651e+00, 9.5895e+00, 5.4838e+00, 5.6526e+00, 6.5972e+00, 7.9086e+00, 7.7383e+00,
3.1691e+00, 6.6430e+00, 9.9375e-01, 1.1912e+00, 6.7480e+00, 7.0396e+00, 4.0711e+00, 8.8271e+00,
8.2904e+00, 7.4783e+00, 6.0234e+00, 1.5572e+00, 4.9991e+00, 8.2425e+00, 6.7421e+00, 7.1556e+00,
9.6033e+00, 7.9259e+00, 8.4007e+00, 4.4221e+00, 4.2772e+00, 3.3118e+00, 7.5752e+00, 6.9551e+00,
8.0026e+00, 7.6409e+00, 9.9638e+00, 5.9750e+00, 2.3311e+00, 4.7204e+00, 7.0229e+00, 6.8019e+00,
2.1405e+00, 4.7442e-01, 7.0398e+00, 4.3576e+00, 3.3222e+00, 1.9824e+00, 3.6056e+00, 6.9467e+00,
5.3201e+00, 4.5249e+00, 7.5910e-01, 7.1068e+00

2.0327e+00, 1.8165e+00, 1.2459e+00, 2.9733e+00, 1.0676e+00, 1.8114e+00, 4.4444e+00, 3.5316e-01,


3.3451e+00, 6.8451e+00, 1.4398e+00, 9.6657e+00, 1.4529e-01, 9.9390e+00, 4.6764e+00, 4.7058e+02,
3.3370e+00, 1.3394e+00, 7.2706e+00, 4.5581e+00, 4.4514e+00, 3.7561e+00, 5.1902e+00, 8.9225e+00,
7.3654e+00, 3.0777e+00, 4.3271e+00, 1.9849e-01, 7.6121e+00, 3.9602e-01, 6.6261e+00, 9.4357e+00,
5.2171e+00, 7.0323e+00, 6.2969e+00, 6.2410e+00, 7.0262e+00, 9.8206e+00, 5.6348e+00, 8.1598e+00,
1.9121e+00, 8.2387e+00, 8.0327e+00, 4.4355e+00, 7.0310e+00, 2.6469e+00, 2.1186e+00, 6.2378e+00,
6.1298e+00, 9.2505e-01, 8.9197e+00, 5.2601e+00, 1.2275e+00, 5.2004e+00, 3.9544e-01, 1.7495e+00,
2.2363e+00, 5.8067e+00, 1.0115e+00, 3.4099e+00, 1.0267e+00, 5.8332e+00, 9.1377e+00, 6.6292e+00,
3.1992e+00, 3.4701e+00, 8.4102e+00, 9.8140e+00, 7.5741e-02, 5.6699e+00, 6.4868e+00, 1.2396e-01,
5.4874e-01, 6.2604e+00, 2.3757e+00, 8.6214e+00, 9.8282e+00, 9.7651e+00, 6.1527e+00, 8.5033e+00,
1.0234e+00, 7.4606e+00, 1.4794e+00, 3.9502e+00, 9.2652e-01, 6.4643e+00, 6.8280e+00, 8.4855e+00,
7.7142e+00, 5.1606e+00, 1.1162e+00, 8.4010e+00, 8.2564e-01, 7.6267e+00, 1.7502e+00, 3.6260e+00,
7.8561e+00, 1.5851e+00, 3.0637e+00, 2.1764e+00

7.3021e+00, 7.4697e+00, 4.7106e+00, 9.9270e+00, 9.2403e+00, 7.9285e-01, 3.0597e-02, 3.4677e+00,


5.3235e+00, 5.0606e+00, 3.8551e+00, 4.4648e+00, 3.8236e+00, 2.7156e-01, 1.3238e+00, 9.9588e+00,
4.6682e+02, 9.9577e+00, 2.0605e+00, 3.1548e+00, 5.6493e+00, 1.2821e+00, 3.8783e+00, 7.4798e+00,
404

6.2092e+00, 4.3404e+00, 5.3433e+00, 1.9320e+00, 9.8153e-01, 8.5991e+00, 3.9969e+00, 5.1720e+00,


6.2764e+00, 9.0704e+00, 3.1253e+00, 3.2594e+00, 3.9547e+00, 9.1103e+00, 6.4632e+00, 5.5471e+00,
2.9512e+00, 2.0960e+00, 1.9366e+00, 8.6355e+00, 7.4216e+00, 1.2198e+00, 4.0606e+00, 1.7172e+00,
7.1784e+00, 6.0624e+00, 6.7023e+00, 1.3635e+00, 1.8867e+00, 8.7775e+00, 5.6928e+00, 7.7577e+00,
7.7996e-01, 1.8866e+00, 2.0253e+00, 5.7004e+00, 3.5842e+00, 4.5631e-01, 4.3428e+00, 1.3689e+00,
1.6129e+00, 3.0509e+00, 8.8258e+00, 4.6652e-01, 9.5904e+00, 8.9565e+00, 3.5146e+00, 7.4935e+00,
3.3049e+00, 1.6898e+00, 5.0536e+00, 3.7818e+00, 9.9118e-01, 5.8479e+00, 9.0436e-02, 5.1826e+00,
5.6498e+00, 5.3080e+00, 9.3502e+00, 2.9832e+00, 5.3844e+00, 8.9785e-01, 6.0925e+00, 5.6774e+00,
4.7923e-01, 3.3696e+00, 2.9951e-01, 3.4260e-02, 1.2681e+00, 6.8230e+00, 8.0534e+00, 6.6339e-01,
6.4331e+00, 7.6537e+00, 8.2992e+00, 6.1927e+00

7.4169e-02, 2.5970e+00, 9.6281e+00, 7.5301e+00, 6.2803e+00, 6.6570e+00, 4.7398e-01, 9.0280e+00,


4.6893e+00, 4.0743e+00, 5.3823e+00, 1.0886e+00, 4.7488e+00, 6.0899e+00, 4.6068e+00, 4.9117e+00,
2.2078e-01, 5.0334e+02, 4.8504e+00, 5.5748e+00, 3.0902e-01, 3.5907e+00, 1.9217e+00, 4.2798e+00,
8.0653e+00, 5.4554e+00, 9.7053e+00, 8.5919e+00, 5.9876e+00, 2.5467e+00, 8.8570e+00, 5.3105e+00,
6.2795e-02, 2.5840e+00, 4.9745e+00, 5.9996e+00, 5.2287e+00, 2.1857e+00, 3.9112e+00, 9.3042e+00,
9.2345e+00, 8.1687e-01, 7.3367e-01, 3.2780e+00, 9.1303e+00, 8.1725e+00, 9.5103e+00, 7.7775e-01,
2.5737e+00, 5.3134e+00, 7.9408e+00, 4.8104e+00, 8.2123e+00, 2.8224e+00, 7.1879e+00, 3.4419e+00,
5.7452e+00, 5.4126e-01, 6.3411e+00, 8.6685e+00, 8.0996e+00, 4.6978e+00, 4.6633e+00, 1.4071e+00,
7.6250e+00, 3.6975e+00, 3.7812e+00, 3.0457e+00, 5.5610e-01, 6.7115e+00, 1.4313e+00, 4.6592e+00,
6.6658e-03, 1.1602e+00, 4.8212e+00, 2.2247e+00, 5.7007e+00, 9.0515e+00, 9.0594e+00, 3.5774e+00,
8.8954e+00, 3.5806e+00, 7.5774e+00, 7.9602e-01, 5.2595e+00, 7.9913e+00, 3.9554e+00, 1.2971e-01,
9.0874e+00, 6.8186e+00, 5.9498e+00, 4.0796e+00, 4.4644e+00, 7.9337e+00, 1.8098e+00, 8.0480e+00,
2.7262e+00, 5.4087e+00, 2.3863e+00, 9.6307e+00

7.2862e+00, 9.6361e+00, 4.1377e+00, 7.3192e-01, 6.0390e+00, 1.4736e+00, 7.6177e+00, 7.2993e+00,


7.4633e+00, 4.6942e+00, 4.7228e+00, 9.4383e+00, 4.9728e+00, 6.6325e+00, 9.1983e+00, 9.9409e+00,
2.3462e+00, 4.7826e+00, 5.2373e+02, 5.4060e+00, 5.2935e+00, 2.2482e+00, 7.2096e+00, 4.0731e+00,
6.8566e+00, 9.5561e-01, 5.3032e-01, 1.0924e+00, 5.4245e+00, 1.1538e+00, 3.8690e+00, 2.6928e+00,
8.2667e+00, 8.3980e+00, 7.6456e+00, 6.3282e+00, 6.1497e-01, 6.1480e+00, 6.9761e+00, 2.2233e+00,
1.5236e+00, 1.8804e+00, 8.7148e+00, 1.7900e+00, 6.4363e+00, 8.9766e+00, 1.4118e+00, 3.4337e+00,
6.7202e+00, 9.9374e+00, 4.5750e+00, 9.2036e+00, 8.6551e+00, 8.7939e+00, 5.7733e+00, 7.5583e+00,
7.3588e+00, 9.0326e+00, 9.2962e+00, 2.4973e+00, 3.2274e+00, 8.7662e+00, 2.9561e+00, 9.4460e+00,
4.5918e+00, 9.4944e+00, 7.2973e+00, 8.1308e+00, 1.1541e+00, 3.0710e-01, 6.3021e+00, 7.9599e+00,
9.9810e+00, 8.6051e+00, 6.7723e+00, 5.5486e+00, 6.6272e-01, 2.8661e+00, 6.6560e+00, 4.7354e+00,
4.3232e+00, 7.2341e+00, 2.8980e-01, 7.1168e+00, 5.8421e+00, 6.2228e+00, 4.0808e+00, 3.4135e+00,
3.4775e+00, 8.1767e+00, 7.7693e-01, 3.0266e+00, 5.0785e-01, 6.8243e+00, 1.2226e-01, 3.7450e+00,
6.7339e+00, 1.2701e+00, 9.6659e-01, 4.0190e+00

8.8257e+00, 4.3917e-01, 3.4507e+00, 3.6603e+00, 4.8333e+00, 4.4267e+00, 2.0672e+00, 1.3487e+00,


9.4670e+00, 8.4073e+00, 7.0034e+00, 8.5709e+00, 9.4939e+00, 3.3152e+00, 1.6042e+00, 9.6924e+00,
7.7960e+00, 9.0227e+00, 1.8252e+00, 4.9010e+02, 5.9989e+00, 6.8518e+00, 5.8116e+00, 1.5360e+00,
1.6581e+00, 5.8201e+00, 1.8257e+00, 5.5492e+00, 9.7411e+00, 1.4887e+00, 9.1718e+00, 6.1255e+00,
8.2129e+00, 5.3404e+00, 3.7517e+00, 4.7295e-01, 6.7019e+00, 6.0412e+00, 1.7789e+00, 7.0336e+00,
6.8180e-01, 9.8390e+00, 7.8092e+00, 4.5085e+00, 4.1551e+00, 6.0193e+00, 5.1994e+00, 3.3011e+00,
5.6810e+00, 4.3920e+00, 3.3728e+00, 2.1336e+00, 9.7209e+00, 4.6884e-02, 7.4446e+00, 5.9232e+00,
1.2383e+00, 2.1129e+00, 6.2819e+00, 8.5654e+00, 6.8892e+00, 1.9764e+00, 2.3918e+00, 6.4006e+00,
1.2571e+00, 4.9204e-01, 3.5189e+00, 7.7153e+00, 1.7437e+00, 4.4059e+00, 4.9539e+00, 1.7307e+00,
9.7121e+00, 5.0985e+00, 5.3558e+00, 5.3477e+00, 1.6749e+00, 7.0431e+00, 3.5673e+00, 6.7138e+00,
5.7742e+00, 6.9713e+00, 3.9943e+00, 1.5934e+00, 4.7898e+00, 1.5272e-01, 1.7294e+00, 6.5004e+00,
3.9137e-02, 8.0279e+00, 1.4039e+00, 7.4956e+00, 1.1421e+00, 7.1642e+00, 8.5333e-01, 9.9121e+00,
9.0981e+00, 3.7012e+00, 5.8932e-01, 9.1460e+00
B. Ejemplo de solución de un sistema de tamaño 100 × 100 405

9.1778e+00, 7.9381e-01, 5.8883e+00, 8.1534e+00, 8.8368e+00, 4.2975e+00, 9.8068e-01, 5.7518e+00,


9.2502e+00, 9.7080e+00, 5.0553e+00, 3.8689e+00, 5.5203e+00, 1.3647e+00, 3.1949e+00, 8.1500e+00,
3.0031e+00, 3.0097e+00, 1.3011e+00, 1.7699e+00, 4.8263e+02, 9.3708e+00, 1.7755e+00, 9.7053e-01,
4.4398e+00, 4.6932e+00, 3.9324e+00, 7.1546e+00, 7.2980e+00, 8.9698e+00, 4.6371e+00, 5.2878e+00,
4.6341e+00, 9.2425e+00, 1.1842e+00, 6.7464e+00, 1.2419e+00, 8.5366e+00, 5.1650e+00, 4.3268e+00,
6.7194e+00, 1.7128e+00, 6.2216e+00, 9.3200e+00, 5.5941e-01, 3.8031e+00, 6.6732e+00, 5.1622e+00,
4.7161e+00, 1.7881e+00, 7.8495e+00, 3.9065e-01, 6.3604e+00, 2.5749e+00, 3.9353e-01, 1.5384e+00,
2.2128e-01, 2.6811e-01, 9.0675e+00, 1.8347e-01, 9.7436e+00, 8.3987e-01, 3.3253e+00, 2.6784e+00,
4.1534e+00, 3.7711e+00, 7.3515e+00, 6.1619e+00, 1.8913e+00, 5.6595e+00, 7.9337e+00, 6.8457e-01,
7.4188e+00, 3.0881e+00, 4.1091e+00, 7.0599e+00, 7.8261e+00, 3.5413e+00, 8.1740e+00, 4.6957e+00,
6.0818e+00, 7.7554e+00, 2.0976e+00, 2.3176e-01, 1.9406e+00, 1.8070e+00, 1.8802e+00, 6.0207e+00,
5.5473e+00, 5.1547e+00, 9.4974e+00, 2.5514e+00, 6.1356e+00, 3.8059e+00, 8.3338e+00, 4.0100e+00,
2.4277e-01, 6.0083e+00, 3.6256e+00, 7.7932e+00

8.2120e+00, 1.3011e+00, 3.6700e+00, 7.3302e+00, 3.0266e+00, 2.3324e+00, 8.9229e+00, 6.0391e+00,


1.2923e+00, 3.3975e+00, 6.6033e-01, 5.6693e-01, 9.2700e+00, 5.6074e+00, 9.7202e-01, 3.2939e+00,
8.6502e+00, 2.4648e-01, 7.6592e+00, 7.1964e-02, 5.6340e+00, 4.6707e+02, 7.2729e+00, 1.6686e-01,
6.3133e+00, 2.0273e+00, 1.7431e+00, 2.0431e+00, 7.5674e+00, 5.3867e+00, 2.4558e+00, 2.6737e-02,
1.9631e+00, 2.0312e+00, 1.5282e+00, 7.7182e+00, 1.5453e-02, 4.7227e+00, 9.8321e+00, 8.6216e+00,
1.0932e+00, 4.2725e+00, 2.9912e+00, 6.7366e+00, 2.9959e+00, 5.3096e+00, 3.5733e+00, 8.7836e+00,
1.5977e+00, 9.4040e+00, 8.7538e+00, 7.2253e+00, 1.5555e+00, 1.1395e+00, 9.5863e+00, 4.9599e+00,
3.9216e+00, 8.0711e+00, 4.5056e+00, 5.7851e-01, 8.4932e+00, 8.0011e+00, 4.8707e-01, 6.0712e+00,
3.5558e+00, 8.1484e+00, 3.7682e+00, 9.3938e-02, 5.5047e+00, 2.9414e+00, 8.8388e+00, 8.6699e+00,
4.2572e+00, 4.8481e+00, 3.3158e+00, 4.4832e+00, 5.4520e+00, 8.2118e+00, 9.7540e+00, 4.7950e+00,
8.0570e+00, 6.7324e+00, 3.9711e+00, 1.1810e+00, 7.5875e+00, 5.7636e+00, 7.3326e+00, 5.2226e+00,
9.2156e+00, 9.3773e+00, 4.3542e+00, 2.8885e+00, 2.0613e-01, 4.6273e+00, 7.7647e+00, 1.5696e+00,
2.2785e-01, 8.5811e+00, 2.3584e+00, 2.9574e+00

1.1730e+00, 4.8514e+00, 1.6373e+00, 7.8612e-01, 4.7900e-01, 4.3827e+00, 2.4731e+00, 5.4902e+00,


7.7996e+00, 6.3649e+00, 2.8013e+00, 7.2899e+00, 7.5979e+00, 1.5977e+00, 4.0533e+00, 3.0804e+00,
6.3568e+00, 8.9373e+00, 9.1364e+00, 6.9679e+00, 1.6431e+00, 3.0725e+00, 4.9135e+02, 3.4515e+00,
7.3099e+00, 1.3420e+00, 6.2508e+00, 9.2791e+00, 3.8913e+00, 5.4013e+00, 7.9647e+00, 5.9692e+00,
6.9070e+00, 6.8521e+00, 1.2858e+00, 9.5761e+00, 4.5395e+00, 3.4440e+00, 5.7795e+00, 6.7328e+00,
8.5988e+00, 8.8849e+00, 5.8411e+00, 1.0471e+00, 6.8696e+00, 1.9755e+00, 8.8922e+00, 2.3384e+00,
1.2153e+00, 8.7653e+00, 1.2472e+00, 6.1031e+00, 4.0221e+00, 9.8263e+00, 7.3479e+00, 5.7567e+00,
9.9816e+00, 4.0315e+00, 5.4926e-01, 2.7224e+00, 3.4828e+00, 1.1769e+00, 5.2788e+00, 5.9837e+00,
5.8652e+00, 2.9344e-01, 8.9059e+00, 7.3181e+00, 1.2713e+00, 7.8799e-01, 6.8616e+00, 4.3119e+00,
5.4787e+00, 3.5570e+00, 7.5226e+00, 1.5788e+00, 3.1363e+00, 2.8705e+00, 1.3907e+00, 5.0765e+00,
9.2436e+00, 1.2269e+00, 3.7382e+00, 6.7706e+00, 7.4135e+00, 4.8326e+00, 6.2604e+00, 3.4653e+00,
3.6999e+00, 6.6815e+00, 8.3279e+00, 6.3566e+00, 4.0681e+00, 8.8099e-01, 2.5517e+00, 7.8270e+00,
1.4497e+00, 8.4088e+00, 5.2813e+00, 9.7810e-01

6.3854e+00, 6.4617e+00, 1.9898e+00, 1.2669e+00, 1.9463e+00, 7.6833e+00, 8.9120e+00, 6.5296e+00,


3.0902e+00, 7.8280e+00, 3.2232e+00, 9.7302e+00, 6.0944e+00, 1.8955e+00, 9.7169e+00, 4.3401e+00,
2.2782e+00, 7.7221e+00, 7.9105e+00, 6.6916e+00, 5.3221e+00, 1.3904e+00, 6.7558e-01, 4.6810e+02,
1.8569e+00, 8.5167e+00, 7.1394e+00, 2.8550e+00, 1.4143e+00, 3.3545e+00, 8.8458e-01, 5.1898e+00,
8.1965e+00, 4.1538e+00, 9.2379e+00, 1.8352e+00, 9.1028e+00, 4.4859e+00, 1.1259e+00, 4.9957e+00,
4.2271e+00, 9.1690e+00, 9.1244e-01, 9.0500e-01, 1.8677e+00, 2.7903e+00, 9.3390e+00, 3.2105e+00,
4.2704e+00, 8.3561e-02, 1.9845e+00, 7.8026e+00, 7.9423e+00, 7.9936e+00, 3.6014e+00, 8.2414e+00,
1.8039e+00, 7.1612e+00, 9.3742e+00, 4.1256e+00, 4.1414e-01, 4.1650e+00, 2.2745e+00, 7.8881e+00,
7.5959e+00, 6.7414e+00, 3.4845e+00, 3.5700e+00, 3.2024e+00, 2.1612e+00, 9.5712e+00, 3.7045e+00,
3.4892e+00, 1.3305e+00, 3.6619e+00, 1.6765e+00, 3.2360e+00, 7.8456e+00, 7.4644e+00, 3.0869e+00,
4.2727e+00, 4.9621e+00, 9.9592e+00, 8.5968e+00, 4.9274e+00, 1.5299e+00, 2.4641e+00, 1.2456e+00,
406

2.7744e+00, 6.9712e+00, 1.4986e+00, 1.6456e+00, 6.9873e-01, 2.7199e+00, 2.5475e+00, 1.5728e+00,


8.5348e-01, 8.1823e+00, 7.5622e+00, 9.6051e-01

6.3181e+00, 6.4144e+00, 8.4558e-01, 2.1337e+00, 8.7632e+00, 9.5418e+00, 5.2185e+00, 3.7977e+00,


3.0502e+00, 2.0443e+00, 9.9871e-01, 9.4941e+00, 5.2531e+00, 5.6263e+00, 2.7512e+00, 5.9839e+00,
1.5758e+00, 3.5941e+00, 1.8586e+00, 2.3718e+00, 9.1854e+00, 8.0426e+00, 7.3082e+00, 3.5435e+00,
5.2254e+02, 7.1779e+00, 6.9717e-02, 3.6149e-01, 5.4848e+00, 2.7524e+00, 2.8346e+00, 1.6056e+00,
9.7458e+00, 6.3595e+00, 1.7473e+00, 7.4724e+00, 9.7163e+00, 1.8450e+00, 9.5838e+00, 6.6173e+00,
2.7756e+00, 5.8573e+00, 1.2202e+00, 8.1975e+00, 5.7258e+00, 7.3771e+00, 3.9674e+00, 1.5301e+00,
9.5728e+00, 5.4510e+00, 7.0381e+00, 3.5173e+00, 5.0809e+00, 5.2734e+00, 8.8564e+00, 5.9016e+00,
2.0387e+00, 4.1603e+00, 8.2535e+00, 9.7237e+00, 6.0695e+00, 5.4655e+00, 1.0754e+00, 3.7100e+00,
8.0757e+00, 4.7677e+00, 1.3024e+00, 3.4953e+00, 7.6418e+00, 5.5624e+00, 2.1167e+00, 5.6236e-01,
6.3978e-01, 4.1362e+00, 5.1500e+00, 1.7186e+00, 7.6885e+00, 8.4214e+00, 6.1810e+00, 7.7202e+00,
2.7515e+00, 4.0632e+00, 9.3441e+00, 9.8745e+00, 7.7949e+00, 9.6460e+00, 8.7287e+00, 3.2528e+00,
9.3195e+00, 1.3519e+00, 2.4191e+00, 8.1696e+00, 9.8132e+00, 7.2151e+00, 8.6076e-01, 5.1737e+00,
9.2753e+00, 5.6664e+00, 7.1532e+00, 4.9029e+00

8.7275e-01, 7.8261e+00, 1.3494e+00, 9.8148e+00, 9.4705e+00, 4.1719e+00, 4.4828e+00, 8.3495e+00,


8.9088e+00, 3.0128e+00, 5.4246e+00, 1.1052e+00, 7.1246e+00, 3.7660e+00, 1.8189e+00, 1.2353e+00,
3.1237e+00, 5.5869e-01, 3.0045e+00, 5.4237e+00, 4.0230e+00, 6.9273e+00, 5.4369e-01, 1.4611e+00,
3.5446e+00, 5.0805e+02, 8.2263e+00, 6.3053e+00, 2.3440e+00, 9.1973e+00, 1.4399e+00, 6.3631e+00,
6.9771e-01, 2.2241e+00, 5.3755e+00, 5.7119e+00, 5.1052e+00, 7.3851e+00, 8.6043e+00, 9.9268e-01,
4.8591e+00, 3.6166e+00, 8.8630e+00, 3.6522e+00, 7.9093e-01, 3.8621e+00, 2.9840e-01, 4.5004e+00,
8.1520e+00, 9.5290e+00, 2.5323e+00, 9.7607e+00, 4.0059e+00, 4.4328e+00, 6.8402e+00, 2.1879e+00,
9.1452e+00, 8.6439e+00, 9.7968e+00, 2.2116e+00, 5.3696e+00, 2.9095e-02, 2.0744e+00, 5.5627e+00,
9.1938e+00, 7.6075e+00, 9.4503e+00, 7.6413e+00, 2.4552e+00, 7.7862e+00, 8.8721e+00, 2.5741e+00,
6.1148e-01, 2.7883e+00, 2.2441e+00, 1.5327e+00, 2.9430e-01, 9.8261e+00, 7.9559e+00, 9.3405e+00,
9.1631e+00, 3.1022e+00, 5.1458e+00, 1.2215e-01, 4.7793e-01, 6.5810e-01, 6.6623e+00, 7.4774e+00,
1.7868e+00, 8.9474e+00, 1.4597e+00, 4.8366e+00, 7.9951e+00, 5.6427e+00, 8.3849e+00, 9.7607e+00,
6.3083e+00, 1.6243e+00, 7.9385e+00, 6.0224e+00

9.4422e+00, 4.6784e-01, 2.8451e+00, 3.2031e+00, 8.8228e+00, 2.5818e+00, 7.3493e-02, 4.0597e+00,


4.2921e+00, 5.7205e+00, 4.3566e+00, 7.3056e+00, 8.2039e+00, 7.6553e+00, 9.6194e+00, 2.3826e+00,
2.5601e+00, 2.7097e+00, 9.6398e+00, 8.6872e+00, 4.6295e+00, 2.9501e+00, 9.7403e+00, 4.8028e+00,
8.1286e+00, 2.1237e+00, 5.0409e+02, 5.9693e+00, 9.0584e+00, 4.8368e+00, 7.0061e+00, 9.0259e+00,
3.5571e+00, 8.3934e+00, 5.8952e+00, 6.5911e+00, 8.9558e+00, 2.9475e+00, 1.1989e-02, 6.0032e+00,
8.5677e+00, 1.0034e+00, 6.8654e+00, 8.2847e-01, 6.3936e+00, 3.2952e+00, 8.1197e+00, 5.9994e+00,
6.4910e+00, 6.5291e-01, 9.3667e+00, 7.7734e+00, 7.5516e-01, 2.4436e+00, 8.4867e-01, 9.9257e+00,
8.6361e+00, 1.0315e-01, 5.8584e+00, 1.4864e-01, 4.7846e+00, 9.1926e+00, 7.2460e+00, 5.4745e-01,
4.9912e+00, 7.6897e+00, 8.5097e+00, 6.0926e+00, 4.0055e+00, 1.5364e+00, 8.7980e+00, 1.2350e+00,
5.7838e+00, 6.2107e-01, 8.2864e+00, 5.9452e+00, 9.0893e+00, 3.5197e+00, 1.0360e-01, 9.0737e+00,
1.4555e-01, 1.6002e+00, 3.4485e+00, 8.4192e+00, 7.9639e+00, 3.3597e+00, 3.7272e+00, 3.5930e+00,
6.1795e+00, 2.4740e+00, 3.9801e+00, 7.8959e+00, 7.5859e+00, 2.6604e+00, 7.3842e-01, 7.2132e+00,
6.9226e+00, 4.2912e+00, 6.3063e-01, 3.6605e+00

3.8943e+00, 3.9837e+00, 7.6650e+00, 9.7712e+00, 7.1719e+00, 4.3706e+00, 2.4200e+00, 8.7467e+00,


2.1395e+00, 5.1511e+00, 7.0260e+00, 5.6148e+00, 3.7025e+00, 9.9805e-01, 9.3866e+00, 8.4004e+00,
9.0722e+00, 9.7963e+00, 1.0656e+00, 2.6075e+00, 2.2154e+00, 5.8318e+00, 3.9631e+00, 4.1788e+00,
7.2695e-01, 1.0501e+00, 9.2235e+00, 4.9091e+02, 1.2984e+00, 1.6039e+00, 9.2244e+00, 5.2542e+00,
5.6825e+00, 2.0900e+00, 3.1281e+00, 1.4851e+00, 5.2370e+00, 5.0499e+00, 3.4021e+00, 3.9672e+00,
7.0167e+00, 7.4781e+00, 4.1682e+00, 4.1166e-02, 6.7796e+00, 7.5201e+00, 9.7527e-01, 7.2261e+00,
3.9614e+00, 3.1044e+00, 6.5229e+00, 3.6119e+00, 1.3318e+00, 8.8496e+00, 4.5707e+00, 6.2240e+00,
3.8062e+00, 1.2501e+00, 1.4265e+00, 7.0256e+00, 5.8409e+00, 8.9936e+00, 5.4750e+00, 3.7278e-01,
B. Ejemplo de solución de un sistema de tamaño 100 × 100 407

3.6115e+00, 5.6282e+00, 8.4109e-01, 6.1397e+00, 8.1699e+00, 8.9998e+00, 4.9859e+00, 1.2961e+00,


5.9850e+00, 5.6439e+00, 1.9404e+00, 7.6133e+00, 1.2455e+00, 9.6797e+00, 1.4837e+00, 7.6652e-03,
5.4156e+00, 9.9614e-01, 5.6377e-01, 6.4421e+00, 4.4022e+00, 2.1032e+00, 5.6300e+00, 1.6303e+00,
4.9965e+00, 7.5314e+00, 8.9247e+00, 9.3822e+00, 3.0414e+00, 2.3300e+00, 6.5837e+00, 9.9855e+00,
3.9267e+00, 6.4075e-01, 9.5259e+00, 7.5974e+00

2.4062e+00, 5.4951e+00, 7.4071e+00, 7.1340e+00, 6.1225e+00, 2.0775e+00, 1.3490e+00, 2.2892e+00,


2.3454e+00, 6.6292e+00, 8.7803e+00, 6.2061e-01, 3.2968e+00, 7.0138e+00, 2.0263e+00, 5.2991e+00,
6.3716e+00, 1.6897e+00, 4.8491e+00, 1.8268e+00, 7.3798e+00, 3.8815e-01, 7.3908e-02, 7.1672e+00,
5.6539e+00, 2.0920e-01, 1.6467e+00, 5.8977e+00, 4.5895e+02, 9.8982e+00, 3.1858e-01, 9.5048e+00,
6.2955e+00, 3.8572e-01, 3.1075e-01, 6.5279e+00, 2.7708e+00, 2.3131e+00, 5.9440e+00, 2.0783e+00,
7.8408e+00, 5.5530e+00, 1.5226e+00, 1.2520e-01, 1.6803e+00, 7.4188e+00, 5.3339e+00, 5.9668e+00,
9.4499e+00, 9.4332e+00, 8.2548e+00, 2.7949e+00, 7.9499e+00, 4.4004e+00, 2.3226e+00, 8.4636e+00,
5.9033e+00, 3.4034e+00, 8.3832e+00, 5.6040e-01, 7.9907e+00, 7.4894e+00, 5.9679e+00, 4.6095e+00,
7.8006e+00, 3.8435e+00, 4.1722e+00, 3.9008e+00, 3.3422e+00, 4.6649e+00, 8.6516e+00, 1.7620e+00,
2.0128e-01, 5.1138e+00, 6.7414e-01, 3.5270e+00, 7.2099e+00, 5.6092e+00, 2.6551e+00, 8.3024e+00,
3.9270e+00, 9.4373e+00, 6.7270e+00, 5.3896e+00, 3.2775e+00, 4.2436e-02, 9.8676e+00, 3.7891e+00,
4.0861e+00, 5.6927e+00, 4.0013e+00, 2.7451e+00, 2.7277e+00, 8.3055e+00, 6.8984e+00, 8.8245e+00,
4.4178e+00, 1.5038e-01, 1.2919e+00, 7.3155e-01

8.2984e+00, 6.7492e+00, 6.0631e+00, 2.1010e+00, 1.3733e+00, 5.4096e+00, 4.3001e+00, 2.6936e-01,


8.0194e+00, 8.5390e+00, 5.5224e+00, 8.9825e+00, 6.1817e+00, 1.9423e+00, 1.0174e+00, 7.9122e+00,
1.6495e+00, 7.1324e-01, 4.1360e+00, 5.3266e+00, 2.3986e+00, 1.8580e+00, 1.1281e+00, 1.6263e-01,
8.9886e+00, 9.5445e+00, 2.3799e+00, 5.7335e+00, 2.7821e+00, 5.1925e+02, 2.6828e+00, 8.7576e+00,
7.6492e+00, 4.1641e+00, 5.9806e+00, 4.2126e+00, 2.4833e+00, 7.0505e-01, 7.3791e+00, 1.0243e+00,
4.1216e+00, 7.9480e+00, 4.9907e-01, 5.5553e+00, 9.0800e+00, 8.3912e+00, 2.4157e-01, 7.4429e+00,
8.5475e-01, 5.4087e+00, 9.3870e+00, 3.4667e+00, 1.7774e+00, 8.6214e+00, 3.5510e+00, 3.4266e+00,
6.3868e+00, 3.6863e+00, 8.0289e+00, 9.9885e+00, 9.8636e+00, 9.8262e+00, 3.4069e+00, 2.8415e+00,
6.4098e+00, 1.8794e+00, 6.0779e+00, 6.3269e+00, 1.8598e+00, 9.6930e+00, 7.3183e+00, 6.6010e+00,
7.3178e+00, 6.8087e+00, 4.7700e+00, 8.8442e+00, 9.9247e+00, 9.1311e+00, 9.5526e+00, 4.9357e+00,
7.4218e-01, 2.2768e+00, 3.8462e+00, 3.2170e+00, 1.1338e+00, 9.6093e+00, 7.8386e+00, 3.8237e+00,
7.8508e+00, 2.3102e+00, 5.6263e-01, 8.3172e+00, 7.2914e-01, 6.6323e+00, 9.8389e+00, 9.2861e-01,
9.3833e+00, 7.9152e+00, 1.7102e+00, 7.9386e+00

4.5260e+00, 5.3054e+00, 8.0946e+00, 2.0209e-01, 2.7764e+00, 6.6633e+00, 4.1229e+00, 9.9594e+00,


4.9204e+00, 8.8338e+00, 8.4210e-01, 4.9864e+00, 9.9167e+00, 3.3919e+00, 9.0173e+00, 5.6158e+00,
6.3332e+00, 9.6362e+00, 1.5106e-01, 3.9068e+00, 2.5563e+00, 2.3407e+00, 9.7332e+00, 6.1241e-01,
2.3453e+00, 1.0763e+00, 2.6469e+00, 3.8902e+00, 1.9360e+00, 2.3561e+00, 4.9481e+02, 3.6407e+00,
2.0896e+00, 5.0693e+00, 5.5911e+00, 2.0440e+00, 6.8531e+00, 1.0632e+00, 5.0670e+00, 4.5007e+00,
8.2864e+00, 9.2362e+00, 2.9318e+00, 7.4689e+00, 6.2424e+00, 7.5070e+00, 1.8478e+00, 3.3226e+00,
4.5315e+00, 7.5275e-01, 7.7291e+00, 5.1994e+00, 9.7968e+00, 5.1201e+00, 8.0610e+00, 1.5997e+00,
4.3240e+00, 8.7431e+00, 4.6159e+00, 8.6674e+00, 6.1578e+00, 3.0800e+00, 6.6988e+00, 8.7008e+00,
9.4933e+00, 6.0855e+00, 6.7391e+00, 6.5394e+00, 8.6903e+00, 2.1153e+00, 4.4056e+00, 3.2374e+00,
2.4561e+00, 7.4932e+00, 1.3999e+00, 3.4948e+00, 7.0261e+00, 7.8659e+00, 9.7345e+00, 9.9412e+00,
6.4208e+00, 7.1684e+00, 1.7605e+00, 3.3092e+00, 9.8094e+00, 5.8823e+00, 3.5005e+00, 4.2989e+00,
3.5415e+00, 2.0414e+00, 2.2145e+00, 2.3265e+00, 2.7644e+00, 8.8730e+00, 9.0698e-01, 8.4629e-01,
2.5333e+00, 6.7421e+00, 4.9000e-01, 5.6045e+00

4.6203e+00, 1.8347e+00, 4.8248e+00, 8.0795e+00, 5.4023e+00, 3.1358e+00, 5.5339e+00, 6.6586e+00,


3.9665e+00, 7.0364e+00, 6.7813e+00, 7.3626e-01, 6.9289e+00, 1.1007e+00, 6.2107e+00, 2.2120e+00,
8.4342e+00, 3.5496e+00, 7.8460e+00, 7.9185e+00, 9.8690e+00, 4.6695e+00, 3.0147e+00, 7.8327e+00,
7.1820e+00, 7.0899e+00, 8.4420e+00, 8.0691e+00, 9.3739e+00, 2.9740e+00, 1.3724e+00, 5.3285e+02,
8.1730e-01, 9.2999e+00, 1.1473e-01, 1.6241e+00, 1.6709e+00, 7.0056e+00, 8.7578e+00, 9.5403e+00,
408

7.6247e+00, 2.5675e+00, 4.1901e+00, 4.4271e+00, 8.4780e+00, 1.8335e+00, 1.5413e+00, 7.2755e+00,


3.0305e+00, 1.3848e+00, 6.5415e-01, 9.9118e+00, 7.7508e+00, 9.0849e+00, 7.0148e+00, 8.2403e+00,
5.6770e+00, 7.5823e-01, 6.0912e+00, 3.2078e+00, 4.5158e+00, 7.1436e+00, 2.7171e+00, 7.4972e+00,
7.6635e+00, 3.4657e+00, 6.8733e+00, 8.1529e+00, 7.6073e+00, 6.2870e+00, 3.7742e+00, 6.0869e+00,
9.0097e+00, 5.8756e+00, 2.3571e+00, 7.6895e+00, 2.7971e+00, 7.3493e+00, 3.0196e+00, 2.6143e+00,
1.2609e+00, 7.2458e+00, 1.5805e+00, 3.4403e+00, 7.4836e-01, 2.0097e-01, 6.4420e+00, 7.1591e+00,
3.5762e+00, 2.7354e+00, 9.3768e+00, 9.3963e+00, 8.0278e+00, 7.2680e+00, 5.2876e-02, 8.2044e+00,
6.8471e+00, 3.6329e+00, 5.4068e+00, 6.5353e+00

4.8964e+00, 8.9800e+00, 1.7258e+00, 4.3963e-01, 7.8924e+00, 6.3988e+00, 6.8102e+00, 6.2211e+00,


4.9525e+00, 3.7459e-01, 1.9778e+00, 5.0001e+00, 2.4116e-01, 7.5492e+00, 2.6258e+00, 3.8780e+00,
1.5918e+00, 5.9211e+00, 7.8115e+00, 6.2792e+00, 7.2798e+00, 6.8880e+00, 6.9483e-01, 1.3633e+00,
9.4320e+00, 9.7631e+00, 3.4751e+00, 2.1447e+00, 8.4687e+00, 3.3614e+00, 1.6029e+00, 4.3808e+00,
4.9023e+02, 2.8054e-01, 8.6299e+00, 9.8319e+00, 3.5151e+00, 6.9998e+00, 8.0843e+00, 6.5050e-01,
8.5022e+00, 6.6687e+00, 4.8893e+00, 1.3639e-01, 1.8231e+00, 7.8990e+00, 5.1412e+00, 2.5029e+00,
7.1112e+00, 4.3269e+00, 8.9005e+00, 1.1655e+00, 3.2288e+00, 1.0795e+00, 6.3488e+00, 8.9423e+00,
3.2347e+00, 2.9809e+00, 2.9263e+00, 4.0895e+00, 2.8735e+00, 2.4223e+00, 1.8939e+00, 2.8541e+00,
6.5768e+00, 4.8758e+00, 3.7373e+00, 3.2513e+00, 7.9082e+00, 6.8234e+00, 9.1440e+00, 8.3715e+00,
3.3759e+00, 2.6438e+00, 4.6095e+00, 9.4689e+00, 4.8884e+00, 6.3608e+00, 2.3615e+00, 8.7579e+00,
2.1606e+00, 8.2491e+00, 4.8674e+00, 4.7130e+00, 8.0012e-01, 2.2477e+00, 2.9853e+00, 9.2754e+00,
9.4689e+00, 1.0966e+00, 7.4940e+00, 8.5802e+00, 3.7615e+00, 9.0303e+00, 6.3885e+00, 7.8515e+00,
1.3737e+00, 5.0593e+00, 3.3166e+00, 2.5019e+00

8.8189e+00, 6.5233e+00, 7.2564e-01, 7.2764e+00, 2.7125e+00, 4.1060e+00, 6.7133e+00, 9.2832e+00,


4.5715e+00, 8.5290e+00, 8.6334e+00, 9.2862e-01, 5.7186e+00, 6.5324e+00, 2.8925e+00, 2.1240e+00,
9.5715e+00, 7.8405e+00, 1.6843e+00, 3.0374e+00, 6.3945e+00, 5.5800e-01, 8.0954e+00, 4.1341e+00,
1.3082e+00, 3.5564e+00, 8.2275e+00, 2.1756e+00, 3.0735e+00, 1.3354e+00, 7.1302e+00, 4.9105e+00,
7.9247e+00, 4.7882e+02, 5.3506e+00, 2.7088e-01, 6.7515e-01, 3.4631e+00, 7.1858e+00, 7.4434e+00,
6.8865e+00, 6.9291e+00, 5.7118e+00, 3.8151e-01, 2.2438e+00, 8.2226e+00, 3.6985e+00, 5.3489e+00,
1.5350e+00, 4.1599e+00, 7.3089e+00, 3.0062e+00, 9.3809e-01, 2.8388e+00, 3.7436e-01, 8.8135e+00,
6.4456e-01, 7.4257e+00, 5.4046e+00, 6.8155e+00, 7.4497e+00, 2.8402e+00, 8.2889e+00, 2.9178e+00,
1.0921e+00, 3.5888e+00, 1.5027e-01, 3.2088e+00, 9.9381e+00, 4.2027e-01, 7.2201e+00, 7.1310e+00,
1.6659e+00, 9.3849e+00, 5.8627e-01, 8.3438e+00, 2.8800e+00, 2.9483e+00, 1.4797e+00, 5.0863e+00,
6.9678e-01, 5.2650e+00, 4.1348e-01, 5.5733e+00, 9.8346e+00, 5.9715e-01, 6.6087e+00, 3.0519e+00,
1.0693e+00, 9.2765e+00, 6.8888e+00, 3.2397e+00, 1.4739e+00, 3.3232e+00, 9.6549e+00, 6.9514e+00,
1.2826e+00, 7.9178e+00, 3.3854e+00, 6.1375e+00

8.4473e+00, 3.4592e+00, 2.6109e+00, 4.9624e+00, 3.7537e+00, 9.0523e+00, 5.7610e+00, 9.7431e+00,


9.1607e+00, 5.9458e+00, 9.9872e+00, 1.8165e+00, 4.5966e+00, 6.7783e+00, 7.2414e+00, 1.5880e+00,
8.8167e+00, 5.4607e+00, 3.7367e+00, 2.0384e+00, 3.0089e+00, 5.7979e+00, 4.2659e+00, 3.3464e+00,
5.9788e+00, 1.6540e+00, 8.2063e+00, 8.8045e+00, 7.5123e+00, 7.4605e+00, 5.5517e+00, 2.9329e+00,
4.0742e+00, 7.0398e+00, 4.9089e+02, 9.6856e+00, 1.6462e+00, 7.6754e+00, 4.3421e-01, 7.2425e+00,
8.4319e+00, 7.5747e+00, 4.8894e+00, 2.4199e+00, 6.8610e-01, 3.5113e+00, 4.6048e+00, 2.6126e+00,
3.3234e+00, 6.1682e+00, 1.4999e+00, 6.9504e+00, 2.2647e+00, 9.6681e+00, 2.8475e+00, 5.5408e+00,
1.1766e+00, 1.1192e+00, 7.1176e+00, 7.2418e-01, 7.9157e+00, 3.7727e+00, 6.9253e-01, 2.8168e+00,
5.0283e+00, 3.4272e+00, 3.2131e+00, 9.2857e+00, 7.9355e+00, 8.0489e+00, 2.2121e+00, 4.1144e+00,
5.3225e+00, 7.9462e+00, 5.1748e+00, 8.4145e+00, 1.6778e+00, 3.3157e+00, 9.5322e+00, 2.4361e+00,
7.9076e-01, 9.3699e+00, 9.9846e+00, 9.3398e+00, 4.1927e+00, 7.5730e+00, 2.6706e+00, 1.3246e+00,
2.6137e+00, 2.2554e+00, 8.4539e+00, 2.6563e+00, 4.5358e+00, 5.1932e+00, 3.4418e+00, 6.0899e-01,
5.5344e+00, 2.2793e+00, 7.1413e-01, 1.9708e+00

5.9599e+00, 2.1350e+00, 4.7540e+00, 8.3321e+00, 2.1069e+00, 2.1423e+00, 6.8221e-01, 9.3985e+00,


7.5506e+00, 9.6481e+00, 6.4993e+00, 1.8093e+00, 3.7988e+00, 8.1359e+00, 6.8602e+00, 1.9352e+00,
B. Ejemplo de solución de un sistema de tamaño 100 × 100 409

5.4177e+00, 8.8475e+00, 3.1399e+00, 6.7647e+00, 5.3501e+00, 9.6127e+00, 5.1576e+00, 1.8010e+00,


7.6594e+00, 2.3966e+00, 8.3916e+00, 5.2828e+00, 2.9354e+00, 2.4015e-01, 3.2951e+00, 2.3641e+00,
4.7553e+00, 6.7716e+00, 7.0027e+00, 4.8014e+02, 4.8900e+00, 8.6915e+00, 9.3345e+00, 7.0634e+00,
7.4645e-01, 9.3959e+00, 5.2539e+00, 3.6048e+00, 3.5511e+00, 2.2348e+00, 4.1671e+00, 2.5744e+00,
3.0741e+00, 7.6053e-01, 3.0739e+00, 7.5421e+00, 6.8676e+00, 6.3607e+00, 1.1774e-01, 9.4820e+00,
2.4744e-01, 3.8432e-01, 4.3668e+00, 7.3742e+00, 4.1783e+00, 9.3722e+00, 7.4341e+00, 5.8001e+00,
8.3146e+00, 1.6074e-01, 2.1817e+00, 3.3961e+00, 6.5018e-01, 3.0762e+00, 6.3200e+00, 3.1606e+00,
5.5040e+00, 3.5199e+00, 2.9255e+00, 4.9679e+00, 8.8480e-01, 1.0099e+00, 2.8998e+00, 9.8335e+00,
9.9660e+00, 4.9499e+00, 3.2550e+00, 6.4577e+00, 6.8783e+00, 6.5963e+00, 9.0906e+00, 2.4963e+00,
2.2577e+00, 3.8362e+00, 7.1425e+00, 1.6030e-01, 6.7890e+00, 2.0071e-01, 2.0745e+00, 2.3811e+00,
5.3802e+00, 6.0070e+00, 2.2217e+00, 9.8339e+00

8.2013e+00, 7.2301e-01, 5.9904e+00, 9.6411e+00, 3.8272e+00, 6.4353e+00, 7.4867e+00, 9.5788e+00,


6.7740e+00, 5.4292e+00, 6.2044e+00, 1.1595e-01, 5.3740e+00, 5.3141e+00, 2.1318e+00, 9.3697e+00,
2.7583e+00, 9.9892e+00, 2.8083e+00, 4.9892e+00, 8.8954e+00, 1.7880e+00, 5.6735e+00, 1.4126e+00,
3.6226e+00, 5.5406e+00, 7.5449e+00, 5.2777e+00, 5.4193e+00, 3.8381e+00, 5.0701e+00, 9.8953e+00,
3.4233e+00, 6.0313e+00, 7.4392e-01, 1.4756e+00, 5.6844e+02, 5.3157e+00, 7.0790e+00, 7.1474e+00,
9.7565e-01, 8.7021e+00, 9.6295e+00, 4.0580e-01, 2.9812e+00, 7.1019e+00, 2.5519e-01, 6.8539e+00,
5.6001e-01, 3.6988e+00, 6.1739e+00, 4.9069e+00, 6.5468e+00, 2.5815e+00, 1.7215e+00, 5.5173e+00,
5.1001e+00, 6.0385e+00, 9.0272e+00, 9.1581e+00, 4.7422e+00, 7.1612e+00, 7.0186e+00, 4.5826e+00,
9.3584e+00, 1.6727e+00, 8.2085e+00, 4.1231e+00, 4.6740e+00, 6.7724e+00, 2.3025e+00, 4.5081e+00,
8.7456e+00, 9.0665e+00, 2.2794e+00, 9.5121e+00, 7.3608e-01, 4.4013e+00, 4.7679e+00, 5.3428e+00,
4.6192e+00, 9.2327e+00, 8.5975e+00, 7.1691e+00, 7.2620e+00, 7.0089e+00, 5.9462e+00, 8.5389e+00,
4.3976e+00, 8.5537e+00, 6.6669e+00, 6.4336e+00, 6.5532e+00, 5.6109e+00, 9.0151e+00, 8.9131e+00,
9.0151e+00, 7.9179e+00, 9.7357e+00, 1.0771e+00

8.4820e+00, 7.0271e+00, 6.6995e+00, 6.0271e+00, 9.3569e+00, 6.4841e+00, 7.1913e+00, 6.4861e+00,


8.0513e+00, 6.7762e+00, 7.6990e+00, 5.5122e+00, 8.3211e+00, 1.9689e+00, 5.0033e+00, 7.8843e+00,
1.7485e+00, 3.6722e+00, 9.5703e+00, 6.6407e+00, 1.9786e+00, 5.8026e+00, 6.6684e+00, 5.8848e-01,
7.1860e+00, 7.1560e+00, 4.6940e+00, 5.3253e+00, 6.9296e+00, 6.0336e+00, 1.5957e-01, 1.9033e+00,
2.0171e-01, 5.2268e+00, 2.0555e+00, 5.1513e+00, 3.8707e+00, 4.9317e+02, 6.3027e+00, 9.3836e+00,
5.9279e+00, 1.3541e+00, 4.8275e+00, 3.4622e+00, 7.5705e+00, 9.0195e+00, 3.4407e-01, 5.1361e+00,
3.6846e+00, 3.2190e-01, 2.7903e+00, 3.1608e+00, 1.5709e+00, 3.5098e+00, 8.3360e+00, 7.8823e+00,
9.9910e+00, 2.9417e+00, 5.5609e+00, 5.1393e-01, 8.3249e+00, 8.5519e+00, 8.9012e+00, 2.0358e+00,
4.3228e+00, 3.4972e+00, 1.2929e-01, 1.5872e-01, 5.6164e-01, 9.5916e+00, 1.1073e+00, 7.6747e+00,
3.8796e+00, 6.5379e+00, 3.1492e+00, 9.8515e+00, 5.6708e+00, 5.0577e+00, 8.0719e-02, 3.2846e+00,
7.6999e+00, 9.4539e+00, 1.2918e+00, 1.3249e+00, 6.2576e+00, 1.3599e-01, 7.2211e+00, 7.2984e+00,
1.9404e-01, 6.9968e+00, 2.4477e+00, 4.7570e-01, 7.5861e-01, 2.4842e+00, 4.3131e-01, 8.8080e+00,
2.1935e+00, 1.9027e+00, 8.6422e+00, 8.2405e+00

8.6100e+00, 9.8064e+00, 7.2426e+00, 1.4054e+00, 9.0692e+00, 3.7032e+00, 3.7402e+00, 7.7728e+00,


1.8207e+00, 8.8644e+00, 1.5340e+00, 6.3369e+00, 9.5994e-01, 2.8731e+00, 4.7203e+00, 8.9668e-01,
2.7861e-01, 4.0357e+00, 3.8562e+00, 5.9089e+00, 1.8289e+00, 2.0683e+00, 4.8057e+00, 9.4433e+00,
1.2334e+00, 1.1256e+00, 2.8952e+00, 2.4204e-01, 3.7423e+00, 3.1764e+00, 9.8678e+00, 1.4914e+00,
2.5816e+00, 8.8354e+00, 5.5916e+00, 9.2940e+00, 3.4576e-01, 5.1378e+00, 4.7182e+02, 8.5753e-01,
2.5331e+00, 7.8725e+00, 2.6617e-01, 6.4127e+00, 1.7470e-01, 7.4159e+00, 4.0597e-01, 2.5548e+00,
6.7715e+00, 4.6373e+00, 6.6470e+00, 3.1497e+00, 5.8996e+00, 1.2471e+00, 3.8933e+00, 4.7545e+00,
4.5483e+00, 2.6081e-01, 4.7142e+00, 9.7398e+00, 6.6440e+00, 6.9894e+00, 4.5233e+00, 2.3560e-01,
5.0092e+00, 2.8644e+00, 4.8587e+00, 6.3166e+00, 2.4516e+00, 8.1675e-01, 2.8487e+00, 9.0373e+00,
8.1281e+00, 9.5825e+00, 1.6684e+00, 6.8898e+00, 7.3755e+00, 6.7519e+00, 4.3321e+00, 2.7725e+00,
9.0086e+00, 8.6262e+00, 6.1443e+00, 2.1290e+00, 9.2255e+00, 1.0134e+00, 2.7257e+00, 4.7636e+00,
1.3692e+00, 5.1333e+00, 4.5975e+00, 7.4155e+00, 8.7874e+00, 4.6121e+00, 7.3633e+00, 4.1015e+00,
7.9865e+00, 2.2917e+00, 8.5281e-01, 9.8431e+00
410

9.6038e+00, 4.8166e+00, 6.6128e+00, 1.0966e+00, 8.4894e+00, 2.1215e+00, 9.7839e+00, 7.9530e+00,


6.6165e+00, 6.3575e+00, 6.1661e-01, 5.7234e+00, 6.1755e+00, 8.4870e+00, 8.7905e+00, 8.3566e+00,
2.1525e+00, 3.3858e+00, 2.3542e+00, 2.2124e+00, 9.0565e+00, 2.4833e+00, 6.7660e+00, 2.6900e+00,
2.4516e+00, 4.3818e-01, 4.1276e+00, 2.4286e+00, 8.6680e-01, 1.5498e+00, 5.0555e+00, 1.4259e+00,
3.1577e+00, 3.8547e+00, 5.9185e+00, 4.1892e-01, 6.0743e+00, 8.6983e+00, 6.5126e+00, 4.9759e+02,
1.0188e+00, 7.9581e+00, 7.5692e+00, 3.8537e-01, 6.7110e+00, 4.1890e+00, 8.7520e+00, 4.9125e+00,
1.7510e+00, 4.1190e+00, 6.1278e-01, 8.1172e+00, 2.2103e+00, 7.8687e+00, 5.4986e+00, 6.9155e+00,
6.3355e+00, 2.4864e+00, 7.6198e+00, 9.7245e+00, 5.9008e+00, 1.4712e-01, 8.0116e+00, 4.1686e+00,
8.9484e+00, 7.0506e+00, 4.7398e-01, 2.0536e+00, 6.5051e-01, 8.2920e+00, 4.6222e+00, 2.7245e+00,
4.6621e+00, 8.1644e+00, 5.7796e+00, 1.2047e+00, 4.7832e+00, 1.3782e+00, 6.2362e+00, 5.3080e+00,
4.2387e+00, 7.5898e+00, 7.2396e-01, 9.5858e+00, 7.3160e+00, 6.5289e+00, 7.1465e+00, 9.8461e+00,
3.1778e+00, 4.5638e+00, 7.6935e+00, 2.1850e+00, 7.8411e-01, 5.3962e+00, 7.1402e-01, 9.1985e+00,
8.3298e+00, 2.2751e+00, 4.2010e+00, 3.4071e+00

9.7781e-01, 5.9881e-01, 9.1533e+00, 1.1174e+00, 3.6970e+00, 8.2593e+00, 6.4350e+00, 3.2338e+00,


9.4247e+00, 3.1650e+00, 8.5202e-01, 2.1314e+00, 6.0134e+00, 5.1505e+00, 4.4739e+00, 4.6049e+00,
7.1615e+00, 7.4587e+00, 5.0748e+00, 4.5198e+00, 7.7311e+00, 6.0716e+00, 4.6801e-02, 5.4549e+00,
9.3653e-01, 2.7011e+00, 6.3107e+00, 1.9149e+00, 9.6258e+00, 5.6024e+00, 4.8729e+00, 2.3271e+00,
8.5729e-01, 4.3128e+00, 8.9016e+00, 1.0620e+00, 6.4383e-01, 2.3107e+00, 6.4231e+00, 4.4813e+00,
4.6873e+02, 8.3657e+00, 1.2763e+00, 3.3123e+00, 3.8309e+00, 3.4602e+00, 8.1739e-01, 6.2278e-01,
9.7785e+00, 7.2861e+00, 7.3972e+00, 3.3998e-01, 3.4393e-01, 5.6091e-01, 9.8354e+00, 4.4592e+00,
8.2479e+00, 4.2309e+00, 9.5927e+00, 4.3546e+00, 4.0956e+00, 9.8538e+00, 8.9171e+00, 3.2625e+00,
9.2848e+00, 7.7375e+00, 5.1033e+00, 2.6409e+00, 3.8462e+00, 6.0148e+00, 4.9641e-01, 8.3577e+00,
1.5158e+00, 8.9512e+00, 7.6691e+00, 1.5940e+00, 6.7363e+00, 7.1885e+00, 2.3622e+00, 1.2852e+00,
4.2833e+00, 2.3594e+00, 3.5572e-01, 7.3939e-01, 9.5583e+00, 1.3262e+00, 3.6612e+00, 1.8003e+00,
3.3652e+00, 7.5684e+00, 7.2315e+00, 8.1384e+00, 9.1499e+00, 7.6829e+00, 6.7447e-01, 4.3514e+00,
5.3649e+00, 5.3383e+00, 7.1190e+00, 4.0291e+00

4.0218e-01, 1.5017e-01, 7.2422e+00, 9.3808e+00, 2.2480e+00, 7.0366e+00, 3.5478e+00, 5.5600e+00,


6.7969e+00, 8.3472e+00, 1.5369e+00, 7.1899e+00, 8.1787e+00, 6.1130e+00, 9.7398e+00, 2.2223e+00,
3.8044e-01, 8.4630e+00, 4.4158e+00, 6.3467e+00, 6.0038e+00, 9.8165e-01, 6.6963e+00, 2.4348e+00,
5.9103e+00, 1.0140e+00, 2.0615e+00, 7.0719e+00, 6.2099e+00, 5.8132e+00, 9.1512e+00, 9.5518e+00,
9.7518e+00, 1.9820e+00, 5.9016e+00, 4.9199e+00, 1.7717e+00, 1.1601e+00, 8.0722e+00, 9.2462e-01,
2.5101e+00, 5.0222e+02, 3.0719e+00, 7.0142e+00, 2.0340e-01, 5.7610e+00, 2.8097e+00, 8.2409e+00,
6.6745e-01, 6.1071e+00, 3.1736e+00, 4.0211e+00, 1.4375e+00, 9.1751e+00, 4.3687e+00, 1.5669e+00,
9.2143e+00, 3.5948e+00, 6.3528e+00, 8.7478e+00, 6.9636e+00, 2.5326e+00, 3.2840e+00, 3.6104e+00,
2.0152e-01, 8.7733e+00, 8.1917e+00, 5.3835e+00, 7.0946e+00, 9.5988e+00, 2.0185e+00, 6.7100e+00,
3.7998e+00, 8.8207e+00, 2.9985e+00, 7.4659e+00, 6.6459e+00, 4.8946e+00, 1.0593e+00, 3.7545e-01,
3.8057e+00, 3.4284e+00, 8.3333e+00, 8.2432e+00, 6.3204e+00, 2.9727e+00, 3.3605e+00, 2.8700e+00,
9.4058e+00, 4.3029e+00, 7.8304e+00, 3.7548e+00, 8.6380e+00, 5.4924e+00, 4.0742e+00, 6.2095e+00,
9.8270e+00, 3.1676e+00, 8.0738e-01, 9.6426e-01

4.6545e+00, 7.9061e+00, 9.3165e+00, 1.8312e+00, 7.2230e+00, 8.5220e-01, 2.3062e+00, 6.6047e+00,


1.4970e-01, 5.1165e+00, 9.8882e+00, 1.6796e+00, 8.7731e+00, 6.9211e+00, 9.1700e+00, 8.0753e+00,
3.3817e+00, 9.1634e+00, 8.5109e+00, 9.6371e+00, 5.1509e+00, 6.6377e+00, 2.9696e-01, 4.5784e+00,
8.4666e+00, 2.8731e+00, 2.0082e+00, 9.8866e+00, 5.9167e+00, 3.5550e+00, 3.5270e-01, 2.6429e+00,
5.3711e+00, 3.0696e-01, 5.0309e+00, 3.9114e+00, 5.3708e+00, 7.4526e+00, 2.7900e+00, 7.7746e+00,
1.4414e+00, 7.0853e+00, 5.2460e+02, 4.8336e+00, 8.8209e+00, 1.9248e+00, 6.5068e-01, 3.0742e+00,
7.4621e-01, 6.7824e+00, 9.6721e+00, 3.5213e-01, 9.2832e+00, 2.6770e+00, 3.5569e+00, 6.7605e+00,
2.4094e+00, 8.9908e+00, 7.4141e+00, 1.5761e+00, 8.3045e+00, 2.8620e+00, 6.5849e+00, 2.6834e+00,
8.1457e-01, 3.6200e+00, 6.7481e+00, 3.7118e+00, 9.5751e+00, 9.4792e+00, 9.9187e+00, 7.5241e+00,
7.3136e+00, 9.5558e+00, 9.8310e+00, 4.1623e+00, 3.5362e+00, 1.2638e+00, 7.1399e+00, 9.6668e+00,
B. Ejemplo de solución de un sistema de tamaño 100 × 100 411

2.7892e+00, 1.7090e+00, 8.7465e+00, 9.4280e+00, 8.2098e+00, 1.5151e+00, 9.7619e+00, 6.5685e+00,


2.4015e+00, 9.4193e+00, 2.2952e+00, 6.6032e+00, 4.1923e+00, 6.8654e+00, 3.0993e+00, 9.8799e-01,
4.0370e+00, 4.3725e+00, 9.6679e-01, 1.2428e+00

3.0262e-01, 9.2266e+00, 4.8998e+00, 4.5397e+00, 6.4858e+00, 9.7642e+00, 1.1783e+00, 6.8534e+00,


3.9509e+00, 9.1592e+00, 4.9505e+00, 5.4229e+00, 6.8461e+00, 8.3571e+00, 8.0620e+00, 6.0951e+00,
9.4596e+00, 8.0499e+00, 6.5483e+00, 8.2020e+00, 5.8499e+00, 2.9808e+00, 8.0289e+00, 3.8980e+00,
4.2807e+00, 5.7725e+00, 3.3997e+00, 7.2798e+00, 5.2749e+00, 3.4644e+00, 8.3342e+00, 9.1863e+00,
5.0730e+00, 8.4650e+00, 1.9050e+00, 8.4560e+00, 6.3932e+00, 9.8975e+00, 7.9298e+00, 2.1908e+00,
6.3842e+00, 8.2844e+00, 2.8607e+00, 5.5177e+02, 9.5347e+00, 2.1238e+00, 3.8949e+00, 7.2861e+00,
9.9781e+00, 3.1838e+00, 8.3839e+00, 1.8280e+00, 8.9719e+00, 4.6734e+00, 6.9866e+00, 8.3802e+00,
4.6025e+00, 6.2149e+00, 2.8515e+00, 1.4416e+00, 1.8986e+00, 3.6011e+00, 8.2414e+00, 1.8242e+00,
8.7219e+00, 8.3516e+00, 3.3415e+00, 5.6246e+00, 7.8469e+00, 4.9760e+00, 4.0565e+00, 3.0034e+00,
6.8571e+00, 1.5344e+00, 6.3163e+00, 4.1011e+00, 3.6313e+00, 5.5762e+00, 2.1476e+00, 4.2398e+00,
5.8787e+00, 1.3242e+00, 5.9197e+00, 9.1428e+00, 5.1744e+00, 4.9714e+00, 3.6313e-01, 1.1683e+00,
5.9887e+00, 3.4315e+00, 2.0011e+00, 3.2865e+00, 2.2313e+00, 6.2537e+00, 2.9720e+00, 7.5881e+00,
4.3112e+00, 7.7840e-01, 8.9574e+00, 2.9682e+00

5.7957e-01, 8.9040e+00, 3.2994e+00, 1.9070e+00, 7.4887e+00, 5.9774e+00, 3.6380e+00, 7.7521e+00,


8.1249e+00, 8.1462e+00, 7.4050e-01, 1.2090e+00, 1.1184e+00, 7.2625e+00, 8.1411e+00, 5.2022e+00,
7.1998e+00, 2.4784e+00, 4.3151e+00, 5.2352e+00, 8.9489e+00, 4.6037e+00, 6.9109e+00, 2.3220e+00,
6.8581e+00, 9.6122e+00, 1.8758e+00, 3.0521e+00, 9.0618e+00, 5.9305e+00, 4.5401e+00, 9.8676e+00,
6.3678e-01, 9.2525e+00, 4.6234e+00, 9.5064e+00, 9.2192e+00, 6.9540e+00, 6.9650e+00, 9.8800e+00,
8.5020e+00, 5.7235e+00, 9.8807e+00, 3.3955e+00, 5.3864e+02, 1.7527e+00, 1.4852e+00, 9.5194e+00,
8.0288e+00, 2.6119e+00, 8.0626e+00, 8.4043e+00, 9.9707e-01, 6.6569e+00, 7.9846e-01, 4.8989e+00,
2.8899e+00, 4.7119e+00, 6.8127e+00, 4.8596e+00, 8.4447e+00, 5.4443e+00, 2.0559e+00, 2.5753e+00,
5.2530e+00, 1.6390e+00, 9.7917e+00, 7.3889e-01, 9.6030e+00, 7.2041e+00, 1.4710e+00, 5.4978e+00,
1.0208e+00, 4.6132e+00, 7.0232e+00, 5.8490e+00, 8.1390e+00, 7.0577e+00, 7.8943e+00, 2.9682e+00,
5.1143e+00, 3.3692e+00, 5.0433e+00, 5.6084e+00, 2.0730e+00, 7.1145e+00, 4.9622e-01, 8.6349e+00,
2.7713e+00, 1.5085e+00, 6.3772e+00, 4.8777e+00, 9.9871e+00, 4.5050e+00, 9.0098e+00, 5.2724e+00,
3.3922e+00, 6.8141e+00, 6.0826e+00, 1.1580e+00

8.6874e+00, 9.7788e+00, 4.9514e+00, 1.3729e+00, 8.4206e+00, 7.2011e+00, 7.0822e+00, 1.1231e+00,


9.4098e+00, 4.0609e+00, 5.4859e+00, 3.2855e+00, 8.3406e+00, 7.4357e+00, 5.0686e+00, 2.6657e+00,
4.1995e+00, 3.4560e+00, 7.9628e+00, 2.5106e+00, 1.0530e+00, 7.6563e+00, 8.1663e+00, 3.8486e+00,
5.2124e+00, 5.4414e+00, 7.6824e+00, 7.3168e+00, 7.5139e+00, 8.8244e+00, 1.1791e+00, 4.4086e+00,
3.2937e-01, 9.7027e+00, 7.5257e-01, 3.2765e+00, 1.8531e+00, 8.4443e+00, 2.9517e+00, 9.0715e+00,
6.1485e+00, 9.1879e+00, 5.4922e+00, 6.1430e+00, 5.2047e+00, 5.4097e+02, 7.8597e-03, 5.2430e+00,
3.9793e+00, 1.7710e+00, 5.3295e+00, 8.4901e+00, 8.1928e+00, 9.2518e+00, 9.1270e+00, 2.2311e+00,
8.6236e+00, 8.7160e-02, 5.0033e+00, 9.3667e+00, 6.9242e+00, 7.6303e+00, 7.4891e-01, 8.5005e+00,
8.2654e+00, 2.5232e+00, 2.6382e+00, 3.3921e+00, 2.8035e+00, 1.9480e+00, 7.0069e+00, 8.9121e+00,
9.3947e+00, 2.0749e+00, 6.2681e+00, 3.8563e+00, 1.5361e-01, 6.2494e+00, 2.2155e+00, 7.2576e+00,
3.9090e+00, 3.7262e+00, 2.0247e+00, 9.6332e+00, 9.6958e+00, 8.8640e+00, 7.8665e+00, 1.3150e+00,
3.4269e+00, 6.2406e+00, 4.2787e+00, 7.0732e+00, 5.5055e+00, 6.6116e+00, 7.8553e+00, 4.9604e+00,
2.1272e+00, 6.5969e+00, 2.6562e+00, 8.7812e+00

7.8111e-01, 9.2614e-01, 2.5201e+00, 6.2420e+00, 3.1933e+00, 7.7287e+00, 3.6257e+00, 8.6209e+00,


2.7238e-01, 5.3483e+00, 7.7226e-01, 1.9672e+00, 9.3161e+00, 3.6778e+00, 4.0719e+00, 7.3404e+00,
9.7770e-01, 2.7567e+00, 3.7927e+00, 6.7381e+00, 3.8682e+00, 2.8828e+00, 5.9791e+00, 5.6895e+00,
1.5661e+00, 3.7327e+00, 7.9523e+00, 1.4707e-01, 3.3677e+00, 5.3397e+00, 5.3282e+00, 8.9825e+00,
6.9459e+00, 2.4366e+00, 8.8835e+00, 8.5047e+00, 6.2345e+00, 8.6561e+00, 9.7282e+00, 2.3512e+00,
7.3037e+00, 2.7993e+00, 3.9986e+00, 8.8970e+00, 3.1033e+00, 4.0855e-01, 4.8309e+02, 3.7824e+00,
1.1236e+00, 1.9726e+00, 2.3539e+00, 6.6179e+00, 1.9557e+00, 7.9953e-01, 8.2708e-01, 5.9526e+00,
412

1.9003e+00, 7.7061e+00, 9.3801e+00, 9.0571e-01, 8.2306e+00, 3.4001e+00, 4.8323e+00, 7.0961e+00,


5.1963e+00, 1.6324e+00, 8.8170e+00, 8.7991e+00, 7.8597e+00, 3.9709e+00, 8.1313e+00, 8.9027e+00,
1.7446e+00, 3.7736e+00, 2.0987e+00, 9.6811e+00, 8.8020e+00, 1.5009e+00, 9.7513e+00, 5.9820e+00,
4.8427e+00, 4.8144e+00, 6.2710e-01, 5.1356e+00, 1.1766e+00, 6.0038e+00, 3.2030e+00, 8.8730e+00,
3.1709e+00, 7.1534e+00, 3.7008e+00, 8.8498e+00, 2.9902e-01, 6.7632e+00, 5.5946e+00, 7.2954e-01,
3.7051e+00, 3.5731e+00, 6.3514e+00, 4.2508e+00

6.5108e+00, 4.1084e+00, 8.1236e-01, 9.9602e+00, 2.4531e+00, 9.3738e+00, 7.0818e-01, 2.6752e+00,


1.5363e+00, 1.8606e+00, 2.6707e+00, 6.1676e+00, 1.5253e-01, 5.5383e+00, 9.6380e+00, 8.7567e+00,
1.2361e+00, 5.3173e+00, 1.1037e-01, 2.1527e+00, 4.7471e+00, 8.4643e+00, 5.4931e+00, 9.5799e+00,
9.8486e+00, 7.0537e+00, 8.1763e+00, 2.1800e+00, 9.5990e+00, 8.9143e+00, 8.0468e+00, 1.0909e-03,
7.0915e+00, 6.9824e+00, 4.2814e+00, 7.0072e+00, 5.4404e+00, 4.2293e+00, 4.8327e+00, 4.5757e+00,
3.5106e+00, 3.7143e-01, 9.9114e+00, 6.8318e+00, 6.2895e+00, 8.4426e+00, 1.1252e+00, 5.2771e+02,
7.9284e+00, 1.4203e+00, 7.8027e+00, 4.5872e+00, 8.6433e+00, 9.6331e+00, 1.7514e+00, 9.4440e+00,
1.7745e+00, 7.9109e+00, 7.5592e+00, 1.6746e+00, 9.0117e+00, 2.0267e+00, 3.2326e+00, 8.6226e+00,
2.4415e+00, 3.7386e+00, 7.3567e-01, 7.4962e+00, 8.0023e+00, 4.9734e+00, 2.3593e+00, 7.5527e+00,
9.3264e+00, 7.4985e-01, 7.3088e+00, 5.4736e+00, 7.3058e+00, 9.8522e+00, 4.1133e+00, 2.2443e+00,
2.5587e-01, 8.1314e+00, 7.8739e+00, 2.7060e+00, 5.1802e+00, 2.7091e+00, 8.9830e+00, 7.2844e+00,
6.8684e+00, 4.4145e+00, 4.3253e+00, 2.4976e+00, 3.3500e+00, 4.5535e+00, 1.6064e+00, 2.7235e+00,
2.0618e+00, 5.5206e+00, 3.3056e+00, 4.4224e+00

9.4345e+00, 1.4730e+00, 1.0424e+00, 9.9292e+00, 1.5760e+00, 3.0174e+00, 1.0327e+00, 1.4915e+00,


9.6131e+00, 7.7533e+00, 2.4094e+00, 2.0433e-01, 2.5718e+00, 3.4571e+00, 2.3151e+00, 9.8771e-01,
6.2326e+00, 3.8820e+00, 1.5973e+00, 2.8958e+00, 4.1949e+00, 6.0188e+00, 6.9340e+00, 2.4212e+00,
1.3020e+00, 1.7424e+00, 1.5464e+00, 5.3630e-01, 5.5470e+00, 4.2691e+00, 3.0203e+00, 6.9624e+00,
7.7474e+00, 2.8080e-01, 3.0226e+00, 1.9193e+00, 2.4459e-01, 1.4746e+00, 6.7356e+00, 4.7946e+00,
9.0998e+00, 2.3083e+00, 8.1557e-01, 7.1377e+00, 2.9078e+00, 7.2033e+00, 4.7326e+00, 7.2357e+00,
4.2165e+02, 9.1281e+00, 8.4738e+00, 9.1580e+00, 7.6597e+00, 3.0652e+00, 6.6960e-01, 5.0617e+00,
5.2621e-01, 1.4005e+00, 4.5020e+00, 3.9679e+00, 5.0792e+00, 2.4460e-01, 1.8901e+00, 1.1478e+00,
1.0171e+00, 8.2760e+00, 9.6762e+00, 9.3037e+00, 2.6554e+00, 7.4526e+00, 1.8338e+00, 8.7957e-01,
9.1743e-01, 7.6625e-01, 6.7888e+00, 9.5920e+00, 1.0708e+00, 5.0127e+00, 2.4206e+00, 4.7201e+00,
6.7116e+00, 8.9536e+00, 5.2351e+00, 1.5756e+00, 3.4154e+00, 8.0280e+00, 5.8693e+00, 2.0800e+00,
5.0541e+00, 9.1271e+00, 3.8433e+00, 6.3167e+00, 3.3213e+00, 5.0554e+00, 3.2961e-01, 2.4040e+00,
2.3154e+00, 7.6079e-01, 9.2008e+00, 1.8976e+00

8.3213e+00, 4.5670e+00, 1.4313e+00, 7.0210e+00, 3.1915e+00, 8.5957e+00, 1.4317e+00, 4.9932e+00,


7.7184e+00, 3.7588e+00, 5.1717e+00, 8.5317e+00, 4.0037e+00, 1.5702e+00, 6.7693e+00, 4.0677e+00,
2.9117e+00, 5.4825e+00, 6.4807e+00, 1.6174e+00, 8.5200e+00, 2.0967e+00, 2.1056e+00, 2.0468e+00,
4.8060e+00, 4.8516e+00, 9.3021e+00, 1.2641e+00, 3.9898e+00, 3.1984e+00, 8.9150e+00, 7.4296e+00,
8.8827e-01, 7.9549e+00, 8.9531e+00, 3.6858e+00, 7.1273e+00, 6.9726e+00, 9.0776e+00, 1.8816e-01,
1.1282e+00, 6.1377e+00, 6.5755e+00, 9.4120e+00, 6.0392e+00, 2.5195e-01, 4.9258e+00, 5.7446e+00,
5.1854e+00, 5.3618e+02, 7.2301e+00, 7.6325e+00, 5.2372e+00, 4.5518e+00, 8.7817e+00, 2.3885e+00,
4.3089e+00, 9.8495e+00, 4.4458e+00, 7.6295e+00, 9.4338e+00, 9.7504e+00, 1.9167e+00, 6.2621e+00,
9.2310e+00, 4.1339e+00, 4.9053e+00, 5.9967e+00, 4.3689e+00, 3.9339e+00, 9.5373e+00, 7.7490e-01,
9.8047e+00, 7.1682e-01, 7.6847e+00, 2.0149e+00, 7.0314e+00, 3.6655e+00, 5.8839e+00, 5.2888e+00,
4.8696e+00, 4.8680e+00, 8.7014e+00, 3.2814e+00, 8.4487e+00, 6.6792e+00, 2.2951e+00, 1.6673e+00,
2.0660e+00, 4.9154e+00, 9.1680e+00, 2.3932e+00, 3.5699e+00, 4.3190e+00, 2.9905e+00, 1.3614e+00,
8.0716e+00, 6.6732e+00, 9.5853e+00, 7.9068e+00

6.9335e+00, 2.8073e+00, 9.4568e+00, 6.6713e+00, 7.9257e+00, 8.9612e-01, 7.3878e+00, 9.1319e-01,


6.1292e+00, 1.5721e+00, 9.7023e-01, 6.7298e-01, 8.2075e+00, 4.9852e+00, 2.5539e+00, 3.7530e+00,
7.0752e-01, 7.9963e+00, 7.0215e+00, 3.7305e+00, 4.8879e+00, 1.1135e+00, 5.5883e+00, 5.2060e+00,
4.9438e-01, 5.5730e+00, 1.3972e+00, 5.8574e+00, 5.5730e+00, 9.4703e+00, 8.2556e+00, 6.1763e+00,
B. Ejemplo de solución de un sistema de tamaño 100 × 100 413

7.1500e+00, 4.6935e+00, 1.0736e+00, 8.9288e+00, 5.3963e-01, 8.8945e+00, 3.3886e+00, 7.7939e+00,


1.6551e+00, 9.6014e+00, 7.7044e-01, 7.0320e+00, 8.1591e+00, 9.0241e+00, 7.3280e+00, 2.9922e+00,
2.2807e+00, 8.5159e+00, 5.3895e+02, 8.7760e+00, 3.1505e+00, 9.4875e+00, 1.4108e+00, 6.1394e+00,
6.4897e+00, 2.5776e+00, 3.0701e+00, 8.1518e+00, 2.2954e-01, 4.5167e+00, 4.2453e+00, 1.1422e-01,
8.0733e+00, 1.0683e+00, 7.3665e+00, 4.3353e+00, 2.2481e+00, 8.8795e+00, 4.5871e+00, 7.9192e+00,
6.7194e+00, 4.1379e+00, 8.3404e+00, 4.6986e+00, 4.9404e+00, 8.3390e+00, 2.4564e+00, 8.8272e+00,
8.4978e+00, 2.7814e+00, 7.6861e+00, 6.7848e+00, 5.7211e+00, 8.5356e+00, 8.1725e+00, 6.1230e+00,
2.4143e+00, 8.6690e+00, 5.7021e+00, 8.3030e+00, 1.0923e+00, 4.0670e+00, 8.2942e+00, 4.0688e+00,
5.9091e+00, 4.7923e+00, 4.6152e+00, 7.3797e+00

9.4743e+00, 8.7984e+00, 2.0320e+00, 3.6479e+00, 1.8026e+00, 2.8081e+00, 2.4110e+00, 3.7935e+00,


2.4266e+00, 2.6368e+00, 1.0937e+00, 8.6032e+00, 3.5931e+00, 6.4587e+00, 7.8461e+00, 7.1274e+00,
9.1694e+00, 5.1103e+00, 5.2668e+00, 4.0004e+00, 9.4909e+00, 5.4241e+00, 9.0176e+00, 7.5924e+00,
8.4403e+00, 6.5856e+00, 7.1198e+00, 5.1916e+00, 2.1171e+00, 4.3459e+00, 1.0711e+00, 1.6452e+00,
9.7744e+00, 5.6951e-01, 8.7189e+00, 5.9425e+00, 1.2157e+00, 1.1274e+00, 4.6029e+00, 7.9241e+00,
4.7827e+00, 3.1452e-01, 9.5095e+00, 2.3886e+00, 7.2540e+00, 5.9250e+00, 9.8965e+00, 5.9668e+00,
1.8582e+00, 3.8337e+00, 6.9510e+00, 4.9322e+02, 3.4226e+00, 1.9772e+00, 1.4748e+00, 9.0883e-01,
1.1817e+00, 4.7960e+00, 3.5332e+00, 5.4469e+00, 5.4857e+00, 5.2826e+00, 5.3665e+00, 2.8244e+00,
3.4085e+00, 2.0046e+00, 1.9127e+00, 3.1023e+00, 1.6068e+00, 7.5054e+00, 7.5518e+00, 6.5872e+00,
4.5909e+00, 7.1493e+00, 5.3257e+00, 2.3311e+00, 9.0727e+00, 7.7822e+00, 3.2110e+00, 5.0819e+00,
9.1047e+00, 8.6244e+00, 5.5618e-02, 6.4672e+00, 7.2663e+00, 9.9315e+00, 1.9328e+00, 4.9847e+00,
9.4454e+00, 5.6368e-01, 6.3445e+00, 3.8774e-01, 4.6363e+00, 1.7404e+00, 7.7993e+00, 5.7064e+00,
1.1507e+00, 7.6467e-01, 5.9651e+00, 5.6120e+00

4.8945e+00, 1.5483e+00, 2.7124e+00, 2.9445e+00, 6.3841e+00, 8.6299e-01, 6.9512e+00, 9.5667e+00,


8.8758e+00, 5.2289e+00, 2.6820e-01, 9.7332e+00, 2.2982e-01, 2.9246e+00, 2.8885e+00, 1.3576e+00,
5.5379e-01, 6.5912e+00, 2.9730e+00, 8.2816e+00, 9.0316e+00, 4.8938e+00, 7.0422e+00, 3.6787e+00,
8.8689e+00, 6.8484e+00, 5.6388e+00, 9.1705e+00, 4.2001e+00, 4.4426e+00, 3.3494e+00, 8.2206e+00,
9.7777e+00, 6.4695e+00, 8.3424e+00, 7.0970e+00, 8.8139e+00, 8.7226e-01, 3.5929e+00, 5.9129e+00,
5.8409e+00, 7.4032e+00, 3.3164e+00, 1.5202e+00, 8.0239e-01, 3.3018e+00, 3.5598e+00, 3.8388e+00,
9.0067e+00, 9.1287e-01, 6.1168e+00, 1.4449e+00, 4.9800e+02, 5.0747e+00, 2.0224e+00, 3.2230e+00,
1.6305e+00, 6.2803e+00, 7.5894e+00, 3.1647e+00, 8.8426e+00, 9.9905e+00, 6.4120e+00, 3.4259e+00,
1.4341e+00, 1.4023e+00, 4.8603e+00, 6.2300e+00, 9.8383e+00, 2.5003e+00, 8.2954e+00, 1.3370e+00,
5.2428e-01, 3.3895e-01, 1.1915e+00, 8.4085e+00, 7.3159e-01, 6.8448e+00, 6.4911e+00, 5.4798e+00,
1.3383e+00, 4.4440e+00, 4.1130e-01, 4.3532e+00, 9.2334e+00, 3.7547e+00, 2.2189e+00, 7.4103e+00,
2.3887e+00, 1.3191e+00, 8.9345e+00, 7.1374e+00, 8.4778e+00, 4.5425e+00, 5.7547e+00, 2.9964e+00,
7.4397e+00, 9.9723e+00, 3.7692e+00, 6.4808e+00

6.6725e+00, 3.5316e+00, 7.8194e+00, 6.8704e+00, 3.7158e+00, 3.2447e+00, 5.2911e+00, 7.8467e+00,


2.3797e+00, 5.1866e+00, 6.0754e-01, 2.8534e+00, 4.4975e+00, 8.9494e+00, 7.6910e-01, 1.5361e+00,
3.7449e+00, 7.3396e+00, 7.0170e+00, 4.4976e+00, 1.5112e+00, 1.4406e+00, 1.4426e+00, 7.2901e+00,
6.8735e+00, 6.8450e+00, 7.9478e+00, 7.7320e+00, 8.5009e+00, 2.2394e+00, 7.4436e+00, 9.1356e+00,
9.6624e+00, 7.0869e+00, 9.0873e+00, 5.7250e+00, 7.9521e-02, 7.9367e+00, 4.0331e+00, 6.1748e+00,
4.1423e+00, 4.4295e+00, 1.9005e+00, 4.6802e+00, 5.1785e+00, 4.5405e+00, 3.1068e+00, 8.4048e+00,
5.4255e+00, 9.4620e+00, 4.0452e+00, 5.9385e+00, 6.2070e+00, 5.5587e+02, 6.2604e+00, 2.4953e-01,
6.1260e+00, 4.2363e+00, 8.1487e+00, 9.9313e+00, 5.8388e+00, 8.4176e+00, 3.9441e-01, 8.1600e-01,
5.7680e+00, 5.1097e-02, 6.2969e+00, 4.5747e+00, 5.4606e+00, 6.6707e+00, 3.6491e+00, 7.8313e+00,
3.5452e+00, 7.0068e+00, 8.9040e+00, 9.9847e+00, 3.3537e+00, 5.0952e+00, 9.9166e+00, 8.1351e+00,
7.6156e+00, 5.0931e+00, 5.0027e+00, 1.7968e+00, 7.3045e+00, 1.0742e+00, 9.3344e+00, 5.7279e+00,
6.1276e-02, 1.9223e+00, 9.0012e+00, 1.8629e-01, 9.9308e+00, 6.4520e+00, 5.5622e+00, 7.5935e+00,
9.7445e+00, 6.9241e+00, 7.1808e+00, 4.5647e+00
414

3.7159e+00, 2.9943e+00, 9.8433e-01, 4.6509e+00, 2.8067e+00, 6.3561e+00, 4.7632e+00, 5.3506e+00,


3.7577e+00, 5.1786e-01, 7.7130e+00, 3.1517e+00, 2.4323e+00, 2.4609e-01, 1.9117e+00, 5.3786e+00,
4.7842e+00, 7.9351e+00, 4.2171e-01, 9.8530e+00, 7.1136e+00, 1.9386e+00, 7.3660e+00, 4.5985e+00,
3.4697e+00, 3.0652e+00, 4.6209e+00, 6.4606e+00, 1.9401e+00, 5.8991e+00, 8.4803e+00, 4.6472e+00,
9.2887e+00, 7.8800e+00, 6.2437e+00, 5.0174e+00, 4.7539e-01, 5.8274e+00, 7.4076e+00, 9.2853e+00,
7.9602e+00, 6.5274e+00, 9.1935e+00, 1.8601e-01, 2.6187e+00, 6.1543e+00, 1.1834e+00, 6.4184e-01,
3.7891e+00, 1.3895e+00, 2.7388e+00, 7.5406e+00, 2.0591e+00, 6.1926e+00, 4.6903e+02, 1.3180e+00,
7.4611e+00, 1.0115e+00, 6.2381e+00, 2.9299e+00, 3.8293e+00, 7.3189e+00, 6.8273e+00, 1.3992e+00,
1.8907e+00, 6.1854e+00, 6.5347e+00, 7.5933e+00, 5.1185e+00, 9.5341e+00, 9.1133e+00, 4.2267e+00,
6.4527e+00, 9.7280e+00, 5.8237e+00, 2.3894e+00, 1.0370e+00, 1.6533e+00, 7.4429e+00, 5.6431e+00,
6.7150e+00, 4.5392e+00, 2.9660e+00, 2.2473e-01, 8.5837e+00, 5.4704e+00, 1.7806e+00, 1.7204e+00,
3.7885e+00, 2.0350e+00, 8.2834e+00, 4.6616e+00, 4.7519e+00, 9.1654e-04, 4.6834e-01, 4.9540e+00,
4.3399e+00, 5.9236e+00, 3.3657e+00, 3.4313e+00

7.4035e+00, 9.3948e+00, 3.1714e+00, 5.6359e+00, 2.2705e-01, 1.9874e+00, 2.0734e-01, 8.2190e+00,


5.9329e+00, 5.1365e+00, 5.4561e+00, 5.8827e+00, 6.9242e+00, 8.0152e+00, 8.5312e+00, 4.3660e+00,
9.3456e+00, 4.5590e+00, 8.5506e-01, 6.4846e+00, 6.6838e+00, 7.3086e+00, 9.5060e+00, 5.3749e+00,
5.2345e+00, 7.8753e+00, 1.2221e+00, 6.2609e+00, 5.9781e+00, 7.5880e+00, 2.7359e+00, 2.6760e+00,
3.6619e+00, 9.2057e+00, 1.5210e+00, 7.5310e-01, 8.6888e+00, 4.7554e+00, 3.1354e+00, 8.0112e+00,
8.8024e+00, 7.7448e+00, 6.1749e+00, 9.5857e+00, 4.9946e+00, 7.0066e+00, 2.0936e+00, 9.3323e+00,
1.3998e+00, 5.0911e+00, 6.7325e+00, 8.3724e+00, 9.7929e+00, 1.7444e+00, 9.3401e+00, 5.5474e+02,
9.5419e+00, 6.7675e+00, 1.9094e+00, 4.8484e+00, 6.4537e+00, 2.3431e+00, 1.5404e+00, 6.8755e+00,
5.0728e+00, 1.2798e+00, 5.9019e+00, 5.8384e+00, 9.1931e-01, 9.5642e+00, 6.9959e+00, 4.3836e+00,
1.6907e+00, 6.6506e-01, 5.3920e-02, 5.0302e-01, 4.6587e+00, 6.9472e+00, 8.6513e+00, 3.8825e+00,
1.9902e+00, 6.9224e+00, 3.3900e+00, 9.3166e+00, 5.5863e+00, 6.9686e+00, 1.5229e+00, 8.9068e+00,
8.8057e+00, 8.0678e+00, 9.4993e+00, 2.2479e+00, 5.6913e+00, 7.6694e-01, 7.9494e+00, 7.9540e+00,
7.9010e+00, 5.7606e+00, 2.5826e+00, 5.8790e+00

8.5974e+00, 9.5004e+00, 3.2493e+00, 4.6442e+00, 8.4876e+00, 2.9864e+00, 6.7408e+00, 9.0225e+00,


1.7641e+00, 7.8904e+00, 6.0650e+00, 6.1979e+00, 2.4320e+00, 1.0612e+00, 5.2734e+00, 3.9096e+00,
5.7523e+00, 6.0239e+00, 4.3222e+00, 7.7952e+00, 1.6996e+00, 1.1599e+00, 3.9463e+00, 2.7857e+00,
2.0172e+00, 1.5089e+00, 9.8487e-01, 1.8314e+00, 5.2305e-02, 5.9369e+00, 5.0382e+00, 6.3519e+00,
8.1043e+00, 2.4036e+00, 9.3454e+00, 1.8830e+00, 2.6147e+00, 1.9324e+00, 4.9325e+00, 3.5565e+00,
3.5917e-02, 6.4812e+00, 8.0855e+00, 8.5175e+00, 1.0792e+00, 1.0278e+00, 3.0349e+00, 1.9419e+00,
6.0527e+00, 3.1971e+00, 2.0191e+00, 7.7461e+00, 6.2974e+00, 7.2745e+00, 7.8356e+00, 8.2798e-01,
4.6791e+02, 2.2894e+00, 2.8155e+00, 6.8576e+00, 4.2689e-01, 7.4898e+00, 5.8225e-01, 3.0105e+00,
8.4011e+00, 3.4072e+00, 9.9140e+00, 5.2329e+00, 8.2772e+00, 7.1722e-01, 5.7033e+00, 6.4103e+00,
6.1983e+00, 5.0625e+00, 4.6579e+00, 6.9944e+00, 9.4359e+00, 1.0478e+00, 6.5803e+00, 3.8548e+00,
3.2905e+00, 6.2337e+00, 5.5627e+00, 2.4536e+00, 1.4172e+00, 7.0794e+00, 9.4419e+00, 1.5442e+00,
6.1021e+00, 9.4977e+00, 1.3447e+00, 4.2092e+00, 9.6037e+00, 2.2382e-01, 5.1868e+00, 4.0415e+00,
1.1515e+00, 8.5322e+00, 5.9268e+00, 4.0710e+00

6.6569e+00, 4.4289e+00, 8.7961e+00, 5.4163e+00, 8.0070e+00, 7.0695e+00, 9.8125e-01, 9.5061e+00,


7.5812e+00, 4.6804e+00, 1.3888e+00, 6.9667e+00, 8.0675e+00, 6.3837e+00, 5.5778e+00, 1.9031e+00,
5.8947e-01, 9.1537e+00, 7.3917e+00, 6.8461e+00, 3.2564e+00, 1.5684e+00, 5.9977e+00, 5.0091e+00,
2.7809e+00, 7.9059e+00, 6.1098e+00, 2.7933e+00, 8.5040e+00, 5.1971e+00, 2.8528e+00, 6.5666e+00,
7.6271e+00, 3.5578e+00, 9.8630e+00, 4.4093e+00, 4.8973e+00, 3.8856e+00, 7.3816e+00, 4.9090e+00,
3.4234e+00, 7.2625e+00, 3.1900e+00, 5.5237e+00, 4.0415e+00, 7.7271e+00, 9.8436e+00, 3.5931e+00,
3.5796e+00, 7.4743e+00, 4.8727e+00, 3.2708e+00, 3.2557e+00, 2.8625e+00, 9.8070e+00, 5.8322e+00,
6.3727e+00, 5.4936e+02, 9.6910e+00, 9.2916e+00, 6.1776e+00, 7.0187e+00, 4.6801e+00, 4.9800e-01,
7.0420e+00, 7.4225e+00, 1.6560e+00, 1.6294e+00, 9.6156e+00, 6.9138e+00, 1.8766e+00, 8.8708e-01,
8.0315e+00, 6.7087e+00, 7.6704e+00, 4.8700e+00, 2.0230e-01, 7.9084e-01, 5.1978e+00, 7.0656e+00,
7.7052e+00, 5.2066e+00, 4.1442e+00, 4.1384e+00, 3.8040e+00, 9.2832e-01, 2.4449e+00, 6.4777e+00,
B. Ejemplo de solución de un sistema de tamaño 100 × 100 415

8.4224e+00, 5.7419e+00, 9.2715e+00, 6.6193e+00, 6.4654e+00, 1.3986e-01, 2.5745e+00, 2.2530e+00,


1.6936e+00, 9.7032e+00, 9.8828e+00, 9.7585e+00

7.1848e+00, 6.3589e+00, 2.0648e+00, 5.9272e+00, 9.2358e+00, 1.3152e+00, 7.5237e+00, 7.2935e+00,


6.5345e+00, 5.0372e+00, 1.4279e+00, 6.3135e+00, 1.7084e+00, 6.4617e+00, 7.5459e+00, 1.5928e+00,
3.7794e+00, 6.1224e+00, 4.6893e+00, 2.5046e+00, 1.3680e+00, 3.3482e+00, 9.6216e+00, 3.4072e-01,
8.7697e+00, 5.7058e+00, 8.5737e+00, 1.8915e-01, 7.9361e+00, 5.8283e+00, 2.0339e+00, 5.9241e+00,
9.0944e+00, 2.6520e+00, 2.1657e-01, 5.8492e+00, 6.1458e+00, 3.5958e+00, 5.8170e+00, 8.3294e+00,
8.2694e-01, 5.7506e+00, 7.0796e+00, 3.4118e+00, 6.1094e+00, 2.4166e+00, 4.8139e+00, 2.6047e-01,
9.3934e+00, 5.3020e-01, 2.6820e+00, 3.2663e+00, 2.3340e+00, 6.2990e+00, 6.7637e+00, 2.3666e+00,
6.3047e+00, 2.3068e+00, 4.8131e+02, 2.7485e+00, 1.2983e-01, 5.7230e+00, 3.6720e+00, 2.6732e-02,
5.6954e+00, 5.4405e+00, 3.9328e+00, 5.9884e-01, 8.1744e+00, 6.8005e+00, 1.8002e+00, 2.4892e+00,
5.1562e+00, 8.9623e+00, 3.6614e+00, 2.5810e+00, 2.4388e+00, 2.0957e+00, 9.9548e+00, 5.8321e+00,
3.3262e-01, 5.7592e+00, 9.4857e+00, 5.9760e+00, 5.7078e+00, 7.9023e+00, 7.1426e+00, 8.0356e+00,
8.4070e+00, 8.0891e+00, 2.2109e+00, 3.0649e+00, 9.9572e+00, 7.1185e+00, 1.7359e+00, 1.9551e+00,
1.2733e+00, 9.2703e+00, 5.4396e+00, 6.9411e+00

5.2352e+00, 5.1520e+00, 8.0841e+00, 2.0457e+00, 5.8294e-01, 9.8383e+00, 4.5099e+00, 6.8488e+00,


5.8000e+00, 3.3009e+00, 8.1801e+00, 1.5283e+00, 2.8255e+00, 3.5287e+00, 3.8806e+00, 2.7968e-01,
8.9826e+00, 4.7693e+00, 8.9239e+00, 3.3949e+00, 5.7344e+00, 5.5962e+00, 2.8790e+00, 4.4957e+00,
4.3220e+00, 5.8129e-01, 4.4047e-01, 9.0513e+00, 7.6032e+00, 2.3812e+00, 5.2915e+00, 5.7829e-01,
1.3844e+00, 3.3562e+00, 5.3881e+00, 5.3711e+00, 6.2496e-01, 8.5875e+00, 8.7433e+00, 6.7203e+00,
6.7494e+00, 5.2508e-01, 1.7819e+00, 1.3713e+00, 7.3111e+00, 9.8841e+00, 6.5109e+00, 5.6453e+00,
3.1554e+00, 2.7146e+00, 9.8104e+00, 4.8113e+00, 9.1058e+00, 2.4745e+00, 5.0677e+00, 7.8920e+00,
9.8448e+00, 5.9618e+00, 3.1450e+00, 5.1531e+02, 8.0162e+00, 2.7719e-01, 7.7345e+00, 7.8228e+00,
4.7200e+00, 8.7408e+00, 1.4942e+00, 3.2983e+00, 9.1489e+00, 2.2831e+00, 4.1514e+00, 8.2554e+00,
9.9304e+00, 7.9316e+00, 3.7565e-01, 2.1927e+00, 1.0730e+00, 7.6116e+00, 3.4179e+00, 2.0214e+00,
8.4956e+00, 4.6031e+00, 4.6771e+00, 1.5576e+00, 8.3706e+00, 6.0931e+00, 5.9759e+00, 7.8243e+00,
5.1830e+00, 7.7718e+00, 2.8526e+00, 9.1778e+00, 6.3953e-02, 7.6102e+00, 9.0586e+00, 9.1590e+00,
4.1941e-01, 3.1970e+00, 9.6844e+00, 2.1311e+00

4.5712e+00, 4.7690e+00, 7.0711e-01, 2.0552e-01, 4.1411e+00, 9.8345e+00, 2.2483e+00, 5.6298e+00,


5.2011e+00, 2.5957e+00, 3.8493e+00, 2.5266e+00, 2.5309e-01, 1.0564e+00, 2.9647e+00, 4.0237e+00,
3.3894e+00, 9.1799e-01, 9.8952e+00, 3.1684e+00, 4.9119e+00, 8.5417e+00, 7.8411e+00, 1.8864e+00,
4.7336e+00, 8.5070e-01, 1.1824e+00, 5.6739e+00, 8.3477e+00, 4.0702e+00, 4.7183e+00, 4.8861e+00,
7.5550e+00, 3.5501e+00, 8.0008e+00, 3.8857e-02, 8.2956e+00, 2.3460e+00, 5.8559e+00, 3.9976e+00,
2.2139e-01, 4.5224e+00, 9.8808e+00, 9.6227e+00, 8.6357e-02, 9.4843e+00, 5.2103e+00, 3.4714e+00,
6.2777e+00, 9.2158e+00, 1.5020e-01, 5.7855e+00, 5.4933e+00, 4.0111e+00, 5.3885e+00, 5.8545e+00,
3.0631e-01, 9.6187e+00, 7.3716e+00, 2.1247e+00, 4.8024e+02, 1.7993e+00, 3.9770e+00, 9.1444e+00,
3.4344e+00, 8.9595e+00, 8.3671e+00, 3.9671e+00, 9.6879e+00, 4.7023e+00, 6.8517e+00, 3.1905e+00,
7.0501e+00, 9.1743e+00, 1.4895e+00, 5.4434e+00, 9.7655e+00, 9.2349e+00, 7.9665e-02, 4.6915e+00,
9.2906e+00, 4.7424e+00, 3.5547e+00, 6.9802e+00, 3.8196e+00, 6.8562e+00, 6.0670e+00, 7.0384e+00,
3.4242e+00, 7.2843e-01, 1.0285e+00, 5.4332e+00, 9.6787e+00, 1.1100e+00, 1.3152e-01, 7.4670e+00,
2.9943e+00, 4.8220e+00, 3.5695e+00, 5.6527e+00

9.0683e+00, 9.3825e+00, 1.7354e+00, 6.8338e+00, 8.4326e+00, 4.0581e+00, 9.6061e+00, 9.7414e+00,


1.0098e+00, 4.0242e+00, 1.3020e+00, 6.1271e+00, 8.4600e+00, 5.6764e+00, 9.6854e+00, 2.2312e+00,
3.7417e-01, 3.5242e+00, 3.3769e+00, 5.9653e+00, 3.7782e+00, 9.1248e+00, 7.6089e+00, 2.1538e+00,
1.8620e+00, 4.6720e+00, 5.8481e+00, 2.0661e+00, 3.1007e+00, 4.1743e+00, 1.0217e+00, 4.0721e-01,
3.5636e+00, 9.5878e+00, 4.9257e+00, 3.1845e+00, 6.1504e+00, 8.4138e+00, 7.7740e+00, 5.2336e+00,
4.0135e+00, 6.4141e+00, 3.6428e+00, 5.8107e+00, 9.7906e+00, 7.4101e+00, 5.2549e+00, 6.7477e-01,
2.9316e+00, 5.2983e+00, 5.5308e+00, 8.1768e+00, 7.4677e-01, 1.2263e+00, 2.7678e+00, 8.4005e-01,
2.3799e+00, 5.2887e+00, 1.4446e+00, 4.5680e+00, 6.6265e-01, 4.6260e+02, 6.4955e+00, 4.5158e+00,
416

3.0467e+00, 5.2698e+00, 2.0236e+00, 8.3313e+00, 3.9641e+00, 5.0439e+00, 9.3106e+00, 2.3665e+00,


6.0713e+00, 5.7517e+00, 2.4561e-01, 3.0926e+00, 2.9425e+00, 4.0897e+00, 8.4360e+00, 2.4026e+00,
5.2766e+00, 4.0804e+00, 8.0947e+00, 4.3114e+00, 8.6936e+00, 3.1640e+00, 5.3956e+00, 2.6466e+00,
8.2543e+00, 3.8732e+00, 1.5930e+00, 8.0356e+00, 2.1158e+00, 2.2960e+00, 6.7259e+00, 4.1207e-01,
1.0979e+00, 1.1591e+00, 1.5835e+00, 7.4529e+00

4.5182e+00, 1.5825e-01, 1.5853e+00, 5.6678e+00, 4.6637e+00, 6.0612e+00, 3.2495e-01, 3.5223e-02,


5.7278e+00, 2.8740e+00, 1.1979e+00, 4.8841e+00, 1.8290e+00, 9.5058e+00, 4.4253e+00, 4.0014e+00,
9.9675e+00, 5.6313e-01, 6.8486e+00, 4.2265e+00, 8.7540e+00, 5.7091e-01, 1.8291e+00, 9.2626e+00,
8.7201e+00, 7.8045e+00, 3.0435e+00, 5.1030e+00, 7.5400e+00, 6.0724e+00, 5.4215e+00, 3.9565e+00,
3.0051e+00, 5.3537e+00, 1.2536e-01, 3.0393e+00, 5.4405e+00, 4.2433e-01, 5.7305e+00, 5.4738e+00,
7.9365e+00, 7.7003e+00, 4.1924e+00, 7.4663e+00, 3.3174e+00, 4.4576e+00, 1.7248e+00, 9.4120e+00,
9.2515e+00, 6.4509e-01, 6.4839e+00, 7.2722e-01, 5.0589e+00, 5.9025e+00, 2.6884e+00, 7.1239e+00,
4.6656e+00, 8.7156e+00, 8.9532e+00, 6.0837e+00, 3.6456e+00, 4.6924e+00, 5.0552e+02, 7.0158e+00,
8.7895e+00, 3.7942e+00, 6.8656e+00, 7.4213e+00, 9.9600e+00, 2.8499e+00, 8.3418e+00, 2.9021e+00,
7.1506e+00, 2.6397e+00, 8.4410e+00, 5.2856e+00, 9.8221e+00, 3.7323e+00, 6.3464e+00, 4.1396e+00,
3.1945e-01, 9.4057e+00, 5.8053e+00, 3.0226e+00, 1.5952e+00, 6.4511e+00, 7.3567e+00, 6.3496e-01,
7.4099e-01, 4.9194e+00, 3.0995e+00, 1.7118e+00, 2.5967e+00, 4.9230e+00, 5.9207e+00, 8.2516e+00,
3.0338e+00, 4.3326e-01, 6.5123e+00, 8.7287e+00

1.3438e+00, 8.7675e+00, 1.9281e+00, 2.7410e+00, 7.4190e+00, 7.6663e+00, 2.2524e+00, 2.6311e+00,


1.6741e+00, 2.9562e+00, 2.6331e+00, 3.9608e+00, 7.4444e+00, 3.7366e+00, 6.1632e+00, 8.7071e+00,
3.0653e+00, 7.5500e+00, 3.1733e+00, 1.5004e+00, 2.7321e+00, 7.0048e+00, 9.3354e+00, 6.6992e+00,
9.8490e+00, 1.3924e+00, 5.7030e+00, 1.8887e+00, 1.5717e+00, 4.9317e+00, 6.7009e+00, 9.0554e+00,
6.1770e+00, 8.8267e-01, 6.6391e+00, 5.9852e+00, 9.0776e+00, 9.6888e+00, 4.1119e+00, 6.4916e+00,
5.2256e+00, 6.4661e+00, 2.5586e+00, 4.1103e+00, 2.2618e+00, 1.2979e+00, 7.1877e-01, 2.7343e-01,
6.2698e+00, 1.2010e+00, 1.5102e+00, 4.2208e+00, 2.7134e+00, 7.7955e+00, 6.6315e+00, 4.4031e+00,
1.4804e+00, 9.0399e+00, 5.7978e+00, 5.3524e+00, 9.5817e+00, 5.2718e+00, 7.0251e+00, 4.9762e+02,
2.6313e+00, 3.8983e+00, 9.0516e+00, 7.5695e+00, 7.0696e-01, 2.0432e+00, 9.0906e+00, 4.6088e+00,
7.2563e+00, 4.3020e+00, 8.6304e+00, 6.5567e+00, 1.1942e+00, 2.7330e+00, 6.6654e+00, 9.0857e+00,
9.2479e+00, 8.3414e+00, 8.9729e+00, 3.3245e+00, 4.6757e+00, 7.0839e-01, 5.3962e+00, 6.2499e+00,
1.8298e+00, 9.3070e+00, 1.9438e+00, 3.6832e+00, 9.3978e-01, 9.2698e+00, 2.1206e+00, 6.9575e+00,
6.5007e+00, 1.6748e+00, 6.1218e-02, 4.8747e-02

5.1066e+00, 2.2933e+00, 8.6797e+00, 7.2919e-01, 7.2098e+00, 4.3594e+00, 9.1195e+00, 8.8497e+00,


9.8206e-02, 6.9565e+00, 7.6846e+00, 6.6799e+00, 1.4917e+00, 5.8011e+00, 9.0135e+00, 2.2531e+00,
5.3351e+00, 5.8186e+00, 9.9970e+00, 5.4067e+00, 9.3962e+00, 6.0833e+00, 2.5316e+00, 2.6893e+00,
9.8905e-01, 4.6454e+00, 1.3653e+00, 1.1093e+00, 1.4451e-01, 8.8387e-01, 8.1703e+00, 7.1188e+00,
3.1111e+00, 3.4737e-01, 1.6410e+00, 1.9722e+00, 1.3014e+00, 5.7842e+00, 8.2327e+00, 4.8731e+00,
3.2267e+00, 4.3788e+00, 2.8001e+00, 4.7796e+00, 4.9333e+00, 2.4483e+00, 8.4462e+00, 1.5768e+00,
4.3687e+00, 4.5915e+00, 4.2117e+00, 3.7847e+00, 8.2708e-01, 6.5050e-01, 4.9539e+00, 3.0484e+00,
1.5899e+00, 3.7118e+00, 6.8732e+00, 4.6325e+00, 7.9905e+00, 1.1253e+00, 5.8394e+00, 7.9412e+00,
4.6293e+02, 9.7887e+00, 3.0150e+00, 3.2403e+00, 7.0591e+00, 1.5313e+00, 1.5980e+00, 1.5970e+00,
8.0776e+00, 9.0078e+00, 7.9114e+00, 2.8782e+00, 4.1020e+00, 7.2314e+00, 2.0902e+00, 3.5555e+00,
5.6186e+00, 5.7298e+00, 3.3491e+00, 8.9093e+00, 5.6313e+00, 8.3570e+00, 3.5638e+00, 8.4762e+00,
6.8928e+00, 7.7807e+00, 1.7397e+00, 4.4779e+00, 1.9928e-01, 6.5387e+00, 5.9932e+00, 5.3885e+00,
5.6159e+00, 1.6697e+00, 4.1817e+00, 4.8360e+00

4.0356e+00, 2.8186e+00, 8.3949e+00, 4.9111e+00, 3.9143e+00, 5.4327e+00, 3.1247e+00, 7.0249e+00,


1.2511e+00, 5.4106e-01, 9.5409e+00, 2.1587e+00, 2.1734e+00, 8.6144e+00, 6.4454e+00, 4.4348e+00,
9.4940e+00, 9.8498e+00, 8.8364e+00, 2.3962e+00, 5.5063e+00, 5.4604e+00, 1.7166e+00, 6.2834e+00,
6.9696e+00, 2.8231e+00, 8.3869e+00, 1.9112e+00, 8.4797e+00, 6.2144e+00, 3.9305e-01, 1.6509e+00,
4.6348e+00, 5.3146e+00, 7.4211e+00, 7.6429e+00, 8.4962e+00, 3.0421e+00, 9.2506e+00, 6.3031e+00,
B. Ejemplo de solución de un sistema de tamaño 100 × 100 417

1.4330e+00, 8.2520e+00, 3.3273e-01, 1.8487e+00, 8.4505e+00, 1.7629e+00, 7.4971e+00, 5.5414e+00,


8.8355e+00, 5.1615e+00, 5.4317e+00, 8.1619e+00, 7.5813e+00, 8.6691e-01, 2.2335e+00, 2.1528e+00,
5.5909e+00, 1.0908e+00, 2.3956e-02, 6.5263e+00, 8.9283e+00, 6.7272e+00, 4.6429e+00, 9.2718e+00,
4.6283e+00, 5.0754e+02, 6.7691e+00, 1.8885e+00, 7.3892e+00, 7.9573e+00, 2.5461e+00, 1.8325e+00,
2.1575e+00, 4.9077e+00, 7.3225e+00, 1.7923e+00, 3.7889e+00, 3.3512e+00, 6.9464e+00, 2.5205e+00,
8.7587e+00, 9.7123e+00, 2.0442e+00, 8.6270e+00, 2.2637e-01, 9.7846e+00, 9.1750e+00, 1.3863e+00,
5.9071e+00, 2.3711e+00, 4.6537e+00, 5.8561e-01, 4.2140e+00, 7.6844e-01, 7.6630e+00, 1.1118e+00,
6.2663e+00, 7.7550e+00, 3.0066e+00, 1.7259e+00

7.7718e+00, 1.8248e+00, 5.4384e+00, 4.4554e+00, 6.1957e+00, 6.3935e+00, 2.4625e+00, 2.4896e-02,


8.3503e+00, 1.7491e-01, 3.6105e+00, 4.3068e+00, 1.8049e+00, 5.4272e+00, 7.5435e+00, 9.2519e+00,
1.0261e+00, 6.0658e+00, 1.9352e+00, 2.6250e+00, 3.9732e+00, 2.5025e+00, 2.4697e+00, 3.3244e-01,
5.2680e+00, 8.5015e+00, 5.9655e-01, 6.3591e+00, 7.7137e+00, 3.7465e+00, 3.6897e+00, 9.7794e+00,
9.2766e+00, 6.6075e+00, 1.3583e+00, 4.9597e+00, 8.8182e-01, 6.3562e+00, 9.0152e+00, 3.7773e-01,
2.3427e+00, 3.9465e-01, 6.2735e+00, 6.1684e+00, 2.9941e+00, 2.9650e+00, 4.6065e+00, 8.0525e-01,
3.0836e+00, 7.4647e+00, 3.1111e+00, 9.1739e+00, 1.6662e+00, 5.0657e+00, 6.7656e+00, 2.9064e+00,
1.7946e+00, 2.2405e+00, 2.6653e+00, 3.2890e+00, 4.8678e+00, 8.5842e+00, 9.0757e+00, 9.1670e+00,
2.6187e+00, 5.9162e+00, 4.5852e+02, 9.0276e+00, 9.1486e+00, 2.3876e+00, 2.8499e+00, 6.1712e+00,
6.5490e+00, 7.9275e-01, 6.1230e+00, 8.4757e+00, 9.6933e+00, 2.2391e+00, 2.0313e+00, 3.8491e+00,
3.1166e+00, 1.4398e+00, 3.6264e+00, 6.1024e+00, 3.5642e+00, 3.0626e+00, 4.2732e-01, 1.9330e+00,
6.4659e+00, 5.2337e+00, 1.7178e+00, 4.0521e+00, 7.4713e+00, 9.0107e+00, 8.9966e+00, 4.0241e+00,
2.3187e+00, 5.0452e+00, 8.5277e+00, 1.7620e-01

7.3377e+00, 2.0934e+00, 6.3202e+00, 2.2096e+00, 3.8310e-01, 9.3489e+00, 8.3705e+00, 5.4410e+00,


6.1387e+00, 2.0742e+00, 1.9834e+00, 1.1424e+00, 5.7984e+00, 8.5504e-01, 7.1200e+00, 3.8529e+00,
6.9400e+00, 1.7448e+00, 7.7966e+00, 3.9092e+00, 8.6974e+00, 1.2737e+00, 1.6738e+00, 5.2364e+00,
6.4201e+00, 2.5848e+00, 1.2442e+00, 9.0355e+00, 3.7816e+00, 2.8907e+00, 6.0512e+00, 3.6436e+00,
6.1578e+00, 6.8320e+00, 5.5618e+00, 6.4379e+00, 3.4897e+00, 5.8071e+00, 9.7761e+00, 2.8095e+00,
4.1519e+00, 3.2195e+00, 3.8672e+00, 1.4148e+00, 4.5853e+00, 1.6862e+00, 4.8255e+00, 6.7056e+00,
4.8905e+00, 7.7892e+00, 9.7296e+00, 2.1357e+00, 7.2408e-01, 9.3326e+00, 1.4378e+00, 9.7155e+00,
6.1877e+00, 5.2409e+00, 1.1776e+00, 9.1190e+00, 7.1483e+00, 6.5045e+00, 1.1891e+00, 3.5103e+00,
9.8730e+00, 5.1923e+00, 7.8619e+00, 4.9369e+02, 9.0626e+00, 5.5813e+00, 3.8093e+00, 8.7107e+00,
3.6091e+00, 1.9660e+00, 2.9860e+00, 6.3606e+00, 8.6327e+00, 7.5778e+00, 7.9895e-01, 6.7080e+00,
6.6114e+00, 7.2929e+00, 7.0518e+00, 6.2227e+00, 3.4755e+00, 1.8968e+00, 3.9018e+00, 5.1846e-01,
5.4860e+00, 3.2293e+00, 9.9598e+00, 4.0817e+00, 1.8851e+00, 7.5898e+00, 7.4167e+00, 4.5831e+00,
5.3137e-01, 7.6625e+00, 4.0513e+00, 2.0443e+00

4.4539e+00, 6.1699e+00, 2.3719e+00, 3.1074e+00, 3.3097e+00, 7.8871e+00, 5.0923e+00, 6.1398e+00,


4.9953e+00, 6.4548e+00, 1.2613e+00, 1.9532e+00, 3.9728e-01, 9.9998e+00, 4.3377e+00, 8.8434e+00,
3.9882e+00, 1.9963e+00, 1.0449e+00, 7.6457e+00, 8.7202e+00, 5.4223e+00, 2.3311e+00, 8.0231e+00,
3.7379e+00, 3.8028e+00, 1.1000e+00, 9.1286e+00, 7.0707e+00, 7.6094e+00, 7.8212e+00, 8.2771e+00,
1.2567e+00, 1.2534e+00, 2.2377e+00, 7.4143e+00, 8.6025e+00, 9.3381e-01, 6.9453e+00, 4.6570e+00,
8.4308e+00, 1.4467e+00, 4.5943e+00, 4.4447e+00, 3.5797e-01, 8.7367e+00, 6.2100e+00, 5.3735e+00,
8.1176e+00, 5.0978e+00, 5.1052e+00, 2.6606e+00, 2.6980e+00, 9.8994e+00, 1.3229e+00, 3.3286e+00,
5.1344e+00, 8.1701e-01, 4.1543e+00, 7.8701e+00, 2.4289e+00, 5.1623e+00, 5.6745e+00, 6.0992e+00,
3.2551e+00, 6.9127e+00, 9.1304e+00, 2.0956e+00, 4.7109e+02, 9.2223e+00, 1.2008e+00, 4.3643e+00,
3.2799e+00, 2.1183e+00, 3.6486e+00, 2.3282e+00, 6.0591e+00, 7.9748e+00, 8.0676e+00, 2.1355e+00,
3.0799e+00, 6.5412e-01, 5.0385e-01, 1.0786e+00, 9.3526e+00, 4.0434e-01, 8.0216e+00, 3.7772e-01,
1.9698e-01, 6.6221e+00, 6.8908e+00, 2.6062e+00, 8.0194e+00, 5.3600e+00, 2.3153e+00, 3.5012e+00,
6.5403e+00, 4.4845e+00, 5.1147e+00, 8.1819e-01

7.4379e-01, 5.9828e+00, 7.6638e+00, 7.2416e+00, 4.1071e+00, 1.0383e+00, 2.2900e+00, 7.6037e+00,


5.5836e+00, 9.2730e+00, 3.1999e+00, 8.9953e+00, 5.0314e+00, 8.5445e+00, 2.3873e+00, 8.3162e+00,
418

5.6199e+00, 4.2265e+00, 2.0103e+00, 2.8978e+00, 9.0797e+00, 9.5225e+00, 8.5538e+00, 7.4377e+00,


4.7516e+00, 5.9090e+00, 5.2737e+00, 7.3745e+00, 9.8505e+00, 6.8561e+00, 1.8093e+00, 7.3138e+00,
3.0805e+00, 4.1679e+00, 9.6312e+00, 3.2344e+00, 7.2957e+00, 6.0408e-01, 7.3327e+00, 4.0039e+00,
6.8456e+00, 1.8854e+00, 1.1971e+00, 7.3467e+00, 5.8415e+00, 1.0378e-01, 8.8491e-01, 2.5782e+00,
4.1347e+00, 9.7243e+00, 7.2475e+00, 1.5596e+00, 2.7925e+00, 2.8021e+00, 4.6708e+00, 5.8954e+00,
2.8522e+00, 6.4715e+00, 8.7360e+00, 1.8006e+00, 6.6597e+00, 5.1328e+00, 9.4030e+00, 4.8463e+00,
4.2492e-01, 3.3783e+00, 9.0067e+00, 7.0235e+00, 9.9672e+00, 5.2340e+02, 2.3738e+00, 1.7443e+00,
7.4660e+00, 4.1434e+00, 8.0352e+00, 2.6711e+00, 9.9169e+00, 8.4491e+00, 1.0261e+00, 1.3657e+00,
6.2391e+00, 2.8794e+00, 6.9205e+00, 8.1250e+00, 3.6319e-02, 9.9651e+00, 9.3807e+00, 5.9720e+00,
2.6885e+00, 7.4177e+00, 9.5280e+00, 9.2962e-01, 4.8550e-01, 9.7831e+00, 8.7381e+00, 6.3187e+00,
5.4136e-01, 2.8169e+00, 1.0843e+00, 2.1045e+00

5.4151e+00, 7.3836e+00, 7.9487e+00, 7.1336e+00, 8.6090e+00, 2.8038e-01, 5.3595e+00, 2.7110e+00,


7.7167e+00, 4.3748e+00, 3.8992e+00, 1.9037e+00, 5.0226e+00, 6.7580e+00, 2.7047e+00, 4.5857e-01,
3.1782e+00, 3.1930e+00, 6.6986e-02, 9.1278e+00, 2.5092e+00, 7.7166e+00, 1.6162e+00, 2.1647e+00,
6.4548e+00, 1.5613e+00, 3.2057e+00, 5.4064e+00, 9.8406e+00, 9.6336e+00, 2.5748e+00, 9.3614e+00,
7.7549e+00, 9.7628e+00, 2.6879e+00, 1.7724e-01, 1.0013e-01, 4.7855e+00, 8.7937e+00, 2.2671e+00,
1.0154e+00, 3.4097e+00, 7.7114e+00, 8.8348e+00, 3.6283e+00, 1.2900e+00, 9.3225e+00, 9.6453e-01,
8.6455e+00, 8.0259e+00, 5.8282e+00, 8.5640e+00, 1.8938e+00, 4.0761e-01, 9.1820e+00, 4.3533e+00,
3.7997e+00, 2.0109e+00, 5.5915e+00, 8.7882e+00, 8.4273e+00, 8.4871e+00, 6.5286e+00, 6.9017e+00,
1.0118e+00, 3.7192e+00, 5.4579e+00, 2.3463e+00, 7.4385e+00, 9.7324e+00, 5.1185e+02, 2.9132e+00,
8.3798e+00, 1.8708e+00, 7.4927e+00, 9.0184e+00, 3.3715e+00, 1.0134e+00, 6.6457e+00, 9.3355e+00,
5.0237e+00, 3.1136e+00, 4.6543e+00, 7.5467e+00, 5.0497e+00, 2.5313e+00, 5.5742e+00, 8.4593e+00,
2.9073e-01, 7.7058e+00, 3.3733e+00, 1.6111e+00, 4.4403e+00, 1.2967e+00, 3.1927e+00, 1.0369e+00,
3.4367e+00, 5.5312e+00, 6.4704e+00, 7.7645e+00

4.3093e+00, 8.1183e+00, 4.4099e+00, 5.1217e-01, 5.9434e+00, 2.9461e+00, 1.9911e+00, 4.8339e+00,


5.2864e+00, 8.5129e+00, 1.8435e+00, 4.6489e+00, 7.4793e+00, 9.1995e+00, 2.0370e+00, 9.9986e+00,
2.3578e+00, 6.5057e+00, 2.7218e-01, 8.7320e+00, 3.5454e+00, 2.3191e-01, 6.5399e+00, 3.2702e+00,
8.3351e+00, 7.2264e+00, 9.8386e-02, 6.6479e+00, 6.1139e+00, 3.6931e+00, 7.4355e+00, 6.8858e+00,
7.2255e+00, 6.6286e-01, 5.8385e+00, 6.5214e+00, 5.0524e+00, 9.9659e+00, 3.8895e+00, 4.8881e+00,
8.2843e+00, 9.0821e+00, 8.1836e+00, 9.8872e+00, 5.3363e+00, 2.9529e-01, 4.1055e+00, 3.8120e+00,
8.3709e+00, 3.2835e+00, 5.1231e+00, 7.1218e+00, 1.1304e+00, 6.6943e-01, 6.1706e+00, 9.0305e+00,
2.6806e+00, 2.1447e-01, 4.8678e+00, 5.4912e+00, 5.9750e+00, 7.8569e-01, 3.7473e+00, 7.0571e+00,
8.7702e+00, 9.7976e-01, 6.5662e+00, 2.7393e+00, 3.9104e+00, 4.3553e+00, 8.9945e+00, 5.1124e+02,
8.7434e+00, 3.3937e+00, 3.5936e+00, 7.7737e+00, 8.6029e+00, 9.5413e+00, 1.4585e+00, 1.5119e-01,
4.5633e+00, 4.4819e+00, 8.9594e+00, 7.7787e+00, 2.6796e+00, 6.9540e+00, 5.5143e+00, 4.5048e+00,
2.2706e+00, 6.9094e+00, 8.0101e+00, 6.8770e+00, 1.6621e+00, 8.7230e+00, 7.1823e+00, 5.0181e-01,
5.6283e+00, 1.6739e+00, 7.2006e+00, 2.0852e+00

8.7010e+00, 3.9618e-01, 1.1409e+00, 9.2239e+00, 2.5362e+00, 9.4554e+00, 9.0419e+00, 9.7829e+00,


4.8541e+00, 3.7923e+00, 6.8939e+00, 8.0154e+00, 3.5403e+00, 9.1380e+00, 1.5685e+00, 3.3616e+00,
4.4330e+00, 8.5974e+00, 1.8058e+00, 1.5440e+00, 2.6435e+00, 2.3611e+00, 1.5316e+00, 8.2837e+00,
4.7674e+00, 4.7534e+00, 2.8837e+00, 4.0790e+00, 7.2068e+00, 3.1345e+00, 1.9615e+00, 6.8363e+00,
6.1951e+00, 6.0641e+00, 6.3898e+00, 8.5699e+00, 2.4977e+00, 2.5379e+00, 5.8548e+00, 2.4811e+00,
6.6470e+00, 6.5988e-01, 9.4227e-02, 7.3972e+00, 5.5143e+00, 1.7167e+00, 2.7430e+00, 9.9292e+00,
7.3875e+00, 3.6976e+00, 3.3196e+00, 1.7063e+00, 6.4483e+00, 3.1159e+00, 8.0134e-01, 6.4317e+00,
4.2621e+00, 4.9281e+00, 9.3257e+00, 7.3478e+00, 5.2351e+00, 6.9614e+00, 2.1011e+00, 9.2467e+00,
3.0151e+00, 5.0839e+00, 2.6215e+00, 4.9492e+00, 9.8140e+00, 6.8674e+00, 5.3552e+00, 9.1508e+00,
4.8201e+02, 6.9801e+00, 5.7339e-01, 1.6564e+00, 1.7690e-01, 6.0041e+00, 9.4695e-01, 6.2613e+00,
6.5956e+00, 7.7542e-01, 5.8355e+00, 5.0519e-01, 7.7522e-01, 4.7832e+00, 8.3404e+00, 9.0460e+00,
4.7868e+00, 7.5996e+00, 2.7866e+00, 8.8048e+00, 4.4813e+00, 2.2056e+00, 2.4091e-01, 5.1029e+00,
7.2713e+00, 1.6664e+00, 6.3838e+00, 1.6557e+00
B. Ejemplo de solución de un sistema de tamaño 100 × 100 419

5.4943e-01, 6.4479e+00, 5.7775e+00, 6.8339e+00, 4.7089e+00, 9.9236e+00, 1.6630e+00, 3.0925e+00,


8.1272e+00, 4.9197e-02, 1.8807e+00, 9.3330e+00, 8.5431e+00, 9.6419e+00, 4.2266e+00, 9.0599e+00,
3.6684e+00, 7.0656e+00, 1.9363e+00, 5.1208e+00, 4.4036e+00, 9.6043e+00, 1.0418e+00, 9.5031e-01,
6.1352e+00, 2.1670e+00, 9.9758e+00, 9.1889e+00, 2.8140e+00, 7.8701e-01, 5.0834e+00, 2.7174e+00,
3.3503e+00, 1.3636e+00, 9.1539e+00, 4.5261e+00, 3.3427e+00, 5.6619e+00, 6.2735e+00, 6.5617e+00,
4.1419e-01, 6.6529e+00, 5.0421e+00, 4.7881e+00, 7.5583e+00, 2.1638e+00, 4.0079e+00, 9.9878e+00,
4.4640e+00, 7.9486e+00, 5.3838e+00, 2.2874e+00, 3.3812e+00, 8.2136e+00, 5.7510e+00, 3.5506e+00,
6.0625e+00, 1.2648e+00, 2.0116e+00, 9.3017e+00, 9.5587e+00, 7.5293e+00, 7.4625e+00, 4.7051e+00,
4.2057e+00, 5.4522e+00, 6.0827e+00, 1.4170e+00, 1.7766e+00, 2.3383e+00, 6.2733e+00, 6.6231e+00,
4.6912e+00, 5.2183e+02, 9.7168e+00, 6.2243e+00, 7.1607e+00, 3.9047e+00, 2.9367e-01, 7.1057e+00,
6.9543e+00, 7.5932e+00, 6.7044e+00, 4.9755e+00, 7.1751e+00, 1.4853e+00, 7.9030e+00, 9.5794e+00,
9.9773e+00, 8.7984e+00, 9.7513e+00, 1.0705e+00, 3.1082e+00, 2.8117e+00, 3.3741e+00, 2.6889e+00,
3.2127e+00, 2.3631e-01, 9.2565e+00, 8.6370e+00

6.2349e+00, 8.2675e+00, 3.0915e+00, 9.5153e+00, 6.4776e+00, 7.7772e-01, 9.7320e+00, 2.7824e+00,


7.0861e+00, 6.5599e+00, 8.2481e+00, 3.2123e+00, 9.6850e+00, 4.6455e+00, 4.0439e+00, 3.7702e+00,
3.0897e+00, 5.9471e+00, 6.1437e+00, 6.8930e+00, 1.7052e+00, 9.2227e+00, 5.9784e+00, 2.9180e+00,
8.3256e+00, 6.6076e+00, 3.7750e+00, 4.2265e+00, 8.7035e+00, 4.5188e+00, 5.8684e+00, 5.2913e+00,
4.0783e+00, 5.8399e+00, 3.5569e+00, 8.7594e+00, 3.2632e+00, 8.5056e+00, 7.9025e+00, 4.6505e+00,
3.2721e+00, 3.8961e+00, 1.1810e+00, 8.5451e+00, 9.9691e+00, 1.5888e+00, 3.8152e+00, 8.6208e+00,
9.5925e+00, 5.6774e+00, 3.2421e-01, 9.3303e+00, 3.6427e+00, 8.2003e+00, 8.5895e+00, 2.8566e+00,
3.5005e-02, 5.2736e+00, 1.2382e+00, 6.6443e+00, 4.5839e-01, 8.7994e+00, 8.5002e+00, 2.9242e+00,
7.2944e+00, 1.9268e+00, 5.3317e+00, 4.2777e+00, 1.1668e+00, 8.8242e+00, 1.7123e+00, 2.2330e+00,
5.5651e+00, 5.1307e+00, 5.3101e+02, 8.0956e+00, 5.2604e+00, 8.6275e+00, 5.5375e+00, 5.3866e+00,
8.8217e+00, 7.8006e+00, 1.8406e+00, 7.4066e-01, 7.1857e+00, 1.5302e+00, 2.6050e+00, 1.5949e+00,
8.4716e+00, 3.6769e+00, 1.8880e+00, 2.9953e+00, 7.6020e+00, 8.8070e+00, 2.8865e+00, 4.8814e+00,
7.2802e+00, 3.7091e+00, 9.4644e+00, 2.5282e+00

8.3821e-01, 9.3962e-01, 9.0651e+00, 7.5836e+00, 9.7684e+00, 5.5401e+00, 7.8507e+00, 9.5979e+00,


5.2357e-01, 8.9847e+00, 7.4918e+00, 8.1218e+00, 9.0136e+00, 9.5195e+00, 1.6220e+00, 2.0307e+00,
2.5553e+00, 8.8543e+00, 7.9388e+00, 9.6614e-01, 6.5224e+00, 4.2800e+00, 5.2743e+00, 9.9776e+00,
4.9716e+00, 5.7031e+00, 9.0768e+00, 1.2182e+00, 6.6702e+00, 6.5407e+00, 9.0197e+00, 6.2244e-
01, 5.7136e+00, 2.2305e+00, 9.2919e-01, 7.0052e-01, 7.4392e+00, 3.1477e+00, 1.1981e-01, 9.8568e-01,
8.7492e+00, 1.4941e+00, 5.0998e+00, 8.6262e+00, 1.8362e-01, 1.8990e+00, 8.1417e+00, 6.7069e+00,
7.3798e+00, 9.6858e+00, 7.8281e+00, 2.0282e+00, 8.5725e+00, 3.9113e+00, 1.9753e+00, 9.7966e+00,
8.7533e+00, 6.3210e+00, 1.7250e+00, 8.5766e+00, 3.6707e+00, 1.8714e+00, 1.7271e+00, 7.9230e+00,
6.4281e+00, 5.7696e+00, 1.5860e+00, 2.9228e+00, 5.9096e+00, 2.9165e+00, 1.6976e+00, 3.3753e+00,
4.0825e+00, 4.0588e+00, 6.0571e+00, 5.2866e+02, 7.9142e+00, 3.2792e+00, 2.5611e+00, 4.8088e+00,
2.4383e+00, 8.5998e+00, 5.6356e+00, 9.8872e-01, 2.9225e+00, 1.2517e+00, 8.5611e+00, 4.3315e+00,
5.3457e+00, 4.7938e+00, 7.9062e+00, 7.5690e+00, 5.6305e+00, 8.4672e+00, 3.7771e+00, 6.9425e+00,
8.7528e+00, 2.1178e+00, 7.8471e+00, 2.1167e+00

8.5911e+00, 8.8881e+00, 2.2237e+00, 4.7963e+00, 2.2610e+00, 1.5030e+00, 2.7493e+00, 6.1470e+00,


7.8012e+00, 2.9575e+00, 4.1635e+00, 2.9775e-02, 8.1061e+00, 3.6328e+00, 6.1090e+00, 6.0699e+00,
3.2131e+00, 1.8028e-01, 3.4332e+00, 1.8636e+00, 9.3988e+00, 5.4322e+00, 4.2750e+00, 4.6183e+00,
2.6062e+00, 8.5629e+00, 5.8619e+00, 7.7896e+00, 7.4058e+00, 5.1305e+00, 2.1745e-01, 6.9659e+00,
6.0604e+00, 4.1350e+00, 9.2719e+00, 9.8675e+00, 5.4214e-01, 6.1457e+00, 8.5732e-02, 1.2664e+00,
9.4252e+00, 6.4617e-01, 9.4914e+00, 7.6573e+00, 9.7502e+00, 3.7519e+00, 4.4684e+00, 8.7192e+00,
2.1081e+00, 1.8377e+00, 4.1987e+00, 8.1816e+00, 8.3453e+00, 6.6306e+00, 2.3399e+00, 9.9972e+00,
8.9243e+00, 9.2259e+00, 6.9961e+00, 2.7722e+00, 5.3449e-01, 6.6933e+00, 6.1511e+00, 1.9046e+00,
8.9861e+00, 8.7732e-02, 8.2252e+00, 7.0327e+00, 4.4440e-02, 1.2693e+00, 9.4127e+00, 7.9341e+00,
4.1669e+00, 5.8644e+00, 4.6444e+00, 2.6928e+00, 5.2091e+02, 6.2085e+00, 1.7199e+00, 5.2220e+00,
420

9.2786e+00, 7.5762e+00, 8.7393e+00, 2.5741e+00, 9.1696e+00, 6.3426e+00, 6.5871e+00, 6.1375e+00,


2.2062e+00, 5.0201e+00, 7.1929e+00, 9.2929e+00, 2.2831e+00, 1.6954e+00, 5.8489e+00, 7.8177e-01,
4.0325e+00, 8.8848e+00, 4.1193e+00, 7.1589e+00

6.2779e-02, 7.4401e+00, 5.1460e+00, 3.7088e+00, 5.6858e+00, 7.5843e+00, 9.1169e+00, 3.4227e+00,


1.7190e+00, 6.2565e+00, 8.9197e+00, 5.6433e+00, 3.0797e+00, 4.5306e-01, 4.3620e+00, 7.0944e+00,
7.1101e+00, 7.1807e+00, 7.0691e+00, 7.7949e-01, 8.2353e+00, 6.2346e+00, 4.0718e+00, 6.8018e+00,
7.5836e+00, 6.1241e+00, 1.2982e+00, 1.3307e+00, 3.7075e+00, 4.8002e+00, 1.6331e+00, 4.0292e+00,
5.3904e+00, 2.9849e+00, 1.3439e+00, 8.7547e-01, 7.2572e+00, 1.8999e+00, 4.0784e-01, 1.3868e+00,
9.3001e+00, 7.4142e+00, 2.5904e+00, 9.0049e+00, 1.1120e+00, 7.5271e+00, 4.6701e-01, 7.7332e+00,
7.9613e+00, 1.0340e+00, 2.9817e+00, 5.2136e+00, 1.0868e+00, 4.1328e+00, 7.9518e+00, 1.4556e+00,
7.0348e+00, 7.6291e+00, 6.2059e+00, 7.2943e-01, 3.4364e+00, 1.9032e+00, 1.5538e-01, 9.7212e+00,
5.9472e-01, 6.7240e+00, 3.2065e+00, 2.7509e+00, 2.2776e+00, 4.8948e+00, 6.5628e+00, 4.8787e+00,
7.2090e+00, 2.1922e+00, 6.0257e+00, 9.0516e+00, 4.2582e+00, 4.8712e+02, 4.7236e+00, 6.0151e+00,
7.1700e+00, 5.7583e+00, 6.5220e+00, 7.9351e+00, 9.9383e+00, 8.3931e+00, 3.5093e+00, 7.6982e+00,
4.9581e+00, 4.1566e+00, 5.2442e+00, 5.4449e+00, 1.9050e+00, 2.6901e+00, 8.4068e+00, 3.0853e+00,
1.3956e+00, 7.2098e+00, 2.5804e+00, 9.5068e+00

5.6735e+00, 7.6629e+00, 1.0467e-01, 3.5551e+00, 2.3676e+00, 4.9458e+00, 6.1367e+00, 3.3785e+00,


3.5332e+00, 2.5692e+00, 4.7047e+00, 4.4132e+00, 4.8099e+00, 4.6087e+00, 1.5155e+00, 5.2328e+00,
5.1230e-01, 3.2769e+00, 3.5623e+00, 1.5042e+00, 3.5931e+00, 4.7459e+00, 5.3444e+00, 2.9788e+00,
7.6548e+00, 6.3762e+00, 3.2557e-01, 1.4014e+00, 1.0359e+00, 9.3731e+00, 4.8228e+00, 4.2368e+00,
7.4751e+00, 8.0533e+00, 5.8364e-01, 7.1936e+00, 4.7510e-01, 3.8358e+00, 1.0134e+00, 2.4489e+00,
1.2870e+00, 8.7795e+00, 7.3324e+00, 6.9406e+00, 2.0131e+00, 5.0465e+00, 5.5858e+00, 5.2851e+00,
3.2305e+00, 4.3678e+00, 5.0107e+00, 7.1647e+00, 1.5258e+00, 4.8472e+00, 7.5989e-01, 1.7664e-01,
2.0645e+00, 2.8603e+00, 7.5145e+00, 9.4987e-01, 2.3279e+00, 3.2641e+00, 1.1565e-01, 8.2379e+00,
7.3850e-01, 3.1967e+00, 5.4215e-01, 6.4657e+00, 5.2185e+00, 6.8618e+00, 1.9233e+00, 6.1086e+00,
8.6071e+00, 9.2519e+00, 1.0551e+00, 9.2719e+00, 2.0337e+00, 8.0166e+00, 4.5369e+02, 1.2014e+00,
1.3508e+00, 9.9461e+00, 9.7056e+00, 9.3370e+00, 6.7331e+00, 1.7227e+00, 3.5544e+00, 2.0056e+00,
9.0352e+00, 1.5291e+00, 5.6330e+00, 6.7841e+00, 7.4022e+00, 9.3069e+00, 4.1807e+00, 7.1652e+00,
8.2086e+00, 4.7088e+00, 8.1637e+00, 9.1267e+00

4.9103e+00, 8.4855e+00, 8.6764e-01, 8.2244e+00, 2.4920e-01, 3.1222e+00, 1.1563e+00, 9.2787e+00,


3.8696e+00, 6.0681e+00, 4.5442e+00, 7.8581e+00, 8.1870e-01, 9.5262e+00, 7.3015e+00, 2.5164e-01,
9.2134e-02, 3.5311e+00, 3.7174e+00, 5.3112e+00, 4.9798e+00, 9.5152e-02, 3.3496e+00, 7.5959e+00,
2.6682e+00, 4.5173e+00, 9.2389e+00, 8.6067e+00, 9.7872e+00, 3.9358e+00, 2.6819e+00, 5.8025e+00,
9.2072e+00, 3.5528e+00, 4.8144e+00, 4.3574e+00, 3.4171e+00, 3.1509e+00, 7.5362e+00, 3.9563e+00,
3.7529e+00, 3.8250e+00, 1.5176e+00, 2.2133e+00, 7.4697e+00, 2.6261e+00, 9.3837e+00, 4.7468e+00,
1.6312e+00, 6.2084e+00, 7.9338e+00, 3.6406e+00, 4.9531e+00, 5.7552e+00, 3.7327e+00, 3.4160e+00,
8.0684e-01, 2.3817e+00, 4.2205e+00, 5.5070e-02, 9.4022e+00, 9.9433e+00, 5.0822e+00, 6.2830e-01,
8.8502e+00, 8.2782e+00, 5.8132e+00, 2.6817e+00, 2.6147e+00, 5.3464e+00, 3.8134e+00, 8.8409e+00,
3.2596e-02, 1.0388e+00, 2.4985e+00, 4.7036e-02, 6.6676e+00, 7.9617e+00, 5.7708e+00, 4.8752e+02,
8.2231e+00, 7.0263e+00, 6.1969e+00, 4.5773e+00, 8.6795e+00, 5.2190e+00, 9.3461e+00, 8.9427e+00,
2.9463e+00, 5.6704e-01, 4.5436e-01, 7.5477e+00, 9.1201e+00, 4.0462e-01, 7.2512e+00, 2.1630e-01,
4.2259e+00, 6.9586e+00, 8.7843e-01, 2.5587e+00

8.6878e+00, 2.8437e+00, 5.8713e+00, 5.7193e+00, 7.3977e+00, 4.4980e+00, 3.1477e+00, 5.6629e+00,


9.2298e+00, 8.4343e-01, 5.5695e+00, 1.9439e+00, 2.7003e+00, 9.6088e+00, 4.3415e+00, 1.9040e+00,
7.8570e+00, 2.8994e+00, 6.5641e+00, 6.0577e+00, 5.1929e+00, 2.4492e+00, 6.0343e+00, 9.2884e+00,
4.1062e+00, 3.0659e+00, 3.3958e+00, 9.1539e+00, 2.5410e+00, 1.5697e+00, 2.7720e+00, 1.2269e+00,
4.6521e+00, 2.1155e+00, 3.2805e+00, 7.3297e+00, 4.9241e+00, 6.0064e+00, 6.4133e+00, 7.5614e+00,
1.6027e+00, 1.0378e+00, 7.6076e+00, 4.1317e+00, 4.3076e+00, 3.6861e+00, 5.2989e-01, 5.8418e-01,
5.7354e+00, 4.8931e-01, 8.2721e+00, 1.5873e+00, 6.1133e+00, 1.6322e-01, 8.7793e+00, 7.3234e+00,
B. Ejemplo de solución de un sistema de tamaño 100 × 100 421

4.8757e+00, 1.0887e+00, 7.7481e+00, 2.1251e+00, 8.2204e+00, 5.2541e+00, 8.7205e+00, 6.9023e+00,


3.8343e+00, 1.5955e+00, 3.7961e+00, 6.0047e-02, 5.9495e+00, 3.1391e+00, 4.2319e+00, 1.8975e+00,
4.4436e-01, 9.8571e+00, 5.1490e-01, 6.4887e+00, 6.1987e-01, 1.2004e+00, 6.0331e+00, 4.1589e+00,
4.4801e+02, 2.7206e-01, 2.5235e+00, 9.3334e+00, 9.4133e+00, 8.4061e+00, 4.7216e+00, 4.8450e+00,
5.4239e-01, 7.7470e+00, 4.8204e+00, 1.4611e+00, 5.7139e+00, 1.6647e+00, 7.2026e+00, 8.9653e-01,
4.1278e+00, 2.2923e+00, 1.9228e+00, 6.2143e+00

8.3322e+00, 1.3946e+00, 2.3864e+00, 2.4845e+00, 5.3934e+00, 5.5883e+00, 4.8299e+00, 4.2363e+00,


1.9460e+00, 1.0690e+00, 3.0550e+00, 1.5587e+00, 2.7407e+00, 9.2162e-03, 9.8362e+00, 8.2636e+00,
1.6329e+00, 9.1559e+00, 4.5660e+00, 8.1961e+00, 8.5753e+00, 8.4549e+00, 2.5884e+00, 4.3344e+00,
2.1716e+00, 9.3338e+00, 7.7244e+00, 9.3972e+00, 2.5936e-01, 3.7121e-01, 3.4366e+00, 1.1453e+00,
6.3578e+00, 5.7422e+00, 5.4103e+00, 6.4918e+00, 1.8171e+00, 7.3707e+00, 6.6481e+00, 4.1899e+00,
9.4190e+00, 6.4922e+00, 2.4773e+00, 6.3923e+00, 1.9395e+00, 8.1115e+00, 4.3911e+00, 6.4090e+00,
1.7623e+00, 8.7850e+00, 1.6426e+00, 3.0478e+00, 1.0606e+00, 8.5137e+00, 8.8098e+00, 1.8278e+00,
1.9562e+00, 1.5008e+00, 7.5707e+00, 9.7722e+00, 2.2979e+00, 6.3401e+00, 4.1222e+00, 2.9607e+00,
6.9481e+00, 1.1795e+00, 6.3092e+00, 8.5460e+00, 6.3605e+00, 9.3215e+00, 5.5604e+00, 8.4126e+00,
1.4064e+00, 6.3515e+00, 4.1008e+00, 8.3769e+00, 3.9125e+00, 9.9807e+00, 9.8841e+00, 8.5334e+00,
7.1062e+00, 5.0371e+02, 6.1391e+00, 3.0806e+00, 1.4689e+00, 7.7643e+00, 5.3705e+00, 7.9473e+00,
3.5205e+00, 2.1208e-01, 2.7047e+00, 1.1090e+00, 1.0250e+00, 8.2299e+00, 8.1089e+00, 1.7974e+00,
2.8197e+00, 5.2776e+00, 9.6977e+00, 1.7202e+00

8.4698e+00, 6.9201e+00, 7.3925e-01, 1.9432e+00, 8.1800e+00, 7.6697e+00, 2.6035e+00, 2.5898e+00,


7.8545e+00, 1.7776e+00, 4.0374e+00, 6.6535e+00, 5.9650e+00, 1.7840e+00, 8.8449e+00, 4.7868e+00,
7.3260e+00, 2.2113e+00, 9.4796e+00, 4.4432e+00, 1.3417e+00, 8.0029e+00, 8.2209e+00, 1.3662e+00,
2.8144e+00, 6.6304e+00, 8.2458e+00, 5.9696e+00, 3.7998e-01, 7.4898e-01, 6.4651e+00, 1.3026e+00,
7.1195e+00, 2.1487e+00, 3.4262e+00, 6.1009e+00, 4.3725e+00, 8.3810e+00, 4.7056e+00, 8.8049e+00,
7.4682e+00, 7.7955e+00, 2.9665e+00, 1.3776e+00, 6.3542e+00, 6.5487e+00, 4.5930e+00, 7.6082e-01,
3.1420e+00, 8.2228e+00, 2.2561e+00, 5.6300e-01, 3.5444e-01, 5.2118e+00, 4.9045e+00, 9.3092e+00,
2.0131e+00, 5.8173e+00, 6.0052e+00, 1.7690e+00, 4.2822e+00, 9.2159e+00, 4.3818e+00, 6.3296e+00,
2.0065e+00, 1.9378e+00, 6.1205e+00, 2.9469e+00, 6.6603e+00, 6.6373e+00, 8.3489e+00, 1.9604e+00,
1.6948e+00, 9.0883e+00, 1.0429e+00, 3.7587e+00, 1.5820e+00, 7.5372e+00, 1.1307e+00, 1.5605e+00,
8.7833e+00, 9.1113e+00, 4.9459e+02, 8.0558e+00, 2.2272e+00, 8.9875e+00, 2.0928e-01, 9.3095e+00,
1.2957e+00, 3.8234e+00, 8.5233e+00, 8.7436e+00, 8.4587e+00, 3.6429e+00, 9.9644e+00, 1.2434e+00,
1.2886e+00, 8.8321e+00, 6.5843e+00, 4.3628e+00

3.4570e+00, 7.8703e-01, 6.2124e+00, 3.4384e+00, 8.9992e+00, 1.5652e+00, 8.1417e+00, 8.9296e-01,


1.6490e+00, 4.3349e+00, 1.4237e+00, 5.0505e+00, 3.4127e+00, 5.6622e+00, 2.6517e+00, 1.3197e+00,
9.1387e+00, 9.8016e+00, 9.7978e+00, 9.6220e+00, 9.4523e+00, 7.8998e+00, 1.5432e+00, 4.0532e-01,
9.2662e+00, 9.7823e+00, 1.4173e+00, 4.9490e+00, 9.9320e-01, 7.0553e+00, 6.3631e+00, 3.7627e+00,
9.8136e+00, 7.3485e+00, 1.9111e+00, 1.8842e+00, 5.3662e+00, 6.8410e+00, 8.4021e+00, 4.2357e+00,
2.0129e+00, 1.1513e+00, 5.0803e+00, 1.4185e+00, 8.6231e+00, 1.0363e+00, 8.6265e+00, 4.3933e+00,
7.2798e+00, 1.7738e+00, 9.2161e+00, 6.7725e+00, 7.5571e-01, 6.2294e-01, 1.0295e+00, 1.7318e+00,
2.8006e+00, 1.0349e+00, 8.3596e+00, 4.0067e+00, 2.2894e+00, 6.6669e+00, 5.1239e+00, 5.3041e+00,
4.0885e+00, 1.0288e+00, 5.6349e+00, 4.7595e+00, 6.2421e+00, 3.3387e+00, 4.5469e+00, 8.8792e+00,
4.4622e-01, 8.0602e+00, 6.7447e+00, 9.9731e-02, 6.0942e+00, 9.4656e+00, 5.1026e+00, 9.1926e-01,
1.8700e+00, 9.2374e+00, 4.4866e+00, 4.7261e+02, 7.9509e+00, 7.9863e+00, 9.4948e-02, 3.0859e-01,
1.3072e+00, 1.2580e+00, 3.3479e+00, 7.9133e-01, 5.5675e+00, 6.2168e+00, 4.0767e+00, 7.0967e+00,
8.8639e+00, 1.1467e+00, 7.2447e+00, 7.3216e-01

3.4853e+00, 1.7155e-02, 1.2985e-02, 2.3450e+00, 9.8936e+00, 9.5411e+00, 1.7174e+00, 9.5833e+00,


8.7302e+00, 7.9792e+00, 4.9686e+00, 4.2957e+00, 2.7038e+00, 4.0151e+00, 9.2443e-01, 8.1086e+00,
6.5205e+00, 4.1477e+00, 2.5320e+00, 6.6847e+00, 9.0216e+00, 3.8037e+00, 6.6334e+00, 1.3663e+00,
4.0824e+00, 7.3842e+00, 8.7687e+00, 9.0974e+00, 7.9661e+00, 7.9684e+00, 6.5318e+00, 2.2979e+00,
422

3.0815e+00, 9.4472e+00, 9.0264e+00, 2.6122e+00, 1.7276e+00, 8.4144e+00, 5.1176e+00, 4.9847e+00,


5.7995e+00, 5.9707e+00, 1.1907e+00, 9.2792e+00, 9.5841e+00, 4.0907e-01, 8.0044e+00, 2.3910e-01,
2.7638e+00, 7.2375e+00, 8.6850e+00, 1.3596e-01, 6.4188e+00, 5.7926e+00, 2.9612e+00, 9.6238e+00,
9.6846e+00, 7.7003e+00, 9.6152e+00, 1.0592e+00, 7.8824e+00, 7.5714e+00, 3.1004e+00, 6.3299e+00,
1.8168e+00, 6.9363e+00, 4.7266e+00, 6.1972e-01, 7.8686e+00, 6.4427e+00, 3.8837e-01, 9.5278e+00,
2.1338e+00, 5.6290e+00, 7.7610e+00, 9.1907e+00, 8.9870e+00, 5.5324e+00, 9.6766e+00, 7.2552e-01,
2.9860e+00, 5.0928e+00, 6.6571e-01, 7.2024e+00, 5.4760e+02, 3.4136e+00, 2.1122e+00, 5.6940e+00,
1.9659e+00, 9.8375e+00, 9.5891e+00, 9.1429e+00, 6.3692e+00, 8.0367e+00, 2.5850e+00, 5.8446e+00,
6.6009e+00, 2.6890e+00, 8.1806e-01, 9.4994e+00

6.5630e+00, 7.1135e+00, 7.8999e-01, 9.5211e+00, 1.6697e+00, 8.4871e+00, 6.4994e+00, 1.8394e+00,


5.0964e+00, 1.5191e+00, 8.4160e+00, 9.4254e+00, 5.5642e-01, 4.0774e+00, 3.5027e+00, 5.3818e+00,
7.9592e+00, 7.9903e+00, 8.5702e+00, 8.3916e+00, 7.8460e+00, 2.3967e+00, 1.3362e+00, 1.3632e+00,
1.6571e+00, 7.9203e+00, 5.2538e+00, 3.5432e+00, 7.7884e+00, 1.0317e+00, 5.4097e+00, 3.5029e+00,
1.1788e-01, 1.7242e+00, 6.1105e+00, 5.6903e+00, 9.0624e+00, 7.0083e+00, 9.5281e+00, 3.2658e+00,
1.8366e+00, 7.2457e+00, 3.8009e+00, 6.5791e+00, 6.0556e+00, 3.9747e+00, 8.1872e+00, 8.5809e+00,
7.1510e+00, 6.6076e+00, 5.4596e+00, 8.1055e+00, 4.5326e+00, 3.4196e+00, 9.7250e+00, 4.4581e+00,
5.4892e-01, 7.9457e+00, 2.0559e-02, 4.1437e+00, 1.8736e+00, 7.9671e+00, 2.4848e+00, 3.9050e+00,
9.0905e+00, 1.5236e+00, 7.8209e+00, 8.3913e+00, 3.9878e-01, 4.4422e+00, 6.7869e+00, 2.1242e+00,
1.1621e+00, 5.4374e+00, 8.3880e+00, 5.3490e+00, 3.5408e+00, 9.2790e+00, 8.6769e+00, 9.2342e+00,
2.1234e+00, 8.9500e+00, 5.3048e+00, 1.5139e+00, 7.3393e+00, 5.4010e+02, 6.5039e+00, 4.5028e-01,
7.0448e+00, 3.1954e+00, 7.6914e+00, 9.0136e+00, 7.5549e+00, 6.5928e+00, 4.3936e+00, 8.3675e+00,
2.7829e+00, 9.8453e+00, 9.4989e-01, 1.5386e+00

9.8434e+00, 6.4385e-01, 2.4386e+00, 6.0013e+00, 4.3290e+00, 4.6904e+00, 1.5633e+00, 5.0207e+00,


2.2213e-01, 7.3972e+00, 1.7813e+00, 2.0974e+00, 2.9428e+00, 3.1664e+00, 4.9052e+00, 2.9917e+00,
2.7075e+00, 1.1940e-01, 6.0283e+00, 4.5823e+00, 1.1716e+00, 2.2309e+00, 1.8599e+00, 3.1243e+00,
2.5697e+00, 4.6362e+00, 4.5593e+00, 6.7352e-01, 3.8934e+00, 6.5283e+00, 8.8030e+00, 7.0168e+00,
2.8561e+00, 3.1241e+00, 4.5678e+00, 5.8853e+00, 3.3510e+00, 7.5189e+00, 7.6347e+00, 5.8239e+00,
4.5371e+00, 3.6582e+00, 3.8091e+00, 4.2331e+00, 1.0330e+00, 7.4724e+00, 6.9787e+00, 4.7438e+00,
3.6806e+00, 9.9302e+00, 2.7604e+00, 7.4624e+00, 7.3872e+00, 5.7796e-01, 4.4664e+00, 2.4053e+00,
8.8026e+00, 9.8927e+00, 4.2349e+00, 5.0274e-01, 8.7879e+00, 2.1212e+00, 4.8097e+00, 4.6097e-01,
6.0644e+00, 8.4510e+00, 8.1631e+00, 8.1941e+00, 5.2665e-01, 4.0219e-02, 8.2498e-01, 3.7223e+00,
5.0997e+00, 1.5826e+00, 3.8289e+00, 2.2400e+00, 8.2028e-01, 4.8600e+00, 6.5801e+00, 3.0356e+00,
5.5014e+00, 6.2954e-01, 2.1077e-01, 2.7255e+00, 4.1922e+00, 7.5266e+00, 4.5096e+02, 1.3970e+00,
9.5463e+00, 8.8707e+00, 6.2191e+00, 3.0382e+00, 6.9516e+00, 8.4569e+00, 9.4666e+00, 2.4366e+00,
7.5718e+00, 8.2474e+00, 7.9020e-01, 6.8526e+00

8.6768e+00, 4.3302e+00, 6.1374e+00, 3.6146e+00, 3.2007e+00, 9.1280e+00, 5.8995e+00, 2.3684e+00,


2.9460e+00, 3.5170e+00, 6.8142e+00, 7.4261e+00, 3.3911e+00, 1.3051e+00, 8.3395e+00, 7.0348e+00,
4.5777e+00, 2.0419e+00, 4.6266e+00, 4.2744e+00, 6.5930e+00, 9.6125e+00, 3.4833e+00, 8.7752e+00,
6.7066e+00, 7.3825e+00, 2.1525e+00, 6.5626e+00, 1.4580e-01, 3.6752e+00, 3.7570e+00, 3.1168e+00,
6.6080e+00, 8.1804e+00, 2.9258e+00, 4.5340e+00, 3.7298e+00, 9.9400e+00, 5.5078e+00, 1.7824e+00,
2.6480e+00, 1.7127e+00, 8.1009e+00, 3.2518e+00, 1.5181e+00, 5.1312e+00, 6.8864e-01, 1.6964e+00,
3.0963e+00, 8.4839e+00, 6.1426e+00, 3.8619e+00, 8.6581e+00, 7.0166e+00, 4.5020e+00, 9.6186e+00,
9.3252e-01, 6.4575e-01, 9.2511e-01, 1.7942e+00, 9.0390e+00, 4.3490e+00, 3.2404e+00, 5.7441e+00,
6.4820e+00, 7.4388e+00, 4.0247e+00, 6.4169e+00, 2.9423e+00, 8.4174e+00, 9.3863e+00, 1.1812e+00,
4.7032e-01, 3.9715e+00, 4.7608e+00, 8.9003e+00, 9.7530e+00, 5.2402e+00, 4.7976e+00, 9.0790e+00,
7.6740e+00, 3.1309e+00, 5.0420e+00, 9.0834e-01, 9.8561e+00, 7.4873e+00, 1.0586e+00, 5.0362e+02,
9.9247e+00, 5.8874e+00, 4.1910e+00, 4.9129e+00, 2.7441e+00, 1.4413e+00, 5.3778e+00, 8.8766e+00,
1.3048e+00, 5.0083e+00, 6.4808e+00, 4.6795e+00
B. Ejemplo de solución de un sistema de tamaño 100 × 100 423

6.7732e+00, 6.0738e+00, 8.8221e+00, 6.7325e+00, 7.4092e+00, 1.6091e-01, 5.3183e+00, 4.7293e+00,


2.4188e+00, 9.8466e+00, 4.4148e-02, 7.3748e+00, 8.1805e+00, 7.1664e+00, 2.9122e+00, 8.4023e+00,
4.3638e+00, 2.3427e+00, 4.7986e+00, 7.5499e+00, 8.9674e+00, 2.1220e-01, 9.1014e+00, 1.7931e+00,
1.0744e-01, 6.4654e+00, 5.1505e+00, 9.9639e+00, 6.9267e+00, 5.4007e+00, 4.7611e+00, 9.4484e+00,
7.4160e-01, 9.6495e+00, 4.9854e+00, 1.9993e+00, 2.4902e-01, 2.2573e+00, 6.5093e+00, 8.6498e+00,
4.7092e+00, 4.4915e+00, 1.8319e+00, 3.1035e+00, 2.6066e-01, 7.6628e+00, 7.0882e+00, 2.3676e+00,
5.6926e+00, 1.0964e+00, 9.0479e-01, 8.3606e+00, 9.3251e+00, 9.1438e+00, 9.6442e+00, 2.8145e-02,
5.4483e+00, 3.2177e+00, 6.5859e+00, 4.4284e+00, 6.0310e-01, 3.0786e+00, 6.2367e+00, 7.3060e+00,
2.2086e+00, 3.9258e+00, 3.6927e-01, 2.6397e+00, 4.7947e+00, 5.6534e+00, 8.6910e+00, 2.4555e+00,
7.9509e+00, 3.9968e+00, 2.5788e+00, 6.9454e+00, 3.2090e+00, 5.3118e+00, 4.2945e+00, 9.9524e+00,
5.1104e+00, 4.4579e+00, 3.1380e+00, 4.7799e+00, 9.4194e+00, 7.3518e+00, 9.3614e+00, 1.4671e+00,
5.1838e+02, 9.1415e+00, 6.0063e+00, 6.8217e+00, 4.0182e+00, 9.6286e+00, 8.2890e-01, 5.6538e+00,
1.7384e+00, 1.3406e+00, 9.8620e+00, 3.2508e+00

3.0717e+00, 1.8634e+00, 7.0555e+00, 2.5121e+00, 8.7151e+00, 8.9193e-01, 5.3357e+00, 1.8323e+00,


4.2555e+00, 2.2989e+00, 9.5749e+00, 7.1626e+00, 2.0644e+00, 8.3434e+00, 7.6962e+00, 9.6907e+00,
5.7020e+00, 9.2053e+00, 4.8154e+00, 6.8814e+00, 8.5111e+00, 5.6939e+00, 8.5046e+00, 3.3886e+00,
3.0358e+00, 2.7586e+00, 3.1220e+00, 8.8431e-01, 8.7111e+00, 1.5966e+00, 7.5821e+00, 2.3560e+00,
1.0827e+00, 1.2163e+00, 2.3021e+00, 6.6783e-02, 1.9229e+00, 9.8767e+00, 4.5693e+00, 3.6327e-01,
5.5578e+00, 4.0702e+00, 3.7093e+00, 9.5654e+00, 4.8920e+00, 8.4852e+00, 7.5026e+00, 2.3578e+00,
2.4305e+00, 4.9746e+00, 8.2008e-02, 7.8307e+00, 5.2534e+00, 5.8845e+00, 2.9334e+00, 3.1088e+00,
7.6592e-01, 2.3355e+00, 2.8989e+00, 2.7726e+00, 8.4838e-01, 5.8248e+00, 2.1645e+00, 1.0069e+00,
3.8830e+00, 9.8919e+00, 3.4934e-01, 2.3671e+00, 1.7087e+00, 5.9641e+00, 2.5000e+00, 2.4405e+00,
8.1991e+00, 8.4580e+00, 7.4739e+00, 2.0307e+00, 1.1055e+00, 7.4222e+00, 2.2495e+00, 2.5676e+00,
6.6125e+00, 2.8986e-01, 8.7496e+00, 1.5995e+00, 3.4060e+00, 7.4257e+00, 9.2532e-02, 1.4544e+00,
1.2607e+00, 4.3481e+02, 4.6608e+00, 5.7064e+00, 1.2173e+00, 6.0944e+00, 7.2866e+00, 3.1848e+00,
5.7798e+00, 4.4364e+00, 7.4871e-02, 4.0640e+00

3.9442e+00, 9.4083e+00, 5.5523e+00, 7.9540e+00, 2.4027e+00, 2.7730e-01, 9.6971e+00, 3.5959e+00,


5.5354e+00, 9.3656e+00, 1.8488e+00, 1.7339e+00, 8.7495e-01, 8.3205e+00, 2.2277e+00, 2.6470e+00,
7.4961e+00, 2.0819e+00, 2.3144e+00, 9.3769e+00, 8.6115e+00, 6.8583e+00, 2.6499e+00, 1.8593e-01,
7.8385e+00, 8.0298e+00, 8.0928e+00, 5.4776e+00, 5.8386e+00, 1.7276e+00, 4.1275e+00, 3.3593e+00,
6.9328e+00, 5.9847e+00, 8.4935e+00, 8.3837e+00, 2.0994e+00, 2.3139e+00, 4.7718e+00, 2.4028e+00,
7.8259e+00, 8.3299e+00, 4.9149e+00, 2.4758e+00, 5.1363e+00, 1.6416e+00, 8.7742e+00, 3.2153e+00,
4.2972e+00, 5.1492e-01, 6.1368e-01, 9.4311e+00, 9.4438e+00, 7.0814e+00, 2.3688e+00, 8.6248e+00,
8.5237e+00, 7.5650e+00, 9.1153e+00, 9.5469e+00, 1.1410e+00, 1.9867e+00, 3.5819e-01, 4.6727e+00,
2.8917e+00, 5.3465e+00, 6.6832e+00, 6.3641e-01, 2.5872e+00, 5.7546e+00, 3.2196e+00, 5.1879e+00,
8.8892e+00, 8.7924e+00, 2.2296e+00, 1.8947e+00, 6.0154e+00, 5.2206e+00, 5.6877e-01, 7.6980e-01,
6.7457e+00, 1.5982e+00, 8.0185e+00, 3.6413e+00, 3.1680e+00, 2.2890e+00, 3.4135e+00, 3.7747e-01,
2.5978e+00, 9.7355e+00, 5.1349e+02, 9.1916e+00, 9.6095e+00, 5.2942e+00, 1.4614e+00, 8.6427e+00,
8.4442e+00, 6.3398e+00, 3.2659e+00, 8.6179e+00

8.8560e+00, 2.7090e+00, 6.9351e+00, 4.1095e+00, 1.4148e-01, 5.7380e-01, 6.0479e+00, 6.6779e+00,


3.0197e+00, 4.6752e+00, 3.1614e+00, 6.9412e+00, 1.1432e+00, 7.4645e+00, 6.1632e-01, 8.1550e+00,
4.5965e-01, 1.6429e+00, 5.8867e+00, 7.3191e+00, 3.3427e+00, 2.1272e-01, 3.1235e+00, 3.8053e+00,
8.8770e+00, 6.5699e+00, 6.0839e+00, 6.1066e+00, 9.1203e+00, 2.4514e-01, 1.7556e-01, 8.7540e-01,
9.6159e+00, 4.4545e+00, 1.0632e+00, 5.4236e+00, 8.4073e+00, 5.3365e-01, 8.8515e+00, 6.6069e+00,
7.7076e+00, 7.2100e+00, 3.3843e+00, 5.8770e+00, 3.9075e+00, 6.0381e+00, 9.2257e+00, 4.6404e+00,
8.5545e+00, 2.1001e+00, 5.5243e+00, 1.7274e+00, 1.1151e+00, 7.3703e+00, 7.5148e+00, 9.7469e+00,
9.4316e+00, 9.8793e+00, 9.5703e+00, 5.3105e+00, 9.6199e+00, 1.2521e+00, 8.2105e+00, 1.9641e+00,
4.6937e+00, 7.7503e+00, 8.3026e+00, 5.5681e+00, 9.5751e+00, 2.0911e+00, 8.2872e+00, 1.6703e+00,
9.8111e+00, 9.5050e+00, 1.9877e+00, 4.9380e+00, 4.9014e+00, 6.9417e-01, 7.6786e+00, 6.6373e+00,
9.3813e+00, 3.0900e+00, 2.3691e+00, 5.8065e+00, 2.6751e+00, 1.3612e+00, 1.7280e+00, 2.6729e+00,
424

6.3735e+00, 6.5503e+00, 5.2713e+00, 5.0638e+02, 5.7106e+00, 1.7787e-02, 9.9811e+00, 2.7455e+00,


1.6279e+00, 3.2720e+00, 7.0850e+00, 3.0887e+00

9.4142e+00, 9.4214e+00, 9.5274e+00, 5.4296e+00, 1.8585e+00, 8.2863e+00, 9.8241e+00, 4.0597e+00,


3.9791e+00, 1.8399e-01, 1.4791e-01, 3.3663e+00, 7.7274e-01, 3.6196e+00, 9.2849e+00, 8.6709e+00,
7.7600e+00, 2.6816e+00, 7.5383e+00, 6.3902e+00, 1.1510e+00, 9.5557e+00, 6.6755e+00, 9.6098e+00,
5.9372e+00, 4.6178e+00, 5.6768e+00, 2.9872e+00, 7.1214e+00, 5.9954e+00, 2.2590e+00, 1.5946e-01,
6.5549e+00, 3.0283e+00, 4.8517e+00, 8.9069e+00, 8.7078e+00, 9.5927e+00, 7.0748e+00, 7.2460e+00,
4.7314e+00, 4.4470e+00, 4.4125e+00, 8.1375e+00, 8.0625e+00, 5.3013e+00, 3.6608e-01, 7.2851e+00,
6.2890e+00, 8.7004e+00, 5.9597e+00, 2.7104e+00, 9.8395e+00, 8.5045e+00, 6.3950e+00, 9.3925e+00,
9.3869e+00, 8.4566e+00, 6.1184e+00, 1.2230e+00, 1.9749e+00, 3.4526e+00, 9.2199e+00, 6.9797e+00,
5.1369e+00, 1.3773e+00, 7.9440e+00, 6.3921e+00, 8.8873e+00, 9.8395e+00, 5.0796e+00, 1.4564e-01,
5.1467e+00, 8.7728e+00, 6.5938e+00, 9.5222e+00, 9.8647e+00, 9.2597e+00, 7.6799e+00, 7.6505e+00,
1.1441e+00, 9.6971e+00, 8.7972e+00, 4.1994e+00, 8.3979e+00, 3.3815e+00, 5.3792e+00, 2.1305e+00,
8.2025e+00, 7.4927e+00, 3.2944e+00, 4.4042e+00, 6.0915e+02, 5.3553e+00, 6.3631e+00, 2.6951e+00,
6.7506e+00, 5.7409e+00, 3.5130e+00, 6.2453e+00

6.3790e+00, 5.3279e+00, 4.5376e+00, 5.8449e+00, 2.4115e+00, 8.6392e+00, 4.2679e+00, 9.9846e-01,


6.2355e+00, 6.6323e+00, 6.6322e+00, 2.2512e-01, 9.7770e+00, 9.8974e+00, 5.8532e+00, 5.5097e+00,
8.6355e+00, 4.9409e+00, 5.8370e+00, 3.1663e+00, 2.8316e+00, 2.9480e+00, 3.8696e+00, 8.5551e+00,
7.8110e+00, 5.5433e+00, 9.8094e+00, 9.3317e+00, 6.3581e+00, 5.4873e+00, 1.9755e+00, 7.9347e-01,
8.4742e+00, 5.7696e+00, 5.2522e+00, 6.9912e+00, 7.8558e-01, 7.2409e+00, 7.6563e+00, 5.3543e+00,
2.9561e+00, 9.7587e+00, 1.1192e-01, 7.1686e+00, 2.0662e+00, 3.1075e-01, 8.9628e+00, 7.8851e+00,
3.3650e+00, 4.2305e+00, 2.8658e-01, 5.7296e+00, 8.4463e+00, 3.8372e+00, 2.1798e+00, 8.2262e+00,
3.8485e+00, 4.4752e+00, 7.5095e+00, 1.1801e-01, 5.3828e+00, 4.2409e+00, 8.7084e+00, 7.8334e+00,
3.8392e+00, 7.2622e+00, 2.8373e+00, 7.6200e-01, 9.1982e-01, 2.7023e+00, 8.0461e+00, 4.3810e-01,
2.9128e+00, 9.1235e+00, 1.2673e+00, 5.0830e+00, 8.2956e+00, 7.3761e+00, 8.2792e+00, 5.3783e-01,
3.3919e+00, 1.4991e+00, 1.4290e-01, 8.4020e-01, 5.0749e+00, 1.5807e-01, 1.3465e+00, 5.0026e+00,
5.9318e+00, 5.4578e+00, 4.0942e+00, 6.6175e-01, 6.2333e+00, 4.9590e+02, 9.6132e+00, 8.8232e+00,
6.1885e+00, 9.3106e-01, 4.5716e+00, 6.9524e-01

3.7539e+00, 5.7547e+00, 4.1338e+00, 9.9451e+00, 1.0447e+00, 5.7760e+00, 7.2822e+00, 5.7405e+00,


9.0784e-01, 7.4527e+00, 8.7440e+00, 1.7279e+00, 7.4581e+00, 4.0682e+00, 8.2943e-01, 1.2896e+00,
5.3146e+00, 9.0828e+00, 5.5036e+00, 1.0342e+00, 5.9527e+00, 4.9004e+00, 7.9368e+00, 9.4295e+00,
9.3948e+00, 8.7406e+00, 3.1534e+00, 4.7561e+00, 9.3686e+00, 6.5748e+00, 8.9108e+00, 4.2733e+00,
6.1777e+00, 1.8059e+00, 4.0984e+00, 1.3952e-01, 5.2661e+00, 3.4033e+00, 4.6313e+00, 6.0747e+00,
5.4617e+00, 8.5803e+00, 2.1112e+00, 1.1818e+00, 4.6499e+00, 9.7594e-01, 5.9801e+00, 6.7020e+00,
5.3298e+00, 3.8867e+00, 9.2432e+00, 7.9334e+00, 8.6506e-02, 2.0756e+00, 8.6233e-01, 6.0430e+00,
5.1507e+00, 8.2810e-01, 6.8405e+00, 6.7267e+00, 9.7017e+00, 6.5274e+00, 4.4540e+00, 3.9422e+00,
1.6787e+00, 4.9168e+00, 1.4996e+00, 7.0576e+00, 2.0594e+00, 5.0062e+00, 5.0638e+00, 5.0669e+00,
1.5460e+00, 8.0261e+00, 1.6744e+00, 9.8137e+00, 4.5159e+00, 1.1240e+00, 7.4543e+00, 9.7239e+00,
1.7962e+00, 4.5271e+00, 7.9735e+00, 2.4994e+00, 1.8601e+00, 6.1704e-01, 4.0196e+00, 8.9932e+00,
1.1207e+00, 2.4854e+00, 7.4054e+00, 1.9138e+00, 8.8835e+00, 7.8898e+00, 5.0244e+02, 5.9759e+00,
1.8643e+00, 8.9978e-01, 1.9294e+00, 8.9862e+00

4.9857e+00, 2.7019e+00, 4.1651e+00, 6.1143e-01, 3.4515e+00, 8.7925e+00, 7.6175e+00, 9.7549e+00,


7.4865e+00, 7.0560e+00, 5.7541e+00, 1.8903e+00, 7.3073e+00, 4.3495e+00, 8.0149e+00, 1.0921e+00,
5.6987e+00, 3.1861e+00, 5.2581e+00, 6.9967e+00, 9.0228e+00, 5.6968e+00, 1.9176e+00, 2.6132e+00,
9.5920e+00, 2.4936e+00, 6.7189e+00, 1.8643e+00, 6.9625e+00, 7.1015e+00, 2.1130e+00, 9.9271e+00,
6.0245e+00, 4.8765e+00, 7.0922e+00, 3.9900e+00, 8.4373e+00, 1.4234e+00, 4.6039e+00, 8.3915e+00,
2.0311e-01, 8.2815e+00, 8.1357e+00, 3.2592e+00, 4.5373e+00, 6.0838e+00, 8.3166e+00, 5.8798e+00,
5.0607e+00, 7.8214e+00, 4.0877e+00, 2.4578e+00, 7.6484e+00, 2.7508e+00, 4.2961e+00, 4.8038e+00,
4.9313e+00, 9.0703e+00, 6.4793e+00, 7.3165e+00, 6.8747e+00, 9.2861e+00, 6.5928e+00, 8.4058e+00,
B. Ejemplo de solución de un sistema de tamaño 100 × 100 425

7.0681e+00, 9.1106e+00, 7.5910e+00, 5.8224e+00, 8.8814e-02, 5.9879e+00, 9.7231e+00, 1.1049e+00,


5.3553e+00, 7.0442e+00, 3.7521e+00, 9.6348e+00, 8.2566e+00, 2.4267e-01, 7.5201e+00, 6.4507e+00,
2.9336e+00, 9.9197e+00, 6.5218e-01, 7.9430e+00, 9.4957e+00, 2.5404e+00, 9.9978e+00, 4.0154e+00,
1.2029e+00, 8.2603e+00, 5.4772e+00, 1.9576e+00, 2.1576e+00, 9.8545e-01, 5.6519e+00, 5.5757e+02,
5.3937e+00, 9.6865e+00, 4.5057e+00, 2.0805e+00

3.6660e+00, 3.1191e+00, 6.1782e-01, 7.0773e+00, 1.4961e+00, 9.8554e+00, 2.2404e+00, 1.4730e+00,


9.9535e+00, 1.6744e+00, 8.2322e+00, 7.7374e+00, 8.1970e+00, 6.8637e+00, 7.0066e+00, 5.9270e+00,
7.6631e+00, 6.3436e+00, 1.7300e+00, 4.0862e+00, 8.8159e+00, 7.9699e+00, 3.1515e+00, 2.2881e+00,
3.9765e+00, 4.2230e+00, 5.8416e+00, 8.6616e+00, 2.4762e+00, 6.7970e+00, 8.4412e+00, 3.3906e+00,
7.5707e+00, 7.7985e+00, 9.4019e-01, 6.7339e+00, 9.4997e+00, 6.4589e+00, 3.1321e+00, 8.1696e-01,
5.7684e+00, 6.8966e+00, 4.3882e+00, 8.8420e+00, 2.5459e+00, 8.6048e+00, 1.0141e+00, 8.2073e+00,
1.6299e+00, 7.8860e+00, 1.6440e+00, 9.9300e+00, 7.5725e-01, 5.0791e+00, 3.5566e+00, 6.4733e+00,
3.4083e+00, 7.2278e+00, 5.1007e+00, 3.8868e+00, 4.2337e+00, 3.4772e-02, 4.0770e+00, 1.8630e+00,
2.9334e+00, 7.7680e+00, 7.7656e+00, 1.1421e+00, 7.1637e+00, 1.5425e+00, 8.6289e+00, 5.1492e+00,
8.3609e+00, 8.7515e+00, 6.7483e+00, 1.8573e+00, 6.6599e+00, 1.0981e+00, 6.9339e+00, 5.7162e+00,
1.3496e+00, 2.4208e+00, 6.7553e+00, 2.9309e+00, 3.9770e+00, 1.8393e+00, 4.9992e-01, 8.4507e+00,
7.5720e+00, 2.7185e+00, 7.6960e+00, 7.0607e+00, 5.4521e+00, 6.7020e+00, 6.3105e+00, 8.6364e+00,
5.0426e+02, 6.1720e+00, 1.3540e+00, 8.7862e-01

2.9432e+00, 6.1953e+00, 8.5300e+00, 3.9324e+00, 6.8051e+00, 5.5602e+00, 2.6982e+00, 8.7256e+00,


1.5223e+00, 8.3899e+00, 5.4234e+00, 4.4731e+00, 4.4741e+00, 9.7098e+00, 6.0974e+00, 6.8512e+00,
6.1297e+00, 3.2564e+00, 8.6771e+00, 6.4568e+00, 2.2221e+00, 6.6768e+00, 6.4260e+00, 5.5969e+00,
5.4420e+00, 8.9988e+00, 5.3389e+00, 9.8500e+00, 2.3383e+00, 5.4599e+00, 2.6338e+00, 8.6816e+00,
3.9612e+00, 3.7147e+00, 5.1603e+00, 4.3661e+00, 5.2532e+00, 8.9428e+00, 8.6767e+00, 5.1634e+00,
2.8574e+00, 1.2728e+00, 6.7974e+00, 5.8226e+00, 6.3759e+00, 3.8746e+00, 2.3088e+00, 2.2791e+00,
3.2532e+00, 4.1652e+00, 2.9228e+00, 1.2779e+00, 5.8178e+00, 4.2677e+00, 8.0702e-01, 5.9373e-01,
9.1501e-02, 2.6397e+00, 4.6558e+00, 9.9166e+00, 7.1264e+00, 9.7658e+00, 6.4925e+00, 5.5574e+00,
2.3807e+00, 6.8460e+00, 8.4031e+00, 9.7398e+00, 3.9574e+00, 8.8069e+00, 2.2628e+00, 5.8325e+00,
4.4330e+00, 6.3732e+00, 5.9305e+00, 1.7968e+00, 1.5279e+00, 4.1851e+00, 2.7561e+00, 3.4815e+00,
9.2533e+00, 4.7861e+00, 6.1858e+00, 4.6590e-01, 2.9125e+00, 9.5252e+00, 4.9293e-01, 3.0567e+00,
4.2662e+00, 4.8001e+00, 6.0958e+00, 4.2119e+00, 9.8656e-01, 8.4170e+00, 6.3996e+00, 9.1188e-01,
3.9051e-01, 5.1379e+02, 6.6247e+00, 9.2055e+00

9.4864e+00, 3.2436e+00, 4.2887e+00, 1.4606e+00, 3.1215e+00, 7.2819e+00, 7.9284e+00, 6.2135e+00,


2.5954e+00, 8.9312e+00, 1.7850e+00, 5.0205e+00, 9.3165e+00, 3.4653e+00, 9.8706e-01, 3.4571e+00,
6.9032e+00, 5.0482e-01, 2.8337e+00, 5.9610e+00, 2.6486e+00, 1.2816e+00, 2.5800e+00, 6.8781e+00,
3.2625e+00, 7.9288e+00, 7.4510e+00, 4.4864e+00, 5.9151e+00, 6.2264e+00, 7.7438e+00, 7.0554e+00,
4.6858e+00, 1.0290e-01, 2.8485e+00, 5.1056e+00, 8.6893e+00, 1.2142e+00, 8.1966e+00, 7.0849e+00,
4.7925e+00, 5.7368e+00, 7.9869e+00, 3.1750e+00, 5.2329e+00, 2.1553e+00, 9.9531e+00, 7.7451e+00,
8.1568e-01, 7.9868e+00, 1.4233e+00, 5.0433e+00, 5.5409e+00, 9.2004e+00, 1.9408e+00, 9.7942e+00,
3.9396e+00, 5.0683e+00, 2.7281e+00, 6.6990e+00, 3.2760e+00, 5.0527e+00, 3.8781e+00, 4.3144e+00,
7.0908e+00, 6.0174e+00, 2.0278e+00, 7.9570e+00, 5.9905e+00, 3.3636e+00, 4.2518e+00, 5.7025e+00,
8.0363e-01, 8.2725e+00, 5.8672e+00, 2.6696e+00, 3.9107e+00, 5.9302e-01, 8.0589e+00, 3.5701e-01,
4.6052e+00, 9.6041e+00, 3.3734e+00, 4.7461e+00, 7.6793e+00, 4.9834e+00, 4.7180e+00, 9.9081e+00,
5.3929e+00, 3.5692e+00, 8.4490e+00, 2.0157e+00, 6.8392e+00, 8.5430e+00, 1.4259e+00, 4.1695e+00,
2.4208e+00, 5.9861e+00, 5.1340e+02, 7.1467e+00

6.2730e+00, 5.3062e+00, 8.6629e+00, 3.2635e+00, 8.2067e+00, 4.2388e+00, 3.9549e-01, 9.6344e+00,


9.9107e+00, 5.6211e-01, 2.8154e+00, 7.5832e+00, 1.2677e+00, 3.6639e+00, 2.0924e+00, 1.3216e-01,
6.0228e+00, 4.4043e+00, 6.8308e+00, 7.3542e+00, 5.5203e+00, 7.1807e-01, 1.1353e+00, 1.9994e+00,
6.4581e+00, 1.1587e+00, 9.2988e+00, 5.5926e+00, 5.4290e+00, 1.3843e+00, 3.0252e+00, 2.6145e+00,
6.3604e+00, 4.2518e+00, 3.1411e+00, 2.5787e+00, 3.0084e+00, 4.4157e+00, 9.8808e+00, 5.6147e+00,
426

8.6774e+00, 1.5749e+00, 6.2680e+00, 3.9645e-01, 3.1377e+00, 1.1800e+00, 9.1635e+00, 8.7872e+00,


6.7146e+00, 6.5734e+00, 1.2733e-01, 2.5761e+00, 4.2053e+00, 1.1358e+00, 2.7283e+00, 4.6638e-01,
4.8114e+00, 4.3637e+00, 9.1075e+00, 2.1958e+00, 9.0810e-01, 1.3697e+00, 9.5689e+00, 9.9330e+00,
7.1814e+00, 7.0272e+00, 2.8918e+00, 4.7734e+00, 3.6870e+00, 5.5159e+00, 9.6017e-01, 4.5097e+00,
9.1098e+00, 6.2862e+00, 8.1711e+00, 2.3557e-01, 5.1628e-01, 3.2058e+00, 3.7720e+00, 4.8408e+00,
1.2386e+00, 4.7941e+00, 6.4065e+00, 3.8807e+00, 2.5299e+00, 3.3777e+00, 3.3987e+00, 1.2276e+00,
5.0100e+00, 6.7473e-02, 5.9120e+00, 8.7990e+00, 1.1554e-01, 3.7580e+00, 5.3000e+00, 4.6359e+00,
1.3574e+00, 1.3429e+00, 2.3923e+00, 4.3844e+02

El vector b
3.9883e+00, 8.3918e+00, 7.3085e+00, 7.9395e+00, 6.9006e+00, 3.9995e+00, 2.3199e+00, 7.9788e+00,
9.1522e+00, 4.3516e+00, 4.9582e+00, 1.7959e-01, 5.6824e+00, 9.5615e-02, 8.7813e-01, 8.9330e+00,
1.9399e+00, 6.6889e+00, 4.5454e+00, 4.2547e+00, 5.9681e+00, 4.5071e+00, 1.4208e+00, 2.0792e+00,
5.4719e+00, 7.3070e-01, 7.3122e+00, 7.9204e+00, 4.3406e+00, 5.3251e+00, 1.7368e+00, 9.6574e+00,
8.8184e+00, 5.6251e+00, 8.6343e+00, 2.9901e-01, 8.5646e+00, 6.8159e+00, 7.1281e+00, 3.2268e+00,
6.8272e+00, 9.8007e+00, 9.2260e+00, 3.5654e+00, 3.2667e+00, 5.7109e+00, 9.4963e+00, 1.0304e+00,
8.3271e+00, 6.9781e+00, 3.6753e+00, 6.4877e+00, 2.5678e+00, 1.5513e+00, 8.1309e+00, 2.1603e+00,
2.5111e+00, 6.8004e+00, 8.8764e+00, 4.9282e+00, 1.7159e-01, 3.2296e+00, 2.0493e+00, 6.3628e+00,
9.1188e+00, 9.1875e+00, 3.6106e+00, 7.6349e+00, 3.9624e+00, 4.7984e+00, 5.2613e+00, 9.0690e+00,
8.4360e+00, 8.9805e+00, 5.9285e+00, 6.0135e+00, 7.0730e+00, 4.5674e+00, 6.7777e-01, 9.9249e+00,
2.3213e+00, 4.3524e+00, 7.7956e+00, 9.7492e+00, 7.1948e-01, 9.4016e+00, 3.8358e+00, 3.4170e-01,
5.0414e+00, 2.9079e-01, 2.0012e+00, 6.7348e+00, 4.5013e-01, 5.0262e+00, 3.3813e+00, 1.5413e+00,
8.0818e+00, 1.9462e+00, 7.0508e+00, 2.2783e+00

El vector solución x
1.8421e-03, 1.0913e-02, 9.2353e-03, 1.1225e-02, 7.9705e-03, 2.9558e-03, 1.4763e-04, 1.1339e-02, 1.5070e-02,
4.0788e-03, 4.9883e-03, -4.8756e-03, 7.1773e-03, -5.7848e-03, -3.8065e-03, 1.4082e-02, -1.3384e-03, 8.5507e-
03, 3.0508e-03, 3.3224e-03, 7.4889e-03, 5.1686e-03 -2.2844e-03, -1.1785e-03, 5.0829e-03, -4.3071e-03,
9.5409e-03, 1.1260e-02, 3.9320e-03, 4.9269e-03, -1.8973e-03, 1.3230e-02, 1.2536e-02, 7.0799e-03 1.2103e-
02, -4.7731e-03, 9.6019e-03, 9.2571e-03, 1.0643e-02, 1.0339e-03, 9.1834e-03, 1.4453e-02, 1.2401e-02,
1.0355e-03, 1.2090e-03, 5.4473e-03 1.4326e-02, -2.5990e-03, 1.4620e-02, 7.6018e-03, 1.6223e-03, 8.3686e-
03, 3.7217e-04, -2.1186e-03, 1.2077e-02, -5.1583e-04, -2.6419e-04, 7.0966e-03, 1.3396e-02, 4.8172e-03, -
5.7489e-03, 1.6665e-03, -7.6401e-04, 7.5880e-03, 1.4438e-02, 1.3142e-02, 2.1616e-03, 1.0299e-02, 3.8299e-
03, 3.9461e-03, 4.6347e-03, 1.1911e-02, 1.2606e-02, 1.2199e-02, 6.1183e-03, 6.5915e-03, 8.3796e-03, 4.1362e-
03, -4.0602e-03, 1.5682e-02, 4.9327e-04, 2.9932e-03, 1.0990e-02, 1.5433e-02, -3.6687e-03, 1.2520e-02,
3.7853e-03, -4.0243e-03, 4.2688e-03, -4.7906e-03, -1.4052e-03, 8.0160e-03, -3.9345e-03, 5.5113e-03, 1.9564e-
03 -2.6441e-03 1.0916e-02, -1.2655e-03, 9.3117e-03, -1.3498e-03
Índice alfabético

A Determinantes - Propiedad 4, 180


Adjunta de una matriz, 189 Determinantes - Propiedad 5, 181
Amplia versatilidad, 368 Determinantes - Propiedad 6, 181
Ángulo entre dos vectores en R3 , 237 Determinantes - Propiedad 7, 181
Ángulo entre vectores, 222 Determinantes - Propiedades, 178
Ángulos directores en R3 , 236 Determinantes - Regla de Cramer, 198
append, 385, 386 Determinantes de matrices de tamaño
Atributo, 395 superior, 171
Diagonalización, 354
B Diccionarios, 393
Bases de un espacio vectorial, 281 Diferencia de matrices, 46
Diferencia de vectores, 218
C
Dimensión de un espacio vectorial, 282
Ciclo while, 388
Dirección de un vector, 213
Ciclos, 386
Clase, 395
E
Código es claro y legible, 368
El ciclo for, 386
Cofactor de una matriz, 173
Combinación lineal, 266 Eliminación de Gauss-Jordan, 30
Conjunto generador, 268 eliminación Gaussiana, 29
cosenos directores, 236 Eliminación Gaussiana y Gauss - Jordan, 34
Espacio generado, 271
D Espacio nulo, 299
Decisiones, 374 Espacio nulo de una matriz, 285
determinante, 118 Espacio vectorial, 249
Determinante de matrices elementales, 186 Espacios vectoriales - Propiedades, 260
Determinante de matrices especiales, 182 extend, 386
Determinante de una matriz, 169
Determinante de una matriz de orden 2, 170 F
Determinante de una matriz de orden 3, 170 Factorización A=LU, 91, 118
Determinante de una matriz de orden n×n, Factorización A=QR, 124
173 Factorización de Cholesky, 107
Determinantes, 169 factorización de Cholesky, 128
Determinantes - Propiedad 1, 178 Factorización de Matrices, 118
Determinantes - Propiedad 2, 179 Factorización de matrices, 194
Determinantes - Propiedad 3, 179 Factorización PA=LU, 97

427
428 ÍNDICE ALFABÉTICO

Factorización QR, 103, 346 M


float, 377 MacOS, 367
Función len, 393 Magnitud o norma de un vector, 212
Funciones, 390 Magnitud o norma de un vector en Rn , 232
Manejo de tuplas, 392
G Manipulación de arreglos y matrices, 25
Garbage collector, 369 Matrices - Factorización, 79
H Matrices - operaciones, 41
Hash, 393 Matrices elementales, 79
Herencia, 395 Matrices semejantes, 346
Matriz - Definición, 15
I Matriz - La inversa, 65
IDE, 367 Matriz Adjunta, 190
if - else, 375 Matriz Antisimétrica, 60
Igualación, 117 Matriz de Coeficientes, 28
import, 376 Matriz de coeficientes aumentada, 28
index, 386 Matriz de rotación, 316
Índices en listas, 381 Matriz definida positiva, 107
insert, 385 Matriz diagonalizable, 355
Instalación, 366 Matriz Diagonalmente dominante, 134
Integrated Development Environment, 367 Matriz Elemental, 79
Introducción a Python, 365 Matriz Identidad, 64
Inversa, 118 Matriz invertible, 65
Inversa de una matriz, 63 Matriz Ortogonal, 103
Matriz simétrica, 60
K
Matriz transpuesta - Propiedades, 60
kernel, 299
Matriz Triangular inferior, 91
L Matriz Triangular superior, 91
La indentación en Python, 369 Matriz y vector nulo, 20
La inversa de una matriz, 67 Matriz, Definición formal, 16
La Menor de una Matriz, 172 Método, 395
Lenguaje Interpretado, 369 Método de eliminación, 117
Ley Asociativa en el producto de matrices, Método de Gauss-Seidel, 148
55 Método de Jacobi, 134
Ley distributiva de la multiplicación de Método de la potencia, 342
matrices, 55 Método de Relajación, 158
Linealmente dependiente, 276 Métodos directos, 34
Linealmente independiente, 276 Métodos Indirectos, 34
Linux, 366 Métodos Iterativos, 118
Listas, 380 Métodos numéricos para hallar los valores
Listas con un número indeterminado de propios, 342
argumentos, 392 Mi primer programa en Python, 371
ÍNDICE ALFABÉTICO 429

Multiplicación de matrices como una Reflexión a lados opuestos de la recta y = x,


transformación lineal, 297 311
Multiplicación de matrices y vectores, 50 Reflexión a lo largo de la recta y = x, 310
Multiplicación por escalar, 44, 216 Reflexión sobre la recta y = x, 310
Multiplicación por escalar en un vector en Reflexión sobre los ejes, 305
Rn , 234 remove, 385
reverse, 386
N
Norma de un vector enRn , 232 S
Núcleo, 299 SciPy y Numpy, 52
Numpy, 19, 20, 25 Segmento dirigido, 210
Sistema de ecuaciones lineales, 28
O Solución de sistemas de ecuaciones lineales,
Objeto, 395 28, 117
Operaciones elementales por filas, 29 Solución de un sistema de ecuaciones
Operador +, 385 lineales, 34
Operadores aritméticos de Python, 374 sort, 386
Operadores booleanos de Python, 377 split, 386
Operadores y funciones con listas, 383 Subespacio vectorial:, 263
Subespacios asociados con una matriz, 285
P Suma de Matrices, 41
Polinomio característico, 331 Suma de vectores, 214
POO, 395 Suma y diferencia de vectores en Rn , 232
pop, 386 Sustitución, 117
print, 372
Producto cruz en R3 , 241 T
Producto de una matriz por un escalar, 44 Teorema de Cayley - Hamilton, 351
Producto entre matrices, 53 Teorema de Rango y nulidad, 301
Producto escalar, 50 Tipeado dinámico, 368
Programación orientada a objetos, 395 Transformación - definición, 293
Propiedades - espacios asociados, 287 Transformación de escalado, 322
Propiedades de los valores propios, 337 Transformación de reflexión, 305
Python, 365, 367 Transformación de rotación, 315
Transformación de traslación, 319
R Transformación Lineal, 295
Radio espectral, 158 Transformación sobre, 302
range, 382 Transformación uno a uno, 301
range(n), 387 Transformaciones en el plano, 305
Rango de una matriz, 288 Transformaciones Lineales, 293
Rango de una transformación, 299 Transformaciones lineales uno a uno y
raw_input, 377 sobre, 301
Reducción, 117 Transpuesta de una matriz, 59
430 ÍNDICE ALFABÉTICO

V
Vector - Definición de, 211
Vector proyección, 225
Vector proyector en R3 , 239
Vector unitario, 221
Vector unitario en Rn , 235
vectores en R2 , 209
Vectores en Rn , 230
vectores fila y columna, 16
Vectores ortogonales, 224
Vectores y Espacios vectoriale, 209
Vectores y valores propios, 329
Ventajas de usar Python, 368

W
Windows, 367

También podría gustarte