Anda di halaman 1dari 73

El mtodo de Gauss-Jordan y preliminares de lgebra Lineal

Prctica 1

Objetivos de la sesin
Presentar al alumno las posibilidades de aplicacin del programa Maple al lgebra Lineal. Familiarizar al alumno con la sintaxis bsica de Maple e introducir algunos comandos nuevos. Que el alumno repase algunos de los conceptos bsicos del lgebra Lineal ya estudiados en cursos anteriores. Que el alumno repase y afiance su comprensin del mtodo de Gauss-Jordan para la resolucin de un sistema de ecuaciones lineales y utilice Maple para resolver por este mtodo varios sistemas de ecuaciones lineales. En la prctica 3 se tratarn los correspondientes mtodos numricos.
> #Pulsa return

Tiempos
La duracin de la prctica (incluida la evaluacin) es de dos horas. La primera hora (aproximadamente) se dedicar al desarrollo-estudio de los contenidos de los apartados "Uso del Sistema Maple en lgebra Lineal" y "Leccin y comandos de Maple necesarios," donde se introducen y repasan los conceptos y se muestran los comandos de Maple precisos para el desarrollo de la prctica. La segunda hora a la realizacin del test de evaluacin.
> #Pulsa return

Como se debe realizar la siguiente prctica


El presente guin seguido con las indicaciones y observaciones del profesor contiene las instrucciones precisas para realizar con el ordenador ejercicios sobre los contenidos presentados en las clases tericas. Lo deseable, para que queden afianzadas las ideas y las nociones bsicas sobre la sintaxis de Maple, es que se realicen prueba y nuevos ejemplos sobre la base de los ejemplos planteados.

> #Pulsa return

Uso del Sistema Maple en lgebra Lineal


En esta primera parte de la prctica se recuerdan algunas caractersticas y comandos de Maple y se describen a travs de ejemplos algunos comandos del paquete "linalg" tiles para el desarrollo de esta y otras prcticas. As pues el alumno deber ejecutar dichos ejemplos y teclear otros que le permitan comprender la aplicacin de dichos comandos.
> #Pulsa return

Maple es un Sistema de Computacin Matemtica (abreviadamente S.C.M.) que permite realizar clculos numricos, manipular expresiones simblicas y crear nuevos procedimientos , entendiendo por stos una secuencia de instrucciones, sentencias y funciones cuyo objetivo es resolver o realizar una determinada aplicacin. A este respecto es importante sealar que, adems del ncleo de Maple que incorpora ciertas funciones y comandos de uso corriente, y que se carga automticamente al arrancar el sistema, el sistema Maple tiene una biblioteca compuesta de libreras. En las libreras residen las funciones que realizan tareas matemticas complejas. Para trabajar con las funciones y/o los procedimientos de una de estas libreras, es preciso utilizar el comando with . As por ejemplo, para trabajar con la librera linalg , escribiremos: with(linalg); Para ejecutar ese comando, colocaremos el cursor tras el ";" y pulsaremos la tecla "intro". Al ejecutar ese comando aparece una lista con las funciones y procedimientos accesibles en esa librera.
> with(linalg); Warning, new definition for norm Warning, new definition for trace

Si se quiere trabajar con una librera de Maple sin que aparezca la lista con las funciones y procedimientos accesibles en ella, basta con utilizar ":" en vez de ";" despues del comando with( nombre_librera ). Por ejemplo:
> with(linalg): > #Pulsa return

Teniendo en cuenta que, al menos para la mayora de vosotros, ste no es el primer curso en el que habeis tenido contacto con Sistemas de Computacin Matemtica, vamos a dedicar la primera parte de la sesin a recordar algunos elementos de la sintaxis de Maple y a familiarizarnos con el tipo de problemas en el que podemos emplear esta herramienta. Maple es una herramienta til para manipular frmulas, ecuaciones y datos. La siguiente sesin est preparada como sesin introductoria al manejo de Maple en el marco del lgebra Lineal. LGEBRA LINEAL Y MANIPULACIN DE MATRICES. Llamamos al paquete utilizando el comando with(linalg):
> restart;with(linalg): Warning, new definition for norm Warning, new definition for trace

Obsrvese que los avisos que aparecen en pantalla son "outputs" normales y no indican un problema. Definamos una matriz cuadrada A, de dimensin 3, con caracteres alfanumricos utilizando el comando matrix() :
> A:= matrix([[1,-alpha,2/3],[-1,0,1],[beta/3,2,-1]]);

Para obtener la matriz anterior, se puede utilizar tambin la sintaxis


> A:= matrix(3,3,[1,-alpha,2/3,-1,0,1,beta/3,2,-1]);

Es tambin posible definir una matriz A como una funcin de los pares ordenados de ndices (i,j), expresando cada coeficiente A[i,j] en funcin de los valores de i y de j. As la matriz identidad de dimensin 6 se puede definir como una funcin

con dominio igual a {1,2,3,4,5,6}x{1,2,3,4,5,6}:


> Id:=(i,j)-> if i=j then 1 else 0;fi;

> I6:=matrix(6,6,Id);

Obtenemos la traspuesta de A:
> transpose(A);

Calculamos su determinante (simblico):


> det(A);

Calculamos su inversa :
> inverse(A);

Ahora definimos una matriz numrica B: B:= matrix(3,2,[[1,2],[1,1],[-1,0]]);

Para obtener el coeficiente (i,j) de una matriz B, se utiliza el comando B[i,j], por ejemplo:
> B[3,1];

Tambin es posible multiplicar matrices. Por ejemplo, sea C = AB:


> C:= multiply(A,B);

Para clculos ms complicados con expresiones matriciales, la funcin evalm() permite utilizar una notacin ms natural. Obsrvese que el operador especial " &* " denota el producto habitual de matrices, mientras que el operador "*" denota la multiplicacin por escalares . El siguiente ejemplo calcula AB-(1/3)*C:
> evalm(A &* B - 1/3*C);

Finalmente, los sistemas de ecuaciones lineales tambin pueden ser resueltos utilizando su representacin matricial. En ese caso se emplea el comando linsolve(A,B) , entendindose entonces que lo que se est resolviendo es la ecuacin matricial . Por ejemplo:
> A:= matrix([[2,2,2],[1,1,0],[-1,0,1]]);

> B:=matrix([[3],[2],[1]]);

> X:=linsolve(A,B);

> #Pulsa return

Para finalizar esta parte de la prctica, vamos a ver cmo se puede utilizar Maple para obtener la representacin grfica de los sistemas de ecuaciones con tres incgnitas mediante los planos determinados por cada una de las ecuaciones que lo componen. Consideremos ahora el sistema

, que podemos escribir como una lista de tres ecuaciones lineales:


> Sistema:=[2*x+y+z = 1,2*x+y+z = 5, 3*x-y-z = 0];

Expresando en cada ecuacin la variable e

explcitamente en funcin de las variables

, se obtiene el sistema de ecuaciones

Maple contiene el comando isolate(ecuacin, expresin) en la librera isolate , que nos permite escribir las ecuaciones en esta ltima forma:
> readlib(isolate): > Sistz:={isolate(Sistema[1],z),isolate(Sistema[2],z),isolate(Sistema[3],z)};

Si queremos representar las tres ecuaciones en una nica grfica, se puede utilizar el comando plot3d:
> plot3d({1-2*x-y,5-2*x-y,3*x-y},x=-10..10,y=-10..10);

Nota: Si se pincha con el cursor la grfica obtenida, aparecen nuevos botones en la barra de herramientas y podis explorara que acciones se corresponden. Tambin, se puede arrastrar el cursor en el rea de la grfica para cambiar de perspectiva. Con la representacin grfica de los planos anteriores a la vista, es compatible el sistema de ecuaciones lineales anterior?
> #Pulsa return

Tambin es posible representar los planos directamente utilizando las ecuaciones depende de la variables e de forma originales del sistema (donde la variable implcita) y un comando especial que requiere del uso de la librera plots . Para ello usaremos el comando with(plots): (recordamos que los dos puntos al final de la "lnea de input de comandos" tienen el mismo efecto que el punto y coma pero no "producen eco", es decir, el sistema ejecuta la operacin pero no da una respuesta en pantalla).
> with(plots): > implicitplot3d({2*x+y+z = 1, 2*x+y+z = 5,3*x-y-z = 0},x=-10..10,y=-10..10, z=-

40..40);

Para irnos familiarizando con algunos comandos que se emplearn en las siguientes prcticas, tras la definicin de los correspondientes vectores, utilizaremos el comando dotprod (producto escalar usual) para definir la longitud (la norma) de un vector genrico (en Maple sqrt =raz cuadrada).
> u:=vector([1,2,3]);

> v:=vector([2,5,7]);

> dotprod(u,v);

> longitud:=x->sqrt(dotprod(x,x));

> longitud(u);

Podemos ahora calcular la proyeccin ortogonal de u sobre v, utilizando la frmula :


> evalm((dotprod(u,v)/dotprod(v,v))*v);

#Pulsa return

Leccin
Introduccin
En la seccin anterior se ha visto, entre otras cosas, cmo se pueden resolver sistemas de ecuaciones lineales, invertir matrices y calcular el valor de determinantes. Vamos ahora a utilizar Maple para aplicar los mtodos de reduccin de matrices por medio de transformaciones elementales vistos en las clases tericas.
> #Pulsa return

Como hemos visto, Maple tiene implementada en la librera linalg un comando para resolver sistemas de ecuaciones lineales, siendo su sintaxis , donde A es la matriz de coeficientes y B es la matriz de los trminos independientes (y por consiguiente una matriz columna). El objetivo de este apartado es exponer con claridad cuales son las herramientas bsicas que configuran los mtodos de eliminacin gaussiana y de Gauss-Jordan, al margen de que el uso del comando linsolve permita resolver sistemas de ecuaciones sin saber realmente cmo se est haciendo.
> #Pulsa return

Matrices asociadas a un sistema de ecuaciones lineales


En general, si consideramos un sistema de ecuaciones lineales de la forma: +....+ +....+ ..... +....+ , :

es posible plantearlo en la forma matricial


> A:=matrix(3,4,(i,j)->a[i,j]);

> B:=matrix(3,1,(i,j)->b[i]);

> X:=matrix(4,1,(i,j)->x[i]);

> evalm(A&*X)=evalm(B);

y trabajar directamente con la matriz ampliada de dicho sistema utilizando el comando concat :
> Am:=concat(A,B);

= (A|B),

Ejemplo 1 Dado el sistema

> S:={x[1]+x[2]+x[3] = 1, 2*x[1]-2*x[2]+x[3] = 2, 3*x[1]+3*x[2]+3*x[3] = 3};

su matriz ampliada asociada

sera

> Am:=matrix([[1, 1, 1, 1], [2, -2, 1, 2], [3, 3, 3, 3]]);

La matriz se puede tambin definir utilizando el comando coeffs(polinomio) , que permite crear la lista de los coeficientes de las variables de un polinomio
> coeffs(x[1]+x[2]+x[3]);

> coeffs(2*x[1]-2*x[2]+x[3]);

> coeffs(3*x[1]+3*x[2]+3*x[3]);

y creando la matriz

asociada a nuestro sistema

> A:=matrix([[coeffs(x[1]+x[2]+x[3])],[coeffs(2*x[1]-

2*x[2]+x[3])],[coeffs(3*x[1]+3*x[2]+3*x[3])]]);

La matriz ampliada

=(

) es

> B:=matrix(3,1,[1,2,3]);

> Am:=concat(A,B);

> #Pulsa return

Compatibilidad e incompatibilidad
Para determinar si un sistema es compatible o no, y resolverlo en su caso por el mtodo de eliminacin gaussiana o por el de Gauss-Jordan, realizaremos transformaciones elementales por filas (intercambiar filas, multiplicar filas por un nmero distinto de cero, sumar o restar filas) sobre la matriz ampliada , lo que equivale a realizar las mismas operaciones sobre las ecuaciones que representan dichas filas. En smbolos: -> donde ->...-> , , a la matriz

es el resultado de aplicar la transformacin (notar que = es la matriz original).

> #Pulsa return

Para el mtodo de eliminacin gaussiana escalonada del tipo:

tendr que estar en forma

donde las primeras filas contienen los unos principales que corresponden a las variables principales del sistema.
> #Pulsa return

Segn vimos, si

es distinto de cero el sistema es incompatible .

Por otra parte, si y , entonces =1 y el sistema es compatible determinado y se puede resolver o bien con el mtodo de Gauss-Jordan (realizando transformaciones elementales por filas hasta que la matriz obtenida est en forma escalonada reducida ), o bien por sustitucin hacia atrs . Por ejemplo, est claro que con la representacin establecida para los sistemas de

ecuaciones lineales, el sistema correspondiente a la matriz como solucin .

, tendra

Finalmente, si y r<n, pasaramos a considerar el sistema obtenido al dejar en el primer miembro las variables principales, trasladando las variables secundarias (parmetros) al segundo miembro de la igualdad:
> #Pulsa return

+....+

-...-

..... -...obteniendo as un sistema que se puede resolver, como en el caso anterior, o bien realizando transformaciones elementales por filas sobre la matriz ampliada hasta que las r primeras columnas de la matriz considerada (es decir, todas menos la ltima) sean las de la matriz , o bien por sustitucin hacia atrs.

> #Pulsa return

Ejemplo 2 En el Ejemplo 1, hallamos la matriz ampliada asociada al sistema

> Am:=concat(A,B);

que, sometida a oportunas transformacin elementales por filas, dara lugar a


> matrix([[1, 1, 1, 1], [0, 1, 1/4, 0], [0, 0, 0, 0]]);

por lo que deberamos pasar al sistema

con su correspondiente matriz asociada


> matrix([[1, 1, 1-x[3]], [0, 1, -x[3]/4]]);

Para calcular las soluciones, podemos sustituir

en la ecuacin

, o escribir la matriz en su forma escalonada reducida:


> matrix([[1, 0, 1-x[3]+1/4*x[3]], [0, 1, -1/4*x[3]]]);

Tranformaciones elementales por filas con Maple


Dada una matriz
> A:=matrix([[1,1,1,-1,1],[2,-2,1,2,0],[3,3,3,3,1],[1,0,-3,4,5]]);

Los comandos de Maple que corresponden a las transformaciones elementales por filas sobre una matriz son los siguientes:

para intercambiar las filas i y j se emplea el comando swaprow(A, i, j) :

> swaprow(A,1,2);

el comando mulrow(A, i, k) permite multiplicar una fila i por un nmero k (distinto de cero) :
> mulrow(A,1,24);

para sumar a la fila j la fila i multiplicada por un nmero k se emplea el comando addrow(A, i, j, k) :
> addrow(A,1,3,-3);

En algunos casos puede resultar conveniente "personalizar" los comandos. Por ejemplo, si definimos la funcin "filapor" en el siguiente modo:
> filapor:=(i,k)->mulrow(A,i,k);

la funcin as definida multiplica la fila i-sima de A por k.


> filapor(1,24);

Cuando los sistemas resulten compatibles indeterminados, pueden resultar tiles los siguientes comandos (el primero multiplica una columna por un nmero cero, el segundo elimina filas y el tercero elimina columnas):
> mulcol(A,1,k);

distinto de

> delrows(A,1..2);

> delcols(A,3..4);

Finalmente la funcin pivot , que tiene la forma pivot(A, i, j) , devuelve una nueva matriz en la que en todos los elementos de la columna j se han convertido en ceros (por medio de transformaciones elementales), a excepcin del elemento matriz, que es el que se ha utilizado como pivote. Si el elemento el comando pivot se obtiene un mensaje de error:
> pivot(A,2,3);

de dicha es nulo, al aplicar

> A[2,5];pivot(A,2,5);

Error, (in pivot) cannot pivot on zero entry

Si se quiere que se conviertan en ceros slo los elementos de la columna j que pertenecen a filas inferiores a la fila i , se utiliza pivot(A, i, j, r..s) :
> pivot(A,2,3,3..4);

La funcin gausselim reduce una matriz a su forma escalonada (sin que los coeficientes principales sean igual a 1):
> gausselim(Am);

La funcin gaussjord reduce una matriz a su forma escalonada reducida:


> gaussjord(Am);

En todo caso, como ya hemos comentado, la funcin que resuelve de forma directa el sistema de ecuaciones lineales es secuencialmente las operaciones descritas. , que bsicamente realiza

Por ejemplo, el sistema de ecuaciones de los ejemplos 1 y 2 anteriores lo resolveramos del siguiente modo:
> A:=matrix([[1,1,1],[2,-2,1],[3,3,3]]);

> B:=matrix([[1],[2],[3]]);

> linsolve(A,B);

> #Pulsa return

Los comandos vistos tambin pueden ser utilizados para trabajar con sistemas de ecuaciones dependientes de parmetros, pero en ese caso hay que tener cuidado , pues el tipo de simplificacin que, por ejemplo, efecta el comando gaussjord no permite resolver el problema teniendo en cuenta todos los posibles valores de los parmetros, como se puede ver en el siguiente ejercicio-ejemplo: Ejemplo 3 Encontrar los valores de a, b y c que hacen que el siguiente sistema de ecuaciones sea incompatible:

> A:=matrix(3,5,[2,1,3,5,a,3,2,-1,4,b,3,1,10,11,c]);

> gaussjord(A);

> gausselim(A);

Como se puede ver, al emplear gaussjord, el sistema ha trabajado con las variables a, b y c sin distinguir entre los posibles casos, de manera que los parmetros han desaparecido (porqu?). Sin embargo, en este caso, al emplear gausselim podemos extraer fcilmente los valores de a, b y c que hacen el sistema incompatible (por qu?).
> #fin

Prctica 2

Mtodo de Gauss y rango. Determinantes


Objetivos de la sesin
Recordar algunas de las funciones de la librera linalg que se introdujeron en la prctica 1 e introducir otras nuevas necesarias para el desarrollo de esta prctica.

Afianzar en el alumno la comprensin de la base terica del mtodo de Gauss-Jordan, las transformaciones y matrices elementales y sus diferentes aplicaciones mediante el uso de Maple. Utilizar las transformaciones elementales para desarrollar el concepto de determinante, sus propiedades y sus aplicaciones al estudio de la dependencia e independencia lineal de sistemas de vectores. Relacionar el concepto de determinante con la idea de volumen.
> #Pulsa return

Tiempos
La duracin de la prctica (incluida la evaluacin) es de dos horas. La primera hora (aproximadamente) se dedicar al desarrollo-estudio de los contenidos de los apartados "Comandos de Maple necesarios para la realizacin de esta prctica" y "Leccin", donde se introducen y repasan los conceptos y se muestran los comandos de Maple precisos para el desarrollo de la prctica. La segunda hora a la realizacin del test de evaluacin.
> #Pulsa return

Como se debe realizar la siguiente prctica


El presente guin seguido con las indicaciones y observaciones del profesor contiene las instrucciones precisas para realizar con el ordenador ejercicios sobre los contenidos presentados en las clases tericas. Lo deseable, para que queden afianzadas las ideas y las nociones bsicas sobre la sintaxis de Maple, es que se realicen prueba y nuevos ejemplos sobre la base de los ejemplos planteados.
> #Pulsa return

Comandos de Maple necesarios para la realizacin de esta prctica


En esta primera parte de la prctica se describen, a travs de ejemplos, algunos comandos del paquete linalg tiles para la aplicacin del mtodo de Gauss que vamos a exponer y se repasarn los comandos utilizados en la prctica 1. As pues el alumno deber ejecutar dichos ejemplos y teclear otros que le permitan comprender la aplicacin de dichos comandos. Los siguientes son algunos comandos incorporados por Maple que pueden ser necesarios para la realizacin de esta prctica (referida fundamentalmente al mtodo de Gauss) que estn disponibles en la librera linalg: stackmatrix augment addcol addrow mulcol mulrow delcols delrows swapcol swaprow row col pivot linsolve gausselim gaussjord

equal rank transpose inverse innerprod crossprod % with(combinat) permute det Descripcin de los comandos mencionados:
> restart:with(linalg): Warning, new definition for norm Warning, new definition for trace

OBSERVACIN: En la lnea de input de comandos anterior hemos introducido el smbolo ":" cuya accin, recordemos, es la misma del ";" pero no hace eco (es decir, no se imprime nada como output aunque realiza la accin que le precede).
> A1:=matrix(3,3,[1,-2,5,0,0,Pi/4,7,8,9/5]);

> B1:=matrix(3,3,[0,0,3,-5,2,1,8,0,0]);

Para acceder al elemento (i,j) de una matriz C hay que escribir C [i,j]. Por ejemplo:
> B1[2,1];

Las funciones row(A,r1) , col(A,c1) devuelven la fila r1 y la columna c1 de A respectivamente (ntese que col(A,c1) devuelve una matriz fila, no una matriz columna):
> r2:=row(A1,2); c3:=col(B1,3);

El comando stackmatrix une dos matrices verticalmente:


> stackmatrix(A1,B1);

La funcin augment (como la funcin concat ) une dos matrices horizontalmente:


> augment(A1,B1);

> concat(A1,B1);

La funcin delcols(A,r..s) (delrows(A,r..s)) elimina las columnas (respectivamente filas) r,r+1,...,s de la matriz A:
> delcols(augment(A1,B1),2..4);

> delrows(stackmatrix(A1,B1),3..3);

> #Pulsa return

Recordemos las funciones addrow y addcol , ya empleadas en la prctica anterior: Llamadas a las funciones addrow y addcol: addrow(A, r1, r2, m) addcol(A, c1, c2, m) Parmetros: A - matriz r1,r2,c1,c2 - enteros; ndices de fila (columna) m - expresin escalar (opcional. Por defecto m=1). La llamada addrow(A,r1,r2,m) devuelve una copia de la matriz A en la cual la fila r2 ha sido reemplazada por m*row(A,r1)+row(A,r2). La funcin addcol tiene un comportamiento similar pero para columnas. Recordemos los coeficientes de la matriz A1 anterior. Nota: Segn vimos, la accin del comando "evalm" es similar a la del comando "eval" pero para matrices.
> evalm(A1);

> addcol(A1,1,2,-1);

> addrow(A1,2,3,-9);

Recordemos tambin las funciones mulcol y mulrow : Llamadas a las funciones: mulcol(A, c, expr) mulrow(A, r, expr) Parmetros: A - matriz r,c - enteros positivos expr - expresin escalar La llamada mulcol(A,c,expr) devuelve una matriz que tiene las mismas componentes que la matriz A, pero con los elementos de la columna c-sima multiplicados por la expresin expr. La funcin mulrow(A,r,expr) tiene un comportamiento anlogo:
> mulcol(A1,2,x);mulrow(B1,1,2/3);

La funcin equal determina si dos matrices son iguales:


> equal(A1,B1);

> Z:=A1: equal(A1,Z);

La funcin transpose traspone una matriz:


> C1 := matrix([[1, 0, 7], [-2, 0, 8], [5, 1, 9]]);

> C1:=transpose(A1);

> v1:=row(C1,3);

> v2:=col(A1,3);

> equal(v1,v2);

Recordemos las funciones swapcol y swaprow tambin empleadas en la primera prctica: Llamada a las funciones swapcol y swaprow: swaprow(A, r1, r2) swapcol(A, c1, c2) Parmetros: A - matriz r1,r2,c1,c2 - naturales La funcin swaprow(A,r1,r2) crea una nueva matriz a partir de la matriz A intercambiando las filas r1 y r2. Anlogamente swapcol(A,c1,c2) crea una nueva matriz a partir de A intercambiando las columnas c1 y c2.
> swapcol(A1,1,2);

> swaprow(B1,3,1);

En esta prctica tambin vamos a utilizar la funcin pivot , ya empleada en la prctica anterior: Llamada a la funcin pivot: pivot(A, i, j) pivot(A, i, j, r..s) Parmetros: A - matriz i,j - enteros positivos

r..s - rango de filas La funcin pivot toma como entradas una matriz A y un par de enteros positivos i y j que determinan el elemento A[i,j] de A. Este elemento debe ser distinto de cero, producindose un error en caso contrario. La funcin devuelve una matriz del mismo orden que A, resultado de aplicar transformaciones elementales de fila con el objeto de obtener ceros en la columna j excepto, por supuesto, el elemento A[i,j]. La llamada pivot(A,i,j,r..s) tiene prcticamente la misma funcionalidad que pivot(A,i,j) excepto que las transformaciones tan slo afectan a las filas r, r+1,...,s:
> P1:=pivot(stackmatrix(A1,B1),1,1);

> P2:=pivot(swapcol(P1,2,3),2,2);

> pivot(P2,3,3,4..6);

Sealaremos tambin que la funcin linsolve permite resolver sistemas de ecuaciones lineales. La sintaxis de esta funcin es: "linsolve(A,b)" o tambin "linsolve(A,B)", donde A y B son matrices y b es un vector:
> A:=matrix(3,3,[2,1,1,2,0,1,1,1,1]);b:=matrix([[5],[1],[1]]);

> linsolve(A,b);

Tambin es posible determinar la inversa de una matriz empleando la funcin linsolve. En ese caso estaramos resolviendo la ecuacin matricial
> Id:=matrix(3,3,[1,0,0,0,1,0,0,0,1]);

> linsolve(A,Id);

Veamos que la funcin inverse nos devuelve la misma matriz:


> inverse(A);

> equal(inverse(A),linsolve(A,Id));

El smbolo % permiten recuperar la ltima expresin evaluada, %% la penltima, y as sucesvamente. Verifiquemos el resultado:
> multiply(A,%%);

Para finalizar, recordaremos cmo actan los comandos gausselim y gaussjord ya introducidos en la prctica anterior:
> gausselim(A);

> gaussjord(A);

La funcin rank(A) determina el rango de una matriz A.


> r1:=rank(A1);r2:=rank(B1);r3:=rank(stackmatrix(A1,B1));

Leccin
> #Pulsa return

Introduccin
Para comenzar, vamos a recordar en qu consiste el mtodo de Gauss-Jordan para resolver un sistema de ecuaciones lineales. Primero lo resolveremos empleando el comando "linsolve" que tiene implementado Maple, y posteriormente iremos desarrollando el mtodo de Gauss paso a paso para mejorar su comprensin. Consideremos el siguiente sistema de ecuaciones lineales:

En primer lugar lo resolvemos directamente:


> with(linalg): Warning, new definition for norm Warning, new definition for trace > A:=matrix(3,3,[3,2,-1,1,-2,1,1,-1,1]);

> B:=matrix([[5],[3],[1]]);

> linsolve(A,B);

Ahora ya sabemos la solucin. Esta solucin la ha obtenido el sistema aplicando el mtodo de Gauss-Jordan que tiene implementado. Vamos a obtenerla usando el mtodo de Gauss-Jordan paso a paso segn vimos en las clases tericas:
> Am:=concat(A,B);

> Am:=pivot(Am,1,1);

> Am:=mulrow(Am,1,1/3);

> Am:=pivot(Am,2,2);

> Am:=mulrow(Am,2,-3/8);

> Am:=pivot(Am,3,3);

> Am:=mulrow(Am,3,2);

Como puede comprobarse, hemos obtenido la solucin esperada.


> #Pulsa return

Las transformaciones y las matrices elementales


Estamos ya en condiciones de desarrollar nuevas aplicaciones de los mtodos de reduccin de matrices basados en el uso de transformaciones elementales estudiados en las clases tericas. Sea A una matriz mxn .

Las transformaciones elementales por filas y las matrices elementales correspondientes son las siguientes:

Transformacin elemental Matriz elemental de orden m

: sumar a la fila i de A un mltiplo de la fila j . : es la matriz que se obtiene aplicando la de orden m.

transformacin elemental anterior a la matriz identidad Por ejemplo:

--

-->

=
> #Pulsa return

Transformacin elemental nulo. Matriz elemental de orden m

: multiplicar la fila i de A por un escalar

no

: es la matriz que se obtiene aplicando la de orden m.

transformacin elemental anterior a la matriz identidad Por ejemplo:

--

-->

=
> #Pulsa return

Transformacin elemental Matriz elemental de orden m

<-->

: intercambiar la fila i de A con la fila j .

: es la matriz que se obtiene aplicando la de orden m.

transformacin elemental anterior a la matriz identidad

Por ejemplo:

--

<-->

-->

=
> #Pulsa return

Las transformaciones elementales por columnas y las matrices elementales correspondientes son las siguientes:
Transformacin elemental columna j . : sumar a la columna i de A un mltiplo de la

Matriz elemental de orden n : es la matriz que se obtiene aplicando la transformacin elemental anterior a la matriz identidad ( notar la posicin de los ndices ) . Por ejemplo: de orden n y es igual a la matriz elemental

--

- ->

=
> #Pulsa return

Transformacin elemental no nulo.

: multiplicar la columna i de A por un escalar

Matriz elemental de orden n : es la matriz que se obtiene aplicando la transformacin elemental anterior a la matriz identidad . Por ejemplo: de orden n y es igual a la matriz elemental

--

-->

=
> #Pulsa return

Transformacin elemental j.

<-->

: intercambiar la columna i de A con la columna

Matriz elemental de orden n : es la matriz que se obtiene aplicando la transformacin elemental anterior a la matriz identidad . Por ejemplo: de orden n y es igual a la matriz elemental

--

-->

=
> #Pulsa return

Lo fundamental es tener presente que, segn vimos, cada transformacin elemental se corresponde con la operacin de multiplicar por una cierta matriz invertible (por la izquierda si es una transformacin por filas y por la derecha si es una transformacin por columnas) : dada una matriz A de orden , si realizando una transformacin elemental por filas sobre A obtenemos una matriz B , se verifica que existe una matriz P invertible de orden m tal que

(Obsrvese que en este caso la matriz P multiplica a la matriz A por la izquierda).

Anlogamente, si realizando una transformacin elemental por columnas sobre A obtenemos una matriz C , se verifica que existe una matriz invertible Q de orden n tal que . (Obsrvese que en este caso la matriz Q multiplica a la matriz A por la derecha). Veamos algunos ejemplos (recurdese que para multiplicar una matriz A por una matriz B se utiliza el comando A&*B):
> A := matrix(2,3,(i,j)->a(i,j));

> P[1](lambda) := matrix(2,2,[lambda, 0,0,1]);

Notar que

es 2x2 y que

> Af := evalm(P[1](lambda)&*A);

Ahora, si definimos

de dimensin 3,

> P[1](lambda) := matrix(3,3,[lambda, 0,0,0,1,0,0,0,1]);

> Ac := evalm(A&*P[1](lambda));

> #Pulsa return

Como se puede observar, segn multipliquemos por la izquierda o por la derecha a la matriz A por la matriz (de dimensin adecuada) realizamos una transformacin por filas o por columnas sobre A (respectivamente). Ejercicio : Definir las matrices , resultado.
> > >

y y

, y realizar los productos , y observar cual es el

Vamos a ver que es la matriz por la que hay que multiplicar a una matriz dada por la izquierda para tener una accin del tipo "sumar a la fila i la fila j multiplicada por ":
> S[12](lambda) := matrix(2,2,[1, lambda, 0, 1]);

Notar que

es de dimensin 2:

> Af := evalm(S[12](lambda)&*A);

Ahora, si definimos

de dimensin 3

> S[21](lambda) := matrix(3,3,[1, 0,0,lambda,1, 0,0,0, 1]);

y multiplicamos por la derecha, se obtiene que


> Ac:=evalm(A&*S[21](lambda));

Como puede observarse, el resultado de multiplicar a la matriz A por la matriz (de dimensin 2) por la izquierda coincide con la matriz que resulta al sumar a la primera fila de A la segunda multiplicada por .

El resultado de multiplicar a la matriz A por la matriz (de dimensin 3) por la derecha coincide con la matriz que resulta al sumar a la primera columna de A la segunda multiplicada por . y y ,y

Ejercicio : Definir las matrices (de dimensin adecuada) realizar los productos , ,

, y observar cual es el resultado.


> > >

Finalmente, vamos a verificar que es la matriz por la que hay que multiplicar a una matriz dada por la izquierda para tener una accin del tipo "intercambiar la fila i con la fila j ":
> E[12]:= matrix(2,2,[0, 1, 1, 0]);

> Af:= evalm(E[12]&*A);

Ahora, si definimos

de dimensin 3

> E[12]:= matrix(3,3,[0, 1,0,1,0,0,0,0, 1]);

y multiplicamos por la derecha, se obtiene que


> Ac:=evalm(A&*E[12]);

En resumen, dada una matriz A, si multiplicamos dicha matriz por la izquierda por una matriz de la forma , o , el resultado de dicha multiplicacin es una transformacin por filas sobre la matriz A. Del mismo modo, si multiplicamos dicha matriz por la derecha por una matriz de la forma , o , el resultado de dicha multiplicacin es la correspondiente transformacin por columnas sobre la matriz A.
> #Pulsa return

Tabla resumen
> #Pulsa return

Transformacin elemental Producto de matrices Sumar a la fila i la j multiplicada por Multiplicar la fila i por Intercambiar la fila i con la fila j A

Sumar a la columna i la j multiplicada por Multiplicar la columna i por Intercambiar la columna i con la columna j A

Inversas de las transformaciones elementales

> #Pulsa return

Las matrices que corresponden a las transformaciones elementales son invertibles. En el caso de las matrices de la forma , cuya accin consiste en multiplicar la

fila o columna i-sima por Por ejemplo:

, es fcil deducir que su inversa es la matriz

> P[1](lambda) := matrix(3,3,[lambda, 0, 0, 0, 1, 0, 0, 0, 1]);

> P[1](1/lambda):= matrix(3,3,[1/lambda, 0, 0, 0, 1, 0, 0, 0, 1]);

> evalm(P[1](lambda)&*P[1](1/lambda));

Veamos adems qu sucede al hacer actuar estas transformaciones sobre la siguiente matriz:
> A := matrix(3,3,(i,j)->a(i,j));

> Ac:=evalm(A&*P[1](lambda));

> evalm(Ac&*P[1](1/lambda));

Por otra parte la inversa de la matriz Por ejemplo:

es la matriz

> S[13](lambda) := matrix(3,3,[1, 0, lambda, 0, 1, 0, 0, 0, 1]);

> S[13](-lambda) := matrix(3,3,[1, 0, -lambda, 0, 1, 0, 0, 0, 1]);

> evalm(S[13](-lambda)&*S[13](lambda));

Si ahora queremos verlo a partir de la actuacin de estas matrices sobre la matriz genrica A dada:
> Ac := evalm(A&*S[13](lambda));

> evalm(Ac&*S[13](-lambda));

Ejercicio: Determinar la matriz inversa de la matriz elemental


> > > #Pulsa return

Rango y transformaciones elementales


Comenzaremos recordando algunas definiciones y resultados: Definicin: Si A es una matriz de orden mxn , se denomina rango de la matriz A a la dimensin del subespacio de vectores columna de la matriz A . generado por el sistema formado por los " n "

Al subespacio generado por los vectores columna de la matriz A se le denomina subespacio columna de A. El rango de una matriz es un mecanismo til para determinar la dimensin de aquellos subespacios vectoriales de los que conocemos un sistema generador y, entonces, para verificar si este sistema es libre o ligado.
> #Pulsa return

(R) de los polinomios reales en As por ejemplo, considerando el espacio vectorial la variable x de grado menor o igual que 3, para determinar la dimensin del subespacio escribimos las matrices de las coordenadas de dichos vectores respecto de la base usual . Se obtiene el sistema

, con lo que la dimensin de H coincidir con el rango de la

matriz
> #Pulsa return

Veamos, pues, un mtodo para obtener de una manera sencilla el rango de una matriz. Definicin: Se dice que una matriz columnas siguientes: de filas y columnas es gaussiana si sus

, donde j vara en el conjunto {1,...,n}, satisfacen una de las condiciones

Existe

perteneciente al conjunto {1,...,n} tal que

(1, (1,

) es distinto de cero, y ) =0.

para todo k perteneciente al conjunto {j+1,...,n},

En otras palabras, la segunda condicin supone localizar un elemento (1, ) distinto de cero en la columna considerada y asegurarse de que todos los coeficientes de la matriz situados en su misma fila y a su derecha son cero.
> #Pulsa return

As por ejemplo, son matrices gaussianas

,
> #Pulsa return

El inters de este tipo de matrices radica en que si una matriz es gaussiana, su rango coincide con el nmero de columnas no nulas que posee. As por ejemplo,

rg(
> #Pulsa return

)=2 y rg(

)=3.

El mtodo de Gauss para determinar el rango de una matriz consiste en lo siguiente: partiendo del hecho de que al realizar transformaciones elementales por columnas sobre una matriz, el rango de la nueva matriz obtenida coincide con el rango de la matriz original, el mtodo consiste en realizar transformaciones elementales por columnas sobre la matriz dada hasta obtener una matriz gaussiana , cuyo rango se determina de manera inmediata. El mtodo de Gauss para determinar el rango de una matriz es especialmente til para calcular el rango de una matriz cuando no se dispone de la ayuda de un ordenador. Si se quiere determinar, junto con el rango de una matriz, una base del subespacio vectorial generado por las columnas de la matriz dada y slo se dispone de lapiz y papel, lo ms sensato es utilizar el mtodo de Gauss para determinar los rangos de las matrices objeto de estudio. Maple lleva incorporada un comando que determina automticamente el rango de una matriz:
> A:=matrix(3,3,[1,1,1,1,1,1,1,1,1]);

> rank(A);

En todo caso, el comando "rank" no nos permite obtener una base del subespacio columna de A. NOTA IMPORTANTE: Si queremos obtener una base de H formada por vectores del sistema generador dado, tenemos que aplicar el mtodo de Gauss sin utilizar ( sin intercambiar columnas ) y elegir los transformaciones elementaless del tipo vectores columnas de la matriz inicial A que corresponden a las columnas distintas de cero de la forma gaussiana de A. Veamos cmo calcular el rango de la matriz anterior por el mtodo de Gauss paso a paso y obtener una base del subespacio columna de A,
> A:=matrix(3,3,[1,1,1,1,1,1,1,1,1]);

> A1:=addcol(A,1,2,-1);

> A2:=addcol(A1,1,3,-1);

La matriz A2 obtenida es gaussiana, por lo que su rango es 1, y obviamente el sistema

formado por el nico vector columna la matriz original A considerada.


> #Pulsa return

es una base del subespacio columna de

Si ahora volvemos a considerar el subespacio del espacio vectorial (R) de los polinomios de grado menor o igual que 3, y adems de obtener la dimensin de H queremos determinar una base de dicho subespacio, obraremos como sigue: en primer lugar consideraremos las coordenadas del sistema generador de H respecto de

la base usual

obteniendo el sistema

,y

ahora aplicamos el mtodo de Gauss a la matriz


> A:=matrix(4,3,[2,1,5,1,-2,0,0,1,1,0,0,0]);

> A1:=addcol(A,1,2,2);

> A2:=addcol(A1,2,3,-1);

Esta matriz es gaussiana, por lo que el rango de la matriz A es 2. En consecuencia la dimensin de H es tambin 2, y el sistema formado por los vectores correspondientes a las columnas no nulas de A2 constituyen una base de H .
> #Pulsa return

Para finalizar este apartado, vamos a ver un mtodo directo para determinar si un cierto vector pertenece al subespacio vectorial generado por un sistema de vectores dado, utilizando el comando rank. Para ello, recordemos que si un vector pertenece al subespacio vectorial generado por un sistema de vectores dado, dicho vector se puede obtener como combinacin lineal de los vectores de dicho sistema. Por tanto si consideramos la matriz de coordenadas del sistema generador considerado respecto de una base fija del espacio en el que estemos trabajando, el rango de dicha matriz no vara al aadir a la matriz anterior la columna correspondiente a las coordenadas de dicho vector.

As por ejemplo, fijada la base cannica de , para determinar si el vector ( ) pertenece al subespacio vectorial generado por el sistema de vectores {(1,0,3),(4,3,2)}

hallaramos el rango de la matriz

, y veramos si coincide con el rango de la

matriz

Si coinciden ambos rangos, el vector pertenece al subespacio generado y en caso contrario no.
> A:=matrix(3,2,[1,4,0,3,3,2]);

> rank(A);

> Am:=matrix(3,3,[1,4,3,0,3,4,3,2,2]);

> rank(Am);

Como puede verse, el vector ( ) no pertenece al subespacio generado por el sistema de vectores {(1,0,3),(4,3,2)}.

Determinante
El concepto de determinante aparece de manera natural en varios contextos matemticos. Algunos ejemplos son el clculo del jacobiano para integracin en varias variables, el clculo vectorial, el clculo de reas y volmenes, etc.... Vamos a ver como se pueden usar las propiedades del determinante para

calcular reas de paralelogramos en

y de paraleleppedos en

relacionar el mtodo de Gauss-Jordan para una matriz cuadrada con el clculo de su determinante, desarrollar tcnicas para resolver sistemas de ecuaciones lineales con el mismo nmero de ecuaciones que de incgnitas, es decir, cuya matriz asociada sea cuadrada.
> #Pulsa return

En esta primera seccin vamos a introducir (o recordar) el concepto de determinante de una matriz cuadrada. El grupo simtrico S(n) Antes de poder definir el determinante de una matriz cuadrada y estudiar sus aplicaciones necesitamos los conceptos de permutacin y signo de una permutacin que vamos a ilustrar a continuacin. S(n) es el conjunto de las permutaciones (o simetras) de un conjunto con n elementos , que podemos representar como el conjunto de los primeros n nmeros naturales, = {1,2,3,...,n}.

> #Pulsa return

Recordamos que S(n) consiste de todas las funciones biyectivas que - la composicin de dos permutaciones es una permutacin - la composicin de permutaciones es asociativa

de

en

- la funcin identidad, Id(n)=n para todo n, es el elemento neutro respecto de la composicin de permutaciones - toda permutacin tiene una permutacin inversa Por tanto, S(n) tiene estructura de grupo no conmutativo .
> #Pulsa return

Es usual representar una permutacin n columnas, as que, por ejemplo,

en S(n) por medio de una matriz de dos filas y

es la permutacin

definida en (2) =2,

por (3) =4, (4) =3, (5) =5, (6) =1.

(1) =6,

Para trabajar con el grupo S(n) en Maple necesitamos llamar a la librera combinat
> restart;with(linalg):with(combinat):matrix(1,6,[6,2,4,3,5,1]);

Warning, new definition for norm Warning, new definition for trace Warning, new definition for Chi Warning, new definition for fibonacci

El comando permute(n) devuelve todas las permutaciones en S(n), escritas utilizando slo las segundas filas de las matrices anteriores como listas ordenadas. Ejemplo: Sea S(3) el grupo de las permutaciones de un conjunto de 3 elementos:
> permute(3);

Los elementos de S(3) se pueden interpretar como simetras de un tringulo equiltero cuyo vrtices estn marcados con 1, 2 y 3:
>

with(plottools):with(plots):t1:=textplot([0.1,0.05,`1`],align={ABOVE,RIGHT}):t2: =textplot([1/2,sqrt(3/4)-0.1,`2`],align={BELOW}):t3:=textplot([10.1,0.05,`3`],align={ABOVE,LEFT}):display({t1,t2,t3,polygon([[0,0], [1,0], [1/2,sqrt(3/4)]], color=red)},scaling=constrained);

Por ejemplo, - (1 2 3) es la identidad, - (1 3 2) es la simetra respecto de la bisectriz del ngulo en 1:

> t1:=textplot([0.1,0.05,`1`],align={ABOVE,RIGHT}):t2:=textplot([1/2,sqrt(3/4)-

0.1,`3`],align={BELOW}):t3:=textplot([10.1,0.05,`2`],align={ABOVE,LEFT}):r:=plot((sqrt(3)/3)*x,x=0..1.2):display({r,t1,t2, t3,polygon([[0,0], [1,0], [1/2,sqrt(3/4)]], color=green)},scaling=constrained);

- (2 3 1) es la rotacin que lleva 1 en 2, 2 en 3 y 3 en 1:


> t1:=textplot([0.1,0.05,`3`],align={ABOVE,RIGHT}):t2:=textplot([1/2,sqrt(3/4)-

0.1,`1`],align={BELOW}):t3:=textplot([10.1,0.05,`2`],align={ABOVE,LEFT}):display({t1,t2,t3,polygon([[0,0], [1,0], [1/2,sqrt(3/4)]], color=yellow)},scaling=constrained);

Ejercicio: determina el efecto geomtrico de aplicar las permutaciones (2 1 3), (3 1 2) y (3 2 1) al tringulo equiltero rojo.
> #Pulsa return

Por definicin, el resultado de aplicar una permutacin ..., n) es lo de obtener la nueva ordenacin ( de estos n elementos. (1), (2),

al conjunto ordenado (1,2,3, (3), (4), (5), (6))

Una transposicin es una permutacin que intercambia el orden de slo dos elementos de la lista (1,2,3, ..., n). Por ejemplo

es la trasposicin que intercambia el 1 con el 6, que se indicar como (1 6), omitiendo los elementos cuya posicin no ha cambiato. Una inversin es una transposicin que intercambia dos elementos consecutivos de la lista (1,2,3, ..., n). Por ejemplo

, es una inversin que se indicar como (4 5).


> #Pulsa return

Dada una permutacin f de n elementos, si queremos volver a la ordenacin original (1,2,3, ..., n) podemos realizar un nmero adecuado de inversiones entre los elementos de la lista ( (1), (2), de ordenacin burbuja. (3), (4), (5), (6)), como se hace en un algoritmo

Ejemplo: para reordenar los trminos de la lista ( (1) =6, (2) =2, (3) =4, (4) =3, (5) =5, (6) =1) =(6,2,4,3,5,1)

se pueden aplicar, sucesivamente, las siguientes inversiones: (1,2) que produce la lista (2,6,4,3,5,1), (2 3) que produce la lista (2,4,6,3,5,1), (3 4) que produce la lista (2,4,3,6,5,1), (4 5) que produce la lista (2,4,3,5,6,1), (5 6) que produce la lista (2,4,3,5,1,6), (2 3) que produce la lista (2,3,4,5,1,6), (4 5) que produce la lista (2,3,4,1,5,6), (3 4) que produce la lista (2,3,1,4,5,6), (2 3) que produce la lista (2,1,3,4,5,6) y, finalmente, (1 2) que produce la lista (1,2,3,4,5,6).

> #Pulsa return

Si i es el nmero de inversiones necesarias para volver al orden (1,2,3, ..., n), es el signo (o signatura) de la permutacin f, sign( f ). Si i es par (es decir, el signo de f es1) la permutacin se dice par y si i es impar (es decir, el signo de f es -1) la permutacin se dice impar. (Se puede demostar que la paridad de i no depende de las particulares inversiones empleadas para reordenar los elementos de la lista ( (2), (3), (4), (5), (6)).) (1),

En el ltimo ejemplo hemos utilizado 10 inversiones y, por tanto, el signo de f es 1 y f es par. La definicin de signo de una permutacin se utilizar en el prximo prrafo para definir el determinante de una matriz cuadrada de dimensin n arbitraria.
> #Pulsa return

Definicin y primeros mtodos para calcular el determinante de una matriz Definicin: El determinante de una matriz cuadrada A=( ) de orden n es el escalar

det(A)=

...

, de n

donde el sumatorio contiene n! sumandos, uno para cada permutacin elementos.

Cada sumando es el producto de n factores y el signo de esto producto est determinado por el signo de la permutacin que lo define.
> #Pulsa return

Ejemplos: El determinate de la matriz 2x2


> A:=matrix(2,2,[[1,2],[-4,1]]);

se calcula utilizando la 2 (=2!) permutaciones

> permute(2);

y la formula anterior
> determinante(A):=1*A[1,1]*A[2,2]-1*A[1,2]*A[2,1];

> det(A);

El determinante de la matriz 3x3


> B:=matrix(3,3,[[1,2,3],[4,3,6],[0,1,2]]);

se calcula utilizando la 6 (=3!) permutaciones


> permute(3);

> determinante(B):=1*B[1,1]*B[2,2]*B[3,3]-1*B[1,1]*B[2,3]*B[3,2]-

1*B[1,2]*B[2,1]*B[3,3]+1*B[1,2]*B[2,3]*B[3,1]+1*B[1,3]*B[2,1]*B[3,2]1*B[1,3]*B[2,2]*B[3,1];

> det(B);

Dada una matriz cuadrada A= (

) de dimensin n, existe una fmula para hallar su de A que se

determinante que utiliza los determinantes de las submatrices obtienen eliminando la fila i y la columna j de la matriz A.

Al determinante de

, det(

), se le llama menor del elemento

y el

escalar det( ) es el adjunto del elemento . Con estas notaciones, la frmula de Laplace para el clculo del determinante de A a partir de la fila i de A es

y a partir de la columna j de A es

.
> #Pulsa return

Es posible demostrar que los valores de las dos expressiones anteriores no dependen de la particular fila o columna elegida y que son iguales al valor del determinante de la matriz A. Estas ltimas frmulas nos dan una definicin recursiva del determinante: si somos capaces de calcular el determinante de matrices 2x2, podemos calcular el determinante de una matriz cuadrada de orden n simplemente aplicando la frmula de Laplace iterativamente hasta que las submatrices de las cuales tenemos que calcular el determinante tengan dimensin 2. Ejemplos: Apliquemos la frmula de Laplace a la matriz 2x2 definida en los ejemplos anteriores
> restart:with(linalg):

A:=matrix(2,2,[[1,2],[-4,1]]);
Warning, new definition for norm Warning, new definition for trace

utilizando la primera fila

> dim(A):=2;i:=1;for k from 1 to dim(A) do

M[i,k]:=delcols(delrows(A,i..i),k..k);od; determinante(A):=add((-1)^(i+j)*A[i,j]*det(M[i,j]),j = 1 .. dim(A));

o la segunda columna
> dim(A):=2;j:=2;for k from 1 to dim(A) do

M[k,j]:=delcols(delrows(A,k..k),j..j);od; determinante(A):=add((-1)^(i+j)*A[i,j]*det(M[i,j]),i = 1 .. dim(A));

Para la matriz 3x3 de los ejemplos anteriores


> B:=matrix(3,3,[[1,2,3],[4,3,6],[0,1,2]]);

la frmula de Laplace para la primera fila es


> dim(B):=3; i:=1;for k from 1 to dim(B) do

M[i,k]:=delcols(delrows(B,i..i),k..k);od; determinante(B):=add((-1)^(i+j)*B[i,j]*det(M[i,j]),j = 1 .. dim(B));

y para la tercera columna


> dim(B):=3;j:=3;for k from 1 to dim(B) do

M[k,j]:=delcols(delrows(B,k..k),j..j);od; determinante(B):=add((-1)^(i+j)*B[i,j]*det(M[i,j]),i = 1 .. dim(B));

> #Pulsa return

El determinante tiene las siguientes propiedades que utilizaremos a continuacin y en los ejercicios: Si A y B son matrices invertible, det(AB)=det(A)det(B). Por tanto el determinante de

una matriz invertible es distinto de cero y det( det( )=1.

)=

, siendo siempre

El determinante de una matriz triangular superior es igual al producto de los elementos de la diagonal. El determinante de una matriz es igual al determinante de su traspuesta .
> #Pulsa return

Si A es una matriz invertible, su matriz inversa es

donde es la matriz cuadrada de la misma dimensin que A cuyos coeficientes son los elementos adjuntos de los elementos de A. Vale la Regla de Cramer para resolver un sistema de ecuaciones lineales AX=B con matriz asociada A nxn invertible, que, por tanto, es compatible determinado. La nica solucin del sistema es el vector de coordenadas

= donde

es la matriz que se obtiene al sustituir la columna i de A por la matriz columna B, para todo i de 1 hasta n.

> #Pulsa return

Determinantes, trasformaciones elementales, sistemas libres y volmenes


En este apartado vamos a estudiar un mtodo para calcular el determinante de una matriz cuadrada por medio de transformaciones elementales, sin tener que recurrir a su definicin o a la frmula de Laplace. Adems veremos que el concepto de determinante se puede pensar como una generalizacin del concepto de volumen.
> #Pulsa return

Dada una matriz cuadrada nxn A, el siguiente teorema nos dice como obtener el determinante de la matriz A' obtenida como resultado de aplicar una transformacin elemental por filas (por columnas) sobre la matriz A:

Teorema Sea A una matriz nxn. Entonces 1) Si A' es la matriz que se obtiene al multiplicar una fila de A por un escalar det(A')= det(A), ,

2) Si A' es la matriz que se obtiene al aadir a una fila de A un multiplo escalar de otra fila, det(A')=det(A), 3) Si A' es la matriz que se obtiene al intercambiar dos filas de A, det(A')= -det(A). 4) Si A' es la matriz que se obtiene al multiplicar una columna de A por un escalar det(A')= det(A), ,

5) Si A' es la matriz que se obtiene al aadir a una columna de A un multiplo escalar de otra columna, det(A')=det(A), 6) Si A' es la matriz que se obtiene al intercambiar dos columnas de A, det(A')= -det(A). Siendo A' = EA y det(A') =det(E)det(A) en los primeros tres casos y siendo A' = AE y det(A') =det(A)det(E) en los ltimos tres casos (con E una matriz elemental), basta con verificar el teorema para matrices elementales. Sea Id la matriz identidad de dimensin n:
> Id:=n->matrix(n,n,(k,r)->if k=r then 1 else 0; fi);

La matriz elemental

tiene determinante igual a

det( Id ):

> n:=6;i:=4;lambda:=-2;P(i,lambda):=mulrow(Id(n),i,lambda);

> det(%);

tiene determinante igual a 1 = det( Id ):


> n:=6;i:=4;j:=6;lambda:=-2;S(i,j,lambda):=addrow(Id(n),i,j,lambda);

> det(%);

tiene determinante igual a -1=-det( Id ):


> n:=6;i:=4;j:=6;E(i,j):=swaprow(Id(n),i,j);

> det(%);

Clculo del valor del determinante por medio de transformaciones elementales: A partir del hecho de que el determinante de cualquier matriz triangular es igual al producto de los elementos de su diagonal principal y de los resultados del teorema anterior, podemos desarrollar un mtodo que nos permite calcular el valor del determinante de cualquier matriz A cuadrada de orden n utilizando transformaciones elementales.
> #Pulsa return

La idea es realizar transformaciones elementales por filas sobre A para obtener una matriz triangular cuyo determinante sabemos calcular. As por ejemplo, si B es la matriz triangular obtenida al realizar sobre la matriz A en primer lugar la transformacin consistente en sumar a la fila i la j multiplicada por multiplicando la fila k por , resulta que: B= y det( B )=det( ( )det( A )= ))=det( *1*det(A)= )det( det(A), )= det( y en segundo lugar

de donde det(A) =

det(B).

Nota : El mtodo anterior tambin funcionara realizando transformaciones slo por columnas o tambin por filas y por columnas pero teniendo cuidado con el lado

(izquierda o derecha) por el que hay que multiplicar por la correspondiente matriz elemental. Observacin importante: Teniendo en cuenta que det( )=1, si la matriz triangular B se obtiene a partir de la matriz A realizando nicamente transformaciones del tipo "sumar a la fila i la fila j multiplicada por que det( A )=det( B ). Ejemplos:
> T:=matrix(5,5,[1,3,3,3,6,0,1,2,3,4,0,0,-1,-8,-3,0,0,0,1,2,0,0,0,0,4]);

", de las propiedades vistas resulta

> det(T);

Como se puede observar, el valor del determinante la matriz anterior (que es triangular) es igual al producto de los elementos de su diagonal principal.
> A:=matrix(4,4,[1,2,3,1,0,4,1,1,2,1,0,1,1,2,1,0]);

> A1:=addrow(A,1,3,-2);

> A2:=addrow(A1,1,4,-1);

> A3:=addrow(A2,2,3,3/4);

> A4:=addrow(A3,3,4,2*(-4/21));

Como puede verse, el producto de los elementos de la diagonal principal la matriz A4 es 19 (y por consiguiente el valor del determinante de A4 es 19). Teniendo en cuenta que todas las transformaciones elementales por filas realizadas han sido del tipo "sumar a la fila i la j multiplicada por Comprobmoslo:
> det(A);

", resulta que det(A) debe coincidir con det(A4).

Determinantes, sistemas libres y volmenes

y observando cmo vara Comenzaremos dibujando algunos paralelogramos en dicho "volumen bidimensional" al modificar el sistema de vectores que determinan dicho paralelogramo. Comenzaremos con el sistema de vectores {(1,0),(0,1)}:

> with(plottools):

plots[display](polygon([[0,0], [1,0], [1,1], [0,1]]), color=red,scaling=constrained);

> #Pulsa return

Es obvio que el rea del paralelogramo anterior es igual a 1= det(

).

Si ahora multiplicamos uno de sus lados por 2, o por cualquier otro nmero, el valor del rea aparece multiplicada por dicha cantidad:
> with(plottools):

plots[display](polygon([[0,0], [2,0], [2,1], [0,1]]), color=green,scaling=constrained);

Como se puede obtener (y observar), el rea encerrada en este caso por los vectores {(2,0),(0,1)}es

det(

)=2.

> #Pulsa return

Por otra parte, recordando la "regla del paralelogramo" que utilizbamos para sumar vectores, se puede demostrar, utilizando argumentos de geometra elemental que, siendo vectores de u y v , el rea del paralelogramo definido por los vectores es igual al rea del paralelogramo de finido por los vectores u y v . Vemoslo de modo grfico en el siguiente dibujo, en el que u =(1,0), v =(0,1). La idea es comprobar grficamente que el rea del rectngulo de borde rojo coincide con el rea del paralelogramo de borde azul:
> with(plottools):

yv

l := line([0,0], [1,1], color=blue, linestyle=1):l3 := line([0,0], [0,1], color=red, linestyle=1): l4 := line([1,0], [1,1], color=red, linestyle=1): l5 := line([1,1], [0,1], color=red, linestyle=1): l1 := line([1,0], [2,1], color=blue,linestyle=1):l2:= line([1,1], [2,1], color=blue,linestyle=1):plots[display](l,l1,l2,l3,l4,l5,scaling=constrained);

Hay que observar que el orden en el que consideramos los vectores determina un "sentido de recorrido" del borde del paralelogramo considerado. Por ejemplo, consideremos el sistema {(1,0),(0,1)} y hallemos el rea del rectngulo determinado por este sistema calculando el siguiente determinante:

> with(linalg): > A:=array(1..2,1..2,[[1,0],[0,1]]);

> det(A);

Si ahora cambiamos el sentido de recorrido del permetro del paralelogramo anterior, i.e., si consideramos el paralelogramo determinado por el sistema {(0,1),(1,0)} y

hallamos el rea correspondiente calculando el valor del determinante det( ), vamos a obtener un cambio de signo en el valor obtenido:
> with(linalg):A:=array(1..2,1..2,[[0,1],[1,0]]);

> det(A);

Si lo que pretendemos es hallar el valor del rea, deberemos tomar el valor absoluto del determinante, pues el determinante en el caso de dos vectores es un "rea con signo", en el que el signo depende del orden considerado de los vectores que determinan el rea. Si ahora queremos determinar el rea encerrada por el sistema {(1,1),(-1,2)}, ser suficiente con calcular el valor del siguiente determinante:
> A:=matrix(2,2,[1,-1,1,2]);

> det(A);

Obviamente, el rea encerrada por un sistema de dos vectores de es cero si y solo si dichos vectores son proporcionales, o lo que es lo mismo, el sistema que forman es ligado.

En las clases tericas vimos que en vectores, crossprod en Maple,


> restart:with(linalg): Warning, new definition for norm Warning, new definition for trace > u := vector([u1,u2,u3]);

se pueden definir el producto vectorial de dos

> v:= vector([v1,v2,v3]);

> crossprod(u,v);

donde las coordenadas del vector resultante son los adjuntos de los elementos e1 , e2 y e3 de la matriz simblica
> PV:=matrix(3,3,[[e1,e2,e3],[u1,u2,u3],[v1,v2,v3]]);

,-

> M[1,1]:=det(delcols(delrows(PV,1..1),1..1));

> M[1,2]:=det(delcols(delrows(PV,1..1),2..2));

> M[1,3]:=det(delcols(delrows(PV,1..1),3..3));

y tambin definimos el producto mixto de tres vectores (el comando innerprod devuelve el producto escalar)
> w:=vector([w1,w2,w3]);

> innerprod(u,crossprod(v,w));

donde el escalar resultante es el determinante de la matriz cuyas filas son las coordenadas de los tres vectores:
> PM:=matrix(3,3,[[u1,v1,w1],[u2,v2,w2],[u3,v3,w3]]);

> det(PM);

> det(PM)-innerprod(u,crossprod(v,w));

La norma del producto vectorial de dos vectores coincide con el rea del paralelogramo en determinado por ellos y el valor absoluto del producto mixto es el volumen del paraleleppedo individuado por los tres vectores. Ejemplo: Dados los vectores
> u:=vector([1,2,1]);v:=vector([-1,1,0]);w:=vector([-2,1,7]);

el paraleleppedo determinado por u , v y w es


> with(plottools):

with(plots): t:=textplot3d([[1,2,1,`u`],[-1,1,0,`v`],[-2,1,7,`w`]],color=black,font=[TIMES, BOLD, 20],align=LEFT): p1:=polygon([[0,0,0],[-1,1,0],[0, 3, 1], [1,2,1]],color=green,scaling=constrained): p2:=polygon([[-2,1,7],[-3,2,7],[-2, 4, 8], [-1,3,8]],color=green,scaling=constrained): p3:=polygon([[0,0,0],[-1,1,0],[-3, 2, 7],[-2,1,7] ],color=blue,scaling=constrained): p4:=polygon([[1,2,1],[0,3,1],[-2, 4, 8],[-1,3,8] ],color=blue,scaling=constrained): p5:=polygon([[0,0,0],[1,2,1],[-1, 3, 8],[-2,1,7] ],color=red,scaling=constrained): p6:=polygon([[-1,1,0],[0,3,1],[-2, 4, 8],[-3,2,7] ],color=red,scaling=constrained): plots[display](p1,p2,p3,p4,p5,p6,t,axes=normal);

El rea del paralelogramo azul es la norma del producto vectorial de v con w :


> norm(crossprod(v,w));

El volumen del paraleleppedo es el valor absoluto del producto mixto de u , v y w :


> abs(innerprod(u,crossprod(v,w)));

Todo lo anterior se puede generalizar a conjuntos de

vectores en

, 5 vectores en

, etc.: dados vectores en , y aunque no podemos dibujarlo, definimos el paraleleppedo generalizado generado por dichos vectores como el conjunto de

combinaciones lineales de dichos vectores con coeficientes entre 0 y 1 (es decir, lo definimos de la misma forma que en y ). Para no disponemos de un concepto intuitivo de volumen, pero s conocemos las propiedades que queremos que dicho concepto verifique (las extrapolamos del concepto de area en y de volumen

, teniendo en mente que el "volumen" debe ser una medida del tamao de un en paraleleppedo): 1.2.3.4., donde . . para cualquier permutacin .

son los vectores de la base cannica.

Estas propiedades son verificadas por el valor absoluto del determinante, como se deduce de nuestra discusin sobre el comportamiento de ste con respecto a transformaciones elementales, cualquiera que sea . Adems para , el valor absoluto del determinante de una matriz coincide con el volumen del paraleleppedo (o rea del paralelogramo, en el caso ) formado por los vectores columna de dicha matriz. Por tanto es razonable dar la siguiente definicin: Se define el volumen de un paraleleppedo generado por en vectores , ...,

, como el valor absoluto del determinante de la matriz cuyas columnas , ..., respecto de la base cannica.

son las coordenadas de las vectores

Por tanto, en el caso de 3 vectores de el determinante representa un "volumen orientado" (si se quiere obtener el volumen, basta con considerar el valor absoluto del determinante), y en el caso de 4 vectores de "volumen orientado generalizado". , 5 vectores de , etc., un

> #Pulsa return

As pues, el sistema {u,v,w}de vectores de

es libre si el determinante de la matriz

es que tiene por columnas sus coordenadas respecto de la base cannica de de distinto de cero y es ligado si el volumen es cero, es decir, si el determinante anterior es 0. Por ejemplo, si queremos determinar si el sistema {(1,-1,-2), (2,1,1),(1,0,7)} es libre o ligado, bastar con calcular el determinante de la siguiente matriz:
> A:=matrix(3,3,[1,2,1,-1,1,0,-2,1,7]);

> det(A);

Esto mismo es obviamente vlido para sistemas de 4 vectores de vectores de , etc., ya que

, sistemas de 5

dada una matriz cuadrada A de dimensin arbitraria, los vectores fila (columna) forman un sistema libre (es decir, el rango de A es igual a su dimensin) si, aplicando el mtodo de eliminacin gaussiana, la matriz escalonada reducida A' que se obtiene no contiene filas de ceros. Siendo det(A) un multiplo de det(A'), det(A)=0 slo si det(A')=0. Pero det(A')=1. Se sigue que A es invertible si y slo si det(A) es distinto de 0.
> #fin

Anda mungkin juga menyukai