Algebra Lineal 2

INSTITUTO DE CIENCIAS FÍSICAS Y MATEMÁTICAS GUÍA DE TRABAJO Asignatura : ÁLGEBRA LINEAL Código : 1521 Unidad 1,2: Matr

Views 92 Downloads 1 File size 973KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

INSTITUTO DE CIENCIAS FÍSICAS Y MATEMÁTICAS GUÍA DE TRABAJO Asignatura : ÁLGEBRA LINEAL

Código : 1521

Unidad 1,2: Matrices y determinantes Guía de laboratorio MATLAB

Tiempo estimado para el desarrollo de la guía : 2 horas

Autor de la Guía: Ing. Olena Neira

Revisado por:

El Estudiante debe estar en capacidad OBJETIVOS de: ESPECÍFICOS Aplicar MATLAB para:

• La resolución de sistemas de ecuaciones lineales por el método de eliminación de Gauss-Jordan  

Obtener la matriz traspuesta. Desarrollo de las operaciones básicas de suma, resta, multiplicación de matrices. La obtención de la matriz inversa. Resolución de sistemas de ecuaciones mediante la inversa. Cálculo de Determinantes Resolución de sistemas de ecuaciones lineales mediante La Regla de Cramer

   

1.- PRERREQUISITOS: Los temas necesarios para esta unidad son:    

Uso de matrices y Desarrollo de operaciones aritméticas y algebraicas. Ecuaciones de primer grado con una incógnita. Resolución de sistemas de dos ecuaciones de primer grado con dos incógnitas.

2.- MATERIAL NECESARIO IMPRESCINDIBLE:  Howard Anton. Introducción al Álgebra Lineal. Editorial Limusa. México, 1986.  Computadora con el programa MATLAB instalado

3.- ACTIVIDADES

3.1. INTRODUCCIÓN: ¿QUÉ ES MATLAB Y CÓMO SE TRABAJA EN ÉL? MATLAB (abreviatura de MATrix LABoratory, "laboratorio de matrices") es un software matemático que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio (lenguaje M). Está disponible para las plataformas Unix, Windows, y Apple Mac OS X. Entre sus prestaciones básicas se hallan: realización de operaciones de cálculo simbólico y numérico, la manipulación de matrices, la representación de datos y funciones, la implementación de algoritmos, la creación de interfaces de usuario (GUI) y la comunicación con programas en otros lenguajes, así como con otros dispositivos hardware. El paquete MATLAB dispone de dos herramientas adicionales que expanden sus prestaciones que son: Simulink (plataforma de simulación multidominio) y GUIDE (editor de interfaces de usuario - GUI). Además, las capacidades de MATLAB están en constante expansión con las cajas de herramientas (toolboxes) y con las de Simulink, con los paquetes de bloques (blocksets). Este es un software muy usado en universidades y centros de investigación y desarrollo, de todo el mundo. Al arrancar el programa MATLAB se abre, por defecto, una ventana similar a la que se tiene a continuación (ver Fig. 1), siempre manipulable a gusto del usuario con la ayuda del ratón, en ella se pueden distinguir varias partes (o subventanas) sobre las que se puede actuar con las mismas facilidades que en cualquier otro programa que funcione bajo Windows, utilizando el ratón y sus propiedades.

Fig. 1.1.- Ventana de inicio de MATLAB R2009b

En la parte superior de la pantalla aparece un menú, con contenidos desplegables: File, Edit, Debug, Desktop, Window, Help …, que variará según estemos situados en una ventana u otra, al que se puede acceder con el ratón y conviene explorar sus posibilidades con detalle. Debajo de él una, dos, tres, o más, subventanas según las que se desee tener activas: Current Folder, Command Window, Workspace, Command History,… . Las ventanas básicas por defecto, son las que se muestran en la figura, lo más habitual es tener abiertas al menos la ventana Current Folder (Carpetas en uso) donde tendremos a la vista el directorio de trabajo, que contendrá los ficheros con los que se esté trabajando; la ventana: “Command History” (Historial de los Comandos utilizados) en la que aparecerá reproducido todo lo que vamos realizando/ejecutando y una tercer ventana, que en este caso, es la que está situada en el centro y está diseñada por defecto, de mayor tamaño que el resto, que es la denominada “Command Windows”(Ventana de Comandos). Este será el espacio donde iremos trabajando en MATLAB, será la que estará siempre activa (abierta o minimizada). Por tanto, todas las ventanas citadas se pueden tener cerradas, abiertas o

minimizadas, salvo la VENTANA DE COMANDOS (“Command Windows”) que es por defecto, la obligada a tener activa cuando se opera en MATLAB. NOTA: Para recuperar la estructura básica, de las ventanas descritas, si es que alguna ventana se cerrase involuntariamente, se debe seleccionar en el menú principal Desktop/Desktop Layout/Default, para recomponer la estructura por defecto. Si observamos la “Command Windows”= VENTANA DE COMANDOS, una vez que el programa se ha puesto en marcha, podremos observar, ya en nuestro ordenador que aparece en ella el pront o símbolo habitual de los dos ángulos: >> . Desde ese instante, ya se puede trabajar con el programa MATLAB. Es necesario resaltar que en todo momento el programa, diferencia entre lo que se le escriba con mayúsculas o con minúsculas, es decir “MATLAB is case sensitive”, es decir A y a, para MATLAB no son la misma variable o constante. Toda nuestra sesión de trabajo, permanece activa y recuperable en MATLAB hasta que el programa se cierre. Durante la sesión de trabajo, se pueden hacer borrados totales o parciales, o se puede guardar información para sesiones futuras. 3.2.- CONCEPTOS BÁSICOS: UTILIZACIÓN DE LA ARITMÉTICA ELEMENTAL, LAS CONSTANTES, LAS VARIABLES, SU MANEJO Y FORMATOS. La forma de operar en MATLAB es muy similar a la de cualquier otro programa de cálculo simbólico, o incluso a lo que ofrecen algunas calculadoras de bolsillo inicialmente, “se le introducen los datos y se obtiene un resultado” por lo que es conveniente repasar operativa básica, para ir familiarizándose con el entorno. Situado el cursor, en la VENTANA DE COMANDOS, la que tiene el “pront” >> se puede empezar a trabajar con MATLAB muy fácilmente. Los mensajes de ERROR nos saldrán siempre en la Ventana de comandos y SALDRÁN en rojo. Nuestros comentarios, irán precedidos siempre por el símbolo % (tanto por ciento) y como tales serán ignorados por el programa, sólo serán recordatorios para el usuario, saldrán siempre en color verde. (Los colores comentados, son los que tiene por defecto el programa, se pueden cambiar a gusto del usuario). Así ante la introducción de la operación 2π, tendremos: CORRECTO INCORRECTO >> 2*pi % se desea calcular 2 por pi >> 2pi % se desea calcular 2 por pi ??? 2pi % se desea calcular 2 por pi ans = | Error: Unexpected MATLAB expression. 6.2832 3.3. INTERFAZ DE USUARIO. OPERACIONES Y OPERADORES BÁSICOS Antes de nada comentar, que el usuario, utilizando las flechas de la derecha del teclado, hacia arriba y hacia abajo, se podrán recuperar las órdenes anteriores escritas sin tener que volver a escribirlas. Esto resulta útil cuando hay una equivocación o se quiere escribir algo de nuevo o con alguna pequeña modificación. Otras veces, puede resultar necesario, hasta imprescindible que un resultado no aparezca por pantalla. Por ejemplo si generamos muchos datos o matrices de grandes dimensiones, con objeto de utilizarlo después. Para conseguir esto se pone un punto y coma detrás de la instrucción. Por ejemplo si queremos que no nos dé el resultado 2*pi, anterior, pondremos detrás de dicha orden un punto y coma: >> x=2*pi; Su resultado no aparecerá en pantalla como antes, pero el programa ha realizado el cálculo, y lo podemos comprobar si tecleamos el valor x, así: >> x

x= 6.2832

Salvo que se haga algo que de error, en cuyo caso, a pesar del punto y coma, el programa nos lo indicará: >> 2pi; ??? 2pi; | Error: Unexpected MATLAB expression. Los comandos se pueden ir escribiendo y ejecutando uno a uno, es decir, renglón a renglón, y también se pueden escribir uno detrás de otro en una misma línea, en cuyo caso habrán de ir separados por comas, o por puntos y comas, para aquellos cuyo resultado no se desea que salga por pantalla. Y una cosa más, si el renglón se nos hace demasiado largo, se puede continuar escribiendo en el siguiente poniendo tres puntos suspensivos donde se quiera cortar. Por ejemplo >> x= sin(pi), y = cos(2*pi), … z=tan(pi/3) x= 1.2246e-016 y=

1

z= 1.7321 Repasemos ahora las operaciones y constantes más habituales y su nomenclatura. Es de señalar que cuando sea necesario agrupar términos o especificar determinado orden de operación, esto se hará siempre utilizando paréntesis, y se emplearán tantos paréntesis como sean necesarios para que las órdenes estén claras, nunca se utilizarán corchetes, estos están reservados para manejar vectores y matrices. Comentarios. Si se inicia una línea con el símbolo %, MATLAB interpretará esto como una línea de comentario. El signo igual “ = “ se reserva para la ASIGNACIÓN EN VARIABLES y el doble igual “ = = “ para comprobar la veracidad de identidades. Símbolo Significado + SUMA RESTA * PRODUCTO / COCIENTE Sin más demora, se puede empezar a introducir en MATLAB operaciones básicas para ver la sencillez de su manejo. Escribamos, a la vez que leemos este texto en la VENTANA DE COMANDOS, al lado del “pront” característico de MATLAB “ >> “ la suma de 6 más 3: 6+ 3 . El resultado se obtiene de forma inmediata nada mas pulsar enter y viene siempre precedida por ans = (iniciales de respuesta en inglés, answer), esta variable ans contendrá en ella, la última respuesta que no se haya identificado de otra forma. Así: >> 6 + 3 % Pulsemos la tecla “enter” ans = 9 Para el producto el asterisco * es obligatorio siempre entre todos y cada uno de los elementos que se multipliquen. Hágase 6 x 3, se comprueba que: >> 6*3 ans = 18

% Pulsemos la tecla “enter”

Para el cociente, se usará la barra de división habitual a la derecha. Hágase 6 / 3, se comprueba que: >> 6/3 ans

% Pulsemos la tecla “enter”

2 Recordemos que si alguna operación se omite, o el programa no entiende lo que se le pide, enviará un mensaje de ERROR, de color rojo. Así, si lo que deseamos es escribir 2π y lo introducimos sin un asterisco * que indique producto entre el 2 y la pi, nos aparecerá el mensaje de error. >> 2pi ??? 2pi | Error: Unexpected MATLAB expression Símbolo ^ sqrt(… ) ( …. )

Significado POTENCIA (cualesquiera) RAIZ CUADRADA

=

ORDEN DE OPERACIÓN Asignación de valor

Símbolo y Significado

Tipo

igual == no igual ~ = menor que < mayor que > menor o igual que < = mayor o igual que > = 0 FALSO vs 1 VERDADERO & (y) (o) ~ (no)

Operadore s Relacional es

Operadores Lógicos

Repasemos el uso de algunos de ellos. Si se quieren calcular potencias y raíces de cualquier índice, por Ejemplo: √4, 3√9 se escribirá: >> sqrt(4) ans = 2 Este último resultado es calculable también como potencia ½, es decir: >> 4^(1/2) ans = 2 >> 9^(1/3) ans = 2.0801 Como puede suponerse, es posible realizar cualquier otra operación que combine las operaciones conocidas: >> (5*8+23)/ 4 ans =

15.7500 NOTA: Obsérvese que la solución decimal viene con “punto” para separación de los enteros de los decimales. De esa forma se han de introducir los decimales. Si no se pone el punto decimal, el programa entenderá otra orden diferente, que no es un número decimal, como veremos a continuación. La operación de multiplicar 2* 3,5 se introducirá del siguiente modo: >> 2 * 3.5 ans = 7 Pero si en vez de acabar la línea u operación con una coma (o sin nada), se pone un “PUNTO Y COMA” el programa no devolverá una respuesta “ ans = ” por pantalla, en ésta y en cualquier otra orden; lo que no significa que no haya realizado la operación, sino que le hemos ordenado que no muestre el resultado. Así, veamos cómo se comporta el programa si se acaban alguna de las operaciones anteriores con punto y coma “ ; “ el resultado que aparece por pantalla es solamente el correspondiente a la operación que no lleve detrás el punto y coma, en este caso, el resultado mostrado es el de (5*8+23)/ 4 que tiene detrás, solamente una coma. Los otros dos resultados no aparecen, por llevar detrás el punto y coma. Compruébese. >> (5*8+23)/ 4 , 3.5 * 2 ; 9^(1/3); % sale sólo el primer resultado, faltaría el resultado de las dos últimas operaciones tienen punto y coma detrás ans = 15.7500 Si por el contrario, lo que interesa son resultados en pantalla o se ponen comas o se guardan los mismos perfectamente identificados, asignando (=) dichos valores a nombres “a, b, valor, pendiente, etc…” para poder reutilizarlos posteriormente, asignación que se hace de derecha a izquierda. Se escribiría del siguiente modo: >> a = (5*8+23)/ 4; b = 3.5 * 2; c = 9^(1/3); % se ha guardado cada operación en a, b y c % y no se muestran por pantalla Pero, evocando “ a, b, c “ saldría su valor y lo mismo las demás. Si se escribe alguna constante, variable o función que no reconozca el programa emitirá de nuevo su correspondiente mensaje de ERROR: >> a,b,c

a= b= c=

15.7500 7 2.0801

Y si se escribe una variable que no esté declarada aparecerá un mensaje de error, por ejemplo, si no se tiene d, saldría: >> d ??? Undefined function or variable 'd'. >> Si se desea borrar alguna variable se utiliza el comando clear seguido del nombre de la variable o variables a borrar, o el clear all, para borrar de una sola vez todo el contenido de la memoria. Si sólo se desea borrar (limpiar) el contenido de la pantalla de la ventana de comandos (Command Windows) se utilizará clc. Pruébense.

>> clear all % limpiamos todo el contenido de la memoria >> clc % inicializamos limpia la ventana de comandos, pero todo lo que no se haya borrado >> % estará en la memoria >> a=15.75 % introducimos de nuevo un valor para a a= 15.7500 Help. Si teclea help seguido de un comando MATLAB en la ventana de comandos de MATLAB, aparecerá una descripción del comando en la ventana de comandos. 3.4. FORMATOS PARA LOS RESULTADOS NUMÉRICOS La visualización de resultados numéricos en MATLAB sigue algunas reglas. Por defecto, un número entero se visualiza como entero; un número real se visualiza con 4 decimales (4/3 aparece como 1.3333 ). salvo que los dígitos significativos estén fuera de este rango, en cuyo caso se visualiza con notación científica. Pero es posible cambiar el formato de representación de los números que se tiene por defecto, usando la secuencia Preferences/General/Numerical Format del menú File, pero existe otra posibilidad, más cómoda, que es usar la orden apropiada. NOTA: Debe observarse que el cambio de formato de salida, no cambia la representación interna, solo afecta a la visualización. Los formatos más habituales (que se pueden tener siempre a mano utilizando la orden help format) son: format long hace que todos los números se desplieguen con 16 dígitos. Así, si de format long y después 4/3, en la pantalla aparecerá 1.33333333333333. Para regresar al despliegue normal de 4 dígitos después del punto decimal se da el comando format short. format rat- aproximación racional 215/6. -Las capacidades simbólicas de la toolbox de matemática simbólica nos permiten realizar operaciones con un número arbitrario de dígitos, sin embargo, a mayor número de dígitos, mayor gasto de tiempo y memoria. Así: -La orden digits(n) cambiará el número de dígitos de precisión de salida que se usa por defecto a “n” en la toolbox correspondiente. -La orden digits nos permitirá conocer cuál es el valor de este número. -Por último, la orden ya permite realizar un cálculo y mostrar su resultado con una precisión especificada, sin cambiar el número de dígitos de precisión con el que se trabaja por defecto. Practiquemos con lo expuesto: >> format long

% establecemos formato por defecto, con 16 dígitos

>> pi ans = 3.14159265358979 >> digits

% dice cuantos dígitos de trabajo interno

Digits = 32 >> vpa(pi)

% evalúa pi con 32

dígitos, ans = 3.1415926535897931159979634685442

>> vpa(pi,60) ans = 3.141592653589793115997963468544185161590576171875 >> vpa(pi,30) % establecemos ahora una salida de 30 dígitos ans = 3.14159265358979311599796346854 >> format short >> pi ans = 3.1416 >> digits Digits = 32 % sigue trabajando internamente con 32 dígitos % muestra los que se han ordenado con la orden format short

MATLAB distingue minúsculas y mayúsculas. Esto quiere decir que a y A representan variables distintas.

MATRICES Y ARREGLOS. Introducción de matrices. Los elementos de un renglón se separan por espacios y las columnas se separan por “ ; “ 1). Matrices unidimensionales: conjunto de números, ordenados en una sola fila o columna. X=[1,2,10,4] Crea una matriz fila cuyo resultado es: 1 2 10 4 2). Si desea visualizar un elemento en particular, digite X con su subíndice entre paréntesis X(3) Devuelve el elemento de la matriz, ubicado en la tercera posición cuyo resultado es: 10 3) X=[1;8;3;4] Crea una matriz en una columna cuyo resultado es: 1 8 3 4 Matlab presenta otra opción para crear matrices, donde cada par de elementos consecutivos posee una razón constante X=1:0.5:4

Crea una matriz en fila con valor inicial 1 que se va incrementando en 0.5 hasta llegar al valor 4, cuyo resultado es: 1 1.5 2 2.5 3 3.5 4 El número de elementos de una matriz pueden incrementarse definiendo elementos adicionales: X(8)=6 Adiciona un elemento a la matriz X en la octava posición, digitando X en la ventana de comandos nos dará como resultado 1 1.5 2 2.5 3 3.5 4 6 4). matrices bidimensionales: conjunto de números, ordenados en filas y columnas, teniendo para ello más de una: A=[1,4,5,8;5,0,0,2;0,1,-7,3] Crea una matriz de 3 filas por 4 columnas cuyo resultado es:

1 4 5 8 5 0 0 2 0 1 -7 3

El ; en una matriz se utiliza para separar las filas en un arreglo. Si desea visualizar un elemento particular digite A con subíndice entre paréntesis A(3,4) Devuelve el elemento de la tercera fila, cuarta columna: 3 A(2,:) devuelve todos los elementos de la segunda fila : 5 0 0 2 A(:,4) devuelve todos los elementos de la cuarta columna: 8 2 3 OPERACIONES CON MATRICES. Suma de matrices. A=[ 1,4;5,2] B=[ 2,1;3,4] C=A+B Nos devuelve como resultado C=

3 5 8 6 Resta de matrices. D=A-B Nos devuelve como resultado D= -1 3 2 -2 Multiplicación de una matriz por un número. D=[3,-2,7;6,5,4;5,4,9] E=-4*D Nos devuelve como resultado E= -12

8 -28

-24 -20 -16 -20 -16 -36 Multiplicación de matrices A=[2,3,1;1,-1,1;0,2,2] B=[1,2,1;-1,2,-1;2,0,2] C=A*B Nos devuelve como resultado C= 1 10 1 4 0 4 2 4 2 Calcular B*A y mostrar que

A*B‡ B*A

CLASES DE MATRICES. Transpuesta de una matriz. A=[1,-3,0,-2;3,-12,-2,-6;-2,10,2,5;-1,6,1,3] La transpuesta Y=A’ nos devuelve como resultado Y= 1 3

-2 -1

-3 -12 10 6

0 -2

2

1

-2 -6

5 3

Traza de una matriz. D=tr(Y) Devuelve D= -6 Matrices especiales. eye(m): genera una matriz identidad de orden mxm I=eye(3) Devuelve matriz identidad 3x3 1 0 0 0 1 0 0 0 1 zeros(m,n): genera una matriz nula de orden mxn B=zeros(3,2) Devuelve como resultado 0 0 0 0 0 0 ones(m,n): genera una matriz de unos de orden mxm A=ones(2,3) Devuelve como resultado 1 1 1 1 1 1 Si A=[1 2 3;4 5 6;7 8 9] Produce la matriz æ 1 2 3ö A = ç 4 5 6÷ ç ÷ è 7 8 9ø B=[3;6;9] Produce la matriz æ 3ö B = ç 6÷ ç ÷ è 9ø C=|A B| Forma una matriz aumentada æ1 2 3 3 ö C=ç4 5 6 6 ÷ ç ÷ è7 8 9 9 ø D=rref(A) D forma matriz escalonada reducida por renglones de A

RESOLUCIÓN DE SISTEMAS DE ECUACIONES LINEALES. MÉTODO DE LA INVERSA. Consideremos el siguiente sistema de ecuaciones 3x+4y+z+2w=-3 3x+5y+3z+5w=-6 6x+8y+z+5w=-8 3x+5y+3z+7w=-8 A=[3 4 1 2;3 5 3 5;6 8 1 5;3 5 3 7] B=[-3;-6;-8;-8] X=inv(A)*B Nos devuelve como resultado: X= 2 -2 1 -1 Operador slash (\) Se utiliza en los casos donde la matriz desconocida se encuentra en la izquierda o derecha de la matriz de coeficientes, esto se puede pensar en “dividir” ambos lados de la ecuación de la matriz AX=B o XA=B. X=B/A denota la solución para la ecuación de la matriz XA=B X=A\B ( inversa) denota la solución para la ecuación de la matriz AX=B Consideremos el siguiente sistema de ecuaciones 3x+4y+z+2w=-3 3x+5y+3z+5w=-6 6x+8y+z+5w=-8 3x+5y+3z+7w=-8 A=[3 4 1 2;3 5 3 5;6 8 1 5;3 5 3 7] B=[-3;-6;-8;-8] X=A\B Nos devuelve como resultado:

X= 2 -2 1

MÉTODO DE REDUCCIÓN A LA FORMA ESCALONADA. Consideremos el siguiente sistema de ecuaciones 3x+4y+z+2w=-3 3x+5y+3z+5w=-6 6x+8y+z+5w=-8 3x+5y+3z+7w=-8

A=[3 4 1 2 -3;3 5 3 5 -6;6 8 1 5 -8;3 5 3 7 -8] ( matriz aumentada ) X=rref(A) Nos devuelve como resultado: 1 0 0 0 2 0 1 0 0 -2 0 0 1 0 1 0 0 0 1 -1

CÁLCULO DE DETERMINANTES. Ingrese la siguiente matriz: A=[3,-1,0,2;-1,-2,3,4;7,4,4,0;1,0,0,5] El determinante de la matriz A B=det(A) Nos devuelve como resultado

-401

3.5. ACTIVIDADES AC1. Dadas las matrices:

æ 1 3 -5 0 3 ö A = ç -3 2 2 8 10 ÷ ç ÷ è 4 2 -1 0 2 ø a). Forme C como la matriz aumentada (A|b)

æ1 ö b = ç 3÷ ç ÷ è 8ø

b). Encuentre la forma escalonada reducida por renglones de C usando el comando rref. Use este comando para escribir un sistema equivalente de ecuaciones, y hallar las soluciones del sistema correspondiente. AC2. Encuentre la forma escalonada reducida por renglones de C usando el comando rref. Use este comando para escribir un sistema equivalente de ecuaciones, y hallar las soluciones del sistema correspondiente.

x1-2x2+x3+x4=2 3x1+2x3-2x4=-8 4x2-x3-x4=1 x1+6x2-2x3=7

AC4.- Utilice el método de Eliminación Gaussiana para resolver el sistema de ecuaciones

AC8.-Dadas las matrices A, B, C, D encontrar:

[

]

[

]

[

]

[

]

a. X=3B*C-D b. Z=2Y-5A donde Y=C*B c.

[

]

AC13. Resuelva el sistema de ecuaciones mediante la inversa utilizando el método de la inversa.

x+2y‐z=‐3 3x+y+z=4 x‐y+2z=6 EP4.6.- Usar la matriz inversa para encontrar las soluciones de las 3 ecuaciones simultaneas.

AC10. Resuelva el sistema de ecuaciones mediante la inversa utilizando Regla de Cramer. x+2y-z=-3 3x+y+z=4 x-y+2z=6

EP4.6.- Calcular la determinante

A= |

|

6. BIBLIOGRAFÍA RECOMENDADA PARA REALIZAR LA GUÍA:  Howard Anton. Introducción al Álgebra Lineal. Editorial Limusa. México, 1986.  Stanley I. Grossman S. Algebra Lineal. Editorial Mc GrawHill. Mexico, 2008.  Murray R. Spiegel. (Serie Schaum) Algebra Superior. Editorial Mc GrawHill. Mexico, 1998.  Bernal Kolman. Algebra Lineal.