Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Matrices en Maple
Matrices en Maple
Objetivos de la sesión
Que el alumno repase algunos de los conceptos básicos del Álgebra Lineal ya
estudiados en cursos anteriores.
Tiempos
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
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);
basta con utilizar ":" en vez de ";" despues del comando with( nombre_librería ). Por
ejemplo:
> with(linalg):
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.
> restart;with(linalg):
Obsérvese que los avisos que aparecen en pantalla son "outputs" normales y no indican
un problema.
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.
> I6:=matrix(6,6,Id);
Obtenemos la traspuesta de A:
> transpose(A);
Calculamos su determinante (simbólico):
> det(A);
Calculamos su inversa :
> inverse(A);
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];
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:
> 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.
> 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);
> with(plots):
> u:=vector([1,2,3]);
> v:=vector([2,5,7]);
> dotprod(u,v);
> longitud:=x->sqrt(dotprod(x,x));
> longitud(u);
> 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.
Como hemos visto, Maple tiene implementada en la librería linalg un comando para
El objetivo de este apartado es exponer con claridad cuales son las herramientas básicas
que configuran los métodos
+....+
+....+
.....
+....+ ,
> 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);
> Am:=concat(A,B);
Ejemplo 1
Dado el sistema
> S:={x[1]+x[2]+x[3] = 1, 2*x[1]-2*x[2]+x[3] = 2, 3*x[1]+3*x[2]+3*x[3] = 3};
> 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]);
> 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);
Compatibilidad e incompatibilidad
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:
-> ->...->
Por ejemplo, está claro que con la representación establecida para los sistemas de
como solución .
+....+ -...-
.....
-...-
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
Ejemplo 2
> Am:=concat(A,B);
> 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
> mulrow(A,1,24);
> addrow(A,1,3,-3);
> filapor:=(i,k)->mulrow(A,i,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 distinto de
cero, el segundo elimina filas y el tercero elimina columnas):
> 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
> pivot(A,2,3);
> A[2,5];pivot(A,2,5);
> 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);
> gaussjord(Am);
En todo caso, como ya hemos comentado, la función que resuelve de forma directa el
> A:=matrix([[1,1,1],[2,-2,1],[3,3,3]]);
> B:=matrix([[1],[2],[3]]);
> linsolve(A,B);
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
Tiempos
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.
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:
> restart:with(linalg):
> 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];
> stackmatrix(A1,B1);
> augment(A1,B1);
> concat(A1,B1);
> delcols(augment(A1,B1),2..4);
> delrows(stackmatrix(A1,B1),3..3);
> #Pulsa return
Parámetros:
A - matriz
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);
mulcol(A, c, expr)
mulrow(A, r, expr)
Parámetros:
A - matriz
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);
> 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:
Parámetros:
A - matriz
r1,r2,c1,c2 - naturales
> swapcol(A1,1,2);
> swaprow(B1,3,1);
pivot(A, i, j)
pivot(A, i, j, r..s)
Parámetros:
A - matriz
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].
> 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:
> A:=matrix(3,3,[2,1,1,2,0,1,1,1,1]);b:=matrix([[5],[1],[1]]);
> linsolve(A,b);
> 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));
Verifiquemos el resultado:
> multiply(A,%%);
> 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
> with(linalg):
> A:=matrix(3,3,[3,2,-1,1,-2,1,1,-1,1]);
> B:=matrix([[5],[3],[1]]);
> linsolve(A,B);
> 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);
Por ejemplo:
-- -->
Por ejemplo:
-- -->
-- <--> -->
Por ejemplo:
-- - ->
Por ejemplo:
-- -->
Por ejemplo:
-- -->
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));
> Af := evalm(P[1](lambda)&*A);
> Ac := evalm(A&*P[1](lambda));
, , 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
":
> Af := evalm(S[12](lambda)&*A);
> 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
>
>
>
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 ":
> Ac:=evalm(A&*E[12]);
En resumen, dada una matriz A, si multiplicamos dicha matriz por la izquierda por una
Del mismo modo, si multiplicamos dicha matriz por la derecha por una matriz de la
Tabla resumen
Por ejemplo:
> 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 ejemplo:
> evalm(S[13](-lambda)&*S[13](lambda));
> Ac := evalm(A&*S[13](lambda));
> evalm(Ac&*S[13](-lambda));
>
>
dimensión del subespacio de generado por el sistema formado por los " n "
vectores columna de la matriz A .
Así por ejemplo, considerando el espacio vectorial (R) de los polinomios reales en
la variable x de grado menor o igual que 3, para determinar la dimensión del subespacio
matriz .
Veamos, pues, un método para obtener de una manera sencilla el rango de una matriz.
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.
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
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 es una base del subespacio columna de
la matriz original A considerada.
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:
> A:=matrix(4,3,[2,1,5,1,-2,0,0,1,1,0,0,0]);
> A1:=addcol(A,1,2,2);
> A2:=addcol(A1,2,3,-1);
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.
matriz .
Si coinciden ambos rangos, el vector pertenece al subespacio generado y en caso
contrario no.
> A:=matrix(3,2,[1,4,0,3,3,2]);
> rank(A);
> Am:=matrix(3,3,[1,4,3,0,3,4,3,2,2]);
> rank(Am);
Determinante
Vamos a ver como se pueden usar las propiedades del determinante para
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.
naturales, = {1,2,3,...,n}.
Es usual representar una permutación en S(n) por medio de una matriz de dos filas y
n columnas, así que, por ejemplo,
(1) =6, (2) =2, (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
> permute(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);
Por ejemplo,
- (1 2 3) es la identidad,
> 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);
..., n) es lo de obtener la nueva ordenación ( (1), (2), (3), (4), (5), (6))
de estos n elementos.
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
Por ejemplo
de la lista ( (1), (2), (3), (4), (5), (6)), como se hace en un algoritmo
de ordenación burbuja.
( (1) =6, (2) =2, (3) =4, (4) =3, (5) =5, (6) =1) =(6,2,4,3,5,1)
(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
det(A)= ... ,
Ejemplos:
> A:=matrix(2,2,[[1,2],[-4,1]]);
y la formula anterior
> determinante(A):=1*A[1,1]*A[2,2]-1*A[1,2]*A[2,1];
> det(A);
> B:=matrix(3,3,[[1,2,3],[4,3,6],[0,1,2]]);
> 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
a partir de la fila i de A es
y a partir de la columna j de A es
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:
> restart:with(linalg):
A:=matrix(2,2,[[1,2],[-4,1]]);
o la segunda columna
> B:=matrix(3,3,[[1,2,3],[4,3,6],[0,1,2]]);
det( )=1.
El determinante de una matriz triangular superior es igual al producto de los elementos
de la diagonal.
= ,
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
= ,
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
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),
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.
> n:=6;i:=4;lambda:=-2;P(i,lambda):=mulrow(Id(n),i,lambda);
> det(%);
> n:=6;i:=4;j:=6;lambda:=-2;S(i,j,lambda):=addrow(Id(n),i,j,lambda);
> det(%);
> n:=6;i:=4;j:=6;E(i,j):=swaprow(Id(n),i,j);
> det(%);
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
B=
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]);
> 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));
fila i la j multiplicada por ", resulta que det(A) debe coincidir con det(A4).
Comprobémoslo:
> det(A);
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.
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
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);
> 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
> 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 se pueden definir el producto vectorial de dos
vectores, crossprod en Maple,
> restart:with(linalg):
> u := vector([u1,u2,u3]);
> crossprod(u,v);
> PV:=matrix(3,3,[[e1,e2,e3],[u1,u2,u3],[v1,v2,v3]]);
> M[1,1]:=det(delcols(delrows(PV,1..1),1..1));
> M[1,2]:=det(delcols(delrows(PV,1..1),2..2));
> M[1,3]:=det(delcols(delrows(PV,1..1),3..3));
> w:=vector([w1,w2,w3]);
> innerprod(u,crossprod(v,w));
> 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.
> 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);
> norm(crossprod(v,w));
> abs(innerprod(u,crossprod(v,w)));
en , teniendo en mente que el "volumen" debe ser una medida del tamaño de un
paralelepípedo):
1.- .
2.- .
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
área del paralelogramo, en el caso ) formado por los vectores columna de dicha
matriz. Por tanto es razonable dar la siguiente definición:
> A:=matrix(3,3,[1,2,1,-1,1,0,-2,1,7]);
> det(A);
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.
Se sigue que
> #fin