El método de Gauss-Jordan y preliminares de Álgebra Lineal

El método de Gauss-Jordan y preliminares de Álgebra Lineal Práctica 1 Objetivos de la sesión Presentar al alumno las posibilidades de aplicación del

25 downloads 65 Views 684KB Size

Recommend Stories


TEMA 6 EL LINEAL. 6.2 Análisis del lineal. 6.1 Definición y funciones del lineal. 6.1 Definición y funciones del lineal
6.1 Definición y funciones del lineal TEMA 6 EL LINEAL Getafe, 27 de febrero de 2009 † H. salen: “El lineal se puede definir como todo el espacio de

Series y sucesión lineal
Profr. Efraín Soto Apolinar. Series y sucesión lineal En la naturaleza muchas veces aparecen las sucesiones de números. Por ejemplo, cuando el hombre

CORRELACIÓN Y REGRESIÓN LINEAL
Diplomado en Salud Pública 2. Metodología en Salud Pública CORRELACIÓN Y REGRESIÓN LINEAL Autor: Clara Laguna 4.1 INTRODUCCIÓN Después de estudiar có

Story Transcript

El método de Gauss-Jordan y preliminares de Álgebra Lineal Práctica 1

Objetivos de la sesión Presentar al alumno las posibilidades de aplicación del programa Maple al Álgebra Lineal. Familiarizar al alumno con la sintaxis básica de Maple e introducir algunos comandos nuevos. Que el alumno repase algunos de los conceptos básicos del Álgebra Lineal ya estudiados en cursos anteriores. Que el alumno repase y afiance su comprensión del método de Gauss-Jordan para la resolución de un sistema de ecuaciones lineales y utilice Maple para resolver por este método varios sistemas de ecuaciones lineales. En la práctica 3 se tratarán los correspondientes métodos numéricos. > #Pulsa return

Tiempos La duración de la práctica (incluida la evaluación) 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 "Lección 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 práctica. La segunda hora a la realización del test de evaluación. > #Pulsa return

Como se debe realizar la siguiente práctica El presente guión 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 teóricas. Lo deseable, para que queden afianzadas las ideas y las nociones básicas 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 práctica se recuerdan algunas características y comandos de Maple y se describen a través de ejemplos algunos comandos del paquete "linalg" útiles para el desarrollo de esta y otras prácticas. Así pues el alumno deberá ejecutar dichos ejemplos y tecleará otros que le permitan comprender la aplicación de dichos comandos. > #Pulsa return

Maple es un Sistema de Computación Matemática (abreviadamente S.C.M.) que permite realizar cálculos numéricos, manipular expresiones simbólicas y crear nuevos procedimientos , entendiendo por éstos una secuencia de instrucciones, sentencias y funciones cuyo objetivo es resolver o realizar una determinada aplicación. A este respecto es importante señalar que, además del núcleo de Maple que incorpora ciertas funciones y comandos de uso corriente, y que se carga automáticamente al arrancar el sistema, el sistema Maple tiene una biblioteca compuesta de librerías. En las librerías residen las funciones que realizan tareas matemáticas complejas. Para trabajar con las funciones y/o los procedimientos de una de estas librerías, es preciso utilizar el comando with . Así por ejemplo, para trabajar con la librería 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 librería. > with(linalg); Warning, new definition for norm Warning, new definition for trace

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

Teniendo en cuenta que, al menos para la mayoría de vosotros, éste no es el primer curso en el que habeis tenido contacto con Sistemas de Computación Matemática, vamos a dedicar la primera parte de la sesión 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 fórmulas, ecuaciones y datos. La siguiente sesión está preparada como sesión introductoria al manejo de Maple en el marco del Álgebra Lineal. ÁLGEBRA LINEAL Y MANIPULACIÓN DE MATRICES. Llamamos al paquete utilizando el comando with(linalg): > restart;with(linalg): Warning, new definition for norm Warning, new definition for trace

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

Para obtener la matriz anterior, se puede utilizar también la sintaxis > A:= matrix(3,3,[1,-alpha,2/3,-1,0,1,beta/3,2,-1]);

Es también posible definir una matriz A como una función de los pares ordenados de índices (i,j), expresando cada coeficiente A[i,j] en función de los valores de i y de j. Así la matriz identidad

de dimensión 6 se puede definir como una función

con dominio igual a {1,2,3,4,5,6}x{1,2,3,4,5,6}: > Id:=(i,j)-> if i=j then 1 else 0;fi;

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

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

Calculamos su determinante (simbólico): > det(A);

Calculamos su inversa : > inverse(A);

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

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

También es posible multiplicar matrices. Por ejemplo, sea C = AB: > C:= multiply(A,B);

Para cálculos más complicados con expresiones matriciales, la función evalm() permite utilizar una notación más natural. Obsérvese que el operador especial " &* " denota el producto habitual de matrices, mientras que el operador "*" denota la multiplicación por escalares . El siguiente ejemplo calcula AB-(1/3)*C: > evalm(A &* B - 1/3*C);

Finalmente, los sistemas de ecuaciones lineales también pueden ser resueltos utilizando su representación matricial. En ese caso se emplea el comando linsolve(A,B) , entendiéndose entonces que lo que se está resolviendo es la ecuación matricial . Por ejemplo: > A:= matrix([[2,2,2],[1,1,0],[-1,0,1]]);

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

> X:=linsolve(A,B);

> #Pulsa return

Para finalizar esta parte de la práctica, vamos a ver cómo se puede utilizar Maple para obtener la representación gráfica de los sistemas de ecuaciones con tres incógnitas mediante los planos determinados por cada una de las ecuaciones que lo componen. Consideremos ahora el sistema

, que podemos escribir como una lista de tres ecuaciones lineales: > Sistema:=[2*x+y+z = 1,2*x+y+z = 5, 3*x-y-z = 0];

Expresando en cada ecuación la variable e

explícitamente en función de las variables

, se obtiene el sistema de ecuaciones

Maple contiene el comando isolate(ecuación, expresión) en la librería isolate , que nos permite escribir las ecuaciones en esta última forma: > readlib(isolate): > Sistz:={isolate(Sistema[1],z),isolate(Sistema[2],z),isolate(Sistema[3],z)};

Si queremos representar las tres ecuaciones en una única gráfica, 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 gráfica obtenida, aparecen nuevos botones en la barra de herramientas y podéis explorara que acciones se corresponden. También, se puede arrastrar el cursor en el área de la gráfica para cambiar de perspectiva. Con la representación gráfica de los planos anteriores a la vista, ¿es compatible el sistema de ecuaciones lineales anterior? > #Pulsa return

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

40..40);

Para irnos familiarizando con algunos comandos que se emplearán en las siguientes prácticas, tras la definición de los correspondientes vectores, utilizaremos el comando dotprod (producto escalar usual) para definir la longitud (la norma) de un vector genérico (en Maple sqrt =raíz cuadrada). > u:=vector([1,2,3]);

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

> dotprod(u,v);

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

> longitud(u);

Podemos ahora calcular la proyección ortogonal de u sobre v, utilizando la fórmula : > evalm((dotprod(u,v)/dotprod(v,v))*v);

#Pulsa return

Lección Introducción En la sección anterior se ha visto, entre otras cosas, cómo se pueden resolver sistemas de ecuaciones lineales, invertir matrices y calcular el valor de determinantes. Vamos ahora a utilizar Maple para aplicar los métodos de reducción de matrices por medio de transformaciones elementales vistos en las clases teóricas. > #Pulsa return

Como hemos visto, Maple tiene implementada en la librería linalg un comando para resolver sistemas de ecuaciones lineales, siendo su sintaxis , donde A es la matriz de coeficientes y B es la matriz de los términos independientes (y por consiguiente una matriz columna). El objetivo de este apartado es exponer con claridad cuales son las herramientas básicas que configuran los métodos de eliminación gaussiana y de Gauss-Jordan, al margen de que el uso del comando linsolve permita resolver sistemas de ecuaciones sin saber realmente cómo se está haciendo. > #Pulsa return

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

,

es posible plantearlo en la forma matricial > A:=matrix(3,4,(i,j)->a[i,j]);

:

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

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

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

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

Ejemplo 1 Dado el sistema

= (A|B),

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

su matriz ampliada asociada

sería

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

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

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

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

y creando la matriz

asociada a nuestro sistema

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

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

La matriz ampliada

=(

|

) es

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

> Am:=concat(A,B);

> #Pulsa return

Compatibilidad e incompatibilidad Para determinar si un sistema es compatible o no, y resolverlo en su caso por el método de eliminación gaussiana o por el de Gauss-Jordan, realizaremos transformaciones elementales por filas (intercambiar filas, multiplicar filas por un número distinto de cero, sumar o restar filas) sobre la matriz ampliada , lo que equivale a realizar las mismas operaciones sobre las ecuaciones que representan dichas filas. En símbolos: -> donde

->...->

es el resultado de aplicar la transformación (notar que

=

,

, a la matriz

es la matriz original).

> #Pulsa return

Para el método de eliminación gaussiana escalonada del tipo:

tendrá que estar en forma

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

Según vimos, si

es distinto de cero el sistema es incompatible .

Por otra parte, si y , entonces =1 y el sistema es compatible determinado y se puede resolver o bien con el método de Gauss-Jordan (realizando transformaciones elementales por filas hasta que la matriz obtenida esté en forma escalonada reducida ), o bien por sustitución hacia atrás . Por ejemplo, está claro que con la representación establecida para los sistemas de

ecuaciones lineales, el sistema correspondiente a la matriz como solución

, tendría

.

Finalmente, si y r #Pulsa return

+....+

-...-

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

, o bien por sustitución hacia atrás.

> #Pulsa return

Ejemplo 2 En el Ejemplo 1, hallamos la matriz ampliada

asociada al sistema

> Am:=concat(A,B);

que, sometida a oportunas transformación elementales por filas, daría lugar a > matrix([[1, 1, 1, 1], [0, 1, 1/4, 0], [0, 0, 0, 0]]);

por lo que deberíamos pasar al sistema

con su correspondiente matriz asociada > matrix([[1, 1, 1-x[3]], [0, 1, -x[3]/4]]);

Para calcular las soluciones, podemos sustituir

en la ecuación

, o escribir la matriz en su forma escalonada reducida: > matrix([[1, 0, 1-x[3]+1/4*x[3]], [0, 1, -1/4*x[3]]]);

Tranformaciones elementales por filas con Maple Dada una matriz > A:=matrix([[1,1,1,-1,1],[2,-2,1,2,0],[3,3,3,3,1],[1,0,-3,4,5]]);

Los comandos de Maple que corresponden a las transformaciones elementales por filas sobre una matriz

son los siguientes:

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

> swaprow(A,1,2);

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

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

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

la función así definida multiplica la fila i-ésima de A por k. > filapor(1,24);

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

distinto de

> mulcol(A,1,k);

> delrows(A,1..2);

> delcols(A,3..4);

Finalmente la función 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 excepción del elemento matriz, que es el que se ha utilizado como pivote. Si el elemento el comando pivot se obtiene un mensaje de error: > pivot(A,2,3);

de dicha es nulo, al aplicar

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

Error, (in pivot) cannot pivot on zero entry

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

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

La función gaussjord reduce una matriz a su forma escalonada reducida: > gaussjord(Am);

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

, que básicamente realiza

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

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

> linsolve(A,B);

> #Pulsa return

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

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

> gaussjord(A);

> gausselim(A);

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

Práctica 2

Método de Gauss y rango. Determinantes Objetivos de la sesión Recordar algunas de las funciones de la librería linalg que se introdujeron en la práctica 1 e introducir otras nuevas necesarias para el desarrollo de esta práctica.

Afianzar en el alumno la comprensión de la base teórica del método 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 duración de la práctica (incluida la evaluación) 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 realización de esta práctica" y "Lección", donde se introducen y repasan los conceptos y se muestran los comandos de Maple precisos para el desarrollo de la práctica. La segunda hora a la realización del test de evaluación. > #Pulsa return

Como se debe realizar la siguiente práctica El presente guión 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 teóricas. Lo deseable, para que queden afianzadas las ideas y las nociones básicas 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 realización de esta práctica En esta primera parte de la práctica se describen, a través de ejemplos, algunos comandos del paquete linalg útiles para la aplicación del método de Gauss que vamos a exponer y se repasarán los comandos utilizados en la práctica 1. Así pues el alumno deberá ejecutar dichos ejemplos y tecleará otros que le permitan comprender la aplicación de dichos comandos. Los siguientes son algunos comandos incorporados por Maple que pueden ser necesarios para la realización de esta práctica (referida fundamentalmente al método de Gauss) que están disponibles en la librería linalg: stackmatrix augment addcol addrow mulcol mulrow delcols delrows swapcol swaprow row col pivot linsolve gausselim gaussjord

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

OBSERVACIÓN: En la línea de input de comandos anterior hemos introducido el símbolo ":" cuya acción, recordemos, es la misma del ";" pero no hace eco (es decir, no se imprime nada como output aunque realiza la acción que le precede). > A1:=matrix(3,3,[1,-2,5,0,0,Pi/4,7,8,9/5]);

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

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

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

El comando stackmatrix une dos matrices verticalmente: > stackmatrix(A1,B1);

La función augment (como la función concat ) une dos matrices horizontalmente: > augment(A1,B1);

> concat(A1,B1);

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

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

> #Pulsa return

Recordemos las funciones addrow y addcol , ya empleadas en la práctica anterior: Llamadas a las funciones addrow y addcol: addrow(A, r1, r2, m) addcol(A, c1, c2, m) Parámetros: A - matriz r1,r2,c1,c2 - enteros; índices de fila (columna) m - expresión 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 función addcol tiene un comportamiento similar pero para columnas. Recordemos los coeficientes de la matriz A1 anterior. Nota: Según vimos, la acción del comando "evalm" es similar a la del comando "eval" pero para matrices. > evalm(A1);

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

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

Recordemos también las funciones mulcol y mulrow : Llamadas a las funciones: mulcol(A, c, expr) mulrow(A, r, expr) Parámetros: A - matriz r,c - enteros positivos expr - expresión 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 expresión expr. La función mulrow(A,r,expr) tiene un comportamiento análogo: > mulcol(A1,2,x);mulrow(B1,1,2/3);

La función equal determina si dos matrices son iguales: > equal(A1,B1);

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

La función transpose traspone una matriz: > C1 := matrix([[1, 0, 7], [-2, 0, 8], [5, 1, 9]]);

> C1:=transpose(A1);

> v1:=row(C1,3);

> v2:=col(A1,3);

> equal(v1,v2);

Recordemos las funciones swapcol y swaprow también empleadas en la primera práctica: Llamada a las funciones swapcol y swaprow: swaprow(A, r1, r2) swapcol(A, c1, c2) Parámetros: A - matriz r1,r2,c1,c2 - naturales La función swaprow(A,r1,r2) crea una nueva matriz a partir de la matriz A intercambiando las filas r1 y r2. Análogamente swapcol(A,c1,c2) crea una nueva matriz a partir de A intercambiando las columnas c1 y c2. > swapcol(A1,1,2);

> swaprow(B1,3,1);

En esta práctica también vamos a utilizar la función pivot , ya empleada en la práctica anterior: Llamada a la función pivot: pivot(A, i, j) pivot(A, i, j, r..s) Parámetros: A - matriz i,j - enteros positivos

r..s - rango de filas La función 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, produciéndose un error en caso contrario. La función 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 prácticamente la misma funcionalidad que pivot(A,i,j) excepto que las transformaciones tan sólo afectan a las filas r, r+1,...,s: > P1:=pivot(stackmatrix(A1,B1),1,1);

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

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

Señalaremos también que la función linsolve permite resolver sistemas de ecuaciones lineales. La sintaxis de esta función es: "linsolve(A,b)" o también "linsolve(A,B)", donde A y B son matrices y b es un vector: > A:=matrix(3,3,[2,1,1,2,0,1,1,1,1]);b:=matrix([[5],[1],[1]]);

> linsolve(A,b);

También es posible determinar la inversa de una matriz empleando la función linsolve. En ese caso estaríamos resolviendo la ecuación matricial > Id:=matrix(3,3,[1,0,0,0,1,0,0,0,1]);

> linsolve(A,Id);

:

Veamos que la función inverse nos devuelve la misma matriz: > inverse(A);

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

El símbolo % permiten recuperar la última expresión evaluada, %% la penúltima, y así sucesívamente. Verifiquemos el resultado: > multiply(A,%%);

Para finalizar, recordaremos cómo actúan los comandos gausselim y gaussjord ya introducidos en la práctica anterior: > gausselim(A);

> gaussjord(A);

La función rank(A) determina el rango de una matriz A. > r1:=rank(A1);r2:=rank(B1);r3:=rank(stackmatrix(A1,B1));

Lección > #Pulsa return

Introducción Para comenzar, vamos a recordar en qué consiste el método 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 método de Gauss paso a paso para mejorar su comprensión. Consideremos el siguiente sistema de ecuaciones lineales:

En primer lugar lo resolvemos directamente: > with(linalg): Warning, new definition for norm Warning, new definition for trace > A:=matrix(3,3,[3,2,-1,1,-2,1,1,-1,1]);

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

> linsolve(A,B);

Ahora ya sabemos la solución. Esta solución la ha obtenido el sistema aplicando el método de Gauss-Jordan que tiene implementado. Vamos a obtenerla usando el método de Gauss-Jordan paso a paso según vimos en las clases teóricas: > Am:=concat(A,B);

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

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

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

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

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

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

Como puede comprobarse, hemos obtenido la solución esperada. > #Pulsa return

Las transformaciones y las matrices elementales Estamos ya en condiciones de desarrollar nuevas aplicaciones de los métodos de reducción de matrices basados en el uso de transformaciones elementales estudiados en las clases teóricas. Sea A una matriz mxn .

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

Transformación elemental

: sumar a la fila i de A un múltiplo de la fila j .

Matriz elemental de orden m

: es la matriz que se obtiene aplicando la

transformación elemental anterior a la matriz identidad

de orden m.

Por ejemplo:

--

-->

= > #Pulsa return

Transformación elemental nulo.

: multiplicar la fila i de A por un escalar

Matriz elemental de orden m

: es la matriz que se obtiene aplicando la

transformación elemental anterior a la matriz identidad

de orden m.

Por ejemplo:

--

-->

= > #Pulsa return

Transformación elemental Matriz elemental de orden m



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

: es la matriz que se obtiene aplicando la

transformación elemental anterior a la matriz identidad

de orden m.

no

Por ejemplo:

--



-->

= > #Pulsa return

Las transformaciones elementales por columnas y las matrices elementales correspondientes son las siguientes: Transformación elemental columna j .

: sumar a la columna i de A un múltiplo de la

Matriz elemental de orden n : es la matriz que se obtiene aplicando la transformación elemental anterior a la matriz identidad

de orden n y es igual a la matriz elemental

( notar la posición de los índices ) . Por ejemplo:

--

- ->

= > #Pulsa return

Transformación elemental no nulo.

: multiplicar la columna i de A por un escalar

Matriz elemental de orden n : es la matriz que se obtiene aplicando la transformación elemental anterior a la matriz identidad . Por ejemplo:

de orden n y es igual a la matriz elemental

--

-->

= > #Pulsa return

Transformación elemental j.



: intercambiar la columna i de A con la columna

Matriz elemental de orden n : es la matriz que se obtiene aplicando la transformación elemental anterior a la matriz identidad

de orden n y es igual a la matriz elemental

. Por ejemplo:

--

-->

= > #Pulsa return

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

(Obsérvese que en este caso la matriz P multiplica a la matriz A por la izquierda).

Análogamente, si realizando una transformación elemental por columnas sobre A obtenemos una matriz C , se verifica que existe una matriz invertible Q de orden n tal que . (Obsérvese que en este caso la matriz Q multiplica a la matriz A por la derecha). Veamos algunos ejemplos (recuérdese que para multiplicar una matriz A por una matriz B se utiliza el comando A&*B): > A := matrix(2,3,(i,j)->a(i,j));

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

Notar que

es 2x2 y que

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

Ahora, si definimos

de dimensión 3,

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

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

> #Pulsa return

Como se puede observar, según multipliquemos por la izquierda o por la derecha a la matriz A por la matriz (de dimensión adecuada) realizamos una transformación por filas o por columnas sobre A (respectivamente). Ejercicio : Definir las matrices ,

y

,

, y realizar los productos y

, y observar cual es el

resultado. > > >

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

Notar que

es de dimensión 2:

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

Ahora, si definimos

de dimensión 3

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

y multiplicamos por la derecha, se obtiene que > Ac:=evalm(A&*S[21](lambda));

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

.

El resultado de multiplicar a la matriz A por la matriz (de dimensión 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 dimensión adecuada) realizar los productos

,

,

y

,y y

, y observar cual es el resultado. > > >

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

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

Ahora, si definimos

de dimensión 3

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

y multiplicamos por la derecha, se obtiene que > Ac:=evalm(A&*E[12]);

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

Tabla resumen > #Pulsa return

Transformación elemental Producto de matrices Sumar a la fila i la j multiplicada por Multiplicar la fila i por Intercambiar la fila i con la fila j

A

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

Inversas de las transformaciones elementales

> #Pulsa return

Las matrices que corresponden a las transformaciones elementales son invertibles. En el caso de las matrices de la forma

fila o columna i-ésima por

, cuya acción consiste en multiplicar la

, es fácil deducir que su inversa es la matriz

.

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

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

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

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

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

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

Por otra parte la inversa de la matriz

es la matriz

.

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

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

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

Si ahora queremos verlo a partir de la actuación de estas matrices sobre la matriz genérica A dada: > Ac := evalm(A&*S[13](lambda));

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

Ejercicio: Determinar la matriz inversa de la matriz elemental

.

> > > #Pulsa return

Rango y transformaciones elementales Comenzaremos recordando algunas definiciones y resultados: Definición: Si A es una matriz de orden mxn , se denomina rango de la matriz A a la dimensión del subespacio de vectores columna de la matriz A .

generado por el sistema formado por los " n "

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

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

. Se obtiene el sistema

, con lo que la dimensión de H coincidirá con el rango de la

matriz

.

> #Pulsa return

Veamos, pues, un método para obtener de una manera sencilla el rango de una matriz. Definición: Se dice que una matriz columnas siguientes:

Existe

de

filas y

columnas es gaussiana si sus

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

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

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

(1, (1,

) es distinto de cero, y ) =0.

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

Así por ejemplo, son matrices gaussianas

,

,

,

.

> #Pulsa return

El interés de este tipo de matrices radica en que si una matriz es gaussiana, su rango coincide con el número de columnas no nulas que posee. Así por ejemplo,

rg(

)=2 y rg(

)=3.

> #Pulsa return

El método 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 método consiste en realizar transformaciones elementales por columnas sobre la matriz dada hasta obtener una matriz gaussiana , cuyo rango se determina de manera inmediata. El método 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 sólo se dispone de lapiz y papel, lo más sensato es utilizar el método de Gauss para determinar los rangos de las matrices objeto de estudio. Maple lleva incorporada un comando que determina automáticamente el rango de una matriz: > A:=matrix(3,3,[1,1,1,1,1,1,1,1,1]);

> rank(A);

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

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

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

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

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

es una base del subespacio columna de

> #Pulsa return

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

la base usual

obteniendo el sistema

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

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

,y

:

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

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

Para finalizar este apartado, vamos a ver un método 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 combinación 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 varía al añadir a la matriz anterior la columna correspondiente a las coordenadas de dicho vector.

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

hallaríamos el rango de la matriz

matriz

.

, y veríamos si coincide con el rango de la

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

> rank(A);

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

> rank(Am);

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

Determinante El concepto de determinante aparece de manera natural en varios contextos matemáticos. Algunos ejemplos son el cálculo del jacobiano para integración en varias variables, el cálculo vectorial, el cálculo de áreas y volúmenes, etc.... Vamos a ver como se pueden usar las propiedades del determinante para

calcular áreas de paralelogramos en

y de paralelepípedos en

,

relacionar el método de Gauss-Jordan para una matriz cuadrada con el cálculo de su determinante, desarrollar técnicas para resolver sistemas de ecuaciones lineales con el mismo número de ecuaciones que de incógnitas, es decir, cuya matriz asociada sea cuadrada. > #Pulsa return

En esta primera sección vamos a introducir (o recordar) el concepto de determinante de una matriz cuadrada. El grupo simétrico S(n) Antes de poder definir el determinante de una matriz cuadrada y estudiar sus aplicaciones necesitamos los conceptos de permutación y signo de una permutación que vamos a ilustrar a continuación. S(n) es el conjunto de las permutaciones (o simetrías) de un conjunto con n elementos , que podemos representar como el conjunto de los primeros n números naturales,

= {1,2,3,...,n}.

> #Pulsa return

Recordamos que S(n) consiste de todas las funciones biyectivas que

de

en

y

- la composición de dos permutaciones es una permutación - la composición de permutaciones es asociativa - la función identidad, Id(n)=n para todo n, es el elemento neutro respecto de la composición de permutaciones - toda permutación tiene una permutación inversa Por tanto, S(n) tiene estructura de grupo no conmutativo . > #Pulsa return

Es usual representar una permutación n columnas, así que, por ejemplo,

es la permutación

definida en

(1) =6,

(2) =2,

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

por (3) =4,

(4) =3,

(5) =5,

(6) =1.

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

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

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

Los elementos de S(3) se pueden interpretar como simetrías de un triángulo equilátero cuyo vértices estén marcados con 1, 2 y 3: >

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

Por ejemplo, - (1 2 3) es la identidad, - (1 3 2) es la simetría respecto de la bisectriz del ángulo en 1:

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

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

- (2 3 1) es la rotación que lleva 1 en 2, 2 en 3 y 3 en 1: > t1:=textplot([0.1,0.05,`3`],align={ABOVE,RIGHT}):t2:=textplot([1/2,sqrt(3/4)-

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

Ejercicio: determina el efecto geométrico de aplicar las permutaciones (2 1 3), (3 1 2) y (3 2 1) al triángulo equilátero rojo. > #Pulsa return

Por definición, el resultado de aplicar una permutación ..., n) es lo de obtener la nueva ordenación ( de estos n elementos.

(1),

al conjunto ordenado (1,2,3, (2),

(3),

(4),

(5),

(6))

Una transposición es una permutación que intercambia el orden de sólo dos elementos de la lista (1,2,3, ..., n). Por ejemplo

es la trasposición que intercambia el 1 con el 6, que se indicará como (1 6), omitiendo los elementos cuya posición no ha cambiato. Una inversión es una transposición que intercambia dos elementos consecutivos de la lista (1,2,3, ..., n). Por ejemplo

, es una inversión que se indicará como (4 5). > #Pulsa return

Dada una permutación f de n elementos, si queremos volver a la ordenación original (1,2,3, ..., n) podemos realizar un número adecuado de inversiones entre los elementos de la lista ( (1), (2), de ordenación burbuja.

(3),

(4),

(5),

(6)), como se hace en un algoritmo

Ejemplo: para reordenar los términos de la lista (

(1) =6,

(2) =2,

(3) =4,

(4) =3,

(5) =5,

(6) =1) =(6,2,4,3,5,1)

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

> #Pulsa return

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

(3),

(4),

(5),

(1),

(6)).)

En el último ejemplo hemos utilizado 10 inversiones y, por tanto, el signo de f es 1 y f es par. La definición de signo de una permutación se utilizará en el próximo párrafo para definir el determinante de una matriz cuadrada de dimensión n arbitraria. > #Pulsa return

Definición y primeros métodos para calcular el determinante de una matriz Definición: El determinante de una matriz cuadrada A=(

det(A)=

) de orden n es el escalar

...

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

, de n

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

Ejemplos: El determinate de la matriz 2x2 > A:=matrix(2,2,[[1,2],[-4,1]]);

se calcula utilizando la 2 (=2!) permutaciones

> permute(2);

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

> det(A);

El determinante de la matriz 3x3 > B:=matrix(3,3,[[1,2,3],[4,3,6],[0,1,2]]);

se calcula utilizando la 6 (=3!) permutaciones > permute(3);

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

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

> det(B);

Dada una matriz cuadrada A= (

) de dimensión n, existe una fómula para hallar su

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

de A que se

Al determinante de

, det(

), se le llama menor del elemento

y el

escalar det( ) es el adjunto del elemento . Con estas notaciones, la fórmula de Laplace para el cálculo del determinante de A a partir de la fila i de A es

y a partir de la columna j de A es

. > #Pulsa return

Es posible demostrar que los valores de las dos expressiones anteriores no dependen de la particular fila o columna elegida y que son iguales al valor del determinante de la matriz A. Estas últimas fórmulas nos dan una definición 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 fórmula de Laplace iterativamente hasta que las submatrices de las cuales tenemos que calcular el determinante tengan dimensión 2. Ejemplos: Apliquemos la fórmula de Laplace a la matriz 2x2 definida en los ejemplos anteriores > restart:with(linalg):

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

utilizando la primera fila

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

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

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

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

Para la matriz 3x3 de los ejemplos anteriores > B:=matrix(3,3,[[1,2,3],[4,3,6],[0,1,2]]);

la fórmula de Laplace para la primera fila es > dim(B):=3; i:=1;for k from 1 to dim(B) do

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

y para la tercera columna > dim(B):=3;j:=3;for k from 1 to dim(B) do

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

> #Pulsa return

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

una matriz invertible es distinto de cero y det( det(

)=1.

)=

, siendo siempre

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

Si A es una matriz invertible, su matriz inversa es

=

,

donde es la matriz cuadrada de la misma dimensión 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 solución del sistema es el vector de coordenadas

= donde

,

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

> #Pulsa return

Determinantes, trasformaciones elementales, sistemas libres y volúmenes En este apartado vamos a estudiar un método para calcular el determinante de una matriz cuadrada por medio de transformaciones elementales, sin tener que recurrir a su definición o a la fórmula de Laplace. Además veremos que el concepto de determinante se puede pensar como una generalización 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 transformación 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 añadir 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 añadir 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 dimensión n: > Id:=n->matrix(n,n,(k,r)->if k=r then 1 else 0; fi);

La matriz elemental

tiene determinante igual a

=

det( Id ):

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

> det(%);

tiene determinante igual a 1 = det( Id ): > n:=6;i:=4;j:=6;lambda:=-2;S(i,j,lambda):=addrow(Id(n),i,j,lambda);

> det(%);

tiene determinante igual a -1=-det( Id ): > n:=6;i:=4;j:=6;E(i,j):=swaprow(Id(n),i,j);

> det(%);

Cálculo 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 método 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 transformación consistente en sumar a la fila i la j multiplicada por multiplicando la fila k por

y en segundo lugar

, resulta que: B=

y det( B )=det(

(

))=det( )det( A )=

de donde det(A) =

*1*det(A)=

)det(

)=

det(

det(A),

det(B).

Nota : El método anterior también funcionaría realizando transformaciones sólo por columnas o también 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. Observación importante: Teniendo en cuenta que det( )=1, si la matriz triangular B se obtiene a partir de la matriz A realizando únicamente transformaciones del tipo "sumar a la fila i la fila j multiplicada por que det( A )=det( B ).

", de las propiedades vistas resulta

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

> det(T);

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

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

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

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

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

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

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

> det(A);

Determinantes, sistemas libres y volúmenes

y observando cómo varía Comenzaremos dibujando algunos paralelogramos en dicho "volumen bidimensional" al modificar el sistema de vectores que determinan dicho paralelogramo. Comenzaremos con el sistema de vectores {(1,0),(0,1)}:

> with(plottools):

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

> #Pulsa return

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

).

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

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

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

det(

)=2.

> #Pulsa return

Por otra parte, recordando la "regla del paralelogramo" que utilizábamos para sumar vectores, se puede demostrar, utilizando argumentos de geometría elemental que, siendo vectores de u y v , el área del paralelogramo definido por los vectores es igual al área del paralelogramo de finido por los vectores u y v .

yv

Veámoslo de modo gráfico en el siguiente dibujo, en el que u =(1,0), v =(0,1). La idea es comprobar gráficamente que el área del rectángulo 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 rectángulo determinado por este sistema calculando el siguiente determinante:

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

> det(A);

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

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

> det(A);

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

> det(A);

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

En las clases teóricas vimos que en vectores, crossprod en Maple,

se pueden definir el producto vectorial de dos

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

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

> crossprod(u,v);

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

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

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

,-

y

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

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

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

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

> det(PM);

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

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

el paralelepípedo determinado por u , v y w es > with(plottools):

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

El área del paralelogramo azul es la norma del producto vectorial de v con w : > norm(crossprod(v,w));

El volumen del paralelepípedo es el valor absoluto del producto mixto de u , v y w : > abs(innerprod(u,crossprod(v,w)));

Todo lo anterior se puede generalizar a conjuntos de

vectores en

, 5 vectores en

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

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

y de volumen

, teniendo en mente que el "volumen" debe ser una medida del tamaño de un en paralelepípedo): 1.-

.

2.-

.

3.-

para cualquier permutación

4.-

, donde

.

son los vectores de la base canónica.

Estas propiedades son verificadas por el valor absoluto del determinante, como se deduce de nuestra discusión sobre el comportamiento de éste con respecto a transformaciones elementales, cualquiera que sea . Además para , el valor absoluto del determinante de una matriz coincide con el volumen del paralelepípedo (o área del paralelogramo, en el caso ) formado por los vectores columna de dicha matriz. Por tanto es razonable dar la siguiente definición: Se define el volumen de un paralelepípedo generado por en

vectores

, ...,

, como el valor absoluto del determinante de la matriz cuyas columnas

son las coordenadas de las vectores

, ...,

respecto de la base canónica.

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

, 5 vectores de

, etc., un

> #Pulsa return

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

es libre si el determinante de la matriz

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

> det(A);

Esto mismo es obviamente válido para sistemas de 4 vectores de vectores de

, sistemas de 5

, etc., ya que

dada una matriz cuadrada A de dimensión arbitraria, los vectores fila (columna) forman un sistema libre (es decir, el rango de A es igual a su dimensión) si, aplicando el método de eliminación 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 sólo si det(A')=0. Pero det(A')=1. Se sigue que A es invertible si y sólo si det(A) es distinto de 0. > #fin

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.