Está en la página 1de 190

lgebra

Ingeniera Tcnica en Informtica de Sistemas y Gestin


ESCET

Prcticas y problemas resueltos con Maple V


Prctica 1: El mtodo de Gauss-Jordan y preliminares de lgebra Lineal Prctica 1

El mtodo de Gauss-Jordan y preliminares de lgebra Lineal


Objetivos de la sesin
Presentar al alumno las posibilidades de aplicacin del programa Maple al lgebra Lineal. 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, the protected names norm and trace have been redefined and

unprotected

[ BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, coldim, colspace, colspan, companion, concat, cond, copyinto, crossprod, curl, definite, delcols, delrows, det, diag, diverge, dotprod, eigenvals, eigenvalues, eigenvectors, eigenvects, entermatrix, equal, exponential, extend, ffgausselim, fibonacci, forwardsub, frobenius, gausselim, gaussjord, geneqns, genmatrix, grad, hadamard, hermite, hessian, hilbert, htranspose, ihermite, indexfunc, innerprod, intbasis, inverse, ismith, issimilar, iszero, jacobian, jordan, kernel, laplacian, leastsqrs, linsolve, matadd, matrix, minor, minpoly, mulcol, mulrow, multiply, norm, normalize, nullspace, orthog, permanent, pivot, potential, randmatrix, randvector, rank, ratform, row, rowdim, rowspace, rowspan, rref, scalarmul, singularvals, smith, stackmatrix, submatrix, subvector, sumbasis, swapcol, swaprow, sylvester, toeplitz, trace, transpose, vandermonde, vecpotent, vectdim, vector, wronskian ] 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 ";" despus 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, the protected names norm and trace have been redefined and unprotected

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]]);

2 1 3 0 1 A := -1 1 2 -1 3 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]); 2 1 3 A := -1 0 1 1 2 -1 3 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 I6 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; Id := proc(i, j) option operator, arrow; if i = j then 1 else 0 end if end proc > I6:=matrix(6,6,Id); 1 0 0 I6 := 0 0 0 Obtenemos la traspuesta de A: > transpose(A); 1 2 3 Calculamos su determinante (simblico): > det(A); Calculamos su inversa: > inverse(A); 1 6 10 3 + 3 + 10 3 + 1 6 10 3 + 34 10 3 + 1 9+2 3 10 3 + 6+ 10 3 + 10 3 + 1 5 10 3 + 3 10 3 + 3 -1 0 1 1 3 2 -1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1

10 1 + 3 3

Ahora definimos una matriz numrica B: B:= matrix(3,2,[[1,2],[1,1],[-1,0]]); 1 2 B := 1 1 -1 0 Para obtener el coeficiente (i,j) de una matriz B, se utilza el comando B[i,j], por ejemplo: > B[3,1]; -1 Tambin es posible multiplicar matrices. Por ejemplo, sea C = AB: > C:= multiply(A,B); 1 2 3 C := -2 -2 1 2 + 3 + 2 3 3 Para clculos ms complicados con expresiones matriciales, la funcin evalm() permite utilizar una notacin ms natural. Observse 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); 4 2 2 2 9 3 3 3 -4 -4 3 3 2 4 4 + +2 9 3 9 Finalmente, los sistemas de ecuaciones lineales tambin pueden ser resueltos utilizando su representacin matricial. En ese caso se emplea el comandolinsolve(A,B), entendindose entonces que lo que se est resolviendo es la ecuacin matricial A X = B. Por ejemplo: > A:= matrix([[2,2,2],[1,1,0],[-1,0,1]]); 2 2 A := 1 1 -1 0 > B:=matrix([[3],[2],[1]]); 3 B := 2 1 > X:=linsolve(A,B); -3 2 7 X := 2 -1 2 2 0 1

> #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 2x+y+z=1 2x+y+z=5 3 x y z = 0, 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]; Sistema := [ 2 x + y + z = 1, 2 x + y + z = 5, 3 x y z = 0 ] Expresando en cada ecuacin la variable z explicitamente en funcin de las variables x e y, se obtiene el sistema de ecuaciones z=12xy z=52xy z=3xy 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),isolat e(Sistema[3],z)}; Sistz := { z = 1 2 x y, z = 5 2 x y, z = 3 x y } 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 originales del sistema (donde la variable z depende de la variables x e y de forma 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):
Warning, the name changecoords has been redefined

> 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]); u := [ 1, 2, 3 ] > v:=vector([2,5,7]); v := [ 2, 5, 7 ] > dotprod(u,v); 33 > longitud:=x->sqrt(dotprod(x,x)); longitud := x dotprod( x, x ) > longitud(u); 14 Podemos ahora calcular la proyeccin ortogonal de u sobre v, utilizando la frmula : > evalm((dotprod(u,v)/dotprod(v,v))*v); 11 55 77 , , 13 26 26 > #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 linsolve( A, B ), 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: a11 x1 + a12 x2+....+a1 n xn = b1 a21 x1 + a22 x2+....+a2 n xn = b2 ..... am1 x1 + am2 x2+....+amn xn = bm, es posible plantearlo en la forma matricial A X = B: > A:=matrix(3,4,(i,j)->a[i,j]); a1, 1 a1, 2 A := a2, 1 a2, 2 a3, 1 a3, 2 > B:=matrix(3,1,(i,j)->b[i]); a1, 3 a2, 3 a3, 3 a1, 4 a2, 4 a3, 4

b1 B := b2 b3 > X:=matrix(4,1,(i,j)->x[i]); X := > evalm(A&*X)=evalm(B); a1, 1 x1 + a1, 2 x2 + a1, 3 x3 + a1, 4 x4 b1 a x + a x + a x + a x = b 2, 2 2 2, 3 3 2, 4 4 2, 1 1 2 a3, 1 x1 + a3, 2 x2 + a3, 3 x3 + a3, 4 x4 b3 y trabajar directamente con la matriz ampliada de dicho sistema Am = (A|B), utilizando el comando concat: x1 x2 x3 x4

> Am:=concat(A,B); a1 , 1 Am := a2 , 1 a3 , 1 a1 , 2 a2 , 2 a3 , 2 a1 , 3 a2 , 3 a3 , 3 a1 , 4 a2 , 4 a3 , 4 b1 b2 b3

Ejemplo 1 Dado el sistema x1 + x2 + x3 = 1 2 x1 2 x2 + x3 = 2 3 x1 + 3 x2 + 3 x3 = 3 > 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}; S := { x1 + x2 + x3 = 1, 2 x1 2 x2 + x3 = 2, 3 x1 + 3 x2 + 3 x3 = 3 } su matriz ampliada asociada Am sera > Am:=matrix([[1, 1, 1, 1], [2, -2, 1, 2], [3, 3, 3, 3]]); 1 1 1 1 Am := 2 -2 1 2 3 3 3 3 La matriz Am 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]); 1, 1, 1 > coeffs(2*x[1]-2*x[2]+x[3]); 2, -2, 1 > coeffs(3*x[1]+3*x[2]+3*x[3]); 3, 3, 3 y creando la matriz A 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])]]); 1 A := 2 3 La matriz ampliada Am=(A|B) es > B:=matrix(3,1,[1,2,3]); 1 B := 2 3 > Am:=concat(A,B); 1 Am := 2 3 > #Pulsa return 1 1 1 -2 1 2 3 3 3 1 -2 3 1 1 3

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 Am, lo que equivale a realizar las mismas operaciones sobre las ecuaciones que representan dichas filas. En smbolos: Am ->Am( t1 ) ->...-> Am( tr ) donde Am( ti ) es el resultado de aplicar la transformacin ti, 1 i, a la matriz Am( ti 1 ) (notar que Am =Am( t0 ) es la matriz original). > #Pulsa return Para el mtodo de eliminacin gaussiana Am( tr ) tendr que estar en forma escalonada del tipo: ? ? 1 n 1 1 12 ? 0 1 ? ? 2 n 2 23 1 34 ? ? 3 0 0 0 0 0 ? ? ? ? Am( tr ) := 0 0 0 ? ? rn r 0 0 0 0 r + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 donde las primeras r filas contienen los unos principales que corresponden a las variables principales del sistema. > #Pulsa return Segn vimos, si r + 1 es distinto de cero el sistema es incompatible. Por otra parte, si r + 1 = 0 y r = n, entonces rn=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 1 0 0 5 ecuaciones lineales, el sistema correspondiente a la matriz 0 1 0 3 , tendra 0 0 1 2 como solucin x1 = 5, x2 = 3, x3 = 2. Finalmente, si r + 1 = 0 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 1 x1 + 12 x2+....+1 r xr = 1 1 r + 1 xr + 1 -...-1 n xn .....

1 xr = r rr + 1 xr + 1 -...-rn xn 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 Ir, o bien por sustitucin hacia atrs. > #Pulsa return Ejemplo 2 En el Ejemplo 1, hallamos la matriz ampliada Am asociada al sistema x1 + x2 + x3 = 1 2 x1 2 x2 + x3 = 2 3 x1 + 3 x2 + 3 x3 = 3 > Am:=concat(A,B); 1 1 1 1 Am := 2 -2 1 2 3 3 3 3 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]]); 1 1 0 1 0 0 por lo que deberamos pasar al sistema x1 + x2 = 1 x3 x3 x2 = 4 con su correspondiente matriz asociada > matrix([[1, 1, 1-x[3]], [0, 1 0 1 1 1 4 0 1 0 0

1, -x[3]/4]]);

1 x3 1 1 x3 4 x3 Para calcular las soluciones, podemos sustituir x2 = en la ecuacin x1 + x2 = 1 x3, 4 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]]]); 1 0 0 1 1 3 x 4 3 1 x3 4

Transformaciones elementales por filas con Maple

Dada una matriz A > A:=matrix([[1,1,1,-1,1],[2,-2,1,2,0],[3,3,3,3,1],[1,0,3,4,5]]); 1 1 1 -1 1 2 -2 1 2 0 A := 3 3 3 3 1 1 0 -3 4 5 los comandos de Maple que corresponden a las transformaciones elementales por filas sobre la matriz A son los siguientes: para intercambiar las filas i y j se emplea el comando swaprow(A, i, j): > swaprow(A,1,2); 2 1 3 1 -2 1 2 0 1 1 -1 1 3 3 3 1 0 -3 4 5

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

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); 1 2 0 1 1 -2 0 0 1 1 0 -3 -1 1 2 0 6 -2 4 5

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); filapor := ( i, k ) mulrow( A, i, k ) la funcin as definida multiplica la fila i-sima de A por k. > filapor(1,24); 24 2 3 1 24 24 -24 -2 1 2 3 3 3 0 -3 4 24 0 1 5

Cuando los sistemas resulten compatibles indeterminados, pueden resultar tiles los siguientes comandos (el primero multiplica una columna por un nmero kdistinto de cero, el segundo elimina filas y el tercero elimina columnas):

> mulcol(A,1,k); k 2 k 3 k k > delrows(A,1..2); 3 1 > delcols(A,3..4); 1 2 3 1 1 -2 3 0 1 0 1 5 3 0 3 3 1 -3 4 5 1 -2 3 0 1 -1 1 1 2 0 3 3 1 -3 4 5

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 aij de dicha matriz, que es el que se ha utilizado como pivote. Si el elemento aijes nulo, al aplicar el comando pivot se obtiene un mensaje de error: > pivot(A,2,3); -1 3 0 -3 2 -2 1 2 -3 9 0 -3 7 -6 0 10 > A[2,5];pivot(A,2,5); 0
Error, (in pivot) cannot pivot on zero entry

1 0 1 5

Si se quiere que se convertan 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); 1 1 1 -1 1 2 -2 1 2 0 -3 9 0 -3 1 7 -6 0 10 5 La funcin gausselim reduce una matriz a su forma escalonada (sin que los coeficientes principales sean igual a 1): > gausselim(Am); 1 1 1 1 0 -4 -1 0 0 0 0 0 La funcin gaussjord reduce una matriz a su forma escalonada reducida: > gaussjord(Am);

3 1 0 1 4 1 0 0 1 4 0 0 0 0 En todo caso, como ya hemos comentado, la funcin que resuelve de forma directa el sistema de ecuaciones lineales A X = B es linsolve( A, B ), que bsicamente realiza secuencialmente las operaciones descritas. 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]]); 1 A := 2 3 > B:=matrix([[1],[2],[3]]); 1 -2 3 1 1 3

1 B := 2 3 > linsolve(A,B); 1 + 3 _t1 1 _t1 1 4 _t1 1 > #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: 2 x1 + x2 + 3 x3 + 5 x4 = a 3 x1 + 2 x2 x3 + 4 x4 = b 3 x1 + x2 + 10 x3 + 11 x4 = c > A:=matrix(3,5,[2,1,3,5,a,3,2,-1,4,b,3,1,10,11,c]); 2 A := 3 3 1 2 1 3 -1 10 5 4 11 a b c

> gaussjord(A); 1 0 0 > gausselim(A); 2 0 0 1 1 2 0 3 -11 2 0 5 a -7 3 b a 2 2 0 c 3 a + b 0 1 0 7 -11 0 6 0 -7 0 0 1

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 facilmente los valores de a, b y c que hacen el sistema incompatible (porqu?). > #fin

Test resuelto
1. Determinar el elemento B(2,4) siendo B la matriz inversa de la siguiente matriz 1 0 -1 2 1 2 1 2 0 2 A := 3 1 0 4 1 -1 0 1 1 0 -1 2 4 2 6 84 9 5 a) B( 2, 4 ) = b) B( 2, 4 ) = c) B( 2, 4 ) = 73 73 73 > with(linalg):A:=matrix([[1, 0, -1, 2, 1], [2, 1, 2, 0, 2], [-3, 1, 0, 4, 1], [-1, 0, 1, 1, 0], [-1, 2, 4, 2, 6]]); > B:=inverse(A); 1 2 A := -3 -1 -1 B := 14 73 -50 73 -5 73 19 73 16 73 22 73 57 73 13 73 9 73 -27 73 0 1 1 0 2 -1 2 1 2 0 2 0 4 1 1 1 0 4 2 6 -4 6 73 73 56 -84 73 73 -9 50 73 73 5 29 73 73 -15 -14 73 73

-9 73 -20 73 -2 73 -7 73 21 73

> B[2,4]; -84 73 La respuesta correcta es la a) > 2. Siendo A y B las matrices del problema 1, cual es el determinante de la matriz AB+2B ? 1 289 a) 1 b) c) 32 73 > det(A&*B+2*B); 289 73 La respuesta correcta es la c) > 3. Determinar la posicin relativa de los planos de ecuaciones: x + 2 y z = 57 x e2 y + z = 3 x + z = 128 Respuestas posibles: a) Se cortan en una recta. b) Se cortan dos a dos (el sistema es incompatible) c) Se cortan en un punto. > with(plots):implicitplot3d({Pi*x+sqrt(2)*y-z-57,x-exp(2)*y +z - 3 , x+z - 128},x=-100..100,y=-100..100,z=-100..100);

> solve({Pi*x+sqrt(2)*y-z = 57,x-exp(2)*y+z = 3,x+z = 128},{x,y,z});

e2 ( + 1 ) La respuesta correcta es la c). >

{x = 5

25 2 + 37 e2

, y = 125

1 e

,z= 2

128 e2 + 125 2 57 e2 e2 ( + 1 )

1 a a2 a3 a4 2 3 a a 0 1 a a2 a3 1 a a2 a a 2 , A4 = 0 0 1 a a2, , 4. Siendo A2 = 0 1 a 1 a 0 0 1 0 0 0 1 a 0 1 0 0 0 0 1 puede el alumno conjeturar cual es el elemento situado en el lugar (n,n-1) de la matriz B, la inversa de An? a) B(n,n-1) = a b) B(n,n-1) = -a c) B(n,n-1)= 0. > A2 := matrix([[1, a, a^2], [0, 1, a], [0, 0, 1]]); 1 0 A3 = 0 0 a 1 0 0 1 A2 := 0 0 > inverse(A2)[2,1]; 0 > A3 := matrix([[1, a, a^2, a^3], [0, 1, a, a^2], [0, 0, 1, a], [0, 0, 0, 1]]); 1 0 A3 := 0 0 > inverse(A3)[3,2]; 0 > A4 := matrix([[1, a, a^2, a^3, a^4], [0, 1, a, a^2, a^3], [0, 0, 1, a, a^2], [0, 0, 0, 1, a], [0, 0, 0, 0, 1]]); 1 0 A4 := 0 0 0 > inverse(A4)[4,3]; 0 La respuesta correcta es la c). a 1 0 0 0 a2 a 1 0 0 a 3 a 4 a 2 a 3 2 a a 1 a 0 1 a 1 0 0 a2 a 1 0 a 3 a 2 a 1 a 1 0 a2 a 1

1 5. Dada la matriz A := 0 0 naturales) .


(m + 1)

0 1 n 0

1 m 0 , encontrar la expresin de A ( n, m son nmeros 1

Cual es el elemento 1,3 de la matriz Am? a) ( -1 ) n b) m c) 1 > A:=matrix([[1, 0, 1], [0, 1/n, 0], [0, 0, 1]]); 1 1 0 1 A := 0 0 n 1 0 0 > for m from 2 to 4 do evalm(A^m);od; 1 0 0 1 0 0 1 0 0 La respuesta correcta es la b). > 6. Una matriz cuadrada A es antisimtrica si su matriz traspuesta coincide con su opuesta, es decir, si At = A. Puede el alumno hacer una hiptesis sobre cual es el determinante de una matriz antisimtrica de orden impar? Respuestas posibles: a) 1 b) 0 c) -1 Nota: En cursos anteriores estudiasteis el concepto de determinante de una matriz. En general es posible demostrar que si A y B son dos matrices cuadradas, det( AB ) = det( A ) det( B ), det(At) =det(A) y que si A es una matriz de orden "n", entonces det( A ) = ( -1 )n det( A ) . det(A) =det( At ) = det( A ) = ( -1 )n det( A ). Si n es impar, se sigue que det( A ) = det( A ), es decir, que det( A ) = 0. La solucin correcta es la b). 7. Dado el sistema de ecuaciones lineales: 2 x1 + 9 x2 x3 = 54 x1 27 x2 + x3 = 42 0 1 n2 0 0 1 n3 0 0 1 n4 0 2 0 1 3 0 1 4 0 1

x1 x2 + ln( 3 ) x3 = 1 9 -1 2 sea A := 1 27 la matriz de los coeficientes de las variables. 1 -1 ln( 3 ) Se verifica que: a) A es invertible b) A no es invertible c) El sistema es compatible indeterminado > A:=matrix([[2,9,-1],[1,-27,Pi],[1,-1,ln(3)]]); 2 A := 1 1 > inverse(A); 27 ln( 3 ) 63 ln( 3 ) 11 + 26 ln( 3 ) 63 ln( 3 ) 11 + 26 1 26 63 ln( 3 ) 11 + 26 La respuesta correcta es la a) 9 ln( 3 ) 1 63 ln( 3 ) 11 + 26 2 ln( 3 ) + 1 63 ln( 3 ) 11 + 26 1 11 63 ln( 3 ) 11 + 26 9 3 63 ln( 3 ) 11 + 26 2+1 63 ln( 3 ) 11 + 26 1 63 63 ln( 3 ) 11 + 26 9 -1 -27 -1 ln( 3 )

8. Sea Am la matriz ampliada del sistema de ecuaciones lineales anterior, sealar cual secuencia de instrucciones permite obtener una nueva matriz en la que la variable x1 nicamente aparezca en una ecuacin, y en dicha ecuacin el coeficiente por el que aparece multiplicada la citada variable sea 1 : a) swaprow( Am, 1, 3 ) : pivot( %, 3, 1 ) b) swaprow( Am, 1, 2 ) : pivot( %, 1, 1 ) c) Ninguna de las anteriores > B:=matrix(3,1,[54,42,1]); 54 B := 42 1 > Am:=concat(A,B); 2 Am := 1 1 > swaprow(Am,1,2); 1 2 1 > pivot(%,1,1); 1 0 0 > swaprow(Am,1,3); -27 63 26 42 2 1 -30 ln( 3 ) -41 -27 9 -1 -1 ln( 3 ) 42 54 1 9 -27 -1 -1 ln( 3 ) 54 42 1

1 1 2 > pivot(%,3,1); 0 0 2 La respuesta correcta es la b).

-1 ln( 3 ) -27 9 -1 -11 2 -63 2 9

1 42 54

1 + ln( 3 ) -26 2 1 15 + 2 -1 54

9. Dado el sistema de ecuaciones dependiente del parmetro "a" x1 + x2 + a x 3 = 1 x1 + x2 + x 3 = a a 2 x1 + x2 + x3 = 1 Determinar el valor o valores de "a" para los cuales el sistema anterior es compatible determinado. Respuesta: a) No es compatible determinado solamente cuando a = 1 b) No es compatible determinado solamenete cuando a = 1 a = -1. c) No es compatible determinado solamente cuando a = 1 a = 0. > with(linalg):a:='a';Am:=matrix([[1,1,a,1],[1,1,1,a],[a^2,1 ,1,1]]); a := a 1 1 Am := 2 a > G:=gausselim(Am); 1 G := 0 0 1 1 a2 0 a 1 a3 1a 1 1 a 2 a 1 1 a 1 1 1 a 1 1 1

Si a = 1, entonces > evalm(subs(a=1,gausselim(Am))); 1 1 1 1 0 0 0 0 0 0 0 0 el sistema es compatible indeterminado y las soluciones dependen de dos parmetros. Si a = -1, entonces > evalm(subs(a=-1,gausselim(Am))); 1 0 0 1 0 0 -1 2 2 1 0 -2

el sistema es incompatible. Si a=0, entonces > evalm(subs(a=0,gausselim(Am)));

1 0 0 el sistema es compatible determinado. Si a es distinto de -1, 0 y 1, entonces > a:='a';gaussjord(Am);

1 1 0

0 1 1

1 1 -1

a := a 1 0 0 1 0 0 el sistema es compatible determinado. La respuesta correcta es la b). > 0 0 1 1 a+1 2 2a+2+a a+1 -1

10. Dado el sistema de ecuaciones del ejercicio anterior, selese la respuesta correcta: a) Para a = 1 el sistema es compatible indeterminado y la solucin depende de un parmetro. b) Para a = 1 el sistema es compatible indeterminado y la solucin depende de dos parmetros. c) Para a = 1 el sistema de ecuaciones es incompatible. La solucin correcta es la b). > #fin

Prctica 2: Mtodo de Gauss y rango. Determinantes Prctica 2

Mtodo de Gauss y rango. Determinantes


Por: Regino Criado, E.S.C.E.T., URJC, 1999 ltima actualizacin: A. Gallinari, E.S.C.E.T., URJC, 2003

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 delrows swapcol swaprow row col gausselim gaussjord equal rank transpose inverse with(combinat) permute det mulcol pivot innerprod mulrow linsolve crossprod % delcols

Descripcin de los comandos mencionados: > restart:with(linalg):


Warning, the protected names norm and trace have been redefined and

unprotected

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]); -2 5 1 1 0 0 A1 := 4 9 8 7 5 > B1:=matrix(3,3,[0,0,3,-5,2,1,8,0,0]); 0 B1 := -5 8 Para acceder al elemento (i,j) de una matriz C > B1[2,1]; 0 3 2 1 0 0 hay que escribir C [i,j]. Por ejemplo:

-5 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); 1 r2 := 0, 0, 4 c3 := [ 3, 1, 0 ] El comando stackmatrix une dos matrices verticalmente: > stackmatrix(A1,B1); 1 -2 5 1 0 0 4 9 7 8 5 0 0 3 -5 2 1 8 0 0 La funcin augment (como la funcin concat) une dos matrices horizontalmente: > augment(A1,B1); 1 0 7 > concat(A1,B1); -2 0 8 5 1 4 9 5 0 -5 8 0 2 0 3 1 0

-2 5 0 0 3 1 1 0 0 -5 2 1 4 9 7 8 8 0 0 5 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); 1 0 3 0 2 1 7 0 0 > delrows(stackmatrix(A1,B1),3..3); 1 0 0 -5 8 > #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); 1 0 7 > addcol(A1,1,2,-1); -2 0 8 5 1 4 9 5 -2 0 0 2 0 5 1 4 3 1 0

1 0 7 > addrow(A1,2,3,-9);

-3 0 1

5 1 4 9 5

5 1 -2 1 0 0 4 9 9 7 8 + 4 5 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); 5 1 0 4 9 8x 5 0 0 2 -5 2 1 8 0 0 La funcin equal determina si dos matrices son iguales: > equal(A1,B1); 1 0 7 false > Z:=A1: equal(A1,Z); true La funcin transpose traspone una matriz: > C1 := matrix([[1, 0, 7], [-2, 0, 8], [5, 1, 9]]); 1 0 C1 := -2 0 5 1 > C1:=transpose(A1); 7 8 9 2 x

1 -2 C1 := 5 > v1:=row(C1,3);

0 0 1 4

7 8 9 5

1 9 v1 := 5, , 4 5 > v2:=col(A1,3); 1 9 v2 := 5, , 4 5 > equal(v1,v2); true 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); -2 0 8 > swaprow(B1,3,1); 8 0 0 -5 2 1 0 0 3 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 1 0 7 5 1 4 9 5

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); 1 -2 0 0 P1 := 0 22 0 0 0 -8 0 16 > P2:=pivot(swapcol(P1,2,3),2,2); 1 0 P2 := 0 0 0 0 > pivot(P2,3,3,4..6); 1 0 -2 1 0 0 4 0 0 22 0 0 0 0 0 0 0 0 0 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]] ); 2 A := 2 1 1 0 1 1 1 1 5 1 4 -166 5 3 26 -40

0 -2 1 0 4 0 22 0 0 0 -8 0 16

5 b := 1 1 > linsolve(A,b); 4 4 -7

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

Veamos que la funcin inverse nos devuelve la misma matriz: > inverse(A); 1 0 -1 1 -1 0 -2 1 2 > equal(inverse(A),linsolve(A,Id)); true El smbolo % permiten recuperar la ltima expresin evaluada, %% la penltima, y as sucesvamente. Verifiquemos el resultado: > multiply(A,%%); 1 0 0 0 1 0 0 0 1 Para finalizar, recordaremos cmo actan los comandos gausselim y gaussjord ya introducidos en la prctica anterior: > gausselim(A); 2 0 0 > gaussjord(A); 1 0 0 0 1 0 0 0 1 La funcin rank(A) determina el rango de una matriz A. > r1:=rank(A1);r2:=rank(B1);r3:=rank(stackmatrix(A1,B1)); r1 := 3 r2 := 3 r3 := 3 1 -1 0 1 0 1 2

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: 3 x1 + 2 x2 x3 = 5 x1 2 x2 + x3 = 3 x1 x2 + x3 = 1 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]); 3 A := 1 1 > B:=matrix([[5],[3],[1]]); 2 -2 -1 -1 1 1

5 B := 3 1 > linsolve(A,B); 2 -2 -3 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); 3 Am := 1 1 > Am:=pivot(Am,1,1); 3 0 Am := 0 > Am:=mulrow(Am,1,1/3); 2 -8 3 -5 3 -1 4 3 4 3 5 4 3 -2 3 2 -1 -2 1 -1 1 5 3 1

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

1 0 0

2 3 -8 3 -5 3 0 -8 3 0

-1 3 4 3 4 3 0 4 3 1 2 0 -1 2 1 2 0 0 1 2

5 3 4 3 -2 3 2 4 3 -3 2 2 -1 2 -3 2 2 -2 -3 2

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

0 1 0

0 1 0

1 0 0 2 Am := 0 1 0 -2 0 0 1 -3 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 fi = fi + fj: sumar a la fila i de A un mltiplo de la fila j. Matriz elemental de orden m Sij( ): es la matriz que se obtiene aplicando la transformacin elemental anterior a la matriz identidad Im de orden m.

Por ejemplo: -1 3 2 -1 -- f2 = f2 + 3 f1 --> 1 0 1 0 Si , j( 3 ) = 3 1 > #Pulsa return Transformacin elemental fi = fi: multiplicar la fila i de A por un escalar no nulo . Matriz elemental de orden m Pi( ): es la matriz que se obtiene aplicando la transformacin elemental anterior a la matriz identidad Im de orden m. Por ejemplo: 2 0 0 2 -- f2 = 3 f2 --> 1 0 0 3 2 7

1 0 P2( 3 ) = 0 3 > #Pulsa return Transformacin elemental fi <--> fj : intercambiar la fila i de A con la fila j. Matriz elemental de orden m Eij: es la matriz que se obtiene aplicando la transformacin elemental anterior a la matriz identidad Im de orden m. Por ejemplo: 2 0 0 0 -- f1<--> f2 --> 1 2 1 0

0 1 E12= 1 0 > #Pulsa return

Las transformaciones elementales por columnas y las matrices elementales correspondientes son las siguientes:
Transformacin elemental ci = ci + cj: sumar a la columna i de A un mltiplo de la columna j. Matriz elemental de orden n: es la matriz que se obtiene aplicando la transformacin elemental anterior a la matriz identidad In de orden n y es igual a la matriz elemental Sji( ) (notar la posicin de los ndices).

Por ejemplo: 2 0 0 2 -- c2 = c2 + 3 c1- -> 1 0 6 1

1 3 S12( 3 ) = 0 1 > #Pulsa return Transformacin elemental ci = ci: multiplicar la columna i de A por un escalar no nulo. Matriz elemental de orden n: es la matriz que se obtiene aplicando la transformacin elemental anterior a la matriz identidad In de orden n y es igual a la matriz elemental Pi( ). Por ejemplo: -1 3 2 -1 -- c2 = 4 c2 --> 1 3 8 4

1 0 P2( 4 ) = 0 4 > #Pulsa return Transformacin elemental ci <--> cj : intercambiar la columna i de A con la columna j. Matriz elemental de orden n: es la matriz que se obtiene aplicando la transformacin elemental anterior a la matriz identidad In de orden n y es igual a la matriz elemental Eij . Por ejemplo: 2 0 0 0 -- --> 1 1 1 0 2 0

0 E12 = 1

> #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 mxn, 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 B=PA (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 C = A Q. (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)); a( 1, 1 ) a( 1, 2 ) a( 1, 3 ) A := a( 2, 1 ) a( 2, 2 ) a( 2, 3 ) > P[1](lambda) := matrix(2,2,[lambda, 0,0,1]); P1( ) := 0 Notar que P1( ) es 2x2 y que > Af := evalm(P[1](lambda)&*A); a ( 1, 1 ) a ( 1, 2 ) Af := a ( 2, 1 ) a ( 2, 2 ) a( 1, 3 ) a ( 2, 3 ) 0 1

Ahora, si definimos P1( ) de dimensin 3, > P[1](lambda) := matrix(3,3,[lambda, 0,0,0,1,0,0,0,1]); 0 P1( ) := 0 1 0 0 > Ac := evalm(A&*P[1](lambda)); a ( 1, 1 ) Ac := a ( 2, 1 ) a ( 1, 2 ) a ( 2, 2 ) 0 0 1 a ( 1, 3 ) a ( 2, 3 )

> #Pulsa return Como se puede observar, segn multipliquemos por la izquierda o por la derecha a la matriz A por la matriz P1( ) (de dimensin adecuada) realizamos una transformacin por filas o por columnas sobre A (respectivamente). Ejercicio: Definir las matrices P2( ) y P3( ), y realizar los productos A &* P2( ) , A &* P3( ), P2( ) &* A y P3( ) &* A, y observar cual es el resultado. > > > Vamos a ver que Sij( ) 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]); 1 S12( ) := 0 Notar que S12( ) es de dimensin 2: > Af := evalm(S[12](lambda)&*A); a ( 1, 1 ) + a ( 2, 1 ) Af := a ( 2, 1 ) a ( 1, 2 ) + a ( 2, 2 ) a ( 2, 2 ) a ( 1, 3 ) + a ( 2, 3 ) a ( 2, 3 ) 1

Ahora, si definimos S21( ) de dimensin 3 > S[21](lambda) := matrix(3,3,[1, 0,0,lambda,1, 0,0,0, 1]); 1 S21( ) := 0 y multiplicamos por la derecha, se obtiene que > Ac:=evalm(A&*S[21](lambda)); a ( 1, 1 ) + a ( 1, 2 ) Ac := a ( 2, 1 ) + a ( 2, 2 ) 0 1 0 0 0 1

a ( 1, 2 ) a ( 1, 3 ) a ( 2, 2 ) a ( 2, 3 )

Como puede observarse, el resultado de multiplicar a la matriz A por la matriz S12( ) (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 S21( ) (de dimensin 3) por la derecha coincide con la matriz que resulta al sumar a la primera columna de A la segunda multiplicada por . Ejercicio: Definir las matrices (de dimensin adecuada) S13( ) y S31( ), y realizar los productos A &* S13( ) , A &* S31( ), S13( ) &* A y S31( ) &* A, y observar cual es el resultado. > > > Finalmente, vamos a verificar que Eij 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]); 0 E12 := 1 > Af:= evalm(E[12]&*A); a ( 2, 1 ) a ( 2, 2 ) Af := a ( 1, 1 ) a ( 1, 2 ) a( 2, 3 ) a( 1, 3 ) 1 0

Ahora, si definimos E12 de dimensin 3 > E[12]:= matrix(3,3,[0, 1,0,1,0,0,0,0, 1]); 0 1 E12 := 1 0 0 0 y multiplicamos por la derecha, se obtiene que > Ac:=evalm(A&*E[12]); a ( 1, 2 ) Ac := a ( 2, 2 ) a ( 1, 1 ) a ( 2, 1 ) 0 0 1

a ( 1, 3 ) a ( 2, 3 )

En resumen, dada una matriz A, si multiplicamos dicha matriz por la izquierda por una matriz de la forma Sij( ), Pi( ) o Eij, 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 Sji( ), Pi( ) o Eij, el resultado de dicha multiplicacin es la correspondiente transformacin por columnas sobre la matriz A. > #Pulsa return

Tabla resumen
> #Pulsa return Transformacin elemental Sumar a la fila i la j multiplicada por Multiplicar la fila i por Intercambiar la fila i con la fila j Sumar a la columna i la j multiplicada por Multiplicar la columna i por Intercambiar la columna i con la columna j Producto de matrices Sij( ) A Pi( ) A Eij A A Sji( ) A Pi( ) A Eij

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 Pi( ), cuya accin consiste en multiplicar la fila 1 o columna i-sima por , es fcil deducir que su inversa es la matriz Pi . Por ejemplo: > P[1](lambda) := matrix(3,3,[lambda, 0, 0, 0, 1, 0, 0, 0, 1]);

0 0 P1( ) := 0 1 0 0 0 1 > P[1](1/lambda):= matrix(3,3,[1/lambda, 0, 0, 0, 1, 0, 0, 0, 1]); 1 0 0 1 P1 := 0 1 0 0 1 0 > evalm(P[1](lambda)&*P[1](1/lambda)); 1 0 0 0 1 0 0 0 1 Veamos adems qu sucede al hacer actuar estas transformaciones sobre la siguiente matriz: > A := matrix(3,3,(i,j)->a(i,j)); a( 1, 1 ) a( 1, 2 ) a( 1, 3 ) A := a( 2, 1 ) a( 2, 2 ) a( 2, 3 ) a( 3, 1 ) a( 3, 2 ) a( 3, 3 ) > Ac:=evalm(A&*P[1](lambda)); a ( 1, 1 ) a ( 1, 2 ) Ac := a( 2, 1 ) a( 2, 2 ) a ( 3, 1 ) a ( 3, 2 ) > evalm(Ac&*P[1](1/lambda)); a ( 1, 1 ) a ( 2, 1 ) a ( 3, 1 ) a ( 1, 2 ) a ( 2, 2 ) a ( 3, 2 ) a ( 1, 3 ) a ( 2, 3 ) a ( 3, 3 )

a ( 1, 3 ) a ( 2, 3 ) a ( 3, 3 )

Por otra parte la inversa de la matriz Sij( ) es la matriz Sij( ). Por ejemplo: > S[13](lambda) := matrix(3,3,[1, 0, lambda, 0, 1, 0, 0, 0, 1]); 1 0 S13( ) := 0 1 0 0 0 1 > S[13](-lambda) := matrix(3,3,[1, 0, -lambda, 0, 1, 0, 0, 0, 1]); 1 0 S13( ) := 0 1 0 0 0 1 > evalm(S[13](-lambda)&*S[13](lambda)); 1 0 0 0 1 0 0 0 1

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

a ( 1, 2 ) a ( 2, 2 ) a ( 3, 2 )

Ejercicio: Determinar la matriz inversa de la matriz elemental Eij. > > > #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 Mmx1( K ) generado por el sistema formado por los "n" vectores columna de la matriz A. 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 As por ejemplo, considerando el espacio vectorial P3(R) de los polinomios reales en la variable x de grado menor o igual que 3, para determinar la dimensin del subespacio H = L( { 2 + x, 1 2 x + x2, 5 + x2 } ) escribimos las matrices de las coordenadas de dichos vectores respecto de la base usual B = { 1, x, x2, x3 }. Se obtiene el sistema 2 1 5 1 2 0 , , , con lo que la dimensin de H coincidir con el rango de la matriz 0 1 1 0 0 0 2 1 5 1 2 0 . 0 1 1 0 0 0 > #Pulsa return Veamos, pues, un mtodo para obtener de una manera sencilla el rango de una matriz.

Definicin: Se dice que una matriz A de m filas y n columnas es gaussiana si sus columnas Aj, donde j vara en el conjunto {1,...,n}, satisfacen una de las condiciones siguientes: Aj = 0 Existe i perteneciente al conjunto {1,...,n} tal que Aj(1,i) es distinto de cero, y para todo k perteneciente al conjunto {j+1,...,n}, Ak(1,i) =0. En otras palabras, la segunda condicin supone localizar un elemento Aj(1,i) 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 7 0 1 1 0 1 3 0 1 , 0 0 1 1 0 0 > #Pulsa return 1 0 0 0 0 1 0 0 0 0 1 0 0 0 , 0 1 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 . 0 1

0 0 1

4 1 , 0

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,

3 7 0 1 2 1 0 1 rg( 3 0 1 )=2 y rg(0 0 0 0 1 1 0 0 0 > #Pulsa return

0 0 0 0 0

0 0 0 0 0

1 0 0 0 0

0 0 0)=3. 0 1

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]); 1 A := 1 1 > rank(A); 1 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 transformaciones elementaless del tipo Eij (sin intercambiar columnas) y elegir los 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]); 1 A := 1 1 > A1:=addcol(A,1,2,-1); 1 A1 := 1 1 > A2:=addcol(A1,1,3,-1); 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 0 0 A2 := 1 0 0 1 0 0 La matriz A2 obtenida es gaussiana, por lo que su rango es 1, y obviamente el sistema 1 1 es una base del subespacio columna de formado por el nico vector columna 1 la matriz original A considerada. > #Pulsa return Si ahora volvemos a considerar el subespacio H = L( { 2 + x, 1 2 x + x2, 5 + x2 } ) del espacio vectorial P3(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 B = { 1, x, x2, x3 } obteniendo el sistema

>

2 1 5 1 2 0 , , , y ahora aplicamos el mtodo de Gauss a la matriz 0 1 1 0 0 0 A:=matrix(4,3,[2,1,5,1,-2,0,0,1,1,0,0,0]); 2 1 A := 0 0 1 -2 1 0 5 0 1 0 5 0 1 0 5 0 1 0

2 1 0 0

1 2 1 0

5 0 : 1 0

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

2 5 0 1 0 0 A2 := 0 1 0 0 0 0 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 { 2 + x, 5 + x2 } 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 R3, para determinar si el vector ( 3, 4, 2 ) pertenece al subespacio vectorial generado por el sistema de vectores {(1,0,3),(4,3,2)} 1 4 hallaramos el rango de la matriz 0 3 , y veramos si coincide con el rango de la 3 2 1 4 3 matriz 0 3 4 . 3 2 2 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]);

1 A := 0 3 > rank(A);

4 3 2

2 > Am:=matrix(3,3,[1,4,3,0,3,4,3,2,2]); 1 Am := 0 3 > rank(Am); 3 Como puede verse, el vector ( 3, 4, 2 ) no pertenece al subespacio generado por el sistema de vectores {(1,0,3),(4,3,2)}. 4 3 2 3 4 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 R2 y de paraleleppedos en R3, 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, Nn = {1,2,3,...,n}. > #Pulsa return

Recordamos que S(n) consiste de todas las funciones biyectivas f de Nn en Nn y que - la composicin de dos permutaciones es una permutacin - la composicin de permutaciones es asociativa - 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 f en S(n) por medio de una matriz de dos filas y n columnas, as que, por ejemplo, 1 2 3 f= 6 2 4 es la permutacin f definida en N6 por 4 3 5 5 6 1

f (1) =6, f (2) =2, f (3) =4, f (4) =3, f (5) =5, f (6) =1. 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, the protected names norm and trace have been redefined and unprotected Warning, the name fibonacci has been redefined Warning, the protected name Chi has been redefined and unprotected

[6

1]

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); [ [ 1, 2, 3 ], [ 1, 3, 2 ], [ 2, 1, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ], [ 3, 2, 1 ] ]

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([1-0.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);


Warning, the names arrow and changecoords have been redefined

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([1-0.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([1-0.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 f al conjunto ordenado (1,2,3, ..., n) es lo de obtener la nueva ordenacin ( f (1), f (2), f (3), f (4), f (5), f (6)) de estos n elementos. Una transposicin es una permutacin que intercambia el orden de slo dos elementos de la lista (1,2,3, ..., n). Por ejemplo 1 f= 6 2 2 3 3 4 4 5 5 6 1

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 1 2 3 4 f= 1 2 3 5 es una inversin que se indicar como (4 5). 5 4 6 , 6

> #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 ( f (1), f (2), f (3), f (4), f (5), f (6)), como se hace en un algoritmo de ordenacin burbuja. Ejemplo: para reordenar los trminos de la lista ( f (1) =6, f (2) =2, f (3) =4, f (4) =3, f (5) =5, f (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), ( -1 )i 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 ( f (1), f (2), f (3), f (4), f (5), f (6)).) 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=(aij) de orden n es el escalar det(A)=

sign( f ) a
f

1, f ( 1 )

a2, f( 2 ) ...an, f( n ),

donde el sumatorio contiene n! sumandos, uno para cada permutacin f de n 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]]);

1 2 A := -4 1 se calcula utilizando las 2 (=2!) permutaciones > permute(2); [ [ 1, 2 ], [ 2, 1 ] ] y la formula anterior > determinante(A):=1*A[1,1]*A[2,2]-1*A[1,2]*A[2,1]; determinante( A ) := 9 > det(A); 9 El determinante de la matriz 3x3 > B:=matrix(3,3,[[1,2,3],[4,3,6],[0,1,2]]); 1 2 B := 4 3 0 1 se calcula utilizando las 6 (=3!) permutaciones > permute(3); 3 6 2

[ [ 1, 2, 3 ], [ 1, 3, 2 ], [ 2, 1, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ], [ 3, 2, 1 ] ] > 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]; determinante( B ) := -4 > det(B); -4 Dada una matriz cuadrada A= (aij) de dimensin n, existe una fmula para hallar su determinante que utiliza los determinantes de las submatrices Mi, j de A que se obtienen eliminando la fila i y la columna j de la matriz A. Al determinante de Mi, j, det(Mi, j), se le llama menor del elemento aij y el escalar ( -1 ) det(Mi, j) es el adjunto del elemento aij. Con estas notaciones, la frmula de Laplace para el clculo del determinante de A a partir de la fila i de A es determinante( A ) = y a partir de la columna j de A es determinante( A ) =
(i + j)

( -1 )
j=1 n

(i + j)

aij det( Mi, j )

( -1 )
i=1

(i + j)

aij det( Mi, j ).

> #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, the protected names norm and trace have been redefined and unprotected

1 A := -4

2 1

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)); dim( A ) := 2 i := 1 M1, 1 := [ 1] M1, 2 := [ -4] determinante( A ) := 9 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)); dim( A ) := 2 j := 2 M1, 2 := [ -4] M2, 2 := [ 1] determinante( A ) := 9 Para la matriz 3x3 de los ejemplos anteriores > B:=matrix(3,3,[[1,2,3],[4,3,6],[0,1,2]]); 1 2 3 B := 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)); dim( B ) := 3 i := 1 3 M1, 1 := 1 4 M1, 2 := 0 4 M1, 3 := 0 6 2 6 2 3 1

determinante( B ) := -4 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)); dim( B ) := 3 j := 3 4 M1, 3 := 0 1 M2, 3 := 0 1 M3, 3 := 4 > #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 1 ( -1 ) de una matriz invertible es distinto de cero y det( A ) = , siendo det( A ) siempre det(In)=1. 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 [ ( -1 ) =
(i + j)

3 1 2 1 2 3

determinante( B ) := -4

( -1 )

det( Mi, j ) ]

det( A )

donde [ ( -1 ) det( Mi, j ) ] 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 det( A( i ) ) , det( A ) donde A( i ) 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 xi =

(i + j)

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); Id := n matrix( n, n, proc(k, r) option operator, arrow; if k = r then 1 else 0 end if end proc ) La matriz elemental Pi( ) tiene determinante igual a = det(Id): > n:=6;i:=4;lambda:=-2;P(i,lambda):=mulrow(Id(n),i,lambda ); n := 6 i := 4 := -2 1 0 0 P( 4, -2 ) := 0 0 0 > det(%); -2 Sij( ) 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); n := 6 i := 4 j := 6 := -2 1 0 0 0 1 0 0 0 1 S( 4, 6, -2 ) := 0 0 0 0 0 0 0 0 0 > det(%); 1 Eij tiene determinante igual a -1=-det( Id): > n:=6;i:=4;j:=6;E(i,j):=swaprow(Id(n),i,j); n := 6 i := 4 j := 6 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 -2 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 1 0 0 0 1

1 0 0 E( 4, 6 ) := 0 0 0 > det(%);

0 1 0 0 0 0 -1

0 0 1 0 0 0

0 0 0 0 0 1

0 0 0 0 1 0

0 0 0 1 0 0

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 y en segundo lugar multiplicando la fila k por , resulta que: B=Pk( )Sij( ) A y det(B)=det(Pk( )(Sij( ) A))=det(Pk( ))det(Sij( ) A)=det(Sij( ))det(A)=*1*det(A)= det(A), 1 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(Sij( ))=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 ", de las propiedades vistas resulta 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]);

1 3 3 3 6 0 1 2 3 4 T := 0 0 -1 -8 -3 0 0 0 1 2 0 0 0 0 4 > det(T); -4 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]); 1 0 A := 2 1 > A1:=addrow(A,1,3,-2); 2 4 1 2 3 1 0 1 1 1 1 0

1 2 3 1 0 4 1 1 A1 := 0 -3 -6 -1 1 2 1 0 > A2:=addrow(A1,1,4,-1); 1 2 3 1 0 4 1 1 A2 := 0 -3 -6 -1 0 0 -2 -1 > A3:=addrow(A2,2,3,3/4); 1 2 3 0 4 1 -21 A3 := 0 0 4 0 0 -2 > A4:=addrow(A3,3,4,2*(-4/21)); 1 1 -1 4 -1

1 2 3 1 0 4 1 1 -21 -1 A4 := 0 0 4 4 -19 0 0 0 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 ", resulta que det(A) debe coincidir con det(A4). Comprobmoslo: > det(A); 19

Determinantes, sistemas libres y volmenes Comenzaremos dibujando algunos paralelogramos en R2 y observando cmo vara 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 1 0 ). Es obvio que el rea del paralelogramo anterior es igual a 1= det( 0 1 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 2 0 )=2. det( 0 1 > #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 R2, el rea del paralelogramo definido por los vectores u + v y v 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): 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]]); 1 A := 0 > det(A); 1 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 0 1 ), hallamos el rea correspondiente calculando el valor del determinante det( 1 0 vamos a obtener un cambio de signo en el valor obtenido: > with(linalg):A:=array(1..2,1..2,[[0,1],[1,0]]); 0 A := 1 > det(A); -1 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 R2 es un "rea con signo", en el que el signo depende del orden considerado de los vectores que determinan el rea. 1 0 0 1

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]); 1 A := 1 > det(A); 3 Obviamente, el rea encerrada por un sistema de dos vectores de R2 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 R3 se pueden definir el producto vectorial de dos vectores, crossprod en Maple, > restart:with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

-1 2

> u := vector([u1,u2,u3]); u := [ u1, u2, u3 ] > v:= vector([v1,v2,v3]); v := [ v1, v2, v3 ] > crossprod(u,v); [ u2 v3 u3 v2, u3 v1 u1 v3, u1 v2 u2 v1 ] donde las coordenadas del vector resultante son los adjuntos M1, 1, - M1, 2 y M1, 3 de los elementos e1,e2 y e3 de la matriz simblica > PV:=matrix(3,3,[[e1,e2,e3],[u1,u2,u3],[v1,v2,v3]]); e1 e2 e3 PV := u1 u2 u3 v1 v2 v3 > M[1,1]:=det(delcols(delrows(PV,1..1),1..1)); M1, 1 := u2 v3 u3 v2 > M[1,2]:=det(delcols(delrows(PV,1..1),2..2)); M1, 2 := u1 v3 u3 v1 > M[1,3]:=det(delcols(delrows(PV,1..1),3..3)); M1, 3 := u1 v2 u2 v1 y tambin definimos el producto mixto de tres vectores (el comando innerprod devuelve el producto escalar) > w:=vector([w1,w2,w3]); w := [ w1, w2, w3 ] > innerprod(u,crossprod(v,w)); u1 v2 w3 u1 v3 w2 + u2 v3 w1 u2 v1 w3 + u3 v1 w2 u3 v2 w1 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]]);

u1 PM := u2 u3 > det(PM);

v1 v2 v3

w1 w2 w3

u1 v2 w3 u1 v3 w2 + u2 v3 w1 u2 v1 w3 + u3 v1 w2 u3 v2 w1 > det(PM)-innerprod(u,crossprod(v,w)); 0 La norma del producto vectorial de dos vectores coincide con el rea del paralelogramo en R3determinado 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]); u := [ 1, 2, 1 ] v := [ -1, 1, 0 ] w := [ -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`]],c olor=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);
Warning, the names arrow and changecoords have been redefined

El rea del paralelogramo azul es la norma del producto vectorial de v con w: > norm(crossprod(v,w)); 7 El volumen del paraleleppedo es el valor absoluto del producto mixto de u, v y w: > abs(innerprod(u,crossprod(v,w))); 22 Todo lo anterior se puede generalizar a conjuntos de 4 vectores en R4, 5 vectores en R5, etc.: dados n vectores en Rn, 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 R2 y R3). Para 3 < n 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 R2 y de volumen en R3, teniendo en mente que el "volumen" debe ser una medida del tamao de un paraleleppedo): 1.- V( v1, v2 .. vn ) = V( v1, v2 .. vn ). 2.- V( v1 + w1, v2 .. vn ) V( v1, v2 .. vn ) + V( w1, v2 .. vn ). 3.- V( v( 1 ), v( 2 ) .. v( n ) ) = V( v1, v2 .. vn ) para cualquier permutacin . 4.- V( e1, e2 .. en ) = 1, donde e1, e2 .. en 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 n. Adems para n 3, el valor absoluto del determinante de una matriz coincide con el volumen del paraleleppedo (o rea del paralelogramo, en el caso n = 2) 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 n vectores v1, v2, ...,vn en Rn , como el valor absoluto del determinante de la matriz cuyas columnas son las coordenadas de las vectores v1, v2, ...,vn respecto de la base cannica. Por tanto, en el caso de 3 vectores de R3 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 R4, 5 vectores de R5, etc., un "volumen orientado generalizado". > #Pulsa return As pues, el sistema {u,v,w}de vectores de R3 es libre si el determinante de la matriz que tiene por columnas sus coordenadas respecto de la base cannica de de R3 es 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]); 1 A := -1 -2 > det(A); 22 Esto mismo es obviamente vlido para sistemas de 4 vectores de R4, sistemas de 5 vectores de R5, etc., ya que 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 2 1 1 1 0 7

Test resuelto
1. La matriz que resulta como consecuencia de realizar las dos transformaciones 1 elementales "sumar a la tercera columna de A la primera multiplicada por " y 2 "multiplicar la primera fila por 3" corresponde al siguiente producto de matrices: 1 1 a) b) ( P1( 3 ) &* A ) &* S31 c) S13 &* A &* P1( 3 ) , 2 2 1 ( P1( 3 ) &* A ) &* S13 2 > with(linalg): > S[13](1/2) :=matrix(3,3,[1, 0, 1/2, 0, 1, 0, 0, 0, 1]);

1 1 0 1 2 S13 := 2 0 1 0 0 1 0 > P[1](3):=matrix(3,3,[3, 0, 0, 0, 1, 0, 0, 0, 1]); 3 0 0 P1( 3 ) := 0 1 0 0 0 1 > A := matrix(3,3,[a11, a12, a13, a21, a22, a23, a31, a32, a33]); a11 a12 A := a21 a22 a31 a32 > evalm(P[1](3)&*A&*S[13](1/2)); 3 a11 a21 a31 La respuesta correcta es la c) 1 2. Cual es el la matriz inversa de P1( 3 ) &* S13 ? 2 1 1 1 a) S13 b) S31 &* P1 &* P1( 3 ) 2 3 2 3 a12 a22 a32 a13 a23 a33

3 a11 + 3 a13 2 1 a21 + a23 2 1 a31 + a33 2

1 1 c) P1 &* S13 3 2

> multiply(P[1](3),S[13](1/2)); 3 0 0 > inverse(%); -1 1 0 3 2 0 1 0 0 1 0 > S[13](-1/2) :=matrix(3,3,[1, 0, -1/2, 0, 1, 0, 0, 0, 1]); -1 1 0 -1 2 S13 := 2 0 1 0 0 0 1 > P[1](1/3):=matrix(3,3,[1/3, 0, 0, 0, 1, 0, 0, 0, 1]); 0 1 0 3 2 0 1

1 0 1 3 P1 := 3 0 1 0 0 > multiply(S[13](-1/2),P[1](1/3)); 1 3 0 0 La respuesta correcta es la a) 0 1 0 -1 2 0 1

0 0 1

3. Sea A una matriz invertible. Si X es tal que AX = S21( 3 ), se verifica que a) X


( -1 ) ( -1 )

= S21( 3 ) &* A = S12( 3 ) &* A = S12( 3 ) &* A


( -1 ) ( -1 )

b) X c) X

( -1 )

Si A es invertible, X = A &* S21( 3 ) y La respuesta correcta es la a) >

= S21( 3 ) &* A.

4. Selese la matriz que no es gaussiana: 23 1 1 1 1 5 1 1 0 1 a) b) 1 1 c) 3 0 0 1 1 0 0 0 1 1 > La respuesta correcta es la c).

0 1 0 0

0 0 1 1

0 0 1 1

3 0 k 0 1 2 k 0 es igual a 5. Sea k un nmero real. El rango de la matriz A := 1 -1 0 1 3 0 0 12 k a) 4 para todo valor de k b) 3 para todo valor de k c) 3 si k = 0 o k = -1/4 > k:='k';A:=matrix([[3,0,-k,0],[1,-2,k,0],[1,-1,0, 1],[3,0,0,12*k]]); k := k 3 1 A := 1 3 > gausselim(A); 0 k -2 k -1 0 0 0 0 0 1 12 k

3 0 k 0 4 0 -2 k 0 3 0 0 k 12 k 0 0 0 1 + 4 k > k:=0;A:=matrix([[3,0,-k,0],[1,-2,k,0],[1,-1,0, 1],[3,0,0,12*k]]);rank(A); k := 0 3 0 0 0 1 -2 0 0 A := 1 -1 0 1 3 0 0 0 3 > k:=-1/4;A:=matrix([[3,0,-k,0],[1,-2,k,0],[1,-1,0, 1],[3,0,0,12*k]]);rank(A); k := A := La respuesta correcta es la c) 6. Si consideramos la sentencia "el vector (1,-1,2,4,5) pertenece a la variedad lineal (subespacio vectorial) generada por el sistema de vectores {(1,2,3,4,0),(0,4,3,2,1)}" se verifica que: a) es verdadera b) es falsa c) la pregunta no tiene sentido > A:=matrix(5,2,[[1,0],[2,4],[3,3],[4,2],[0,1]]); 1 2 A := 3 4 0 > rank(A); 2 > Am:=matrix(5,3,[[1,0,1],[2,4,-1],[3,3,2],[4,2,4],[0,1,5]]) ; 0 4 3 2 1 3 1 1 3 0 -2 -1 0 3 -1 4 1 4 -1 4 0 0 0 0 1 -3

1 2 Am := 3 4 0 > rank(Am); 3 La respuesta correcta es la b) >

0 4 3 2 1

1 -1 2 4 5

7. Si consideramos la sentencia "B = { 2 + x + x3, 3 + x2 + x3} es una base del subespacio vectorial de P3( x ) generado por el sistema de polinomios S = {2 + x + x3, 3 + x2 + x3 , 1 + x + x2 + 2 x3 , 5 x + x2 }," se verifica que: a) la sentencia es verdadera b) la sentencia es falsa c) la sentencia no tiene sentido Sean > f1(x):=-2+x+x^3;f2(x):=3+x^2+x^3;f3(x):=1+x+x^2+2*x^3;f4(x ):=5-x+x^2; f1( x ) := 2 + x + x3 f2( x ) := 3 + x2 + x3 f3( x ) := 1 + x + x2 + 2 x3 f4( x ) := 5 x + x2 los polinomios que forman el sistema S. En trminos de las coordenadas cannicas de P3( x ) , los polinomios de S se pueden escribir como columnas de una matriz Am : > Am:=matrix(4,4,[-2,3,1,5,1,0,1,-1,0,1,1,1,1,1,2,0]); -2 1 Am := 0 1 > rank(Am); 2 > A:=matrix(4,2,[-2,3,1,0,0,1,1,1]); -2 1 A := 0 1 > rank(A); 2 La respuesta correcta es la a) 8. Sea A una matriz invertible de dimensin n (>2). Si multiplicamos por dos la segunda columna de A y despus intercambiamos la primera y segunda columna de la nueva matriz, 3 0 1 1 3 0 1 1 1 1 1 2 5 -1 1 0

se obtiene una matriz B tal que a) det(B) = - det (A) b) det(B) = -2 det (A) c) det(B) = - 1/2 det (A) > A:=matrix([[-2, 0, 1, 0], [1, 1, 1, -1], [0, 1, 1, 0], [1, 1, 2, 0]]); det(A); -2 1 A := 0 1 > mulcol(A,2,2); -2 1 0 1 > B:=swapcol(%,1,2);det(B); 0 2 B := 2 2 La respuesta correcta es la b) 9. Sea A la matriz de los coeficientes del siguiente sistema de ecuaciones lineales: x3y+4z=2 x 4 y + 3 z = 2 2 x 5 y + 6 z = 5. Entonces: a) el sistema es compatible determinado b) A no es invertible c) el sistema es incompatible > ec1:=x-3*y+4*z=2;ec2:=-x-4*y+3*z=-2;ec3:=2*x-5*y+6*z=5; ec1 := x 3 y + 4 z = 2 ec2 := x 4 y + 3 z = -2 ec3 := 2 x 5 y + 6 z = 5 > solve({ec1,ec2,ec3},{x,y,z}); { x = 3, z = -1, y = -1 } La respuesta correcta es la a) 10. Sean A1, A2 y A3 las tres matrices que se obtienen a partir de la matriz A del problema anterior reemplazando su primera, segunda y tercera columna (respectivamente) por el 0 2 2 2 -2 1 0 1 -6 1 1 1 2 1 1 1 2 0 -1 0 0 0 -1 0 0 0 1 1 1 3 1 1 1 2 0 -1 0 0

2 vector columna B := 2 . 5 Si (x, y, z) es una solucin del sistema AX = B, se verifica que a) el sistema AX = B no tiene soluciones b) x=det(A1)/det(A), y=det(A2)/det(A), z=det(A3)/det(A) c) det(A2)=det(A) > A := matrix([[1, -3, 4], [-1, -4, 3], [2, -5, 6]]); 1 A := -1 2 > B:=matrix(3,1,[2,-2,5]); -3 -4 -5 4 3 6

2 B := -2 5 > A1:=matrix([[2, -3, 4], [-2, -4, 3], [5, -5, 6]]); 2 -3 4 A1 := -2 -4 3 5 -5 6 > A2:=matrix([[1, 2, 4], [-1, -2, 3], [2, 5, 6]]); 1 2 A2 := -1 -2 2 5 > A3:=matrix([[1, -3, 2], [-1, -4, 4 3 6 -2], [2, -5, 5]]);

1 -3 2 A3 := -1 -4 -2 2 -5 5 > x=det(A1)/det(A);y=det(A2)/det(A);z=det(A3)/det(A); x=3 y = -1 z = -1 La respuesta correcta es la b) > #fin

Prctica 3: Mtodos numricos de resolucin de sistemas de ecuaciones lineales Prctica 3

Mtodos numricos de resolucin de sistemas de ecuaciones lineales

Por: R.Criado y A.Gallinari, E.S.C.E.T., URJC, 1999 ltima actualizacin: L.Sol y A.Gallinari, E.S.C.E.T., URJC, 2003

Objetivos de la sesin
Recordar algunas de las funciones de la librera linalg con las que hemos trabajado en las prcticas anteriores e introducir otras nuevas necesarias para el desarrollo de la prctica. Afianzar en el alumno la comprensin de los conceptos de error absoluto, relativo y condicionamiento. Aprendizaje de algunos mtodos directos que reducen la acumulacin de error o que reducen el tiempo de clculo y de la realizacin de dichos mtodos con Maple. Toma de contacto con los mtodos iterativos, que no proporcionan una solucin exacta, sino una sucesin que se va aproximando a la solucin. > #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 necesarios para el desarrollo de la prctica. As pues el alumno deber ejecutar dichos ejemplos y teclear otros que le permitan comprender la aplicacin de dichos comandos. Los siguientes son comandos que pueden ser necesarios para la realizacin de esta prctica y que estn disponibles en la librera linalg. Algunos de ellos fueron introducidos en prcticas anteriores y otros no, por lo cual nos centraremos fundamentalmente en estos ltimos. Ante cualquier duda que pueda surgir, consultar con la ayuda (help) de Maple. linsolve genmatrix nullspace row, col solve geneqns randmatrix op

isolate addrow addcol LUdecomp

stackmatrix mulrow mulcol gausselim

augment swaprow swapcol backsub

delcols, delrows concat pivot forwardsub

Descripcin de los comandos mencionados: > restart:with(linalg):


Warning, the protected names norm and trace have been redefined and unprotected

Como ya vimos, 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 AX = B : > A:= matrix([[1,2,2],[1,1,3],[-2,0,1]]); 1 2 A := 1 1 -2 0 > B:=matrix([[3],[2],[1]]); 3 B := 2 1 > linsolve(A,B); -1 3 4 3 1 3 El comando nullspace obtiene una base del espacio de las soluciones de una ecuacin matricial homognea CX=0: > C:=matrix([[1,2,2],[1,1,3],[2,2,6]]);nullspace(C); 1 C := 1 2 2 3 6 { [ -4, 1, 1 ] } 2 1 2 2 3 1

En general cualquier ecuacin puede ser resuelta con el comando solve. La sintaxis de este comando es la siguiente: solve(lhs=rsh,x);. Permite resolver una ecuacin compuesta por la igualdad de dos expresiones (left-hand-side y right-hand-side) respecto de la variable especificada (en este caso la x). Por ejemplo: > solve(x^3-3*x+2=0,x); -2, 1, 1 Como se puede comprobar, si una raz es mltiple aparece varias veces. La ecuacin anterior tambin se puede plantear y resolver del siguiente modo: > ecuacion:=x^3+2=3*x;

ecuacion := x3 + 2 = 3 x > solve(ecuacion,x); -2, 1, 1 > rhs(ecuacion); 3x > lhs(ecuacion); x3 + 2 El comando anterior tambin se puede emplear para resolver un sistema de ecuaciones: > solve({x1-x2+x3=1,4*x1-5*x2-5*x3=4,2*x1+x2-x3=2,x1+2*x2-2* x3=1},{x1,x2,x3}); { x3 = 0, x1 = 1, x2 = 0 } El comando genmatrix ([eq1,...,eqn],[x1,...,xn]) nos permite recuperar la matriz del sistema de ecuaciones anterior, mientras que genmatrix ([eq1,...,eqn],[x1,...,xn], flag) nos permite recuperar la matriz ampliada del sistema de ecuaciones anterior, apareciendo en la ltima columa el vector de trminos independientes. > A:=genmatrix([x1-x2+x3=1,4*x1-5*x2-5*x3=4,2*x1+x2-x3=2,x1+ 2*x2-2*x3=1],[x1,x2,x3]); 1 -1 1 4 -5 -5 A := 2 1 -1 1 2 -2 > Am:=genmatrix([x1-x2+x3=1,4*x1-5*x2-5*x3=4,2*x1+x2-x3=2,x1 +2*x2-2*x3=1],[x1,x2,x3],flag); 1 -1 1 1 4 -5 -5 4 Am := 2 1 -1 2 1 2 -2 1 Si ahora queremos resolver el sistema planteado de forma matricial empleando el comando linsolve, basta con recuperar la ltima columna: > B:=col(Am,4); B := [ 1, 4, 2, 1 ] > linsolve(A,B); [ 1, 0, 0 ] Si, a partir de un sistema de ecuaciones planteado en forma matricial, queremos obtener el sistema en la forma usual, basta con emplear el comando geneqns(A,[x1,...,xn],B): > E:= geneqns(A,[x1,x2,x3],B); E := { x1 x2 + x3 = 1, 4 x1 5 x2 5 x3 = 4, 2 x1 + x2 x3 = 2, x1 + 2 x2 2 x3 = 1 } El comando op(k,E) obtiene la ecuacin k de un sistema de n ecuaciones: > op(2,E); 4 x1 5 x2 5 x3 = 4 El comando isolate permite despejar una expresin (o, en particular, una variable) en una ecuacin dada. Para hacer uso de este comando es preciso leer previamente la libreria isolate

. > readlib(isolate): > isolate(x-1/2*sin(a),x); 1 sin( a ) 2 > isolate(x-1/2*sin(a),sin(a)); x= sin( a ) = 2 x > isolate(x^2+2*sin(y)-log(z)=k,y); 1 2 1 1 y = arcsin k x + ln( z ) 2 2 2 Sean A1 y B1 las siguientes matrices: > A1:=matrix(2,2,[7,-2,5,0]); 7 A1 := 5 > B1:=matrix(2,2,[2,1,8,0]); -2 0

2 1 B1 := 8 0 Para acceder al elemento (i,j) de una matriz C hay que escribir C [i,j]. Por ejemplo: > c:=B1[2,1]; c := 8 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,1); r2 := [ 5, 0 ] c3 := [ 2, 8 ] La funcin stackmatrix une dos matrices verticalmente: > stackmatrix(A1,B1); 7 -2 5 0 2 1 8 0 La funcin augment une dos matrices horizontalmente. > augment(A1,B1); 7 -2 2 1 5 0 8 0 La funcin delcols(A,r..s) (respectivamente delrows(A,r..s)) elimina las columnas (respectivamente filas) r,r+1,...,s de la matriz A > delcols(augment(A1,B1),2..4); 7 5 En esta prctica tambin vamos a utilizar la funcin pivot, ya empleada en las prcticas 1 y 2: 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 > #Pulsa return 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); P1 := 7 0 0 0 -2 10 7 11 7 16 7

> #Pulsa return Para finalizar, recordaremos dos de las funciones ya vistas en la prctica anterior relacionadas con esto que acabamos de ver: el comando gausselim(A) nos devuelve la matriz triangular superior obtenida al aplicar el mtodo de eliminacin gaussiana por filas a la matriz A: > gausselim(A1); 7 -2 10 0 7 Es posible aplicar este comando columna a columna. Por ejemplo: > C:=augment(stackmatrix(A1,B1),stackmatrix(B1,A1)); 7 5 C := 2 8 > gausselim(C,1); 7 0 0 0 -2 10 7 11 7 16 7 2 46 7 45 7 19 7 1 -5 7 -16 7 -8 7 -2 0 1 0 2 8 7 5 1 0 -2 0

> gausselim(C,2); 7 -2 2 1 10 46 -5 0 7 7 7 -4 -3 0 0 5 2 -39 0 0 0 5 El comando backsub(A,B) obtiene X tal que A*X=B, siendo A una matriz triangular superior (obtenida aplicando por ejemplo el comando gausselim) y B es un vector (o incluso una matriz) del rango adecuado. Es decir, es una rutina que calcula la sustitucin hacia atrs. > A:=gausselim(C); A := > B:=col(C,2); B := [ -2, 0, 1, 0 ] > backsub(A,B); 12 23 -5 , , , 0 7 4 4 El comando forwardsub(A,b) resuelve el sistema A*X=B por sustitucin hacia adelante, siendo A una matriz triangular inferior, y se utiliza exactamente igual que backsub. Finalmente, el comando LUdecomp(A) calcula la descomposicin LU de una matriz A. Veremos cmo usarlo en el apartado correspondiente. > #Pulsa return 7 0 0 0 -2 10 7 0 0 2 46 7 -4 5 0 1 -5 7 -3 2 117 8

Leccin
Esta prctica se compone de tres partes: la primera trata de como los errores en los coeficientes pueden afectar a la solucin de un sistema lineal; la segunda de dos mtodos directos de resolucin de sistemas lineales, eliminacin Gaussiana con pivote parcial y la descomposicin LU; finalmente la tercera parte trata de los mtodos iterativos, es decir, mtodos que proporcionan una sucesin de vectores que convergen a la solucin.

Errores de redondeo y sistemas mal condicionados


> restart: Hay ciertos aspectos prcticos relacionados con la resolucin de sistemas de n ecuaciones lineales con n incgnitas que todava no hemos contemplado. En particular, no hemos tenido en cuenta que los ordenadores tienen un lmite de cifras decimales que pueden almacenar, por lo que al realizar operaciones "redondean" (es decir, cambian o no la ltima cifra considerada) o "truncan" (cortan por la ltima cifra

considerada sin ms) la mayora de los nmeros con los que operan. Al emplear Maple podemos controlar el nmero de cifras decimales con el que vamos a trabajar cambiando el valor de la variable Digits. Por ejemplo: > evalf(2/3); .6666666667 Como puede comprobarse, Maple ha redondeado 2/3, incrementando la ltima cifra en una unidad. Redondear consiste en aumentar la ltima cifra considerada en una unidad si la cifra que la sigue es mayor que 5, y dejarla como est si dicha cifra es menor o igual que 5. Truncar consiste no alterar la ltima cifra, sea o no la siguiente inferior o superior a 5. > Digits:=20; Digits := 20 > evalf(2/3); .66666666666666666667 > evalf(1/3); .33333333333333333333 Como se puede observar, en este ltimo caso redondear y truncar es lo mismo. En cualquier caso, sea por redondeo o por truncamiento, al sustituir 2/3 por ese valor aproximado estamos introduciendo un error al que se denomina error de redondeo. En general, se llama error a la diferencia entre el valor real y el valor redondeado, truncado, o aproximado de un nmero. Se llama error relativo al cociente entre el error y el valor real; es decir, se trata de una medida de lo "importante" que es error con respecto al valor real. Por ejemplo, si tenemos dos nmeros reales a y b: > Digits:=5: > a:=0.654; b:=10.337; a := .654 b := 10.337 y en un proceso hemos obtenido unos valores aproximados: > apert:=0.643;bpert:=10.348; apert := .643 bpert := 10.348 los errores han sido los mismos: > errora:=abs(a-apert);errorb:=abs(b-bpert); errora := .011 errorb := .011 pero los errores relativos son mayores para a, por ser ms pequeo en valor absoluto: > errela:=errora/(abs(a)); errelb:=errorb/(abs(b)); errela := .016820 errelb := .0010641 > #Pulsa return Es importante observar que la introduccin de errores de redondeo tiene como consecuencia que ciertas propiedades no sean vlidas al introducir dichos errores, como por ejemplo la propiedad asociativa: > Digits:=4;

Digits := 4 > (1+.0003)+.0003; 1.000 > 1+(.0003+.0003); 1.001 > (1+.0003)+.0003<>1+(.0003+.0003); 1.000 1.001 > Digits:=10; Digits := 10 La introduccin de errores de redondeo puede ser especialmente importante, pues el efecto acumulado de este tipo de errores puede hacer que obtengamos graves inexactitudes en la solucin; dicho problema se acentuar para sistemas con muchas ecuaciones e incognitas, pues sobre ellos tendremos que realizar un gran nmero de operaciones, y cada una aporta una variacin al error. Pero, no slo la dimensin de los sistemas es importante, sino que la variacin de los errores al resolver un sistema de ecuaciones depende enormemente de sus coeficientes. A los sistemas que son tan extremadamente sensibles que incluso los errores ms ligeros en los coeficientes conducen a inexactitudes importantes en la solucin se les denomina sistemas mal condicionados. Consideremos adems que este tipo de situaciones es muy comn en el ambito de la ciencia y de la ingeniera, donde los coeficientes del sistema que ha de resolverse se obtienen frecuentemente mediante una medicin experimental, y por tanto no estn exentos de errores. Por ejemplo, considrese el sistema de ecuaciones lineales: x + y = 3 x + 1.016 y = 5 > ec1:=x+y=-3; ec1 := x + y = -3 > ec2:=x+1.016*y=5; ec2 := x + 1.016 y = 5 > solve({ec1,ec2},{x,y}); { x = -503., y = 500. } Al resolver el sistema anterior redondeando las centsimas, obtendramos el sistema x + y = 3 x + 1.02 y = 5 > ec1:=x+y=-3; ec1 := x + y = -3 > ec2:=x+1.02*y=5; ec2 := x + 1.02 y = 5 > solve({ec1,ec2},{x,y}); { x = -403., y = 400. } > #Pulsa return Obsrvese que un error de redondeo de 0.04 en un nico coeficiente del sistema conduce

a un error importantsimo en la solucin.

Reconocimiento de sistemas mal condicionados


Ahondemos un poco ms en la nocin de error. Dado un sistema lineal AX=b, podemos considerar perturbaciones (cambios) de los coeficientes de la matriz A y del trmino independiente b y observar como vara la solucin del sistema. De un modo no formal, decimos que un sistema est mal condicionado cuando pequeas perturbaciones en los coeficientes conducen a grandes errores en las soluciones. Es importante entonces en los problemas no teorcos (por ejemplo, en aquellos en que los coeficientes se calculan de modo emprico, y por tanto siempre tenemos que considerar un error) tener mtodos para reconocer los sistemas mal condicionados y mtodos para transformar sistemas mal condicionados en sistemas bien condicionados, que no trataremos aqu. En cualquier caso, hemos de definir alguna medida del condicionamiento de un sistema que nos permita, sabiendo el posible error en los coeficientes de un sistema, calcular el error mximo que podemos obtener en las soluciones. > restart:with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

Vamos a definir primero una medida de las perturbaciones en una matriz. Definiremos una norma en el espacio de matrices, que nos d una medida del tamao de los coeficientes de una matriz, y luego compararemos este tamao con el tamao de las perturbaciones que efectuamos sobre la matriz. Una de las normas que podemos definir sobre matrices es la norma infinito matricial, que para una matrix A de dimensin nxm es

||A|| = max{

j=1

Ai, j , i =1,...,n},

y que definimos con el siguiente procedimiento: > norminfmat:=proc(A::matrix) local S,M,i,j; M:=0; for i from 1 to rowdim(A) do S:=0; for j from 1 to coldim(A) do S:=S+abs(A[i,j]); od; if M<S then M:=S; fi; od; M; end:

Existe tambin una norma infinito vectorial, que para un vector X es el mximo de los valores absolutos de sus coordenadas: > norminfvect:=proc(Y) local X,M,i; X:=convert(Y,list): M:=abs(X[1]); for i from 2 to nops(X)-1 do if M<abs(X[i]) then M:=abs(X[i]); fi; od; M; end: Ejemplo: calculemos la norma infinito del vector > X:=vector([0,-1,4,-13,5,11]); norminfvect(X); X := [ 0, -1, 4, -13, 5, 11 ] 13

Ahora calculemos las normas infinito de la siguiente matriz: > A:=matrix(4,4,[10,7,8,7,7,5,6,5,8,6,10,9,7,5,9,10]); norminfmat(A); 7 8 7 5 6 5 6 10 9 5 9 10 33 Modifiquemos ahora los coeficientes de A en una pequea cantidad (menos de una unidad), obteniendo la matriz Apert. Provocaremos perturbaciones aleatorias utilizando el comando randmatrix(nmero de filas, nmero de columnas); se suponen en principio perturbaciones del orden de las cienmilsimas, pero el alumno puede cambiar posteriormente ste parametro y hacer sus propios experimentos: > Digits:=6: pert:=evalm((.000001)*randmatrix(4,4)); Apert:=evalm(A+pert); -.000085 .000097 pert := .000049 .000045 9.99992 7.00010 Apert := 8.00005 7.00004 -.000055 .000050 .000063 -.8 10-5 6.99994 5.00005 6.00006 4.99999 -.000037 .000079 .000057 -.000093 7.99996 6.00008 10.0001 8.99991 -.000035 .000056 -.000059 .000092 6.99996 5.00006 8.99994 10.0001 10 7 A := 8 7

Tomamos ahora un trmino independiente, tambin aleatorio, y veamos como la perturbacin en la matriz A afecta a las soluciones: > b:=randmatrix(4,1); X:=convert(linsolve(A,b),vector); Xpert:=convert(linsolve(Apert,b),vector); 43 -62 b := 77 66 X := [ 3991, -6628, 1671, -977 ] Xpert := [ 3995.18, -6634.95, 1672.72, -977.998 ] Observamos que las soluciones X y Xpert obtenidas son muy diferentes. Ahora, utilizando las normas definidas anteriormente, podemos dar una medida relativa de la perturbacin en la matriz A y de la variacin en la solucin X. Para ello calculamos el cociente de la norma de Apert-A entre la norma de A y el cociente de la norma de Xpert-X entre la norma de X: > norminfmat(evalm(Apert-A)); errelA:=norminfmat(evalm(Apert-A))/norminfmat(A); errelX:=norminfvect(evalm(Xpert-X))/norminfvect(X); Coef:=errelX/errelA; .00029 errelA := .878788 10-5 errelX := .00104858 Coef := 119.321 Concluimos entonces que, bajo estas condiciones, un error relativo en A se propaga a X multiplicndose por un factor del orden de 102 . Eso hace que un error absoluto de cienmilsimas en A conduzca a un error incluso no decimal en X. Como adems los nicos datos fijos que hemos tomado son los coeficientes de la matriz A y los dems son aleatorios, conclumos que son los coeficientes de la matriz A los que provocan que el sistema sea muy sensible a perturbaciones . > #Pulsa return Ejercicio: realiza varias perturbaciones aleatorias de la matriz A (simplemente vuelve a cargar nuevas perturbaciones reempezando el proceso anterior) y convncete de que el error relativo en A se multiplica en X por una cantidad del orden de 102. > #Pulsa return El condicionamiento de una matriz es el producto de la norma de A y la de su inversa. Vamos a definir el condicionamiento como procedimiento y calculemos el condicionamiento de la matriz A anterior: > Cond:=proc(A::matrix) RETURN(norminfmat(A)*norminfmat(inverse(A))); end; Cond := proc(A::matrix) RETURN( norminfmat( A )norminfmat( inverse( A ) ) ) end proc

> Cond(A); 4488 Puede comprobarse que el condicionamiento de una matriz proporciona una medida de lo bien o mal condicionado que est un sistema; en concreto, un sistema estar peor condicionado cuanto mayor que 1 sea el condicionamiento de su matriz de coeficientes. La prueba formal de este hecho est fuera de los objetivos de este curso, pero vamos a intentar poner algunos ejemplos con matrices 4 x 4. Ahora haremos un proceso anlogo al anterior, donde tomaremos una matriz aleatoria A (que no perturbaremos), un vector b=(1,1,1,1) (al cual provocaremos una perturbacin aleatoria del orden de las milsimas) y compararemos el error relativo de b con el error relativo de la solucin y con el condicionamiento de la matriz A. La idea es que por un lado veamos que (en los ejemplos mal condicionados que aparezcan) errores pequeos en b conducen a errores grandes en la solucin X, y que por otro lado nos convezcamos de que es cierta la frmula: (error relativo de la solucin) es menor o igual que ((error relativo de b) x (condicionamiento de A)) Realiza este experimento varias veces y toma tus propias conclusiones: > Digits:=8: > b:=matrix(4,1,[1,1,1,1]); > bpert:=evalm(b+(.0001)*randmatrix(4,1)); > A:=randmatrix(4,4); b := 1 1 1 1

1.0054 .9995 bpert := 1.0099 .9939 -50 -12 -18 31 -26 -62 1 -47 A := -91 -47 -61 41 -1 -58 -90 53 > X:=convert(linsolve(A,b),vector); Xpert:=convert(linsolve(A,bpert),vector); > errelb:=norminfvect(convert(evalm(bpert-b),vector))/nor minfvect(convert(b,vector)); errelX:=norminfvect(evalm(Xpert-X))/norminfvect(X); > CondA:=evalf(Cond(A)); -193021 40571 9367 -61861 X := , , , 3343476 1114492 557246 1671738 Xpert := [ -.057883915, .036526392, .016734631, -.037072764 ] errelb := .0099

errelX := .0026550547 CondA := 33.313402 > errelX;errelb*CondA; is(errelX <= (errelb*CondA)); .0026550547 .32980268 true > #Pulsa return

Mtodo de eliminacin gaussiana con pivoteo parcial


> restart:with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

El mtodo de eliminacin gaussiana con pivoteo parcial se utiliza para resolver un sistema compatible determinado de n ecuaciones lineales en n incgnitas, con el fin de minimizar el efecto acumulativo del error por redondeo. Para describir este mtodo utilizaremos el siguiente ejemplo. Ejemplo: queremos determinar la solucin del sistema de tres ecuaciones en tres incgnitas que tiene las siguientes matriz asociada A y matriz ampliada (A|b). > A:=matrix(3,3,[[11/25000,3/10^4,-1/10^3],[4,1,1],[3,-46 /5,-1/2]]); 3 11 25000 10000 A := 1 4 -46 3 5 > b:=vector([91/10^5,3/2,-41/5]); -1 1000 1 -1 2

91 3 -41 b := , , 100000 2 5 Las ecuaciones de nuestro sistema son > E:=geneqns(A,[x,y,z],b); E := 3 11 3 1 91 46 1 -41 {4 x + y + z = , x+ y z= ,3x y z= } 2 25000 10000 1000 100000 5 2 5 > E1:=op(1,E); E1 := 4 x + y + z = > E2:=op(2,E); E2 := > E3:=op(3,E); 11 3 1 91 x+ y z= 25000 10000 1000 100000 3 2

E3 := 3 x y la solucin exacta es > X:=linsolve(A,b);

46 1 -41 y z= 5 2 5

-1 1 X := , 1, 2 4 El mtodo de eliminacin gaussiana con pivote es una variacin del mtodo de eliminacin gaussiana usual y se usa para reducir la propagacin de una perturbacin en los coeficientes de la matriz A: la idea bsica subyacente es que un mismo error produce un error relativo mayor en un coeficiente "pequeo" que en uno "grande", luego los coeficientes de mayor valor absoluto son ms seguros que los de menor valor absoluto. Durante el proceso de reduccin de una matriz a su forma escalonada, se elige un elemento no nulo (denominado "pivote") para cada columna (a partir de la primera), que es el coeficiente de la columna cuyo valor absoluto es el mayor de todos los de su columna. Reordenando las filas de A de forma adecuada, se utilizan los pivotes elegidos para reducir la matriz. Si introducimos un error de redondeo modificando el valor de la variable Digits: > Digits:=3; Digits := 3 obtenemos que > A:=matrix(3,3,[[evalf(11/25000),evalf(3/10^4),evalf(-1/ 10^3)],[evalf(4),evalf(1),evalf(1)],[evalf(3),evalf(-46 /5),evalf(-1/2)]]); ; .000440 .000300 -.00100 A := 4. 1. 1. -9.20 -.500 3. > b:=vector([evalf(91/10^5),evalf(3/2),evalf(-41/5)]); b := [ .000910, 1.50, -8.20 ] > X:=linsolve(A,b); X := [ .249, 1.00, -.497 ] Vamos a utilizar el mtodo de eliminacin gaussiana con pivoteo parcial utilizando la matriz ampliada asociada al sistema: > Ab:=augment(A,b); .000440 .000300 -.00100 .000910 1. 1. 1.50 Ab := 4. -9.20 -.500 -8.20 3. El primer pivote es 4 y tenemos que intercambiar la primera y la segunda fila de la matriz, > A1:=swaprow(Ab,1,2);

1. 1. 1.50 4. A1 := .000440 .000300 -.00100 .000910 -9.20 -.500 -8.20 3. ahora dividimos la primera fila por 4 y reducimos la primera columna de la forma usual: > A2:=mulrow(A1,1,evalf(1/4)); .250 1.00 A2 := .000440 .000300 -9.20 3. > A3:=addrow(A2,1,2,-.000440); .250 1.00 .000190 A3 := 0. -9.20 3. > A4:=addrow(A3,1,3,-3); .250 -.00100 -.500 .250 -.00111 -.500 .375 .000910 -8.20 .375 .000745 -8.20

.250 .250 .375 1.00 A4 := 0. .000190 -.00111 .000745 -9.95 -1.25 -9.32 0. Las dos ltimas reducciones tambin se pueden obtener aplicando el comando pivot a la matriz A2 : > pivot(A2,1,1); .250 .250 .375 1. 0. .000190 -.00111 .000745 -9.95 -1.25 -9.32 0. El pivote de la segunda columna es -9.95, por lo que tenemos que intercambiar la segunda y la tercera fila de la matriz A4 y seguir realizando la reduccin de la segunda columna de la forma usual: > A5:=swaprow(A4,2,3); .250 .250 1.00 A5 := 0. -9.95 -1.25 .000190 -.00111 0. > A6:=mulrow(A5,2,evalf(-1/9.95)); .250 1.00 .995 A6 := -0. .000190 0. > A7:=pivot(A6,2,2,3..3); .250 .125 -.00111 .375 -9.32 .000745 .375 .932 .000745

.250 .375 1. .250 A7 := 0. .995 .125 .932 0. -.00113 .000567 0. La forma escalonada de la matriz A es > Aesc:=mulrow(A7,3,evalf(-1/(.113e-2))); 1. .250 .250 .375 Aesc := 0. .995 .125 .932 -0. -0. 1.00 -.502 y su forma escalonada reducida es > A8:=addrow(Aesc,2,1,evalf(-0.250));

1. .001 .219 .142 A8 := 0. .995 .125 .932 -0. -0. 1.00 -.502 > A9:=addrow(A8,3,1,evalf(-0.219)); 0. .252 1. .001 A9 := 0. .995 .125 .932 -0. -0. 1.00 -.502 > Aescred:=addrow(A9,3,2,evalf(-0.126)); 1. Aescred := 0. -0. > Xper:=col(Aescred,4); > #Pulsa return .001 .995 -0. 0. -.001 1.00 .252 .995 -.502

Xper := [ .252, .995, -.502 ]

La factorizacin LU
La factorizacin LU de una matriz proporciona un mtodo efectivo para resolver simultneamente un conjunto de sistemas lineales con la misma matriz cuadrada invertible A de coeficientes y trminos independientes distintos: A X1 = b1, A X2 = b2,..., A Xk = bk, y resulta muy efectivo para un nmero alto de tales sistemas. Para centrarnos, supongamos que tenemos la matriz A que se puede escribir como producto de dos matrices L y U, la primera triangular inferior (lower triangular) y la segunda triangular superior (upper triangular): A=LU. Para resolver un sistema AX = L U X = b, podemos empezar por definir una nueva matriz Y=UX y resolver el nuevo sistema LY = b por sustitucin hacia adelante (o descenso), que es anlogo a la sustitucin hacia atrs, pero empezando desde la primera fila. As, una vez calculado Y, podemos resolver el sistema Y=UX por sustitucin hacia atrs, siendo U triangular superior. Ejemplo: > restart:with(linalg): L:=matrix(3,3,[2,0,0,4,-1,0,0,-2,1]); U:=matrix(3,3,[1,0,1,0,1,-3,0,0,1]); A:=evalm(L&*U);
Warning, the protected names norm and trace have been redefined and unprotected

2 L := 4 0 1 U := 0 0 2 A := 4 0 > b:=matrix(3,1,[2,0,1]);

0 -1 -2 0 1 0 0 -1 -2

0 0 1 1 -3 1 2 7 7

2 b := 0 1 Vamos a resolver el sistema AX = L U X = b. Como hemos dicho, llamando Y = U X podemos calcular Y por sustitucin hacia adelante: > Y:=forwardsub(L,b); 1 Y := 4 9 Ahora, a partir de Y y por sustitucin hacia atrs, obtenemos X: > X:=backsub(U,Y); -8 X := 31 9 Por supuesto, este valor de X coincide con el valor que calculamos con el comando linsolve: > linsolve(evalm(L&*U),b); -8 31 9 El primer problema que nos encontramos en la factorizacin LU es que no toda matriz cuadrada invertible A se puede escribir como producto de una matriz triangular inferior por una matriz triangular superior. Por ejemplo sea A la matriz: > A:=matrix(3,3,[0,-2,7,4,-1,7,2,0,2]); 0 -2 7 A := 4 -1 7 2 0 2 que es invertible, ya que su determinante es no nulo: > det(A); 2 Si se pudiese escribir A como producto de una matriz triangular inferior por una matriz triangular superior, se tendra que: > L:=matrix(3,3,[l[1,1],0,0,l[2,1],l[2,2],0,l[3,1],l[3,2]

,l[3,3]]); U:=matrix(3,3,[u[1,1],u[1,2],u[1,3],0,u[2,2],u[2,3],0,0 ,u[3,3]]); l1, 1 L := l2, 1 l3, 1 u1, 1 U := 0 0 > LU:=evalm(L&*U); l 1 , 1 u1 , 2 l 1 , 1 u1 , 3 l1, 1 u1, 1 l2, 1 u1, 3 + l2, 2 u2, 3 LU := l2, 1 u1, 1 l2, 1 u1, 2 + l2, 2 u2, 2 l3, 1 u1, 1 l3, 1 u1, 2 + l3, 2 u2, 2 l3, 1 u1, 3 + l3, 2 u2, 3 + l3, 3 u3, 3 > #Pulsa return y que A = LU. Como necesariamente todos los terminos de las matrices A y LU deben coincidir, considerando el coeficiente LU(1,1) tenemos l1, 1 u1, 1= A(1,1) =0, luego alguno de esos dos factores debe ser nulo, y entonces L U son no invertibles (una de la dos matrices tendra determinante nulo) y llegamos a contradiccin con que su producto, A, s lo sea. Este hecho no lleva a considerar la naturaleza de la descomposicin LU: toda matriz se A transforma en una matriz triangular superior U mediante una sucesin de transformacines elementales por filas, o, si lo vemos en el sentido contrario, A se obtiene de una matriz triangular superior U por medio de una sucesin de transformaciones elementales. En el lenguaje de matrices elementales, que hemos aprendido en las prcticas anteriores, esto es equivalente a decir que multiplicando a U por la izquierda por un producto de matrices elementales obtenemos la matriz A. Es de notar que en el proceso de eliminacin Gaussiana se pueden utilizar matrices elementales que son todas triangulares inferiores (correspondientes a multiplicar a una fila por un escalar o a sumarle a una fila un mltiplo de una fila anterior) o matrices de permutacin (una matriz de permutacin es, por definicin, una matriz obtenida de la matriz identidad por medio de una permutacin de sus filas, es decir, un producto de matrices elementales del tipo Eij ). Como el producto de matrices triangulares inferiores es triangular inferior (ejercicio!) llegamos a la conclusin de que, si en el proceso de eliminacin Gaussiana de A no es necesario usar matrices de permutacin, la inversa del producto de las matrices elementales usadas es una matriz triangular inferior L tal que L U = A. > #Pulsa return 0 l2, 2 l3, 2 u1 , 2 u2 , 2 0 0 0 l3, 3 u1, 3 u2, 3 u3, 3

Por ejemplo, para la matriz A anterior, la primera tranformacin elemental que deberamos hacer es una permutacin de filas para tener un coeficiente no nulo en el lugar (1,1). sta es la razn de que no se verifique una igualdad A=LU. El punto bsico es que realizando permutaciones de las filas de A, s es posible escribir A como producto PLU, es decir, toda matriz invertible se puede escribir como prducto PLU donde P es una matriz de permutacin, L una matriz triangular inferior y U una matriz triangular superior. Este punto de vista nos presenta la transformacin LU como una forma de almacenamiento de todas las transformaciones que aparecen en el proceso de eliminacin Gaussiana, de manera que las transformaciones correspondientes sobre los terminos independientes se puedan hacer de forma ms rapida. sto disminuye el tiempo de clculo, lo cal es una ventaja en la resolucin de muchos sistemas con la misma matriz asociada. Adems, la inversa de una matriz de permutacin coincide con su traspuesta (bsicamente porque la inversa P verificar P
{ -1 } { -1 }

de una permutacin P tal que P(1) = 3, debe

(3)=1) , luego su determinacin no aade tiempo de clculo relevante.

Por ejemplo, en la matriz A anterior, permutando las filas 1 y 3 de A obtenemos una matriz que s se escribe como producto LU (en este caso la matriz P es la matriz elemental E13): > A:=matrix(3,3,[0,-2,7,4,-1,7,2,0,7]); 0 A := 4 2 > PA:=swaprow(A,1,3); 2 0 7 PA := 4 -1 7 0 -2 7 > L:=matrix(3,3,[1,0,0,2,1,0,0,2,1]); 1 0 0 L := 2 1 0 0 2 1 > U:=matrix(3,3,[2,0,1,0,-1,3,0,0,1]); 2 U := 0 0 > evalm(PA) = evalm(L&*U); 2 4 0 0 -1 -2 0 -1 0 1 3 1 0 -1 -2 1 5 7 -2 -1 0 7 7 7

7 2 7 = 4 7 0

Tambin: > evalm(A)=swaprow(evalm(L&*U),3,1);

0 -2 7 0 -2 7 4 -1 7 = 4 -1 5 2 0 7 2 0 1 donde, recordemos, el ltimo comando swaprow corresponde a la multiplicacin por la matriz de permutacin Eij.. Entonces se obtiene que PA = LU y, utilizando la inversa de P, que A = P
{ -1 }

LU.

Por ltimo, podemos tomar como convenio que la matriz triangular inferior L aparezca siempre con todos los trminos de la diagonal iguales a 1 (lo cal es equivalente a pedir que en la eliminacin Gaussiana no realicemos transformaciones del tipo "multiplicar a una fila por un escalar"), y de ste modo la descomposicin LU es nica, salvo permutacin. Veamos entonces como funciona el comando de Maple para la factorizacin LU: el comando LUdecomp(A) genera una matriz de permutacin P, una matriz triangular inferior L y una matriz triangular superior U tales que A=PLU. Este comando devuelve, por defecto, la matriz U, pero podemos aadir algunas entradas, para nombrar las salidas del procedimiento: L='l': almacena L como la matriz de nombre l. U='u': almacena U como la matriz de nombre u. P='p': almacena P como la matriz de nombre p. Estos comandos son opcionales y la sintaxis del comando es LUdecomp(A,L='l',U='u',P='p'). Por ejemplo: > restart:with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> A:=matrix(3,3,[0,-2,7,4,-1,7,2,0,2]); 0 -2 7 A := 4 -1 7 2 0 2 > LUdecomp(A,L='L',U='U',P='P'); 4 0 0 > evalm(P); 0 1 0 > evalm(L); 1 0 1 2 0 1 -1 4 0 0 1 1 0 0 0 0 1 -1 -2 0 7 7 1 4

> evalm(U); 4 0 0 > evalm(A)=evalm(P&*L&*U); 0 4 2 -2 -1 0 -1 -2 0 7 0 7 = 4 2 2 7 7 1 4 -2 -1 0 7 7 2

Veamos ahora un ejemplo de como usar la descomposicin LU si una matrix n x n A aparece en n sistemas de ecuaciones lineales. Para n grande, el tiempo de clculo disminuye notablemente con respecto al mtodo de eliminacin Gaussiana. Por ejemplo, el clculo de la inversa de una matriz cuadrada requiere la resolucin de la ecuacin matricial A X = In, es decir, de n sistemas de n ecuaciones con n incgnitas. Vamos a tomar una matriz 4 x 4: > A:=randmatrix(4,4); -85 -55 -37 97 50 79 A := 49 63 57 45 -8 -93 y calculamos y almacenamos su descomposicin LU : > LUdecomp(A,L='L',U='U',P='P'); -85 -55 -217 0 17 0 0 0 0 -37 3126 85 19504 155 0 -35 56 -59 92

-35 273 17 -1234 31 -31663 742

La matriz identidad es: > I4:=matrix([[1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1]]); 1 0 I4 := 0 0 y P es > evalm(P); 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Luego, en este caso, tenemos una descomposicin LU=A. Nota: Si la matriz P hallada por Maple no es la identidad hay que considerar su matriz 0 1 0 0 0 0 1 0 0 0 0 1

traspuesta (inversa) para obtener que P

{ -1 }

A = LU.

Resolvemos ahora por descenso y remonte: > Y:=forwardsub(L,I4); 1 97 85 Y := 523 155 4597 1484 > X:=backsub(U,Y); 199729 367657 2912996 2912996 -123535 -133739 728249 1456498 X := 11217 27185 2912996 2912996 -4597 -1016 31663 63326 sta ltima matriz X es la matriz inversa de A: > evalm(A&*X); 1 0 0 0 > #Pulsa return 0 1 0 0 0 0 1 0 179387 2912996 -47919 728249 -14525 2912996 -2589 63326 133337 2912996 -74049 1456498 -21595 2912996 -742 31663 0 1 76 31 508 371 0 0 1 2589 1484 0 0 0 1

0 0 0 1

Mtodos Iterativos: Gauss-Seidel y Jacobi


En general, los mtodos de eliminacin gaussiana y de Gauss-Jordan son las mejores tcnicas para resolver un sistema de ecuaciones lineales. Sin embargo, cuando el nmero de ecuaciones es grande (por ejemplo 100 o ms) y cuando la matriz tiene muchos ceros, otros mtodos pueden resultar ms efectivos. Nos referimos a los mtodos iterativos, de los que en esta seccin estudiaremos dos: el de Gauss-Seidel y el de Jacobi. Considrese un sistema de n ecuaciones lineales con n incgnitas genrico, aunque, para poder representarlo y ver en qu consiste el mtodo de una manera cmoda, vamos a suponer que es de 3 ecuaciones con 3 incgnitas: > restart: with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> A:=matrix(3,3,[a11,a12,a13,a21,a22,a23,a31,a32,a33]);

a11 A := a21 a31 > b:=vector([b1,b2,b3]);

a12 a22 a32

a13 a23 a33

b := [ b1, b2, b3 ] > E:=geneqns(A,[x,y,z],b); E := { a11 x + a12 y + a13 z = b1, a21 x + a22 y + a23 z = b2, a31 x + a32 y + a33 z = b3 } Supondremos, adems, que los elementos de la diagonal a11, a22 y a33 son distintos de cero y que el sistema tiene exactamente una solucin. El primer mtodo que vamos a analizar es el Mtodo de iteracin de Jacobi: Para comenzar despejamos la x en la primera ecuacin, la y en la segunda y la z en la tercera. Para ello usamos el comando isolate: > E1:=op(1,E); E1 := a11 x + a12 y + a13 z = b1 > E2:=op(2,E); E2 := a21 x + a22 y + a23 z = b2 > E3:=op(3,E); E3 := a31 x + a32 y + a33 z = b3 > readlib(isolate); proc(expr, x, n) ... end proc > isolate(E1,x); x= > isolate(E2,y); y= > isolate(E3,z); b3 a31 x a32 y a33 Si consideramos por ejemplo el sistema 20 x + y z = 17 x 10 y + z = 13 x + y + 10 z = 18, es decir: > A:=matrix(3,3,[20,1,-1,1,-10,1,-1,1,10]); z= b2 a21 x a23 z a22 b1 a12 y a13 z a11

1 20 A := 1 -10 1 -1 > b:=vector([17,13,18]);

-1 1 10

b := [ 17, 13, 18 ] Las operaciones anteriores nos llevaran a > E:=geneqns(A,[x,y,z],b); E := { 20 x + y z = 17, x 10 y + z = 13, x + y + 10 z = 18 } > E1:=op(1,E); E1 := 20 x + y z = 17 > E2:=op(2,E); E2 := x 10 y + z = 13 > E3:=op(3,E); E3 := x + y + 10 z = 18 > readlib(isolate); proc(expr, x, n) ... end proc > isolate(E1,x); x= > isolate(E2,y); y= > isolate(E3,z); z= 9 1 1 + x y 5 10 10 13 1 1 + x+ z 10 10 10 17 1 1 y+ z 20 20 20

o, equivalentemente, al sistema > A:=matrix(3,3,[20.,1.,-1.,1.,-10.,1.,-1.,1.,10.]); 20. A := 1. -1. > b:=vector([17.,13.,18.]); 1. -10. 1. -1. 1. 10.

b := [ 17., 13., 18. ] > E:=geneqns(A,[x,y,z],b); E := { 20. x + 1. y 1. z = 17., 1. x 10. y + 1. z = 13., 1. x + 1. y + 10. z = 18. } > E1:=op(1,E); E1 := 20. x + 1. y 1. z = 17. > E2:=op(2,E); E2 := 1. x 10. y + 1. z = 13. > E3:=op(3,E); E3 := 1. x + 1. y + 10. z = 18. > isolate(E1,x); x = .8500000000 .05000000000 y + .05000000000 z > isolate(E2,y);

y = 1.300000000 + .1000000000 x + .1000000000 z > isolate(E3,z); z = 1.800000000 + .1000000000 x .1000000000 y Si se conoce una aproximacin de la solucin del sistema de ecuaciones lineales anterior y se sustituyen estos valores aproximados en el segundo miembro de cada una de dichas ecuaciones, muy a menudo se observa que los valores de x, y y z que se obtienen en el primer miembro forman incluso una mejor aproximacin para la solucin. Esta observacin es la clave para el mtodo de Jacobi. Para resolver el sistema del ejemplo anterior por el mtodo de iteracin de Jacobi: - se hace una aproximacin inicial para la solucin. Cuando no se disponga de una mejor eleccin, se utiliza x = 0 , y = 0 y z = 0 . - Se sustituye esta aproximacin inicial en el segundo miembro de cada una de las ecuaciones. - Los nuevos valores de x, y y z obtenidos se utilizan como una nueva aproximacin para la solucin. Vamos a trabajar con 5 cifras decimales para estudiar tambin qu sucede con los errores de redondeo: > Digits:=5;x0:=0;y0:=0;z0:=0; Digits := 5 x0 := 0 y0 := 0 z0 := 0 > x1:=subs(y=y0,z=z0,isolate(E1,x)); x1 := x = .85000 > y1:=subs(x=x0,z=z0,isolate(E2,y)); y1 := y = -1.3000 > z1:=subs(x=x0,y=y0,isolate(E3,z)); z1 := z = 1.8000 Tenemos, pues una primera aproximacin de la solucin. Ahora utilizamos esta aproximacin para introducirla como aproximacin inicial en la frmula anterior: > x2:=subs(y1,z1,isolate(E1,x)); x2 := x = 1.0050 > y2:=subs(x1,z1,isolate(E2,y)); y2 := y = -1.0350 > z2:=subs(x1,y1,isolate(E3,z)); z2 := z = 2.0150 De nuevo utilizamos la aproximacin obtenida como aproximacin inicial en la frmula anterior y as sucesivamente: > x3:=subs(y2,z2,isolate(E1,x)); x3 := x = 1.0025 > y3:=subs(x2,z2,isolate(E2,y));

y3 := y = -.99800 > z3:=subs(x2,y2,isolate(E3,z)); z3 := z = 2.0040 > x4:=subs(y3,z3,isolate(E1,x)); x4 := x = 1.0001 > y4:=subs(x3,z3,isolate(E2,y)); y4 := y = -.99940 > z4:=subs(x3,y3,isolate(E3,z)); z4 := z = 2.0000 La solucin cada vez se parece ms a la solucin del sistema que, como se puede comprobar, es x = 1 , y = -1 , z = 2. Pero, si no tuvisemos los coeficientes exactos, cmo sabramos cundo detenernos? Antes de responder a esta pregunta vamos a hacer dos iteraciones ms: > x5:=subs(y4,z4,isolate(E1,x)); x5 := x = .99997 > y5:=subs(x4,z4,isolate(E2,y)); y5 := y = -1.0000 > z5:=subs(x4,y4,isolate(E3,z)); z5 := z = 1.9999 > x6:=subs(y5,z5,isolate(E1,x)); x6 := x = 1.0000 > y6:=subs(x5,z5,isolate(E2,y)); y6 := y = -1.0000 > z6:=subs(x5,y5,isolate(E3,z)); z6 := z = 2.0000 Al resolver problemas en los que se emplean mtodos iterativos, siempre se plantea la pregunta acerca de en qu momento detenerse. Hay dos criterios para tomar esta decisin. El primero consiste en detenerse despus de un nmero predeterminado de pasos, por ejemplo 10 20. Sin embargo, como no se sabe de antemano cuantas iteraciones sern necesarias para obtener una respuesta razonable, este mejor usar otro criterio que refleje la convergencia. Recordemos la definicin de error relativo: si x es el valor real de un nmero y x' es una aproximacin (el nmero que aparece en el ordenador) el error absoluto cometido al aproximar x por x' es el valor absoluto de x-x', mientras que el error relativo cometido al aproximar x por x' es |x-x'|/x. > abs(2-2.1); .1 > abs(2-2.1)/2; .050000 Aqu el error relativo no parece ser ms significativo que el absoluto, sin embargo, si ahora consideramos > abs(2000.1-2000); .1 > abs(2000.1-2000)/2000;

.000050000 Como hemos visto, el error relativo es mucho ms significativo que el absoluto, pues tiene en cuenta la magnitud de las cifras consideradas. Volviendo al criterio de parada, el segundo criterio (mucho mejor) consiste en detenerse cuando el error relativo es suficientemente pequeo, i.e., cuando |x-x'|/x es muy pequeo. Sin embargo, el error relativo no se puede determinar exactamente, puesto que no conocemos la solucin exacta, por lo que lo que se hace es estimar dicho error mediante el cociente |x(n)-x(n-1)|/x(n) (error relativo estimado) donde x(n) es el valor obtenido en la iteracin n-sima. Si el mtodo converge, es decir, si al iterar el proceso repetidamente nos acercamos cada vez ms a la solucin, entonces x(n) se puede tomar como aproximacin de x y la frmula anterior como aproximacin del error relativo. > #Pulsa return Mtodo de Gauss-Seidel: El mtodo de Gauss-Seidel es una pequea modificacin del de Jacobi. Consiste en utilizar en cada iteracin el ltimo valor obtenido de la variable correspondiente. Es decir, si acabamos de hallar x2, al ir a calcular y2, en vez de emplear el valor de x1, emplearemos el nuevo valor x2 que acabamos de obtener. Ejercicio: aplicar el mtodo de Gauss-Seidel al sistema de ecuaciones anterior y comprobar que en este caso con 4 iteraciones obtenemos el mismo resultado que hemos obtenido antes empleando 6 iteraciones con el mtodo de Jacobi. > Digits:=5;x0:=0;y0:=0;z0:=0; Digits := 5 x0 := 0 y0 := 0 z0 := 0 > x1:=subs(y=y0,z=z0,isolate(E1,x)); x1 := x = .85000 > y1:=subs(x1,z=z0,isolate(E2,y)); y1 := y = -1.2150 > z1:=subs(x1,y1,isolate(E3,z)); z1 := z = 2.0065 > x2:=subs(y1,z1,isolate(E1,x)); x2 := x = 1.0111 > y2:=subs(x2,z1,isolate(E2,y)); y2 := y = -.99825 > z2:=subs(x2,y2,isolate(E3,z)); z2 := z = 2.0009 > x3:=subs(y2,z2,isolate(E1,x)); x3 := x = .99995 > y3:=subs(x3,z2,isolate(E2,y)); y3 := y = -.99991

> z3:=subs(x3,y3,isolate(E3,z)); z3 := z = 2.0000 > x4:=subs(y3,z3,isolate(E1,x)); x4 := x = 1.0000 > y4:=subs(x4,z3,isolate(E2,y)); y4 := y = -1.0000 > z4:=subs(x4,y4,isolate(E3,z)); z4 := z = 2.0000 En casi todos los casos es cierto que el mtodo de Gauss-Seidel es ms eficiente (en el sentido de que converge ms rapidamente) que el de Jacobi. Sin embargo, hay sistemas en los que las iteraciones de Jacobi convergen (con lentitud) pero las iteraciones de Gauss-Seidel divergen. Tambin hay sistemas para los que las iteraciones de Gauss-Seidel convergen y las iteraciones de Jacobi divergen. > #Pulsa return Se dice que una matriz cuadrada tiene una diagonal estrictamente dominante si, para cada fila, el valor absoluto del elemento de la diagonal principal es mayor que la suma de los valores absolutos del resto de los elementos de dicha fila. Se puede demostrar que si una matriz A tiene una diagonal estrictamente dominante y buscamos obtener las soluciones sistema del sistema AX=b, ambos mtodos (el Gauss-Seidel y el de Jacobi) convergen. > #fin

Test resuelto
1. Los errores de redondeo pueden hacer que a) No se satisfaga la propiedad asociativa de la suma b) No se satisfaga la propiedad conmutativa de la suma c) Los errores de redondeo no tienen influencia en las propiedades anteriores. > Como qued explicado en la leccin, la respuesta es a). 2. Un sistema mal condicionado es un sistema extremadamente sensible a la acumulacin de a) los errores de redondeo b) los errores operativos c) Ni a) ni b) > Como qued explicado en la leccin, la respuesta es a). 3. Si una matriz A tiene una diagonal estrictamente dominante, entonces para resolver el sistema de ecuaciones lineales A X = b resulta ser convergente: a) El mtodo de Jacobi b) El mtodo de Gauss-Seidel c) Los dos. > Como qued explicado en la leccin, la respuesta es c).

4. La matriz 3 A := 1 3 -1 3 2 1 1 6

a) No tiene una diagonal estrictamente dominante b) Tiene una diagonal estrictamente dominante c) Tiene una diagonal dominante, pero no estrictamente dominante > 3 > |-1|+1, |-3| > 1+1, |-6|>3+|-2|. La solucin correcta es la b).

5. Dado el sistema x+y=1 .0001 x + y = 2 Utilizando tres cifras significativas, a) La solucin exacta es (- 10000 / 9999 , 19999 / 9999 ) y su aproximacin con el mtodo de eliminacin con pivoteo parcial es (-1,2) b) La solucin exacta es (-1,2) y su aproximacin con el mtodo de eliminacin con pivoteo parcial es (- 10000 / 9999 , 19999 / 9999 ) c) El sistema no es compatible. > restart:with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> A:=matrix(2,2,[[1,1],[.0001,1]]); 1 A := .0001 > b:=vector(2,[1,2]); b := [ 1, 2 ] > Ab:=augment(A,b); 1 Ab := .0001 > Digits:=3; Digits := 3 > A1:=pivot(Ab,1,1); 1 A1 := 0. > A2:=pivot(A1,2,2); 1. A2 := 0. La solucin correcta es la a). 0. 1. -1. 2. 1 1. 1 2. 1 1 1 2 1 1

> 6. Dado el sistema 3x + y = 4 2 x y = 1, utilizando el mtodo de Jacobi para aproximar su solucin con vector inicial (0,0), se verifica que: a) el mtodo converge a la solucin real (1,1) b) el mtodo diverge c) el mtodo converge a (4,4). > restart:with(linalg):readlib(isolate):
Warning, the protected names norm and trace have been redefined and unprotected

> A:=matrix(2,2,[[3,1],[2,-1]]); 3 A := 2 > b:=vector(2,[4,1]); b := [ 4, 1 ] > linsolve(A,b); [ 1, 1 ] > E:=geneqns(A,[x,y],b); E := { 3 x + y = 4, 2 x y = 1 } > E1:=op(1,E); E1 := 3 x + y = 4 > E2:=op(2,E); E2 := 2 x y = 1 > isolate(E1,x); x= > isolate(E2,y); y = 1 + 2 x > x0:=0;y0:=0; x0 := 0 y0 := 0 > x1:=subs(y=y0,isolate(E1,x)); x1 := x = > y1:=subs(x=x0,isolate(E2,y)); y1 := y = -1 > x2:=subs(y1,isolate(E1,x)); x2 := x = 5 3 4 3 4 1 y 3 3 1 -1

> y2:=subs(x1,isolate(E2,y)); y2 := y = > x3:=subs(y2,isolate(E1,x)); x3 := x = > y3:=subs(x2,isolate(E2,y)); 7 3 La matriz dada no es estrictamente dominante en la diagonal. La solucin correcta es la b). y3 := y = 7 9 5 3

Prctica 4: Funciones lineales y espacios eucldeos Prctica 4

Funciones lineales y espacios eucldeos reales


Por: R.Criado y A.Gallinari, E.S.C.E.T., URJC, 1999 ltima actualizacin: A.Gallinari, E.S.C.E.T., URJC, 2003

Objetivos de la sesin
Recordar algunas de las funciones de la librera linalg que se introdujeron en las prcticas anteriores e introducir otras nuevas necesarias para el desarrollo de esta prctica. Afianzar en el alumno la comprensin de las funciones lineales presentando varios ejemplos mediante el uso de Maple. Visualizar el efecto geomtrico de las transformaciones lineales del plano y, en el caso que sean invertibles, expresar sus matrices en trminos de matrices elementales estudiadas en las prcticas anteriores. Aplicar el mtodo de Gram-Schmidt a la bsqueda de bases ortonormales en espacios eucldeos y determinar la proyeccin ortogonal de un vector sobre un subespacio mediante el uso de Maple. Practicar sobre la descomposicin QR de una matriz. Determinar soluciones de sistemas lineales por mnimos cuadrados (este tema es opcional). > #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 trabajar con funciones lineales. 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 que pueden ser necesarios para la realizacin de esta prctica que estn disponibles en la librera linalg: vector dotprod proc evalm norm angle genmatrix matrix basis rowspace, colspace GramSchmidt leastsqrs rank kernel, nullspace equal QRdecomp

Descripcin de los comandos mencionados: > restart;with(linalg):


Warning, the protected names norm and trace have been redefined and unprotected

En esta prctica vamos a trabajar con el concepto de funcin lineal, cuya definicin recordaremos en el apartado "Leccin". En Maple se puede definir una funcin lineal utilizando el estilo proc. El siguiente procedimiento define una funcin lineal F de R5 en R4 que a un vector [ y1, y2, y3, y4, y5 ] de R5 le hace corresponder el vector [ 2 y1 y3, y4, y5 4 y2, y5 ] de R4: > F:= proc(x) local y; y:=evalm(x);

vector([2*y[1]-y[3],y[4],y[5]-4*y[2],y[5]]); end; F := proc(x) local y; y := evalm( x ) ; vector( [ 2y[ 1 ] y[ 3 ], y[ 4 ], y[ 5 ] 4y[ 2 ], y[ 5 ] ] ) end proc (Obsrvese que la funcin F utiliza el comando evalm para evaluar su argumento.) Con esta definicin de la funcin F se puede trabajar con vectores simblicos. Como puede comprobarse, si u y v son dos vectores de R5, en este caso F(u+v)=F(u)+F(v). Tambin se puede verificar que, siendo a un nmero real, F(au)=aF(u). Por satisfacer esas dos condiciones, se dice que la funcin F es lineal. Sean u y v dos vectores de R5 y sea a un nmero real. Verifiquemos que F es lineal con Maple: > u:=vector(5); u := array( 1 .. 5, [ ] ) > F(u); [ 2 u1 u3, u4, u5 4 u2, u5 ] > v:=vector(5); v := array( 1 .. 5, [ ] ) > F(v); [ 2 v1 v3, v4, v5 4 v2, v5 ] > F(u)+F(v); [ 2 u1 u3 , u4 , u5 4 u2 , u5 ] + [ 2 v 1 v 3 , v 4 , v 5 4 v 2 , v 5 ] > F(u+v); [ 2 u1 + 2 v 1 u 3 v 3 , u4 + v 4 , u5 + v 5 4 u 2 4 v 2 , u5 + v 5 ] Para verificar que los dos ltimos vectores son iguales podemos utilizar el comando equal (o evaluar la diferencia entre ellos): > equal(F(u)+F(v),F(u+v)); true > F(a*u); [ 2 a u1 a u3, a u4, a u5 4 a u2, a u5 ] > a*F(u); a [ 2 u1 u3, u4, u5 4 u2, u5 ] Para verificar que los dos ltimos vectores son iguales podemos evaluar la diferencia entre ellos (o utilizar el comando equal): > simplify(evalm(F(a*u)-a*F(u))); [ 0, 0, 0, 0 ] Ejemplo: > u:=vector([1,1,1,1,1]); u := [ 1, 1, 1, 1, 1 ]

> v:=vector([2,0,1,2,0]); v := [ 2, 0, 1, 2, 0 ] > a:=3; a := 3 > evalm(F(u)+F(v)); [ 4, 3, -3, 1 ] > F(u+v); [ 4, 3, -3, 1 ] > equal(F(u)+F(v),F(u+v)); true > evalm(F(a*u)); [ 3, 3, -9, 3 ] > evalm(a*F(u)); [ 3, 3, -9, 3 ] > simplify(evalm(F(a*u)-a*F(u))); [ 0, 0, 0, 0 ] > #Pulsa return Sea F: Rn-->Rm una funcin lineal y sean Bn y Bm las bases cannica de Rn y Rm, respectivamente. Uno de los puntos centrales desarrollado en clase en relacin con las funciones lineales es que, si F es una funcin lineal, a la funcin F se puede asociar una matriz real A de m filas y n columnas tal que para todo vector x de Rn, la imagen del vector x mediante F, F(x), se puede obtener multiplicando el vector columna de coordenadas de x respecto de Bn por la matriz A, es decir, para todo vector x de Rn F(x)=Ax. La matriz A es la matriz cuyas columnas son las coordenadas respecto de la base cannica de Rm de los vectores que son imagen de los correspondientes vectores de la base cannica de Rn. El comando genmatrix ([F(x)[1],F(x)[2],...,F(x)[n]],[x[1],x[2],...,x[n]]) nos permite recuperar la matriz A de F: > A:= genmatrix([F(x)[1],F(x)[2],F(x)[3],F(x)[4]],[x[1],x[2],x[3 ],x[4],x[5]]); 2 0 -1 0 0 0 0 0 1 0 A := 0 -4 0 0 1 0 0 0 0 1 Podemos verificar, por ejemplo, que la imagen del primer vector [1,0,0,0,0] de la base cannica de R5 es el vector [2,0,0,0] y que la imagen del ltimo vector de la base cannica de R5 es el vector [0,0,1,1] , que corresponden a la primera y ltima columna de la matriz A anterior:

> F([1,0,0,0,0]);F([0,0,0,0,1]); [ 2, 0, 0, 0 ] [ 0, 0, 1, 1 ] Para verificar que la matriz A sea la correcta, podemos utilizar el comando equal o evaluar la diferencia entre F(x) y Ax : > x:=vector(5):equal(F(x),A&*x); evalm(F(x)-A&*x); true [ 0, 0, 0, 0 ] El ncleo de una funcin lineal es el subespacio vectorial formado por todos los vectores del espacio de partida (el dominio) cuya imagen es el vector nulo del espacio de llegada (el codominio). El comando kernel(A) (o nullspace(A)) obtiene un conjunto de vectores que forman una base del ncleo de la funcin lineal F definida por A: > kernel(A); { [ 1, 0, 2, 0, 0 ] } > nullspace(A); { [ 1, 0, 2, 0, 0 ] } El comando rank(A) obtiene la dimensin del imagen de A: > rank(A); 4 Los comandos rowspace(A) y colspace(A) hallan una base del espacio fila y columna de A, respectivamente: > rowspace(A); -1 { [ 0, 1, 0, 0, 0 ], [ 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, 1 ], 1, 0, , 0, 0 } 2 > colspace(A); { [ 0, 0, 0, 1 ], [ 1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ] } El comando dotprod(v1, v2) obtiene el producto escalar de los vectores v1 y v2 del espacio vectorial eucldeo Rn con el producto escalar usual. El comando norm(v1, 2) obtiene la norma del vector y el comando angle(v1,v2) devuelve el ngulo formado por los vectores v1 y v2: > v1:=vector([3,2,1]);v2:=vector([1,1,1]); v1 := [ 3, 2, 1 ] v2 := [ 1, 1, 1 ] > dotprod(v1,v2); 6 > norm(v1,2); 14 > norm(v2,2); 3 > angle(v1,v2);

1 14 arccos 7

El comando basis({v1,v2,....,vn}) extrae de {v1,v2,...,vn} una base del espacio vectorial que generan. Si se quiere obtener una base a partir de un sistema ordenado de vectores [v1,v2,...,vn], se puede aplicar el comando basis([v1,v2,....,vn]). > B1:=basis({vector([1,1,1]),vector([1,1,0]),vector([2,2,1]) ,vector([1,0,0])}); B1 := { [ 1, 1, 1 ], [ 2, 2, 1 ], [ 1, 0, 0 ] } > B2:=basis([vector([1,1,1]),vector([1,1,0]),vector([2,2,1]) ,vector([1,0,0])]); B2 := [ [ 1, 1, 1 ], [ 1, 1, 0 ], [ 1, 0, 0 ] ] El comando GramSchmidt({v1,v2,...,vn}) devuelve una base ortogonal obtenida a partir del conjunto de vectores {v1,v2,...,vn} linealmente independientes por el procedimiento de ortogonalizacin de Gram-Schmidt. Teniendo en cuenta cul es la tcnica de Gram-Schmidt para encontrar una base ortogonal, es preferible utilizar el formato GramSchmidt([v1,v2,...,vn]) pues, de ese modo, Maple aplica el mtodo de Gram-Schmidt al sistema libre ordenado de vectores [v1,v2,...,vn]. Nota: La base obtenida no tiene porqu ser ortonormal: > B3:=GramSchmidt(basis([vector([1,1,1]),vector([1,1,0]),vec tor([2,2,1]),vector([1,0,0])])); 1 1 -2 1 -1 B3 := [ 1, 1, 1 ], , , , , , 0 3 3 3 2 2 > norm([1, 1, 1],2); 3 El comando QRdecomp(A, Q='q', fullspan=false) calcula la matriz R de la descomposicin QR de una matriz A con vectores columna linealmente independientes. La opcin Q='q' permite recuperar la matriz Q de la descomposicin y la definicin fullspan=false sirve para que la matriz Q tenga la misma dimensin que A: > A:= matrix(3,3,[1,0,0,1,1,0,1,1,1]); 1 0 0 A := 1 1 0 1 1 1 > R:= QRdecomp(A, Q='q',fullspan=false); 3 R := 0 0 > Q:=evalm(q); 2 3 3 1 6 3 0 1 3 3 1 6 6 1 2 2

1 3 3 1 Q := 3 3 1 3 3 > evalm(A-Q&*R); 0 0 0 > #Pulsa return

1 6 3 1 6 6 1 6 6 0 0 0 0 0 0

0 1 2 1 2

2 2

Si A es una matriz real, el comando leastsqrs (A, b) (mnimos cuadrados) obtiene el vector x que hace mnima la norma del vector Ax-b asociada al producto escalar usual o, lo que es lo mismo, calcula el vector x tal que la distancia entre Ax y b sea mnima (como veremos, x es la solucin por mnimos cuadrados del sistema Ax =b, posiblemente incompatible). As el vector Ax es la proyeccin ortogonal de b sobre el subespacio vectorial generado por las columnas de A, considerando el producto escalar usual de Rn. > A1:=matrix(2,2,[[0,1],[0,-3]]); b:=vector(2,[1,-2]); x:=leastsqrs(A1,b); A1x:=evalm(A1&*x); equal(A1x,b); 0 A1 := 0 1 -3

b := [ 1, -2 ] 7 x := _t1, 10 7 -21 A1x := , 10 10 false En el caso de que el sistema Ax=b sea compatible determinado o, lo que es lo mismo, en el caso de que b pertenezca al subespacio vectorial generado por las columnas de A, el comando leastsqrs obtiene la solucin x del sistema: > A2:=matrix(2,2,(i,j)->i+2*j); b:=vector(2,[1,-2]); x:=leastsqrs(A2,b); A2x:=evalm(A2&*x); equal(A2x,b); 3 A2 := 4 5 6

b := [ 1, -2 ] x := [ -8, 5 ] A2x := [ 1, -2 ]

true > linsolve(A2,b); [ -8, 5 ]

Leccin
Funciones lineales
Las funciones que aparecen de manera natural en el contexto de los espacios vectoriales son las funciones lineales. Empezaremos por recordar (o en su caso establecer) la definicin y las propiedades de las funciones lineales que ms utilizaremos durante esta prctica. Si E y F son dos espacios vectoriales sobre el mismo cuerpo K (por ejemplo sobre el cuerpo de los nmeros reales o complejos), una funcin lineal entre E y F es una funcin que respeta las estructuras de espacios vectoriales de E y F dadas por las operaciones de suma y de producto por un escalar, es decir, una funcin f :E --> F es lineal si para todos vectores u,v de E y para todos escalares , de K se verifica que f(u+ v) = f(u) + f(v). > #Pulsa return A partir de esta propiedad, se sigue de forma inmediata que si un vector u es combinacin lineal de un sistema de vectores {v1,...,vn} de E, u = 1 v1 + 2 v2 +...+n vn, su imagen f(u) =1 f(v1) +2f(v2)+...+nf(vn) es combinacin lineal (con los mismos coeficientes) de las imgenes de los vectores del sistema {v1 ,...,vn}. Esta ltima propiedad es particularmente importante en el caso de espacios vectoriales de dimensin finita. Si E es un espacio de dimensin finita y B= {v1,...,vn} es una base de E, entonces cada vector u de E se puede escribir en la forma u = 1 v1 + 2 v2 +...+n vn (esta forma es nica) y la imagen de u, f(u) =1 f(v1) +2f(v2)+...+nf(vn) , queda completamente determinada en trminos del sistema de vectores de F {f(v1), f(v2), ..., f(vn)}. > #Pulsa return Dos importantes subespacios vectoriales asociados a una funcin lineal f : E --> F son el ncleo, Ker(f), y la imagen, Im(f), de la funcin f. Ker(f) es el subespacio de E formado por todos los vectores u tales que f(u) = 0. Im(f) es el subespacio de F formado por todos los vectores v tales que existe un vector u de E con v = f(u).

Si la dimensin de Ker(f), la nulidad de f, y la dimensin de Im(f), el rango de f, son finitas, se verifica que E es de dimensin finita y dim(E) = nulidad(f) + rango(f). Ejemplo: Sea f :R3-->R2 la funcin lineal f(x,y,z) = (x-2y, x-z), > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> f:= proc(x) local y; y:=evalm(x); vector([y[1]-2*y[2],y[1]-y[3]]); end; f := proc(x) local y; y := evalm( x ) ; vector( [ y[ 1 ] 2y[ 2 ], y[ 1 ] y[ 3 ] ] ) end proc Los valores de f sobre los elementos de la base cannica B3=((1,0,0),(0,1,0),(0,0,1)) de R3 son > e1:=vector([1,0,0]):e2:=vector([0,1,0]):e3:=vector([0,0 ,1]): f(e1); f(e2); f(e3); [ 1, 1 ] [ -2, 0 ] [ 0, -1 ] Sea u = (1,2,3) = 1(1,0,0) +2(0,1,0)+3(0,0,1). Entonces f(u) = (-3,-2) = (1,1) +2 (-2,0) +3(0,-1). (Verifquese esto ltimo en el espacio reservado a continuacin). > > #Pulsa return

Funciones lineales de Rn en Rm
Siendo Bn = ( (1,0,...,0), (0,1,0,...,0),...,(0,...,0,1) ) la base cannica del espacio Rn, cualquier funcin lineal f : Rn --> Rm se puede representar por medio de una matriz real A, la matriz asociada a f , de dimensin m por n como sigue: todo vector x en Rn (de coordenadas (x1,...,xn) respecto de Bn) se puede escribir como matriz columna de dimensin n y su imagen, f(x) (de coordenadas (y1,y2,...,ym) respecto de Bm), como matriz columna de dimensin m. Con esta representacin, la matriz A asociada a la funcin lineal f es tal que f(x) = A x. Una consecuencia del hecho de que una funcin lineal queda completamente determinada por sus valores sobre los elementos de una base, es que es muy facil

determinar la matriz A por medio de estos valores: las columnas de A son las coordenadas respecto de Bm en Rm de los vectores f(1,0,...,0), f(0,1,0,...,0),..., f(0,...,0,1). Ejemplo: Sea f: R3 --> R2 la proyeccin de R3 sobre el plano xy : f(x,y,z) = (x,y). Para esta funcin se obtiene que f(1,0,0) = (1,0), f(0,1,0) = (0,1) y f(0,0,1) = (0,0). > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> f:= proc(x) local y; y:= evalm(x); vector([y[1],y[2]]); end; f := proc(x) local y; y := evalm( x ) ; vector( [ y[ 1 ], y[ 2 ] ] ) end proc > A:= genmatrix([f(x)[1],f(x)[2]],[x[1],x[2],x[3]]); 1 0 0 A := 0 1 0 Si ahora tenemos la composicin de dos funciones lineales, la matriz asociada a esta composicin es el producto de las matrices asociadas a cada una de las dos funciones. Si una funcin lineal f es invertible, su matriz asociada A es tambin invertible. Adems, la matriz asociada a la funcin inversa f Ejemplo: Sea f: R3--> R2definida por f(x,y,z) = (2x, x+y ) y sea g: R2 --> R2 definida por g(x,y) = (y,x). Queremos determinar las matrices asociadas a las funciones g o f : R3--> R2 En este caso g o f (x,y,z) = (x+y , 2x) y > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected
( -1 )

es la matriz inversa de A.

y g
( -1 )

( -1 )

: R2-->R2.

(x,y) = (y,x):

> f:= proc(x) local y; y:= evalm(x); vector([2*y[1],y[1]+y[2]]); end; f := proc(x) local y; y := evalm( x ) ; vector( [ 2y[ 1 ], y[ 1 ] + y[ 2 ] ] ) end proc > Af:= genmatrix([f(x)[1],f(x)[2]],[x[1],x[2],x[3]]);

2 Af := 1 > g:= proc(x) local y; y:= evalm(x); vector([y[2],y[1]]); end;

0 1

0 0

g := proc(x) local y; y := evalm( x ) ; vector( [ y[ 2 ], y[ 1 ] ] ) end proc > Ag:= genmatrix([g(x)[1],g(x)[2]],[x[1],x[2]]); 0 Ag := 1 > gof:= proc(x) local y; y:= evalm(x); vector([y[1]+y[2],2*y[1]]); end; gof := proc(x) local y; y := evalm( x ) ; vector( [ y[ 1 ] + y[ 2 ], 2y[ 1 ] ] ) end proc Existe un comando en Maple, (g@f), para definir la funcin compuesta gof : > (g@f)([x[1],x[2]]); [ x1 + x2, 2 x1 ] > Agof:= genmatrix([gof(x)[1],gof(x)[2]],[x[1],x[2],x[3]]); 1 Agof := 2 > ginv:= proc(x) local y; y:= evalm(x); vector([y[2],y[1]]); end; ginv := proc(x) local y; y := evalm( x ) ; vector( [ y[ 2 ], y[ 1 ] ] ) end proc > Aginv:= genmatrix([ginv(x)[1],ginv(x)[2]],[x[1],x[2]]); 0 1 Aginv := 1 0 El producto matricial de las dos matrices Ag y Af es > evalm(Ag&*Af); 1 2 y la matriz inversa de Ag es > inverse(Ag); 0 1 1 0 1 0 0 0 1 0 0 0 1 0

> #Pulsa return

Geometra de las funciones lineales de R en R

En el caso de las funciones (o transformaciones) lineales del plano (y del espacio tridimensional), se pueden visualizar ms facilmente los efectos provocados al aplicarlas sobre vectores geomtricos. Algunas de las propiedades que poseen estas funciones y sus aplicaciones en el desarrollo de la elaboracin de grficas por ordenadores, las hacen aparecer como particularmente interesantes. > #Pulsa return Las transformaciones que estudiaremos ms en detalle son las siguientes: reflexiones con respecto al eje x o con respecto al eje y reflexin con respecto a la recta y = x rotacin en sentido contrario a las manecillas del reloj por un ngulo t expansiones y compresiones deslizamientos cortantes transformaciones elementales funciones lineales invertibles generales Para determinar completamente una funcin lineal f de R2en R2, tenemos que definir sus valores sobre los vectores de la base cannica B2 ={(1,0),(0,1)}. Veremos el efecto geomtrico de las funciones anteriores sobre el quadrado unitario : > with(plottools):with(plots):display({polygon([[0,0], [1,0], [1,1]], color=red),polygon([[0,0], [0,1], [1,1]], color=green)},scaling=constrained);
Warning, the names arrow and changecoords have been redefined

> #Pulsa return Nota: en particular, f (1,1) = f (1,0) + f(0,1) y f(0,0) =(0,0). La funcin reflexin con respecto al eje x es la funcin Rx definida por Rx(1,0) = (1,0) y Rx(0,1) = (0,-1). Entonces Rx equivale a la multiplicacin por la matriz 1 0 0 -1 Su efecto geomtrico sobre el cuadrado unitario se puede visualizar como sigue: > display({polygon([[0,0], [1,0], [1,1]], color=red),polygon([[0,0], [0,1], [1,1]], color=green),polygon([[0,0], [1,0], [1,-1]], color=red),polygon([[0,0], [0,-1], [1,-1]], color=green)},scaling=constrained);

> #Pulsa return La funcin reflexin con respecto al eje y es la funcin Ry definida por Ry(1,0) = (-1,0) y Ry(0,1) = (0,1). Entonces Ry equivale a la multiplicacin por la matriz -1 0 0 1 Su efecto geomtrico sobre el cuadrado unitario es > display({polygon([[0,0], [1,0], [1,1]], color=red),polygon([[0,0], [0,1], [1,1]], color=green),polygon([[0,0], [-1,0], [-1,1]], color=red),polygon([[0,0], [0,1], [-1,1]], color=green)},scaling=constrained);

> #Pulsa return La funcin reflexin con respecto a la recta y=x es la funcin Rxy definida por Rxy(1,0) = (0,1) y Rxy(0,1) = (1,0). Entonces Rxy equivale a la multiplicacin por la matriz 0 1 1 0 Su efecto geomtrico sobre el cuadrado unitario es > display({polygon([[0,0], [1,0], [1,1]], color=green),polygon([[0,0], [0,1], [1,1]], color=red)},scaling=constrained);

> #Pulsa return La funcin rotacin en sentido contrario a las manecillas del reloj por un ngulo t es la funcin Rt definida por Rt(1,0) = (cos(t),sen(t)) y Rt(0,1) = (-sen(t),cos(t)). Entonces Rt equivale a la multiplicacin por la matriz cos( t ) sen( t ) sen( t ) cos( t ) Para t = , su efecto geomtrico sobre el cuadrado unitario es 6 > a:=cos(Pi/6):b:=sin(Pi/6):display({polygon([[0,0], [a,b], [a-b,a+b]], color=red),polygon([[0,0], [-b,a],[a-b,a+b]], color=green)},scaling=constrained);

> #Pulsa return La funcin expansin (o compresin) en la direccin x con factor k >1 ( 0<k<1) es la funcin Ekx (o Ckx) definida por la matriz k 0 0 1 Su efecto geomtrico sobre el cuadrado unitario depende del valor de k . Si k>1, la matriz anterior define una expansin en la direccin x > k:=2;display({polygon([[0,0], [k,0], [k,1]], color=red),polygon([[0,0], [0,1], [k,1]], color=green)},scaling=constrained); k := 2

> #Pulsa return Si 0<k<1, se obtiene una compresin en la direccin x > k:=1/2;display({polygon([[0,0], [k,0], [k,1]], color=red),polygon([[0,0], [0,1], [k,1]], color=green)},scaling=constrained); 1 2

k :=

> #Pulsa return La funcin expansin (o compresin) en la direccin y con factor k >1 (0<k<1) es la funcin Eky (o Cky) definida por la matriz 1 0 0 k Su efecto geomtrico sobre el cuadrado unitario depende del valor de k . Si k>1, la matriz anterior define una expansin en la direccin y > k:=2;display({polygon([[0,0], [1,0], [1,k]], color=red),polygon([[0,0], [0,k], [1,k]], color=green)},scaling=constrained); k := 2

> #Pulsa return Si 0<k<1, se obtiene una compresin en la direccin y > k:=1/2;display({polygon([[0,0], [1,0], [1,k]], color=red),polygon([[0,0], [0,k], [1,k]], color=green)},scaling=constrained); 1 2

k :=

> #Pulsa return La funcin deslizamiento cortante en la direccin x con factor k es la funcin Dkx definida por Dkx (x,y) = ( x + ky, y ) Entonces Dkx equivale a la multiplicacin por la matriz 1 k 0 1 Su efecto geomtrico sobre el cuadrado unitario depende del valor de k . Si k>0, se obtiene la siguiente figura: > k:=2;display({polygon([[0,0], [1,0], [k+1,1]], color=red),polygon([[0,0], [k,1], [k+1,1]], color=green)},scaling=constrained); k := 2

> #Pulsa return Si k<0, se obtiene la siguiente figura: > k:=-2;display({polygon([[0,0], [1,0], [k+1,1]], color=red),polygon([[0,0], [k,1], [k+1,1]], color=green)},scaling=constrained); k := -2

> #Pulsa return La funcin deslizamiento cortante en la direccin y con factor k es la funcin Dky definida por Dky (x,y) = ( x , y + kx ) Entonces Dky equivale a la multiplicacin por la matriz 1 0 k 1 Su efecto geomtrico sobre el cuadrado unitario depende del valor de k . Si k>0, se obtiene la siguiente figura: > k:=2;display({polygon([[0,0], [1,k], [1,k+1]], color=red),polygon([[0,0], [0,1], [1,k+1]], color=green)},scaling=constrained); k := 2

> #Pulsa return Si k<0, se obtiene la figura: > k:=-2;display({polygon([[0,0], [1,k], [1,k+1]], color=red),polygon([[0,0], [0,1], [1,k+1]], color=green)},scaling=constrained); k := -2

> #Pulsa return Ejemplo: Determinar el vector resultante al aplicar al vector (1/2,1/2) un deslizamiento cortante de factor 2 en la direccin y, seguido por la reflexin con respecto a la recta y=x. > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> D2y:= matrix([[1, 0], [2, 1]]); 1 0 D2y := 2 1 > Rxy:=matrix([[0, 1], [1, 0]]); 0 Rxy := 1 > A:=evalm(Rxy&*D2y); 2 A := 1 > u:= vector(2,[1/2,1/2]); 1 0 1 0

1 1 u := , 2 2 > evalm(A&*u); 3 1 , 2 2 > #Pulsa return

2 Geometra de las funciones lineales de R en R2 y transformaciones elementales


Recordamos la matrices elementales vistas en las prcticas anteriores: Transformaciones Elementales Elementales Sumar a la fila i la j multiplicada por k Multiplicar la fila i por k Intercambiar la fila i y la fila j En el caso de dimensin 2, las matrices elementales son las cinco siguientes: > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

Matrices

Sij( k ) Pi( k ) Eij

> S[1,2](k):=matrix(2,2,[[1,k],[0,1]]); 1 k S1, 2( k ) := 0 1 > S[2,1](k):=matrix(2,2,[[1,0],[k,1]]); 1 0 S2, 1( k ) := k 1 > P[1](k):=matrix(2,2,[[k,0],[0,1]]); k 0 P1( k ) := 0 1 > P[2](k):=matrix(2,2,[[1,0],[0,k]]); 1 0 P2( k ) := 0 k > E[1,2](k):=matrix(2,2,[[0,1],[1,0]]); 0 E1, 2( k ) := 1 > #Pulsa return Entonces se puede facilmente verificar que S12( k ) y S21( k ) representan deslizamientos cortantes a lo largo de los ejes de las coordenadas x e y, respectivamente, si k>0, P1( k ) y P2( k ) representan compresiones o expansiones a lo largo de los ejes de coordenadas y k si k<0, P1( k ) := 0 1 0 , 0 k 0 -1 = 1 0 0 k 1 0 0 1 y 1 P2( k ) := 0 0 1 = k 0 0 -1 1 0

as que P1( k ) y P2( k ) son la composicin de expansiones (o compresiones) con reflexiones, E12( k ) (o E21( k )) es la reflexin con respecto a la recta y = x. > #Pulsa return Finalmente, sea f una funcin lineal invertible de R2 a R2. Su matriz asociada, A, es una matriz invertible y sabemos que, utilizando transformaciones elementales por filas, se puede reducir A a la matriz identidad I2. Entonces existe una secuencia finita de matrices elementales E1,...,En tal que EnEn 1...E1A = I2. Se sigue que A se puede escribir como producto de transformaciones elementales. Hemos obtenido el siguiente resultado. Teorema: El efecto geomtrico de una funcin lineal invertible de R2 a R2 es el mismo que el de una secuencia de deslizamientos cortantes, compresiones, expansiones y reflexiones. Ejemplo: Describir el efecto geomtrico en R2 de la multiplicacin por la matriz A = 1 3 . 3 11 > #Pulsa return Aplicando sobre las filas de A las transformaciones elementales F2 = F2 3 F1 F2 1 (correspondiente a la matriz S21( 3 )), F2 = (correspondiente a la matriz P2 ) 2 2 y F1 = F1 3 F2 (correspondiente a la matriz S12( 3 ) ) se obtiene que 1 S12( 3 ) P2 S ( 3 )A = I2 . 2 21 Entonces A = S21( 3 )P2( 2 ) S12( 3 ): > S[1,2](3):=matrix(2,2,[[1,3],[0,1]]); 1 3 S1, 2( 3 ) := 0 1 > P[2](2):=matrix(2,2,[[1,0],[0,2]]); 1 0 P2( 2 ) := 0 2 > S[2,1](3):=matrix(2,2,[[1,0],[3,1]]); 1 0 S2, 1( 3 ) := 3 1 > evalm(S[2,1](3)&*(P[2](2)&*S[1,2](3))); 3 1 3 11 El efecto de la multiplicacin por A es equivalente a un deslizamiento cortante de factor 3 en la direccin x, D3x(x,y) = (x+3y,y), seguido por una expansin de factor 2 en la direccin y, E2y (x,y) = (x,2y) y, finalmente, por un deslizamiento cortante de factor 3

en la direccin y, D3y (x,y) =(x,y +3x). > #Pulsa return

Descomposicin QR
En esta seccin vamos a utilizar el comando QRdecomp(A, Q='q', fullspan=false) para determinar la descomposicin QR de una matriz A. Ejemplo: Sea A la matriz > A:=matrix(3,2,[[1,1],[0,1],[1,1]]); 1 1 A := 0 1 1 1 La descomposicin QR que se obtiene con el comando QRdecomp(A, Q='q') es > R:=QRdecomp(A, Q='q',fullspan=false); 2 R := 0 > Q:=evalm(q); 1 2 2 Q := 0 1 2 2 > equal(A,evalm(Q&*R)); 0 1 0 2 1

true Notar que la descomposicin QR obtenida por Maple es la que se obtuvo en las clases tericas para esta misma matriz A. Ejemplo: Sea A una matriz 9x6 obtenida de forma aleatoria: > A:=randmatrix(9,6); -85 79 45 77 A := -50 1 -58 -86 -53 > rank(A); 6 Podemos calcular la descomposicin QR de A: > R:=QRdecomp(A, Q='q',fullspan=false); R := -55 56 -8 66 -12 -47 -90 23 85 -37 49 -93 54 -18 -91 53 -84 49 -35 97 63 57 92 43 -5 99 31 -26 -47 -61 -1 94 19 -50 78 17 50 -59 -62 -61 -62 41 83 88 72

13111 9351 440 2501 37490 , 37490 , 37490 , 37490 , 37490 , 37490 37490 3749 18745 5891 37490 7498

1 291401109 34017068824510 , 34017068824510 , 0 , 37490 34017068824510 44396529 50392166 34017068824510 , 34017068824510 , 3401706882451 17008534412255 1559587 34017068824510 6803413764902 1 25833279225574256541758 , 0 , 0 , 907363799 3132787444577 25833279225574256541758 , 25833279225574256541758

7349973174568 25833279225574256541758 , 12916639612787128270879 2659536242111 25833279225574256541758 25833279225574256541758 1 13462431429707889664002312658614 , 0 , 0 , 0 , 28470696377842 121156451018876732 13462431429707889664002312658614 6731215714853944832001156329307 , 109107598472420797 13462431429707889664002312658614

13462431429707889664002312658614 0 , 0 , 0 , 0 , 4 372246049047360216447575220090135714123 , 472852200418439667 109056836171937081865 372246049047360216447575220090135714123 372246049047360216447575220090135714123 10 0 , 0 , 0 , 0 , 0 , 787235522469705431369 90197531058929879491793207082932886832607959 > Q:=evalm(q); Q :=

17 189503 37490 , 34017068824510 , 7498 6803413764902 6970395293 25833279225574256541758 , 25833279225574256541758

128147047194213 13462431429707889664002312658614 4487477143235963221334104219538 , 4587440146253247782 124082016349120072149191740030045238041 372246049047360216447575220090135714123 , 9051379500282492380647 450987655294649397458966035414664434163039795 90197531058929879491793207082932886832607959 1063671 79 37490 , 34017068824510 , 34017068824510 37490 9156915331 25833279225574256541758 , 12916639612787128270879 598836477506207 13462431429707889664002312658614 6731215714853944832001156329307 , 2084421286776965891 372246049047360216447575220090135714123 372246049047360216447575220090135714123 , 7900037100169846609299 901975310589298794917932070829328868326079590 90197531058929879491793207082932886832607959 9 177983 37490 , 34017068824510 , 7498 6803413764902 43826078055 25833279225574256541758 , 12916639612787128270879

43051407340388 13462431429707889664002312658614 , 232110886719101545931074356183 160168772913528755 12836070656805524705088800692763300487 372246049047360216447575220090135714123 , 229784278471972598199 180395062117859758983586414165865773665215918 90197531058929879491793207082932886832607959

77 1464793 37490 , 34017068824510 , 37490 34017068824510 20185462197 25833279225574256541758 , 25833279225574256541758 , 30146125459217 13462431429707889664002312658614 464221773438203091862148712366

396689262705722492 12836070656805524705088800692763300487 372246049047360216447575220090135714123 ,

5263644232817676197936 450987655294649397458966035414664434163039795 90197531058929879491793207082932886832607959 5 20567 37490 , 34017068824510 , 3401706882451 3749 3307572162 25833279225574256541758 , 12916639612787128270879

158400353741565 13462431429707889664002312658614 2243738571617981610667052109769 , 1263373756986443659 124082016349120072149191740030045238041

372246049047360216447575220090135714123 , 36148638324820172894193 450987655294649397458966035414664434163039795 90197531058929879491793207082932886832607959 1 1775141 37490 , 34017068824510 , 37490 34017068824510 68998665401 25833279225574256541758 , 25833279225574256541758

920087052719279 13462431429707889664002312658614 13462431429707889664002312658614 , 1249453435385344438 372246049047360216447575220090135714123 372246049047360216447575220090135714123 , 33225378700940926488761 901975310589298794917932070829328868326079590

90197531058929879491793207082932886832607959 29 1306831 37490 , 34017068824510 , 18745 17008534412255 3544881149 25833279225574256541758 , 1123186053285837240946 61652771940185 13462431429707889664002312658614 , 585323105639473463652274463418 2609827604919871460 372246049047360216447575220090135714123 372246049047360216447575220090135714123 , 3177598312255917173865 90197531058929879491793207082932886832607959 90197531058929879491793207082932886832607959 43 994908 37490 , 34017068824510 , 18745 17008534412255 72221368533 25833279225574256541758 , 25833279225574256541758

53472469476143 13462431429707889664002312658614 4487477143235963221334104219538 , 447367996360817934 124082016349120072149191740030045238041 372246049047360216447575220090135714123 , 10122898979524586655983 450987655294649397458966035414664434163039795 90197531058929879491793207082932886832607959 53 3881533 37490 , 34017068824510 , 37490 34017068824510 241151909 25833279225574256541758 , 237002561702516115062 9598830131545 13462431429707889664002312658614 , 123508545226677886825709290446 210661935867417050 372246049047360216447575220090135714123 372246049047360216447575220090135714123 , 27695872874717181833859 901975310589298794917932070829328868326079590

90197531058929879491793207082932886832607959 > equal(A,evalm(Q&*R)); true > #Pulsa return

Solucin de sistemas de ecuaciones lineales por mnimos cuadrados


Nota: Este apartado se incluye como motivacin para el alumno interesado al estudio de ms aplicaciones de los conceptos presentados en las clases tericas. En lo que sigue se consideran slo espacios vectoriales eucldeos del tipo Rn (1 n), con la estructura usual. En algunas aplicaciones del lgebra lineal es necesario hallar una "solucin" de un sistema de ecuaciones lineales AX=b incompatible. Este es el caso cuando se estn analizando datos experimentales o estadsticos que son el resultado de varias repeticiones de un mismo experimento que depende de los valores de unos parmetros. En general, los datos obtenidos contienen un error (o rudo). Si el modelo matemtico que se quiere usar es lineal, a menudo se tienen una matriz A de dimensin mxn (el modelo), una matriz columna b de dimensin mx1 (los datos reales del experimento) y se trata de encontrar una matriz columna X de dimensin nx1 (cuyos coeficientes son los parmetros del problema) tal que AX sea una buena aproximacin de b, es decir, tal que la distancia ||AX-b|| sea mnima. > #Pulsa return Si m=n y la matriz A es invertible, el sistema AX=b es compatible determinado y X= A b. Si m>n, es decir, si el nmero m de relaciones (lineales) observadas experimentalmente entre los parmetros del problema es mayor que el nmero n de parmetros, el sistema AX=b que se obtiene es, en general, incompatible. Por tanto tenemos que buscar una matriz X tal que la magnitud del vector que representa el error e=(e1,e2,...,em) , ||e|| = ||AX-b||, sea mnima. Si ||e|| es mnima, su cuadrado, e1 +e2 +...+em , tambin tiene que ser mnimo. Por esta razn el mtodo que vamos a presentar se denomina de mnimos cuadrados. Si escribimos el producto AX=b en trminos de los vectores columna de A y de las coordenadas de X, obtenemos la expresin x1AI +x2A2+ ... +xnAn = b. Entonces, AX=b si y slo si la matriz b se escribe como combinacin lineal de las columnas de A, es decir, si y slo si b pertenece al subespacio columna de A, Col(A)= L(AI, A2, ..., An). > #Pulsa return En el caso de un sistema incompatible, b no pertenece al subespacio Col(A) y, por las
2 2 2 ( -1 )

propiedades de aproximacin de la proyeccin ortogonal de un vector sobre un subespacio, para minimizar la cantidad ||AX-b|| tenemos que hallar X tal que AX sea la proyeccin ortogonal de b, prort(b), sobre el subespacio Col(A). Si el sistema AX =prort(b) es compatible indeterminado, existen infinitas soluciones X. Estas soluciones son las soluciones por mnimos cuadrados del sistema AX=b. Se sigue que, si X es una solucin por mnimos cuadrados de AX = b, AX =prort(b) y la matriz AX -b=prort(b)-b es ortogonal al espacio columna Col(A). > #Pulsa return Ejemplo (adjuste de lneas rectas a datos): Supongamos que los datos experimentales se puedan representar por medios de puntos del plano R2: (x1, y1), (x2, y2), ..., (xm, ym). Un mdelo linear muy simple consiste en determinar la recta r: y=ax+c que mejor aproxima (interpola) estos puntos. Por ejemplo, sean (x1, y1) = (2 ,8), (x2, y2) = (3,10), (x3, y3) = (-1,-3), (x4, y4) = (1,5). > restart:with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> with(plots):PLOT(POINTS([2,8],[3,10],[-1,-3],[1,5],SYMB OL(CIRCLE)),SCALING(CONSTRAINED));


Warning, the name changecoords has been redefined

> y:=x->a*x+c; y := x a x + c Si se sostituyen las coordenadas de los cuatro puntos en la ecuacin de la recta r, se obtiene un sistema incompatible AX = b (Maple no proporciona la solucin): > ec1:=a*2+c=8;ec2:=a*3+c=10;ec3:=a*(-1)+c=-3;ec4:=a*(1)+ c=5; ec1 := 2 a + c = 8 ec2 := 3 a + c = 10 ec3 := a + c = -3 ec4 := a + c = 5 > A:=genmatrix([ec1,ec2,ec3,ec4],[a,c]); 2 3 A := -1 1 > X:=matrix(2,1,[a,c]); a X := c > b:=matrix(4,1,[8,10,-3,5]); 8 10 b := -3 5 > linsolve(A,b); El valor de X tal que ||AX-b|| sea mnima es tal que AX es igual a la proyeccin ortogonal de b sobre el subespacio columna 2 1 3 1 Col(A) = L( , ). 5 1 1 1 Aplicando el mtodo de Gram-Schmidt obtenemos una base ortogonal B1 de Col(A): > B1:=GramSchmidt([col(A,1),col(A,2)]); 4 2 1 B1 := [ 2, 3, -1, 1 ], , 0, , 3 3 3 y, normalizando, obtenemos una base ortonormal B de Col(A): > B:=[B1[1]/norm(B1[1],2),B1[2]/norm(B1[2],2)]; 1 1 1 4 2 B := [ 2, 3, -1, 1 ] 15 , , 0, , 21 15 7 3 3 3 La proyeccin ortogonal de b en Col(A) es: > prort:=dotprod([8,10,-3,5],B1[1]/norm(B1[1],2))*B1[1]/n orm(B1[1],2)+dotprod([8,10,-3,5],B1[2]/norm(B1[2],2))*B 1[2]/norm(B1[2],2); 262 54 -86 146 prort := , , , 35 5 35 35 1 1 1 1

y X=(a,c) es: > X:=linsolve(A,prort); a:=X[1];c:=X[2]; 116 6 X := , 35 7 a := 116 35

6 7 La recta r que mejor aproxima los datos experimentales es > y:=a*x+c; c := 116 6 x+ 35 7 > Puntos:=PLOT(POINTS([2,8],[3,10],[-1,-3],[1,5],SYMBOL(C IRCLE)),SCALING(CONSTRAINED)):r:=plot(a*x+c,x=-5..5):di splay(Puntos,r); y :=

Como vimos, el comando leastsqrt(A,b) calcula la solucin de mnimos cuadrados de sistema AX = b: > XMaple:=leastsqrs(A,col(b,1)); 116 6 XMaple := , 35 7 Como se puede ver, nuestra solucin coincide con la solucin hallada por el comando leastsqrs. > #Pulsa return

Con un poco ms de teora, la que viene a continuacin, es posible hallar un mtodo alternativo para determinar soluciones de mnimos cuadrados de un sistema AX = b, que tambin se puede emplear en combinacin con la factorizacin QR de una matriz. Al mismo tiempo, encontraremos la forma general de escribir la matriz asociada a la funcin de proyeccin ortogonal sobre el subespacio Col(A) en trminos de la matriz A. Teorema Si A es una matriz real mxn, el ncleo de A, Ker(A), es el subespacio ortogonal del subespacio de Rn generado por las filas de A, Filas(A) = L(A1,A2, ..., Am). Demostracin: Un vector u es tal que Au=0 si y slo si Aiu=0 para todo i=1,...,m y Ai u es el producto escalar de Ai por u en Rn. Corolario Si A es una matriz real mxn de rango n, la matriz cuadrada AtA de dimensin n es invertible. Demostracin: AtA es invertible si y slo si el sistema homogneo AtAX=0 es compatible determinado. Si X es tal que AtAX=At(AX)=0 , AX es un elemento del ncleo de At, Ker(At), que es, por el teorema anterior, el subespacio ortogonal al espacio Filas(At)=Col(A). Entonces AX pertenece a Col(A) y a su ortogonal. Se sigue que AX=0. Siendo el rango de A igual a n, A es inyectiva y X=0. Por tanto la nica solucin del sistema AtAX=0 es X=0. Ejemplo Sea A la matriz del ejemplo anterior > A := matrix([[2, 1], [3, 1], [-1, 1], [1, 1]]); 2 3 A := -1 1 > rank(A); 2 La matriz A tiene rango igual al nmero de sus columnas y, por el corolario anterior, la matriz cuadrada AtA de dimensin 2 tiene que ser invertible: > det(transpose(A)&*A); 35 > inverse(transpose(A)&*A); 4 35 -1 7 -1 7 3 7 1 1 1 1

Teorema Si A es una matriz mxn, las soluciones por mnimos cuadrados del sistema (posiblemente incompatible) AX = b coinciden con las soluciones del sistema compatible AtAX =Atb.

Al sistema AtAX =Atb se le denomina sistema normal asociado al sistema AX = b. Demostracin: Si X es una solucin por mnimos cuadrados del sistema AX = b, entonces AX -b es ortogonal a Col(A)= Filas(At). Por tanto At (AX -b) = AtAX -Atb = 0. Si X es una solucin del sistema AtAX =Atb, entonces At (AX -b) = 0 y AX -b es un elemento de Ker(At), que es el ortogonal de Filas(At)=Col(A). Se sigue que b=AX -(AX -b), con AX en Col(A) y AX -b en el ortogonal de Col(A). En conclusin la proyeccin ortogonal de b sobre Col(A) es AX, es decir, X es una solucin por mnimos cuadrados de AX = b. Ya que una tal solucin existe, el sistema AtAX =Atb es compatible. Ejemplo: Vamos a verificar la validez del ltimo teorema en nuestro ejemplo anterior: > XMaple:=leastsqrs(A,col(b,1));Xnorm:=linsolve(transpose (A)&*A,evalm(transpose(A)&*b)); 116 6 XMaple := , 35 7 116 35 Xnorm := 6 7 Si ahora A es una matriz real mxn de rango n, sabemos que la matriz AtA es invertible y el sistema normal asociado al sistema AX = b tiene una nica solucin. Por tanto hay una nica solucin por mnimos cuadrados. Teorema Si A es una matriz real mxn de rango n, entonces la matriz asociada a la funcin lineal proyeccin ortogonal sobre Col(A) es A( At A )
( -1 )

A t.

Ejemplo: Ahora tenemos una nueva forma de hallar la proyeccin ortogonal de b sobre el subespacio columna 2 1 3 1 Col(A) = L( , ): 5 1 1 1 > evalm(A&*inverse(transpose(A)&*A)&*transpose(A)&*b);

262 35 54 5 -86 35 146 35 y coincide con el vector hallado con el mtodo anterior: > prort; 262 54 -86 146 , , , 35 5 35 35 Corolario Si A es una matriz real mxn de rango n, entonces la nica solucin X por mnimos cuadrados del sistema AX = b es la solucin del sistema AX = A( At A ) En particular, X = ( At A )
( -1 ) ( -1 )

A tb.

Atb.

> X:=linsolve(A,evalm(A&*inverse(transpose(A)&*A)&*transp ose(A)&*b)); 116 35 X := 6 7 > equal(X,evalm(inverse(transpose(A)&*A)&*transpose(A)&*b )); true Como consecuencia del corolario anterior, si A es una matriz real mxn de rango n y A=QR es la descomposicin QR de A, se sigue que QtQ = Im (ya que la matriz Q tiene columnas ortonormales), At A = { QR }t QR= Rt QtQR = RtR X = ( At A )
( -1 )

y
( -1 )

Atb= ( Rt R )

( -1 )

{ QR }t b = R X= R
( -1 )

( -1 )

( Rt )

( -1 )

Rt Qt b = R

Qt b, es decir,

Q t b.

Ejemplo: Si ahora calculamos nuestra solucin por mnimos cuadrados X por medio de la ltima identidad, se obtiene el valor esperado: > R:=QRdecomp(A, Q='q',fullspan=false);

15 R := 0 > Q:=evalm(q);

1 15 3 1 21 3

2 1 15 21 15 21 1 15 0 5 Q := 1 4 15 15 21 21 1 2 15 21 21 15 > X:=evalm(inverse(R)&*transpose(Q)&*b); 116 35 X := 6 7 > #fin

Test resuelto
1. El ngulo formado por los vectores (5,0,-1,7) y (-,1, 2 ,48) es : 1 ( 5 + 338 2 ) 79 a) arccos 2 79 + 2307 1 ( 5 + 337 2 ) 76 b) arccos 2 76 + 2307 1 ( 5 + 336 2 ) 75 c) arccos 2 75 + 2307 > restart;with(linalg):

Warning, the protected names norm and trace have been redefined and unprotected

> v1:=vector(4,[5,0,-1,7]);v2:=vector(4,[-Pi,1,sqrt(2),48]); angle(v1,v2); v1 := [ 5, 0, -1, 7 ] v2 := [ , 1, 2 , 48 ] 1 ( 5 + 336 2 ) 75 arccos 75 2 + 2307

La respuesta correcta es la c). 2. La proyeccin ortogonal del vector (46, 2 , 1, 576) sobre el subespacio H=L({( 4 1, 0, 38, 156),(, 2, , 89)}) es: 5 a) [ 19.86540699, 12.59404102, 8.181493441, 573.3412682 ] b) [ 19.84933914, 12.58171930, 8.301473621, 573.3057350 ] c) [ 19.83327128, 12.56939756, 8.421453799, 573.2702016 ] > A:=matrix(4,2,[[1,Pi],[0,-2],[38,4/5],[156,89]]);b:=vector (4,[46,sqrt(2),1,-576]);x:=leastsqrs(A,b); 1 0 A := 38 156
2

-2 4 5 89

b := [ 46, 2 , 1, -576 ] 224545 + 1471998 5 2 4490290 69572 2 x := , 10 2 644500 + 268009937 695720 3189245 181232606 128905 2 2 644500 + 268009937 695720 > evalf(evalm(A&*x)); 10 [ -19.86540699, 12.59404102, -8.181493441, -573.3412682 ] La respuesta correcta es la a). 3. La base ortogonal de R3 con el producto escalar usual obtenida mediante la aplicacin del mtodo de Gram-Schmidt a la base de R3 {(1, 2 , 24), (6710), (19981)} es : a) { [ 1., 1.414213562, 24. ], [ 66.88672576, 1.160193970, 2.718581822 ], [ .5860905389, 39.26806576, 2.338313404 ] } b) B = { [ 1., 1.414213562, 25. ], [ 66.89556403, 1.147694759, 2.610899141 ], [ .5514989561, 36.95043015, 2.112291937 ] } c) { [ 1., 1.414213562, 26. ], [ 66.90340827, 1.136601338, 2.511385047 ], [ .5195460363, 34.80958473, 1.913374342 ] } > B1:= basis([vector([1,sqrt(2),24]),vector([-67,1,0]),vector([0, 19,981])]); B1 := [ [ 1, 2 , 24 ], [ -67, 1, 0 ], [ 0, 19, 981 ] ] > B2:=evalf(GramSchmidt(B1)); B2 := [ [ 1., 1.414213562, 24. ], [ -66.88672576, 1.160193970, 2.718581822 ], [ -.5860905389, -39.26806576, 2.338313404 ] ] La respuesta correcta es la a). 4. Definir utilizando el comando "proc" la funcin lineal f : R3 --> R2, f(x,y,z) = (-2y , x+y-z ) .

Sea v = ( t-s , k-r , s-k-2t ), el vector f(v) es : a) f(v) = (2 k + 2 r, 3 t 2 s + 2 k r) b) f(v) = ( 2 k + 2 r, 3 t 2 r + 2 k s) c) f(v) = (2 k + 2 r, 3 t + k r s ) > f:= > proc(x) > local y; > y:=evalm(x); > vector([-2*y[2],y[1]+y[2]-y[3]]); > end; f := proc(x) local y; y := evalm( x ) ; vector( [ 2y[ 2 ], y[ 1 ] + y[ 2 ] y[ 3 ] ] ) end proc > v:=vector(3,[ t-s , k-r , s-k-2*t]);f(v); v := [ t s, k r, s k 2 t ] [ 2 k + 2 r , 3 t 2 s + 2 k r ] La respuesta correcta es la a). 5. La matriz asociada (respecto de las bases cannicas) a la funcin lineal g: R4 --> R5, g(x, y, z, w) = ( 4y - 5w, 2x-13z, 3w , 2y-w, 3x) , es : 0 5 3 0 0 0 0 4 2 0 0 0 3 0 2 0 -1 2 0 13 0 0 4 0 2 0 0 3 a) 0 0 2 0 b) c) 0 0 0 0 3 0 0 0 4 0 5 0 2 0 -1 0 5 0 -1 0 0 0 2 0 0 0 3 0 > restart;with(linalg): > g:= proc(x) > local y; > y:=evalm(x); > vector([4*y[2]-5*y[4],2*y[1]-13*y[3],3*y[4],2*y[2]-y[4],3* y[1]]); > end;
Warning, the protected names norm and trace have been redefined and unprotected

g := proc(x) local y; y := evalm( x ) ; vector( [ 4y[ 2 ] 5y[ 4 ], 2y[ 1 ] 13y[ 3 ], 3y[ 4 ], 2y[ 2 ] y[ 4 ], 3y[ 1 ] ] ) end proc > genmatrix([g(x)[1],g(x)[2],g(x)[3],g(x)[4],g(x)[5]],[x[1], x[2],x[3],x[4]]);

0 2 0 0 3 La respuesta correcta es la c).

4 0 0 2 0

0 -13 0 0 0

-5 0 3 -1 0

6. Sea f : R4 --> R3 la funcin lineal tal que f(1,0,0,0) = (0, 0, 2), f(0,1,0,0) = (5, -1, 98), f(0,0,1,0) = (27, 0, 31), f(0,0,0,1) = ( 1, 0, 43). Se verifica que : a) f(1,0,3,4) = (85,1,17) b) f(2,-1,3,4) = (79,1,-15) c) f(2,-1,3,4) = (80, 1, 15) > A:= matrix(3,4,[[0,5,27,1],[0,-1,0,0],[2,98,-31,43]]); 5 27 1 0 0 0 A := 0 -1 2 98 -31 43 > x:= matrix(4,1,[[2],[-1],[3],[4]]);evalm(A&*x); x := 2 -1 3 4

80 1 -15 La respuesta correcta es la c). 7. Sea M la matriz asociada (respecto de las bases cannicas) a la funcin lineal f : R2 --> R2 definida por la composicin de una reflexin respecto de la recta y=x, seguido por un deslizamiento cortante en la direccin y con factor 3, seguido por una expansin en la direccin x con factor 4. Se verifica que M es igual a la matriz 0 4 12 1 0 1 a) b) c) 1 3 4 0 4 3 > M = matrix([[0, 4], [1, 3]]); 0 4 M= 1 3 > Ref:=matrix(2,2,[[0,1],[1,0]]); 0 1 Ref := 1 0 > D3y:=matrix(2,2,[[1,0],[3,1]]); 1 0 D3y := 3 1 > E4x:=matrix(2,2,[[4,0],[0,1]]);

4 0 E4x := 0 1 > M:=evalm(E4x&*evalm(D3y&*Ref)); 0 M := 1 La respuesta correcta es la a). 8. Sea h : R4 --> R6 la funcin lineal h(x,y,z,w) = ( 0, w-x, 2 y+5w, 3z-x/2+y, 0, 0). Sea N la nulidad (la dimensin del ncleo) y R el rango (la dimensin del imagen) de h . Se verifica que a) N = 0, R = 3 b) N = 1, R = 3 c) N =2, R = 2 > restart;with(linalg): > h:= proc(x) > local y; > y:=evalm(x); > vector([0,y[4]-y[1],sqrt(2)*y[2]+5*y[4],3*y[3]-y[1]/2+y[2] ,0,0]); > end;
Warning, the protected names norm and trace have been redefined and unprotected

4 3

h := proc(x) local y; y := evalm( x ) ; vector( [ 0, y[ 4 ] y[ 1 ], sqrt( 2 )y[ 2 ] + 5y[ 4 ], 3y[ 3 ] 1 / 2y[ 1 ] + y[ 2 ], 0, 0 ] ) end proc > A:= genmatrix([h(x)[1],h(x)[2],h(x)[3],h(x)[4],h(x)[5],h(x)[6] ],[x[1],x[2],x[3],x[4]]); 0 -1 0 A := -1 2 0 0 > kernel(A);rank(A); 1 1 1 1 { 2 , 1, 2 , 2 } 30 3 5 5 3 La respuesta correcta es la b). 9. En R2, el efecto geomtrico de la multiplicacin por la matriz 0 0 2 1 0 0 0 0 0 3 0 0 0 1 5 0 0 0

-1 3

0 1

es a) una reflexin respecto del eje y, seguida por una compresin con factor 1/2 en la direccin x b) una reflexin respecto del eje y, seguida por un deslizamento cortante en la direccin y con factor 3 c) ninguna de las anteriores > Refy:=matrix(2,2,[[-1,0],[0,1]]); -1 0 Refy := 0 1 > Ckx:=matrix(2,2,[[1/2,0],[0,1]]); 1 Ckx := 2 0 > evalm(Ckx&*Refy); -1 0 2 1 0 > D3y:=matrix(2,2,[[1,0],[3,1]]); 1 D3y := 3 > evalm(D3y&*Refy); -1 -3 La respuesta correcta es la b) 10. Sean P1( x ) el espacio vectorial de los polinomios reales (en la variable x) de grado menor o igual que 1 y P2( x ) el espacio vectorial de los polinomios reales (en la variable x) de grado menor o igual que 2. Sean B1 = ( 1, x ) la base ordenada cannica de P1( x ) y B2 = ( 1, x, x2 ) la de P2( x ). La matriz asociada a la funcin lineal f: P2( x ) --> P1( x ) , f(ax2+bx+c) = (a-2*b)x+4*c, respecto de las bases B1 y B2 es 2 1 0 a) 0 0 4 4 b) 0 0 2 0 1 0 1 0 1 0 1

c) Ninguna de las anteriores > restart;with(linalg): > f:= proc(x) > local y;

> y:=evalm(x); > vector([4*y[1],y[3]-2*y[2]]); > end;


Warning, the protected names norm and trace have been redefined and unprotected

f := proc(x) local y; y := evalm( x ) ; vector( [ 4y[ 1 ], y[ 3 ] 2y[ 2 ] ] ) end proc > x:=vector(3,[c,b,a]);f(x); x := [ c, b, a ] [ 4 c, a 2 b ] > A:= genmatrix([f(x)[1],f(x)[2]],[x[1],x[2],x[3]]); 4 0 0 A := 0 -2 1 La respuesta correcta es la b) > #fin

Prctica 5: Cdigos lineales Prctica 5

Cdigos Lineales
Por: A.Bujosa(*) y R.Criado(**) (*) Departamento de Matemtica Ap. a las Tecnologas de la Informacin (U.P.M.) (**) E.S.C.E.T., URJC ltima actualizacin: A.Gallinari, E.S.C.E.T., URJC, 2003

Objetivos de la sesin
Presentar un ejemplo prctico de transmisin de informacin a travs de la simulacin de un canal binario simtrico con ruido, para cuya simulacin se han empleado los algoritmos y mtodos de codificacin, decodificacin y deteccin y correccin de errores vistos en las clases tericas. Recordar algunas de las funciones de la librera linalg con las que hemos trabajado en las prcticas anteriores e introducir otras nuevas necesarias para el desarrollo de la prctica. Afianzar en el alumno la comprensin de la base terica del mtodo de Gauss y su aplicacin a la teora de cdigos lineales mediante el uso de Maple, utilizando las ecuaciones paramtricas e implcitas de espacios vectoriales sobre el cuerpo Z2. > #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


Nota: NO SE DEBEN EMPLEAR MS DE 15 MINUTOS EN REPASAR ESTOS COMANDOS Adems de recordar los siguientes comandos de la librera linalg que ya utilizamos en la prctica anterior stack augment addcol addrow swapcol swaprow submatrix row equal rank transpose col delcols delrows pivot mulrow mulcol gausselim gaussjord evalm Nullspace

vamos a introducir los comandos de la aritmtica modular mod map

necesarios para el desarrollo de esta prctica. Los comandos con los que ya trabajamos en la prctica anterior los recordaremos a travs de algunos ejemplos. Descripcin de los comandos mencionados: > with(linalg): > A1:=matrix(3,3,[alpha,4,5,0,0,-1,b,8,9]); 4 5 A1 := 0 0 -1 b 8 9 Para acceder al elemento (i,j) de una matriz C hay que escribir C [i,j]. Por ejemplo: > c:=A1[3,1]; c := b

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(A1,3); r2 := [ 0, 0, -1 ] c3 := [ 5, -1, 9 ] La funcin stackmatrix une dos matrices verticalmente: > stackmatrix(r2,c3); 0 0 -1 5 -1 9 La funcin augment une dos matrices horizontalmente: > augment(r2,c3); 0 5 0 -1 -1 9 La funcin delcols(A,r..s) (delcols(A,r..s)) eliminan las columnas (respectivamente filas) r,r+1,...,s de la matriz A > delrows(stackmatrix(r2,c3),2..2); [0 0 -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. Nota: Segn vimos, la accin del comando "evalm" es similar a la del comando "eval" pero para matrices. > A:=evalm(multiply(stackmatrix(r2,c3),augment(r2,c3))); 1 -9 A := -9 107 > addcol(A,1,2,9); 0 1 -9 26 > addrow(A,2,1,1/9); 26 0 9 -9 107 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(A,2,-1/9);mulrow(A,1,1/9); 1 -9 1 9 -9 La funcin transpose traspone una matriz. 1 -107 9 -1 107

> C1:=transpose(A); 1 -9 C1 := -9 107 La funcin rank(A) determina el rango de una matriz. > r1:=rank(A); r1 := 2 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. > C1:=augment(A1,A1); C1 := 0 b > swapcol(A1,1,2); 4 0 8 > swaprow(A1,3,1); b 8 9 0 0 -1 4 5 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. > evalm(A); P1:=pivot(A,1,1); -9 1 -9 107 1 -9 P1 := 0 26 > P2:=pivot(P1,2,2); 0 1 P2 := 0 26 Recordemos dos comandos ya introducidos en las prcticas anteriores: > gausselim(A); 1 0 > gaussjord(A); 1 0 0 1 El comando mod permite operar con enteros mdulo m: > 27 mod 7; -9 26 0 b 5 -1 9 4 0 8 5 -1 9 0 b 4 0 8 5 -1 9

6 > 5*3 mod 7; 1 El comando map permite aplicar un procedimiento a cada argumento de una expresin: > map(f, {a,b}); { [ 4 b1, b3 2 b2 ], [ 4 a1, a3 2 a2 ] } > map(x -> x^2, {2,3,4}); { 4, 9, 16 } > map(proc(x) x^2 end, [1,2,3,4]); [ 1, 4, 9, 16 ] > G:=matrix([[1,0,1],[0,1,0],[1,1,1]]); 1 0 G := 0 1 1 1 > H=map(x->x mod 2,evalm(G+G)); 1 0 1

0 0 0 H = 0 0 0 0 0 0 > K:=matrix([[1,1,1],[1,1,0],[1,1,1]]); 1 K := 1 1 > map(x->x mod 2,evalm(G+K)); 0 1 0 > #Pulsa return 1 0 0 1 1 1 0 0 0 1 0 1

Leccin
> #Pulsa return

Mtodo de Gauss en Z2-espacios vectoriales


Vamos a manipular secuencias de ceros y unos. Para ello utilizaremos la suma y producto ya definidos en el cuerpo Z2={0,1} y trabajaremos sobre Z2-espacios vectoriales, siendo vlidos, por consiguiente, todos los resultados vistos para espacios vectoriales generales. En particular los relativos al clculo matricial. Para definir la suma y el producto en Z2-espacios vectoriales es preciso utilizar la funcin map.

Suma de matrices
> G:=matrix([[1,0,1],[0,1,0],[1,1,1]]):

H:=matrix([[1,1,1],[1,0,1],[1,0,0]]): evalm(G)+evalm(H)=map(x->x mod 2,evalm(G+H)); 1 0 1 0 1 1 1 1 0 + 1 1 1 1 0 0 1 0 1 = 1 0 0 1 1 1 0 1 1

Producto de matrices
> G:=matrix([[1,0,1],[0,1,0],[1,1,1]]): H:=matrix([[1,1,1],[1,0,1],[1,0,0]]): evalm(G)&*evalm(H)=map(x->x mod 2,evalm(G&*H)); 1 0 1 0 1 1 1 1 0 &* 1 1 1 1 0 0 1 0 1 = 1 0 1 1 0 1 1 1 0

Inversin de matrices
> H:=matrix([[1,1,1],[1,0,1],[1,0,0]]): evalm(H)^(`-1`)=Inverse(H) mod 2; 1 1 1 1 0 0 1 0 1 = 1 0 0
-1

0 1 1

1 0 1

y efectvamente > H:=matrix([[1,1,1],[1,0,1],[1,0,0]]): G:=Inverse(H) mod 2: evalm(H)&*evalm(G)=map(x->x mod 2,evalm(multiply(H,G))); 1 1 1 1 0 0 1 0 1 &* 1 0 0 0 1 1 1 1 0 = 0 1 0 0 1 0 0 0 1

Mtodo de Gauss-Jordan para la inversin de matrices


Vamos a usar el mtodo visto en las clases tericas para hallar la inversa de una matriz no singular mediante transformaciones elementales por filas: > H:=matrix([[1,1,1],[1,0,1],[1,0,0]]): Id:=matrix([[1,0,0],[0,1,0],[0,0,1]]): G:=linalg[augment](H,Id): gaussjord(evalm(G))= Gaussjord(G) mod 2; 1 0 0 0 0 1 1 0 0 0 0 1 0 1 0 1 -1 0 = 0 1 0 1 1 0 0 0 1 0 1 -1 0 0 1 0 1 1 Nota: Para el mtodo de eliminacin gaussiana mdulo 2 se pueden utilizar los siguientes comandos: > H:=matrix([[0,0,0],[1,0,1],[1,0,0]]); gausselim(evalm(H))= Gausselim(H) mod 2;

0 H := 1 1 1 0 0 0 0 0

0 1 0 1 1 0 1 -1 = 0 0 1 0 0 0 0 0 0 0

Obtencin del ncleo


Dada una matriz H, un sistema fundamental de soluciones del sistema homogneo H*X=0 se obtiene hallando una base del ncleo de la funcin lineal definida por la matriz H, en trminos de coordenadas cannicas: > H:=matrix([[1,1,0,0,1],[1,1,1,1,1],[0,0,1,1,0]]); Sol:=Nullspace(H) mod 2; 1 1 0 0 1 H := 1 1 1 1 1 0 0 1 1 0 Sol := { [ 0, 0, 1, 1, 0 ], [ 1, 0, 0, 0, 1 ], [ 1, 1, 0, 0, 0 ] } Si queremos escribir el resultado obtenido en forma de vectores columna: > linalg[transpose](matrix(convert(Sol,list))); 1 0 0 0 1 > #Pulsa return 0 0 1 1 0 1 1 0 0 0

Transmisin de informacin a travs de un canal con rudo


El problema que vamos a tratar consiste en transmitir informacin a travs de un canal con ruido. Para ello vamos a construir un simulador que permita representar esa situacin. Consideraremos las siguientes simplificaciones: El canal es binario: los mensajes que se transmiten son cadenas de 0 y 1. El canal es simtrico: la probabilidad p de cambiar un 0 por un 1 en la transmisin es la misma que la de cambiar un 1 por un 0. El canal no tiene memoria: la probabilidad p de cambiar un 0 por un 1 no depende de los smbolos previamente enviados. No hay errores de sincronizacin: el nmero de smbolos recibidos es igual al nmero de smbolos enviados. > #Pulsa return Para simular este canal necesitamos:

Un conversor binario
Puesto que nicamente podemos transmitir cadenas de ceros y unos, necesitamos un procedimiento que convierta mensajes (es decir cadenas de caracteres) en secuencias de ceros y unos. En la prctica, la tabla de caracteres ASCII es una estandarizacin de tal procedimiento, del que sin embargo no disponemos en el entorno Maple. Por tanto,vamos a implementar un conversor simplificado, capaz de tratar mensajes constituidos nicamente por las letras minsculas 'a'-'z' y el espacio ' ' como separador. Se trata de un alfabeto de 27 smbolos, que se pueden convertir en vectores de [ Z2 ] , siendo |[ Z2 ] | = 25= 32. > binario := proc(st) local ll,ii,jj,tabla; tabla:=table([ 'a'=[0,0,0,0,1],'b'=[0,0,0,1,0],'c'=[0,0,0,1,1], 'd'=[0,0,1,0,0],'e'=[0,0,1,0,1],'f'= [0,0,1,1,0], 'g'=[0,0,1,1,1],'h'=[0,1,0,0,0],'i' =[0,1,0,0,1], 'j'=[0,1,0,1,0],'k'=[0,1,0,1,1],'l'= [0,1,1,0,0], 'm'=[0,1,1,0,1],'n'=[0,1,1,1,0],'o'=[0,1,1,1,1], 'p'=[1,0,0,0,0],'q'=[1,0,0,0,1],'r'=[1,0,0,1,0], 's'=[1,0,0,1,1],'t'=[1,0,1,0,0],'u'=[1,0,1,0,1], 'v'=[1,0,1,1,0],'w'=[1,0,1,1,1],'x'=[1,1,0,0,0], 'y'=[1,1,0,0,1],'z'=[1,1,0,1,0],'` `'=[0,0,0,0,0] ]); ll:=length(st); if ll= 0 then RETURN([]) fi; RETURN( [seq(seq(tabla[substring(st,ii..ii)][jj],jj=1..5),ii= 1..ll)]); end: Ahora podemos convertir el mensaje 'viva la urjc' : > mensaje:=binario(`viva la urjc`); mensaje := [ 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1 ] El conversor no nos sirve de nada si no podemos invertir el proceso, es decir, si no podemos recuperar el mensaje original a partir de la secuencia de ceros y unos: > alfabetico:=proc(mt) local ll,nn,ss,ii,i,albat; albat:=table([ [0,0,0,0,1]="a",[0,0,0,1,0]="b",[0,0,0,1,1]="c",
5 5

[0,0,1,0,0]="d",[0,0,1,0,1]="e",[0,0,1,1,0]="f", [0,0,1,1,1]="g",[0,1,0,0,0]="h",[0,1,0,0,1]="i", [0,1,0,1,0]="j",[0,1,0,1,1]="k",[0,1,1,0,0]="l", [0,1,1,0,1]="m",[0,1,1,1,0]="n",[0,1,1,1,1]="o", [1,0,0,0,0]="p",[1,0,0,0,1]="q",[1,0,0,1,0]="r", [1,0,0,1,1]="s",[1,0,1,0,0]="t",[1,0,1,0,1]="u", [1,0,1,1,0]="v",[1,0,1,1,1]="w",[1,1,0,0,0]="x", [1,1,0,0,1]="y",[1,1,0,1,0]="z",[0,0,0,0,0]=" "] ); ll:=floor(nops(mt)/5); nn:=` `; for ii from 0 to ll-1 do ss:=albat[[seq(mt[i+ii*5],i=1..5)]]; if(not type(ss,string)) then ss:=`@` fi; nn:=cat(nn,ss); od; RETURN(eval(nn)); end: Ahora podemos recuperar el mensaje original: > alfabetico(mensaje); viva la urjc > #Pulsa return

Un generador de ruido
Vamos a simular el ruido sumando 1 en binario. Ya que: > 0+1 mod 2; 1 y > 1+1 mod 2; 0 nuestro generador de ruido nos proporcionar 0 si no se ha producido ruido y 1 si se ha producido: > ruido:=proc(p) if(rand()<999999999999*(1-p)) then RETURN(0) fi; RETURN(1); end: Por ejemplo: > [seq( ruido(0.2), i=0..10 )]; [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] Ahora, con este generador podemos simular un canal con ruido: > canal:=proc(mt,p) local i; RETURN([seq(mt[i]+ruido(p) mod 2,i=1..nops(mt))]) end:

As, por ejemplo: > canal([1,1,0,1,0],0.2); [ 1, 1, 0, 1, 1 ] As, al transmitir el mensaje 'viva la urjc' por un canal cuya probabilidad de error p sea 0.2, se recibe: > transmito:=binario(`viva la urjc`): recibo:=canal(transmito,0.2): alfabetico(recibo); eira @yaux s En este punto hacer pruebas variando la probabilidad de error p (en el caso anterior 0.2) y comprobar que par valores de p prximos a 1 el mensaje se distorsiona cada vez ms y que para valores de p prximos a 0 el mensaje es cada vez ms parecido al original. La estrategia para que el receptor pueda recuperar la informacin consiste, segn vimos en las clases tericas, en que el emisor enve informacin redundante de manera que el receptor, al recibir la transmisin, pueda detectar y corregir los errores generados en la misma. > #Pulsa return

Cdigos lineales Las matrices generadoras


Si G es una matriz tal que sus columnas constituyen un sistema libre, la funcin lineal LG definida por es tal que Ker(LG)={0}, por lo que es inyectiva e Im( LG) = C. Por tanto G es la matriz de las ecuaciones paramtricas de C. Los cdigos lineales utilizan este hecho para introducir informacin redundante. Es decir si X es informacin, GX es informacin redundante. Pero Cmo invertir este proceso?, es decir, Cmo obtener X a partir de GX? o, lo que es lo mismo, Cmo obtener la informacin original a partir de la informacin recibida? Veamos un ejemplo: > G:=matrix([[1,0,1],[0,1,0],[1,1,1],[1,1,0],[0,0,1]]): X:=matrix([[a],[b],[c]]): evalm(G)&*evalm(X)=map(x->x mod 2,evalm(G&*X)); a + b 1 0 1 0 1 0 a b 1 1 1 &* b = a 1 1 0 b a + b b 0 0 1 La idea es buscar una matriz P tal que PG 'casi' sea la matriz identidad. Para ello

utilizaremos el mtodo de Gauss- Jordan: > Id:=array(identity, 1..5,1..5): J:=linalg[augment](G,Id): S:=Gaussjord(J) mod 2: P:=linalg[submatrix](S, 1..5,4..8): evalm(P)&*evalm(G)=map(x->x mod 2,evalm(P&*G)); 1 0 1 1 0 0 0 1 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 &* 1 1 1 = 0 0 1 1 1 0 0 0 0 1 1 0 1 1 0 0 1 0 0 0 0 0 1 1 1 Si ahora multiplicamos la matriz P por GX obtendremos > evalm(P)&*evalm(G)&*evalm(X)=map(x->x mod 2,evalm(P&*G&*X)); 0 1 0 1 0 1 0 1 a 0 1 0 0 0 0 1 0 a b 0 0 0 0 1 &* 1 1 1 &* b = b 1 1 0 1 1 1 1 0 b 0 0 0 1 1 1 0 0 1 0 es decir, recuperamos el mensaje. Obsrvese que si tomamos la submatriz T de P formada por las primeras 3 filas entonces obtenemos uan pseudoinversa T de G: > T:=linalg[submatrix](P, 1..3, 1..5): evalm(T)&*evalm(G)=map(x->x mod 2,evalm(T&*G)); 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 &* 1 1 1 0 0 1 1 1 0 1 0 1 1 = 0 0 0 1 0 1 0 0 0 1

y en consecuencia > evalm(T)&*evalm(G)&*evalm(X)=map(x->x mod 2,evalm(T&*G&*X)); 0 1 0 0 1 0 0 0 0 > #Pulsa return 1 0 0 1 0 0 0 &* 1 1 1 0 0 1 1 1 0 1 0 a a 1 &* b = b 0 b b 1

Por tanto podemos construir un:

Procedimiento de codificacin
> codifica:=proc(st,g) local ll,cc,kk,ii,jj,stt,msg; ll:=linalg[coldim](g);

cc:=linalg[rowdim](g); kk:=ceil(nops(st)/ll); stt:=matrix(kk,ll,array(sparse,1..kk*ll,st)); msg:=map(x-> x mod 2, linalg[multiply](stt,linalg[transpose](g))); RETURN([seq(seq(msg[ii,jj],jj=1..cc),ii=1..kk)]); end: As por ejemplo, para codificar 'viva la urjc' mediante G esribiramos: > transmito:=codifica(binario(`viva la urjc`),G); transmito := [ 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1 ]

Procedimiento de decodificacin
En primer lugar sistematizamos la obtencin de la matriz T: > pseudoinv:=proc(g) local ll,cc,J,T,S; ll:=linalg[coldim](g); cc:=linalg[rowdim](g); J:=linalg[augment](g,array(identity, 1..cc,1..cc)); S:=Gaussjord(J) mod 2; RETURN(linalg[submatrix](S, 1..ll, ll+1..ll+cc)); end: y a continuacin el procedimiento de decodificacin consiste en utilizar el de codificacin con la matriz pseudoinversa: > alfabetico(codifica(transmito,pseudoinv(G))); viva la urjc Como puede observarse, los resultados tericos tienen su aplicacin prctica. > #Pulsa return

Las matrices de control


Al multiplicar la matriz P por GX obtenamos: 0 1 0 1 0 a+c a 0 1 0 0 0 b b 0 0 0 0 1 &* a + b + c = c 1 1 0 1 1 a+b 0 c 0 0 1 1 1 0 por tanto, para recuperar el mensaje eliminbamos de P las ltimas dos filas (obteniendo T ):

0 0 0

1 1 0

0 0 0

1 0 0

a+c a 0 b 0 &* a + b + c = b a+b c 1 c

> #Pulsa return Y Cual es el significado de estas las dos ltimas filas? a+c b 0 1 1 0 1 1 &* a + b + c = 0 0 1 1 1 a + b 0 c Permiten detectar si el vector columna pertenece o no al cdigo, es decir, la matriz formada por estas ltimas dos filas es una matriz de control H del cdigo generado por G.

Generacin de una matriz de control a partir de una generadora


Es una ligera modificacin del procedimiento para construir la pseudoinversa > control:=proc(g) local ll,cc,J,H; ll:=linalg[coldim](g); cc:=linalg[rowdim](g); J:=linalg[augment](g,array(identity, 1..cc,1..cc)); H:=Gaussjord(J) mod 2; RETURN(linalg[submatrix](H,ll+1..cc, ll+1..ll+cc)); end: As por ejemplo > control(G); 1 0 > #Pulsa return 1 0 0 1 1 1 1 1

Procedimiento de decodificacin con deteccin de errores


Es una modificacin del procedimiento de codificacin > decodifica_d:=proc(st,inv,con) local ll,cc,kk,i,j,stt,test,msg; ll:=linalg[coldim](inv); cc:=linalg[rowdim](inv); kk:=ceil(nops(st)/ll); stt:=matrix(kk,ll,array(sparse,1..kk*ll,st)); test:=map(x->x mod 2,

linalg[multiply](stt,linalg[transpose](con))); if not linalg[iszero](test) then print(`Error en la trasmisin. Intntalo de nuevo`); RETURN([]); fi; msg:=map(x-> x mod 2, linalg[multiply](stt,linalg[transpose](inv))); RETURN([seq(seq(msg[i,j],j=1..cc),i=1..kk)]); end: As, si no introducimos error en la transmisin recuperamos el texto original: > mensaje:=codifica(binario(`hola`),G): alfabetico(decodifica_d(mensaje,pseudoinv(G),contr ol(G))); hola pero si introducimos errores en la transmisin > mensaje:=codifica(binario(`hola`),G): mensaj:=canal(mensaje,0.05): alfabetico(decodifica_d(mensaj,pseudoinv(G),contro l(G))); Error en la trasmisin. Intntalo de nuevo

Generacin de una matriz generadora a partir de una de control


Una matriz de control H de un cdigo C caracteriza a los elementos X del mismo por las ecuaciones implcitas de C: H*X=0. Como construir una matriz geradora de C es lo mismo que elegir una base de C, simplemente necesitamos encontrar un sistema fundamental de soluciones de H *X=0. > H:=matrix([[1,1,0,0,1],[1,1,1,1,1],[0,0,1,1,0]]); G:=linalg[transpose]( matrix(convert(Nullspace(H) mod 2,list)) ); 1 H := 1 0 1 1 0 0 0 G := 1 1 0 0 0 1 1 1 1 1 1 0 1 0 0 0 0 1 0 1 1 0

> #Pulsa return

Correccin de errores
Mediante la matriz de control, adems de detectar podemos corregir algn error. En general no es posible corregir cualquier error, por tanto debemos elegir (dentro de un orden) aquellos errores que deseamos poder corregir. Esta eleccin hay que realizarla en la tabla de sndromes, utilizando normalmente como criterio la seleccin del error ms probable segn el criterio del vecino ms prximo, o de menor peso (menor nmero de unos).

Construccin de la tabla de errores


Suponemos dada una matriz de control H. En primer lugar necesitamos el conjunto de vectores sobre los que puede actuar H: > espacio:=proc(dim) local i,j; RETURN(matrix([seq([seq(ceil(i/2^(j-1)) mod 2, i=1..2^dim)],j=1..dim)])); end: as por ejemplo > A:=espacio(4); 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 A := 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 A continuacin necesitamos contar el nmero de unos (el peso) > peso:=proc(st) local i; RETURN(add(st[i], i = 1..nops(st))); end: por ejemplo > peso([1,1,0,1,0]); 1 0 0 0 0 0 0 0

3 Ahora, podemos construir la tabla de errores > errores:=proc(ct) local dm,i,j,ii,jj,kk,rn,tabla,sindrome,prev,err; jj:=linalg[coldim](ct); dm:=espacio(jj); rn:=map(x->x mod 2,evalm(ct&*dm)); kk:=linalg[rowdim](rn); ii:=linalg[coldim](dm); tabla:=table(); for i from 1 to ii do sindrome:=[seq(rn[j,i],j=1..kk)]; err:=[seq(dm[j,i],j=1..jj)]; prev:=tabla[sindrome];

if type(prev,indexed)then tabla[sindrome]:= err; elif peso(err) < peso(prev) then tabla[sindrome]:= err; fi; od; RETURN(eval(tabla)); end: Ahora podemos construir una tabla que asocia a cada sndrome (a cada cogrupo) un error de peso mnimo (un representante del cogrupo): > errores(H); table([[ 0, 1, 1 ] = [ 0, 0, 0, 1, 0 ], [ 0, 0, 0 ] = [ 0, 0, 0, 0, 0 ], [ 1, 1, 0 ] = [ 0, 0, 0, 0, 1 ], [ 1, 0, 1 ] = [ 0, 0, 0, 1, 1 ] ]) > #presionar la teclar return

Procedimiento de decodificacin con correccin de errores


> decodifica_c:=proc(st,inv,con,tabl) local ll,cc,kk,jj,i,j,sindrome,err,stt,test,msg; ll:=linalg[coldim](inv); cc:=linalg[rowdim](inv); kk:=ceil(nops(st)/ll); stt:=matrix(kk,ll,array(sparse,1..kk*ll,st)); test:=map(x->x mod 2, linalg[multiply](stt,linalg[transpose](con))); jj:=linalg[coldim](test); sindrome:=[seq([seq(test[i,j],j=1..jj)],i=1..kk)]; err:=matrix([seq(tabl[sindrome[i]],i=1..kk)]); stt:=map(x->x mod 2,evalm(stt+err)); msg:=map(x-> x mod 2, linalg[multiply](stt,linalg[transpose](inv))); RETURN([seq(seq(msg[i,j],j=1..cc),i=1..kk)]); end:

> mensaje:=codifica(binario(`hola`),G): mensaj:=canal(mensaje,0.05):

T:=pseudoinv(G): H:=control(G): ERR:=errores(H): alfabetico(decodifica_c(mensaj,T,H,ERR)); hola > #fin >

Test resuelto
1. Determinar la matriz inversa de la siguiente matriz de M6( Z2 ) 1 1 1 1 1 0 1 0 1 1 0 0 1 0 1 1 0 1 A= 0 0 1 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 Respuestas: 0 1 0 1 0 0 0 1 1 0 1 1 1 1 0 ( -1 ) 0 ( -1 ) 0 1 0 1 0 a) A no es invertible b) A = c) A = 1 0 0 1 1 1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 > restart;with(linalg):

1 1 0 0 0 1

0 0 1 1 0 1

1 1 0 1 1 0

0 1 1 1 1 0

0 1 0 0 1 0

Warning, the protected names norm and trace have been redefined and unprotected

> A := matrix([[1, 1, 1,1,1,0], [1, 0, 1,1,0,0], [1, 0, 1,1,0,1],[0, 0, 1,1,0,0],[1, 0, 0,1,0,0],[1, 0, 1,0,0,0]]); 1 1 1 1 0 1 1 0 1 A := 0 0 1 1 0 0 1 0 1 > evalm(A)^(`-1`)=Inverse(A) mod
Error, (in mod/Inverse) singular matrix

1 1 1 0 1 0 1 0 1 0 0 0 2;

0 0 1 0 0 0

La matriz A no es invertible. La respuesta correcta es la a) 0 2. Siendo C el cdigo cuya matriz de control es H := 1 0 1 0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 , 1

cul es la dimensin de C? Respuestas: a) dim(C)=3 b) dim(C)=2 c) dim(C)=4 > H := matrix([[0, 1, 1,1,1,1,0], [1,0,0,0,1, 0, 1],[0,0,0,0,1,1,1]]); 0 H := 1 0 > Gaussjord(H) mod 2; 1 0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 1

1 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 1 1 1 La matriz H tiene rango 3, n-k=3 filas y n=7 columnas. Entonces k=dim(C)=4. La respuesta correcta es la c) 1 1 1 0 3. Siendo H := 0 1 0 1 la matriz de control de un cdigo C, determinar una matriz 0 0 0 1 G generadora de dicho cdigo. Respuestas: 1 0 0 0 0 0 c) G = b) G = a) G = 1 1 1 0 1 0 > H := matrix([[1, 1, 1, 0], [0, 1, 0, 1], [0, 0, 0, 1]]); 1 H := 0 0 > Gaussjord(H) mod 2; 1 0 1 0 0 1 0 0 0 0 0 1 El rango de H es 3= n-k y tiene n=4 columnas. Por tanto k=dim(C)= 1 y G tiene que ser una matriz columna de dimensin 4. Una base de C es > Nullspace(H) mod 2;transpose(matrix([[1,0,1,0]])); { [ 1, 0, 1, 0 ] } La respuesta correcta es la c) 1 0 1 0 1 1 0 1 0 0 0 1 1

0 1 1 0 4. Sea G := 0 0 0 0 0 0 de decodificacin. Respuestas: 0 a) T := 1 0 1 0 0 0 0 0 0 0 0

0 0 1 la matriz generadora de un cdigo lineal C. Determinar una matriz 1 1

0 0 1

0 b) T := 1 0

1 0 0

0 0 0

> G:=matrix([[0, 1, 0], [1, 0, 0, 1]]); 0 1 G := 0 0 0

0 1 1 0 0 0 c) T := 0 0 0 0 0 0 1 0], [0, 0, 1], 1 0 0 0 0 0 0 1 1 1

0 0 0 0 1 [0, 0, 1], [0,

> seudoinv:=proc(g) local ll,cc,J,T,S; ll:=linalg[coldim](g); cc:=linalg[rowdim](g); J:=linalg[augment](g,array(identity, 1..cc,1..cc)); S:=Gaussjord(J) mod 2; RETURN(linalg[submatrix](S, 1..ll, ll+1..ll+cc)); end: > T:=seudoinv(G); 0 T := 1 0 1 0 0 0 0 0 0 0 0 0 0 1

La respuesta correcta es la a) 1 1 1 5. Dada la matriz A = 0 1 0 de M3( Z2 ), cual es el elemento (1,3) de la matriz A65 0 0 1 ? a) 65 b) 1 c) La pregunta no tiene sentido. > A := matrix([[1, 1, 1], [0, 1, 0], [0, 0, 1]]); 1 1 1 A := 0 1 0 0 0 1 > A65:=map(x->x mod 2,evalm(A^65)); 1 A65 := 0 0 1 1 0 1 0 1

> A65[1,3]; 1 La respuesta correcta es la b) 1 0 1 la matriz de control de un cdigo C, el sndrome de la palabra 6. Siendo H := 0 1 1 u := [ 1, 0, 0 ] es 0 1 1 a) b) c) 1 0 1 > H := matrix([[1, 0, 1], [0, 1, 1]]); 1 0 1 H := 0 1 1 > u := transpose(matrix([[1, 0, 0]])); 1 u := 0 0 > map(x->x mod 2,evalm(H&*u)); 1 0 La respuesta correcta es la b) 1 1 0 1 la matriz generadora de un cdigo lineal C, se verifica que las 7. Siendo G := 0 1 1 1 palabras [0,1,0,0] y [0,0,1,0] a) tienen el mismo sndrome b) no tienen el mismo sndrome c) la pregunta no tiene sentido > G := matrix([[1, 1], [0, 1], [0, 1], [1, 1]]); 1 0 G := 0 1 1 1 1 1

> control:=proc(g) local ll,cc,J,H; ll:=linalg[coldim](g); cc:=linalg[rowdim](g); J:=linalg[augment](g,array(identity, 1..cc,1..cc)); H:=Gaussjord(J) mod 2; RETURN(linalg[submatrix](H,ll+1..cc, ll+1..ll+cc)); end: > H:=control(G); 1 0 0 1 H := 0 1 1 0 > map(x->x mod 2,transpose(matrix([[0,1,0,0]-[0,0,1,0]])));

0 1 1 0 Ya que [0,1,0,0]-[0,0,1,0] =[0,1,1,0] es una palabra del cdigo (es la suma de las dos columnas de G) se sigue que [0,1,0,0] y [0,0,1,0] tienen el mismo sndrome: > map(x->x mod 2,evalm(H&*%)); 0 0 La respuesta correcta es la a) 8. El peso p(v) de una palabra v en es el nmero de unos de dicha palabra, y la distancia de Hamming entre dos palabras es el nmero de coordenadas que tienen distintas. Dadas dos palabras v y w de longitud 4 con p(v)=3 y p(w)=2, su distancia de Hamming es: a) siempre igual a 1 b) menor o igual a 2 c) siempre mayor o igual a 1 > map(x->x mod 2,[1,1,1,0]+[0,1,0,1]); [ 1, 0, 1, 1 ] Entonces la palabras v=[1,1,1,0] y w=[0,1,0,1] son tales que p(v)=3, p(w)=2 y la distancia de Hamming entre las dos es 3. Adems, ya que p(w)<p(v), las dos palabras tienen al menos un dgito distinto. La respuesta correcta es la c) 1 1 0 1 9. Siendo H = 0 1 0 1 la matriz de control de un cdigo C, determinar si la matriz 0 0 1 0 1 1 G= 0 0 es una matriz generadora de dicho cdigo. Respuestas: a) SI b) NO c) La pregunta no tiene sentido. > H := matrix([[1, 1, 0, 1], [0, 1, 0, 1], [0, 0, 1, 0]]); 1 1 0 1 H := 0 1 0 1 0 0 1 0 El rango de H (que est en forma escalonada) es 3= n-k, siendo n=4. Por tanto k=dim(C)=1. > G := matrix([[1], [1], [0], [0]]); G := > map(x->x mod 2, evalm(H&*G)); 1 1 0 0

0 1 0 Ya que la matriz HG es distinta de (0), G no puede ser la matriz generadora del cdigo C. La respuesta correcta es la b) 10. Selese la afirmacin correcta: a) En general pueden existir palabras que pertenecen al mismo cogrupo respecto de un cdigo lineal C pero se corrigen de forma distinta. b) Dos palabras de un cdigo lineal C pueden tener distintos sndromes. c) Ninguna de las sentencias anteriores es correcta. La respuesta correcta es la a) > #fin

Prctica 6: Mtodos numricos de clculo de autovalores Prctica 6

Mtodos numricos de clculo de autovalores


Por: R.Criado y A.Gallinari, E.S.C.E.T., URJC, 1999 ltima actualizacin: A.Gallinari, E.S.C.E.T., URJC, 2003

Objetivos de la sesin
Recordar algunas de las funciones de la librera linalg con las que hemos trabajado en las prcticas anteriores e introducir otras nuevas necesarias para el desarrollo de la prctica. Afianzar en el alumno la comprensin de la base terica de los mtodos directos e iterativos de clculo de los autovalores y autovectores de una matriz, todo ello mediante el uso de Maple. > #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

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 necesarios para el desarrollo de la prctica. As pues el alumno deber

ejecutar dichos ejemplos y teclear otros que le permitan comprender la aplicacin de dichos comandos. Los siguientes son comandos incorporados por Maple que pueden ser necesarios para la realizacin de esta prctica que estn disponibles en la librera linalg. Algunos de ellos fueron introducidos en prcticas anteriores y otros no, por lo cual nos centraremos fundamentalmente en estos ltimos. Ante cualquier duda que pueda surgir, consultar con la ayuda (Help) de Maple. charpoly jordan eigenvals, eigenvects nullspace dsolve diff

Descripcin de los comandos mencionados: > restart:with(linalg):


Warning, the protected names norm and trace have been redefined and unprotected

El comando charpoly(A,x) devuelve el polinomio caracterstico de A, eigenvals(A) obtiene los autovalores de A (las races del polinomio caracterstico) y eigenvects(A) obtiene una base para cada autoespacio de la matriz A segn el formato [autovalor, multiplicidad, autovector (es)]. > A:=matrix(3,3,[-1,4,-2,-3,4,0,-3,1,3]); -1 A := -3 -3 > charpoly(A,x); x3 6 x2 + 11 x 6 > eigenvals(A); 1, 2, 3 > eigenvects(A); 3 3 [ 3, 1, { [ 1, 3, 4 ] } ], [ 1, 1, { [ 1, 1, 1 ] } ], 2, 1, { 1, , } 2 2 El comando jordan(A,P) devuelve una matriz diagonal J semejante a la matriz A, en el caso de que exista y en otro caso una matriz "casi-diagonal" conocida como forma cannica de Jordan de la matriz A, junto con la matriz P de paso cuyas columnas son autovectores de A (correspondientes a los autovalores de A), cumplindose que P > J:=jordan(A,P); 1 J := 0 0 > print(P); 3 -4 1 3 -6 3 3 -6 4 0 2 0 0 0 3
{ -1 }

4 4 1

-2 0 3

AP = J.

> evalm(inverse(P)&*A&*P); 1 0 0 > evalm(P&*J&*inverse(P)); -1 -3 -3 > equal(A,P&*J&*inverse(P)); 4 4 1 -2 0 3 0 2 0 0 0 3

true Finalmente, el comando dsolve(ecuacin-diferencial, funcin incgnita) resuelve la ecuacin diferencial ordinaria planteada en la funcin incgnita considerada. El comando dsolve({ecdif,cond1,...,condn},funcin incgnita) resuelve la ecuacin diferencial planteada sujeta a las condiciones iniciales cond1,...,condn. > eqdif:=3*diff(y(t),t$2)+2*diff(y(t),t)-5*y(t)=0; 2 eqdif := 3 y( t ) 5 y( t ) = 0 2 y( t ) + 2 t t > dsolve(eqdif,y(t)); y( t ) = _C1 e + _C2 et > dsolve({eqdif,y(0)=0,D(y)(0)=8},y(t)); y( t ) = 3 e > #Pulsa return
( 5 / 3 t) ( 5 / 3 t)

+ 3 et

Leccin
Como viene indicado en el ttulo, el ncleo central de la prctica est constituido por el estudio de algunos comandos de Maple relacionados con mtodos y tcnicas estudiadas en el aula para el clculo de autovalores y autovectores y sus aspectos numricos.

Aproximacin de autovalores y autovectores por el mtodo de las potencias


Los autovalores de una matriz se pueden calcular hallando las races de su polinomio caracterstico. Sin embargo, en los problemas prcticos este mtodo no es eficaz, pues a la hora de resolver muchos problemas fsicos slo se necesita el autovalor con el valor absoluto mximo. > #Pulsa return Se dice que un autovalor de una matriz A es el autovalor dominante de A si su valor absoluto es estrictamente mayor que los valores absolutos de todos los autovalores restantes. Un autovector que corresponda al autovalor dominante se denomina autovector dominante. Ejemplos: 1) Una matriz de dimensin 4 cuyos autovalores son 1 = 3, 2 = 5, 3 = -1, 4 = 1, tiene autovalor dominante 2 = 5. 2) Una matriz de dimensin 3 con autovalores 1 = 3, 2 = 3, 3 = -1 no tiene

autovalor dominante, ya que hay dos autovalores con valor absoluto igual 3. Si A es una matriz diagonalizable con un autovalor dominante y X es un vector columna arbitrario distinto de cero, el valor de An X resulta ser, en general, una buena aproximacin de un autovector dominante de A, cuando el valor de n es suficientemente grande. Ejemplo: > restart:with(linalg):A:=matrix(2,2,[[3,2],[-1,0]]);
Warning, the protected names norm and trace have been redefined and unprotected

3 A := -1 > eigenvals(A);

2 0

2, 1 El autoespacio correspondiente al autovalor dominante = 2 es el espacio de soluciones del sistema (A 2 I ) X = 0, > nullspace(A-2*matrix(2,2,[[1,0],[0,1]])); { [ -2, 1 ] } Entonces los autovectores dominantes de A son los vectores de la forma (-2t ,t ), donde t es un parmetro real. Veamos como se puede estimar un autovector dominante utilizando las potencias de A. Se empieza por elegir un vector (distinto de cero) arbitrario del plano : > X0:=matrix(2,1,[1,1]); 1 X0 := 1 Los vectores Xn que se obtiene al multiplicar el vector X0 por las potencias n-sima de A son: > X1:=evalm(A&*X0); 5 X1 := -1 > X2:=evalm(A&*X1);X2 = 5*matrix(2,1,[2.6,-1]); 13 X2 := -5 2.6 X2 = 5 -1 > X3:=evalm(A&*X2);X3=13*matrix(2,1,[2.23,-1]); 29 X3 := -13 2.23 X3 = 13 -1 > X4:=evalm(A&*X3);X4=29*matrix(2,1,[2.1,-1]);

61 X4 := -29 2.1 X4 = 29 -1 > X5:=evalm(A&*X4);X5=61*matrix(2,1,[2.05,-1]); 125 X5 := -61 2.05 X5 = 61 -1 > X6:=evalm(A&*X5);X6=125*matrix(2,1,[2.02,-1]); 253 X6 := -125 2.02 X6 = 125 -1 > X7:=evalm(A&*X6);X7=253*matrix(2,1,[2.01,-1]); 509 X7 := -253 2.01 X7 = 253 -1 Los vectores Xn se estn aproximando cada vez ms a mltiplos escalares del vector > V:=matrix(2,1,[2,-1]); 2 V := -1 que es el vector dominante correspondiente a t = 1. Ya que todo mltiplo escalar de un autovector dominante tambin es un autovector dominante, los calculos anteriores estn produciendo una aproximacin de un autovector dominante. > #Pulsa return Una vez obtenido un autovector dominante, se puede obtener una aproximacin del autovalor dominante mediante el cociente de Rayleigh, en el que <,> es el producto escalar usual: si X es un autovector de A y es el autovalor de A al que est asociado, podemos recuperar el valor de a partir de X mediante el cociente: <X,AX>/<X,X> = <X, X>/ <X,X> = <X,X>/<X,X> = . Por tanto, si Y es una aproximacin para un autovector dominante X de A, utilizando el cociente de Rayleigh se puede obtener una aproximacin del autovalor al que X est asociado: = <Y,AY>/<Y,Y>. El mtodo que acabamos de illustrar se conoce como mtodo de las potencias o mtodo de las iteraciones. > #Pulsa return Ejemplo: Aplicando el mtodo de las potencias con la aproximacin Y = X7 de un autovector dominante de la matriz A del ejemplo anterior, se obtiene la siguiente aproximacin

del correspondiente autovalor dominante = 2: > Y:=matrix(2,1,[509,-253]); AY:=evalm(A&*Y); 509 Y := -253 1021 AY := -509 > mu:=evalf(dotprod(vector(2,[509,-253]),vector(2,[1021,509]))/dotprod(vector(2,[509,-253]),vector(2,[509,-253] ))); := 2.007075428 El mtodo de las potencias puede generar vectores que tienen componentes muy grandes. El siguiente mtodo, el mtodo de las potencias con reduccin a escala, nos permite reducir las componentes de los vectores generados. La reduccin a escala consiste en reducir, en cada paso, los vectores que nos dan la aproximacin, de modo que sus componentes se encuentren entre -1 y 1. Ejemplo: En el ejemplo anterior, si se utiliza el mtodo de las potencias con reduccin a escala, se obtiene > Digits:=4;X0:=matrix(2,1,[1,1]); Digits := 4 1 X0 := 1 > Z1:=evalm(A&*X0);X1:=evalf(evalm(1/5*Z1)); 5 Z1 := -1 1. X1 := -.2000 > Z2:=evalm(A&*X1);X2:=evalf(evalm(1/2.6*Z2)); 2.600 Z2 := -1. 1.000 X2 := -.3846 > Z3:=evalm(A&*X2);X3:=evalf(evalm(1/2.23*Z3)); 2.231 Z3 := -1.000 1.000 X3 := -.4484 As que se pueden utilizar estos nuevos vectores en el clculo del cociente de Rayleigh: > AX3:=evalm(A&*X3); 2.103 AX3 := -1.000 > mu:=evalf(dotprod(vector(2,[1,-.4484]),vector(2,[2.103, -1]))/dotprod(vector(2,[1,-.4484]),vector(2,[1,-.4484])

)); := 2.124

Aproximacin de autovectores no dominantes de una matriz simtrica por deflacin


El mtodo de aproximacin por deflacin es un mtodo para aproximar autovalores y autovectores no dominantes de una matriz simtrica. Este mtodo utiliza el siguiente teorema. Teorema: Sea A una matriz cuadrada simtrica de dimensin n, con autovalores (reales) 1,2,..., n. Si v1 es un autovector asociado a 1 y || v1 || =1, entonces: a) los autovalores de la matriz B = A - 1 v1 v1t son 0,2,..., n y b) si v es un autovector de B asociado ad uno de los autovalores 2,..., n, entonces v tambin es un autovector de A asociado a este autovalor. Nota: el vector v1 del teorema es un vector columna n por 1 y v1v1t es una matriz n por n. Ejemplo: La matriz simtrica > restart;with(linalg):A:=matrix(3,3,[[3,-2,0],[-2,3,0],[ 0,0,5]]);
Warning, the protected names norm and trace have been redefined and unprotected

3 -2 0 A := -2 3 0 0 0 5 tiene autovalores 1,5,5 y autovector v = (-1,1,0) asociado a 5: > eigenvals(A); 1, 5, 5 > eigenvects(A); [ 5, 2, { [ -1, 1, 0 ], [ 0, 0, 1 ] } ], [ 1, 1, { [ 1, 1, 0 ] } ] Para aplicar el teorema anterior, tenemos que normalizar el vector v, obteniendo el vector unitario v1: > v:=matrix(3,1,[-1,1,0]);v1:=evalm(v/norm(v,2)); -1 v := 1 0 1 2 2 v1 := 1 2 2 0 Por el teorema, los autovalores de la matriz B = A - 1 v1 v1t son 0,5 y 1:

> B:=evalm(A-5*evalm(v1&*transpose(v1))); B := > eigenvals(B); 0, 5, 1 Adems, los autovectores de B asociados al autovalor 5 son de la forma (0,0,t) y los autovectores asociados a 1 de la forma (t,t,0), donde t es un parmetro real: > eigenvects(B); [ 0, 1, { [ -1, 1, 0 ] } ], [ 5, 1, { [ 0, 0, 1 ] } ], [ 1, 1, { [ 1, 1, 0 ] } ] Siempre por aplicacin del teorema, los vectores (0,0,t) y (t,t,0) tienen que ser tambin autovectores de la matriz A asociados a los autovalores 5 y 1: > eigenvects(A); [ 1, 1, { [ 1, 1, 0 ] } ], [ 5, 2, { [ -1, 1, 0 ], [ 0, 0, 1 ] } ] Dada una matriz simtrica A tal que se pueden ordenar los autovalores de A por sus valores absolutos como |1| >|2|>...>| n|>0, se puede utilizar el mtodo de las potencias para aproximar el autovalor dominante 1 y un autovector dominante v1 correspondiente. La matriz B1 = A - 1 v1 v1t (ahora es slo una aproximacin de la matriz B) es simtrica y tiene autovalores 0, 2,..., n tales que |2|>...>| n|>0. Entonces se puede aplicar el mtodo de las potencias a la matriz B1 y aproximar su autovalor dominante 2 y un correspondiente autovector dominante v2. Estas dos ltimas aproximaciones son aproximaciones del autovalor no dominante 2 y del autovector no dominante v2 de la matriz A. > #Pulsa return Aplicando el mismo mtodo a la matriz simtrica C1 = B1 - 2v2v2t, se pueden obtener aproximaciones para 3 y para un autovector v3. Siguiendo de forma similar, se hallan aproximaciones para todos autovalores de A y sus correspondientes autovectores. Las limitaciones de este mtodo estn en el hecho de que cada vez que se utiliza una aproximacin para un autovalor y un autovector, tambin se aproxima la matriz que se va a utilizar en el paso sucesivo del mtodo, introduciendo un nuevo error. > #fin 1 2 1 2 0 1 2 1 2 0 0 0 5

Test resuelto
1. La potencia n-sima de la matriz 4 A= 3 es 2 3

2 1 3 a) 5 2 1 3 b) 5

1 1 1 1

1 &* 0 1 &* 0

0 1 &* n 3 6 0 1 &* n 3 5

-1 2 -1 2

2 1 1 3n 0 3 1 1 -1 c) &* n &* 3 2 5 0 5 > restart:with(linalg):A:=matrix(2,2,[[4,2],[3,3]]);


Warning, the protected names norm and trace have been redefined and unprotected

4 A := 3 > eigenvals(A);eigenvects(A); 6, 1

2 3

-3 [ 6, 1, { [ 1, 1 ] } ], 1, 1, { 1, } 2 La matriz A es diagonalizable, ya que tiene dos autovalores distintos y la matriz P que la diagonaliza est determinada por los autovectores (1,1) y (1,-3/2). > J:=jordan(A,P); 1 J := 0 > print(P); 2 5 -3 5 3 5 3 5 An = P Jn inverse(P) : 0 6

Entonces A es igual al producto de matrices P J inverse(P) y > equal(A,P&*J&*inverse(P)); true > Jn:=matrix(2,2,[[1,0],[0,6^n]]); 1 Jn := 0 > An:=P&*Jn&*inverse(P); 1 An := ( P &* Jn ) &* 1 La solucin es a). 2. Las soluciones de la ecuacin diferencial -1 2 3 0 6n

y( t ) 2 y( t ) + y( t ) = 0 t t t t t t son de la forma: a) y( t ) = _C1 et + _C2 e


( 3 t) ( t )

+ _C3 et t + _C4 e
( 3 t)

( t )

t
( 3 t)

b) y( t ) = _C1 e + _C2 e c) Ninguna de las anteriores.

+ _C3 e

( 3 t)

t + _C4 e

> eqdif:=diff(y(t),t$4)-2*diff(y(t),t$2)+y(t)=0; 4 2 + y( t ) = 0 eqdif := 4 y( t ) 2 y ( t ) 2 t t > dsolve(eqdif,y(t)); y( t ) = _C1 e La solucin correcta es la a).


( t )

+ _C2 e

( t )

t + _C3 et + _C4 et t

3. Si los autovalores de una matriz A son -24, 18.3 y -18.3, entonces el autovalor dominante de A es : a) -24 b) 18.3 c)-18.3 > |-24| > 18.3 = |-18.3|. El autovalor dominante es -24. La solucin es a).

4. Sea

3 A := 1

4 3

Utilizando el mtodo de las potencias con reduccin a escala para aproximar su autovector dominante con dos cifras significativas y vector inicial (1,1), se obtiene que a) despus de tres iteraciones (tres multiplicaciones por A) el mtodo converge a (1,-1/2) b) el mtodo no se puede aplicar c) despus de tres iteraciones (tres multiplicaciones por A) el mtodo converge a (1,1/2). > restart:with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> A:=matrix(2,2,[[3,4],[1,3]]); 3 A := 1 > jordan(A); 1 0 0 5 La matriz A es diagonalizable y su autovalor dominante es 5. > Digits:=2;X0:=matrix(2,1,[1,1]); Digits := 2 1 X0 := 1 4 3

> Z1:=evalm(A&*X0);X1:=evalf(evalm(1/7*Z1)); 7 Z1 := 4 1. X1 := .57 > Z2:=evalm(A&*X1);X2:=evalf(evalm(1/5.28*Z2)); 5.3 Z2 := 2.7 1.0 X2 := .51 > Z3:=evalm(A&*X2);X3:=evalf(evalm(1/5.04*Z3)); 5.0 Z3 := 2.5 1.0 X3 := .50 La solucin correcta es la c). > #fin

Ejercicios de repaso resueltos


Examen 1
1. En R3, determinar la posicin relativa de los tres planos de ecuaciones 3 x - k y + 15 z = 42 x - y + 5 z = 14 2x-4y+z=5 en funcin del parmetro real k. > 2. Verificar si {(3,2,-1,1), (1,1,1,1) } es una base del subespacio vectorial de R4 generado por el sistema de vectores { (3,2,-1,1), (1,1,1,1), (4,3,0,2), (1,0,-3,-1)}. > 3. Calcular la matriz asociada (respecto de las bases cannicas) a la funcin lineal f: R2 --> R2 definida por la composicin de una reflexin con respecto al eje x, seguido de un deslizamiento cortante en la direccin x con factor 3/2, seguido de una compresin en la direccin y con factor 1/2 y una reflexin con respecto de la recta y=x. > 1 4. Siendo G = 0 1 0 1 1

la matriz generadora de un cdigo lineal C, verificar si las palabras

recibidas p1=(0,1,0) y p2=(1,1,1) tienen el mismo sndrome. Determinar una matriz de decodificacin del cdigo C. > 0 1 . Utilizando el mtodo de las potencias con reduccin a escala con 5. Sea A = 2 2 vector inicial (1,1), determinar el nmero mnimo de iteraciones necesarias para aproximar un autovector dominante de A con dos cifras significativas. > #fin

Soluciones del examen 1


1) > restart:with(linalg):with(plots):
Warning, the protected names norm and trace have been redefined and unprotected Warning, the name changecoords has been redefined

> ec1:=3*x-k*y+15*z=42;ec2:=x-y+5*z=14;ec3:=2*x-4*y+z=5; ec1 := 3 x k y + 15 z = 42 ec2 := x y + 5 z = 14 ec3 := 2 x 4 y + z = 5 > A := matrix([[3,-k,15,42],[1,-1,5,14],[2,-4,1,5]]); 3 A := 1 2 > gausselim(A); k 15 42 3 1 0 1 + k 0 0 3 0 -9 -23 0 Si k es distinto de 3 y de 0, el sistema es compatible determinado y los tres planos se cortan 11 23 ): en el punto ( , 0, 9 9 > gaussjord(A); 1 0 0 0 1 0 0 1 0 > solve({ec1,ec2,ec3}, {x,y,z}); { y = 0, x = 11 9 0 23 9 k -1 -4 15 5 1 42 14 5

11 23 ,z= } 9 9 > k:=50;implicitplot3d({ec1,ec2,ec3},x=-10..10,y=-10..10,z=10..10);

k := 50

Si k=3, el sistema es compatible indeterminado: > k:=3;A := matrix([[3,-k,15,42],[1,-1,5,14],[2,-4,k,5]]); k := 3 3 -3 15 42 A := 1 -1 5 14 5 2 -4 3 > gausselim(A); 3 0 0 > gaussjord(A); 17 51 1 0 2 2 7 23 0 1 2 2 0 0 0 0 dos de los planos coinciden y los tres planos se cortan en una recta: > solve({ec1,ec2,ec3}, {x,y,z}); 23 9 51 19 z, x = z, z = z } 2 2 2 2 > with(plots):implicitplot3d({ec1,ec2},x=-10..10,y=-10..10,z =-10..10); {y = -3 -2 0 15 -7 0 42 -23 0

> implicitplot3d({ec1,ec2,ec3},x=-10..10,y=-10..10,z=-10..10 );

Si k=0, el sistema es compatible indeterminado y los tres planos se cortan en el punto (5/2,0,23/10): > k:=0;A := matrix([[3,-k,15,42],[1,-1,5,14],[2,-4,k,5]]); k := 0

3 A := 1 2 > gaussjord(A); 1 0 0 2) > restart;with(linalg): 0 1 0

0 15 -1 5 -4 0

42 14 5 5 2 0 23 10

0 0 1

Warning, the protected names norm and trace have been redefined and unprotected

> A:=matrix([[3,2,-1,1],[1,1,1,1]]); 3 2 -1 1 A := 1 1 1 1 > rank(A); 2 > A1:=matrix([[3,2,-1,1],[1,1,1,1],[4,3,0,2],[1,0,-3,-1]]); 3 1 A1 := 4 1 > rank(A1); 2 Si, es una base. 3) > restart; with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

2 -1 1 1 3 0 0 -3

1 1 2 -1

> Rxy:=matrix([[0,1],[1,0]]); 0 Rxy := 1 > Dkx:=matrix([[1,3/2],[0,1]]); 1 Dkx := 0 > Cky:=matrix([[1,0],[0,1/2]]); Cky := > Rx:=matrix([[1,0],[0,-1]]); 1 0 1 0 3 2 1 0 1 2

1 Rx := 0 > evalm(Rxy&*Cky&*Dkx&*Rx); 0 1

0 -1 -1 2 -3 2

4) > restart:with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> p1:=matrix(3,1,[[0],[1],[0]]); p1 := > p2:=matrix(3,1,[[1],[1],[1]]); 0 1 0

1 p2 := 1 1 > G:=matrix(3,2,[[1,0],[0,1],[1,1]]); 1 G := 0 1 0 1 1

> control:=proc(g) local ll,cc,J,H; ll:=linalg[coldim](g); cc:=linalg[rowdim](g); J:=linalg[augment](g,array(identity, 1..cc,1..cc)); H:=Gaussjord(J) mod 2; RETURN(linalg[submatrix](H,ll+1..cc, ll+1..ll+cc)); end: > H:=control(G); H := [ 1 1 1] > map(x->x mod 2, evalm(p1+p2 mod 2)); 1 0 1 Ya que [1,0,1] es una palabra del cdigo, p1 y p2 tienen el mismo sndrome: > map(x->x mod 2, evalm(H&*%)); [ 0] > seudoinv:=proc(g) local ll,cc,J,T,S; ll:=linalg[coldim](g);

cc:=linalg[rowdim](g); J:=linalg[augment](g,array(identity, 1..cc,1..cc)); S:=Gaussjord(J) mod 2; RETURN(linalg[submatrix](S, 1..ll, ll+1..ll+cc)); end: > T:=seudoinv(G); 0 T := 0 5) > restart:with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

1 1

1 0

> A:=matrix([[0,1],[2,2]]); 0 A := 2 > jordan(A); 1 + 3 0 0 1 3 1 2

La matriz es diagonalizable y su autovalor dominante es 1 + 3 . > eigenvectors(A);evalf(%); [ 1 + 3 , 1, { [ 1, 1 + 3 ] } ], [ 1 3 , 1, { [ 1, 1 3 ] } ] [ 2.732050808, 1., { [ 1., 2.732050808 ] } ], [ -.732050808, 1., { [ 1., -.732050808 ] } ] Los autovectores dominantes son de la forma k(1, 1 + 3 ), donde k es una constante real. > Digits:=2; Digits := 2 > X0:=matrix(2,1,[1,1]); 1 X0 := 1 > Z1:=evalm(A&*X0);X1:=evalf(evalm(1/Z1[2,1]*Z1)); 1 Z1 := 4 .25 X1 := 1. > Z2:=evalm(A&*X1);X2:=evalf(evalm(1/Z2[2,1]*Z2)); 1. Z2 := 2.5 .40 X2 := 1.0 > Z3:=evalm(A&*X2);X3:=evalf(evalm(1/Z3[2,1]*Z3)); 1.0 Z3 := 2.8

.36 X3 := 1.0 > Z4:=evalm(A&*X3);X4:=evalf(evalm(1/Z4[2,1]*Z4)); 1.0 Z4 := 2.7 .37 X4 := 1.0 > Z5:=evalm(A&*X4);X5:=evalf(evalm(1/Z5[2,1]*Z5)); 1.0 Z5 := 2.7 .37 X5 := 1.0 > Z6:=evalm(A&*X5);X6:=evalf(evalm(1/Z6[2,1]*Z6)); 1.0 Z6 := 2.7 .37 X6 := 1.0 Despus de 4 iteraciones el mtodo converge al autovector dominante (0.37,1)= (1 , 1+ 3 )/(1+ 3 ): > evalf(evalm(vector([1, (1+sqrt(3))])/(1+sqrt(3)))); [ .37, 1. ] > #fin

Examen 2
1. Dado el sistema de ecuaciones dependiente del parmetro a 2x + y +z = 1 x + y + a z=1 x + a y + z =1, Determinar el valor de a tal que el sistema es compatible indeterminado. > 2. Verificar si el sistema B={-x2+2x+3, x2+x+1} es una base del subespacio vectorial de P2( x ) generado por el sistema de polinomios { x2+2x+3, 3x+4}. > 3. Sea f: R4 --> R2 la funcin lineal definida por f(1,0,0,0)=(4,5), f(0,1,0,0)=(6,-7), f(0,0,1,0)=(1,2), f(0,0,0,1)=(-3,4). Hallar la matriz asociada a f respecto de la base B={(1,0,-1,0),(0,1,2,0),(0,0,-4,0),(1,0,0,5)}de R4 y de la base cannica de R2. >

1 1 0 0 la matriz generadora de un cdigo lineal C. Determinar la distancia de 4. Sea $G = 1 0 1 1 Hamming de las palabras recibidas (1,1,1,0) y (1,0,1,1) y verificar si tienen el mismo sndrome. > 5. Dado el sistema 0.00001 x + y + z = 1.5 x + y - 2z = 1 2 x + y - 4z = 1, calcular la solucin aproximada con el mtodo de eliminacin con pivoteo parcial utilizando 4 cifras significativas. >

Soluciones del examen 2


1) > restart; with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> A:=matrix([[2,1,1,1],[1,1,a,1],[1,a,1,1]]); 2 A := 1 1 > gausselim(A); 2 0 0 > gaussjord(A); 1 1 + a 1 0 0 2 a 1 1 0 1 0 2a 11 0 1 0 2a > a:=0;A:=matrix([[2,1,1,1],[1,1,a,1],[1,a,1,1]]); a := 0 2 A := 1 1 1 1 0 1 0 1 1 1 1 1 1 2 0 1 1 2 2 2 a + 2 a a 1 1 2 1 a 1 1 a 1 a 1 1 1 1

> gaussjord(A); 1 0 1 0 0 1 -1 0 0 0 0 1 Si a=0 el sistema es incompatible. > a:=1/2;A:=matrix([[2,1,1,1],[1,1,a,1],[1,a,1,1]]); a := A := > gaussjord(A); -1 1 0 0 2 0 1 0 1 0 0 1 1 Si a=1/2 el sistema es compatible determinado. > a:=1;A:=matrix([[2,1,1,1],[1,1,a,1],[1,a,1,1]]); a := 1 2 A := 1 1 > gaussjord(A); 1 0 0 0 1 1 0 0 0 Si a=1 el sistema es compatible indeterminado. 2) > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

1 2 1 1 2 1 1 1 1

2 1 1

1 1 1 2

1 1 1

1 1 1 0 1 0

1 1 1

Utilizandi las coordenadas cannicas, > A:=matrix([[3,2,-1],[2,2,2],[4,3,0]]); 3 A := 2 4 > rank(A); 2 El subespacio L generado por los tres polinomios es de dimensin 2. > A1:=matrix([[3,2,-1],[2,2,2]]); 2 2 3 -1 2 0

3 A1 := 2 > rank(A1); 2

2 2

-1 2

Se sigue que los polinomios x + 2 x + 3 y 2 x2 + 2 x + 2 generan L. > A2:=matrix([[3,2,-1],[2,2,2],[1,1,1]]);


2

3 A2 := 2 1 > rank(%); 2

2 2 1

-1 2 1

Entonces el polinomio x + x + 1 pertenece a L. > A3:=matrix([[3,2,-1],[1,1,1]]);


2

3 A3 := 1 > rank(%);

2 1

-1 1

2 Si, B es una base ya que genera un subespacio de dimensin 2.

3) > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

La matriz asociada a la funcin f respecto de las bases cannicas de R4 y R2 es: > A:=matrix(2,4,[[4,6,1,-3],[5,-7,2,4]]); 4 A := 5 6 -7 1 2 -3 4

La matrix de cambio de base en R4 es: > B:=matrix(4,4,[[1,0,0,1],[0,1,0,0],[-1,2,-4,0],[0,0,0,5]]) ; 1 0 B := -1 0 0 1 2 0 0 0 -4 0 1 0 0 5

Entonces la matrix asociada a f respecto de la base B de R4 y la base cannica de R3 es: > M:=evalm(A&*B); 3 8 -4 M := 3 -3 -8 -11 25

4) > restart,with(linalg): > G:=matrix([[1,1],[0,0],[1,0],[1,1]]);

1 1 0 0 G := 1 0 1 1 > map(x->x mod 2, [1,1,1,0]+[1,0,1,1]); [ 0, 1, 0, 1 ] La distancia de Hamming es 2. > control:=proc(g) local ll,cc,J,H; ll:=linalg[coldim](g); cc:=linalg[rowdim](g); J:=linalg[augment](g,array(identity, 1..cc,1..cc)); H:=Gaussjord(J) mod 2; RETURN(linalg[submatrix](H,ll+1..cc, ll+1..ll+cc)); end: > H:=control(G); 1 0 0 1 H := 0 1 0 0 > map(x->x mod 2, evalm(H&*matrix([[1],[1],[1],[0]]))); 1 1 > map(x->x mod 2, evalm(H&*matrix([[1],[0],[1],[1]]))); 0 0 No tienen el mismo sndrome. 5) > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> A:=matrix([[0.00001,1,1,1.5],[1,1,-2,1],[2,1,-4,1]]); .00001 1 1 A := 1 1 2 > Digits:=4;A1:=swaprow(A,1,2); 1 A1 := .00001 2 > A2:=pivot(A1,1,1); 1 A2 := 0. 0 > A3:=pivot(A2,2,2); 1 1. -1 -2 1. 0 1 1.500 -1 1 1 1 1 1.5 -2 1 -4 1

Digits := 4 -2 1 1 1.5 -4 1

1. A3 := 0. 0. > A4:=pivot(A3,3,3); 1. A4 := 0. 0. La solucin aproximada es (1,1,1/2). > #fin

0. 1. 0. 0. 1. 0.

-3. 1. 1. 0. 0. 1.

-.5000 1.500 .5000 1. 1. .5000

Examen 3
1. Dado el sistema de ecuaciones dependiente del parmetro a ax + y + z =1 x + ay + z =1 x + y + az = 1 determinar el valor de a tal que el sistema es compatible indeterminado. > 2. Verificar si el sistema B={x3 + 2 x2 4, 15 x2 5} es una base del subespacio vectorial de P3( x ) generado por el sistema de polinomios { x3 + 2 x2 4, 15 x2 5, 15 x3 15 x2 45 , 180 x2 60, 7 x3 + 166 x2 32}. > 3. Calcular la matriz asociada (respecto de las bases cannicas) a la funcin lineal f: R2--> R2 definida por la composicin de una reflexin con respecto al eje x, seguida de una compresin en la direccin y con factor 1/2, seguida de un deslizamiento cortante en la direccin x con factor 3/2 y una reflexin con respecto de la recta y=x. > 1 1 1 0 1 0 la matriz generadora de un cdigo lineal C. Determinar la distancia 4. Sea G = 1 0 1 0 1 1 de Hamming de las palabras recibidas (0,1,1,0) y (1,0,1,1) y verificar si tienen el mismo sndrome. > 5. Dado el sistema 0.00001x + 2y -z + t =2 x - 2y + 3z - t =1 x + y + z + t = 4.5 2x + 4y - z - t = 1, calcular la solucin aproximada con el mtodo de eliminacin con pivoteo parcial utilizando 4 cifras significativas.

> #fin

Soluciones del examen 3


1) > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> A:=matrix([[a,1,1,1],[1,a,1,1],[1,1,a,1]]); a A := 1 1 > gausselim(A); a 0 0 > solve(2-a^2-a,a); -2, 1 Si a es distinto de 0,1, -2 y -1 el sistema es compatible determinado: > gaussjord(A); 1 1 0 0 a 2 + 1 0 1 0 a+2 1 0 1 0 a+2 > a:=0;A:=matrix([[2,1,1,1],[1,1,a,1],[1,a,1,1]]); a := 0 2 A := 1 1 > gaussjord(A); 1 0 1 0 0 1 -1 0 0 0 0 1 Si a=0 el sistema es incompatible. > a:=1;A:=matrix([[2,1,1,1],[1,1,a,1],[1,a,1,1]]); a := 1 2 A := 1 1 > gaussjord(A); 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 a1 a 0 1 a 1 a 2 a2 a
2

1 a 1

1 1 a

1 1 1 1 a 1 a 1 a

1 0 0 0 0 1 1 1 0 0 0 0 Si a=1, el sistema es compatible indeterminado. > a:=-1;A:=matrix([[2,1,1,1],[1,1,a,1],[1,a,1,1]]); > gaussjord(A); a := -1 2 A := 1 1 1 1 -1 1 -1 1 1 1 1 1 -1 2 -1 2

0 0 1 0 1 0 0 1 0 Si a=-1, el sistema es compatible determinado. > a:=-2;A:=matrix([[2,1,1,1],[1,1,a,1],[1,a,1,1]]); a := -2 2 A := 1 1 > gaussjord(A); 3 1 0 0 4 -1 0 1 0 4 -1 0 1 0 4 Si a=-2, el sistema es compatible determinado. Se sigue que el sistema es compatible indeterminado slo si a =1. 2) > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

1 1 -2

1 -2 1

1 1 1

> p1:=x^3+2*x^2-4;p2:=15*x^2-5;p3:=15*x^3-15*x^2-45;p4:=180* x^2-60; p5:=-7*x^3+166*x^2-32; p1 := x3 + 2 x2 4 p2 := 15 x2 5 p3 := 15 x3 15 x2 45 p4 := 180 x2 60 p5 := 7 x3 + 166 x2 32

> A:=matrix([[-4,-5,-45,-60,-32],[0,0,0,0,0],[2,15,-15,180,1 66],[1,0,15,0,-7]]); -4 0 A := 2 1 > rank(A); 2 > B:=matrix([[-4,-5],[0,0],[2,15],[1,0]]); -4 -5 0 0 B := 2 15 0 1 > rank(B); 2 Se sigue que B es una base. 3) > restart; with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

-5 0 15 0

-45 0 -15 15

-60 0 180 0

-32 0 166 -7

> Rxy:=matrix([[0,1],[1,0]]); 0 Rxy := 1 > Dkx:=matrix([[1,3/2],[0,1]]); 1 Dkx := 0 > Cky:=matrix([[1,0],[0,1/2]]); Cky := > Rx:=matrix([[1,0],[0,-1]]); 1 0 1 0 3 2 1 0 1 2 0 -1 -1 2 -3 4

1 Rx := 0 > evalm(Rxy&*Dkx&*Cky&*Rx); 0 1

4) > restart,with(linalg): > G:=matrix([[1,1,1],[0,1,0],[1,0,1],[0,1,1]]);

1 0 G := 1 0 > rank(G);

1 1 0 1

1 0 1 1

3 > map(x->x mod 2, [0,1,1,0]+[1,0,1,1]); [ 1, 1, 0, 1 ] La distancia de Hamming es 3. > control:=proc(g) local ll,cc,J,H; ll:=linalg[coldim](g); cc:=linalg[rowdim](g); J:=linalg[augment](g,array(identity, 1..cc,1..cc)); H:=Gaussjord(J) mod 2; RETURN(linalg[submatrix](H,ll+1..cc, ll+1..ll+cc)); end: > H:=control(G); H := [1 1 1 0] > map(x->x mod 2, evalm(H&*matrix([[0],[1],[1],[0]]))); [ 0] > map(x->x mod 2, evalm(H&*matrix([[1],[0],[1],[1]]))); [ 0] Si, tienen el mismo sndrome. 5) > restart;with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected

> A:=matrix([[0.00001,2,-1,1,2],[1,-2,3,-1,1],[1,1,1,1,4.5], [2,4,-1,-1,1]]); .00001 2 -1 1 1 -2 3 -1 A := 1 1 1 1 2 4 -1 -1 > Digits:=4;A1:=swaprow(A,1,2); Digits := 4 1 .00001 A1 := 1 2 > A2:=pivot(A1,1,1); -2 2 1 4 3 -1 -1 1 1 1 -1 -1 1 2 4.5 1 2 1 4.5 1

1 -2 3 -1 1 0. 2. -1. 1. 2. A2 := 0 3 -2 2 3.500 -1 0 8 -7 1 > A3:=mulrow(A2,2,1/2);A4:=pivot(A3,2,2); 1 0. A3 := 0 0 -2 1.000 3 8 3 -1 -.5000 .5000 -2 2 -7 1 1 1.000 3.500 -1

1. 0. 2. 0. 3. 0. 1. -.5000 .5000 1. A4 := 0. 0. -.5000 .5000 .5000 -3. -3. -9. 0. 0. > A5:=mulrow(A4,3,-2);A6:=pivot(A5,3,3); 1. 0. A5 := -0. 0. 0. 1. -0. 0. 2. 0. -.5000 .5000 1.000 -1.000 -3. -3. 3. 1. -1.000 -9.

1. 0. 0. 2. 5. 0. 1. 0. 0. .5000 A6 := 0. 0. 1. -1. -1. 0. 0. 0. -6. -12. > A7:=mulrow(A6,4,-1/6);A8:=pivot(A7,4,4); 1. 0. A7 := 0. -0. 1. 0. A8 := 0. 0. La solucin aproximada es (1, 1/2,1,2). > #fin > > > 0. 0. 1. 0. 0. 1. -0. -0. 0. 1. 0. 0. 0. 0. 1. 0. 2. 0. -1. 1.000 0. 0. 0. 1. 5. .5000 -1. 2.000

1. .5000 1. 2.

También podría gustarte