Izquierda Indice Derecha

Matrices y vectores

 

indice

Construcción de matrices y vectores

Para Maxima un vector es sólo una lista: la lista de sus coordenadas. En consecuencia, es de aplicación todo lo indicado en el apartado Listas que tenga sentido en este tipo de lista.

El producto escalar de dos vectores reales se realiza con el operador "punto" . al igual que el producto de un número por un vector. No obstante resulta de utilidad cargar el paquete eigen que implementa el comando innerproduct capaz de utilizar indistintamente vectores reales o complejos. Pero hay que prestar atención, porque tal producto no es conmutativo.

v1: [1,2,3,4]; v2: [5,6,7,8]; v1 + v2; /* suma de dos vectores */ v1 . v2; /* producto escalar (real) de dos vectores */ 6 . v1; /* producto de un vector por un número */ v3 : [1,1]; v4 : [%i, %i]; v3 . v4; v4 . v3;
load(eigen); /* Sólo se carga una vez en la sesión */ print("Preste atención al orden de los vectores y decida el adecuado")$ innerproduct(v3,v4); innerproduct(v4,v3);

Además del comando innerproduct el paquete implementa también otros comandos cuyo nombre es sugerente: unitvector, columnvector, gramschmidt, eigenvalues, eigenvectors, uniteigenvectors. Tras cargar el paquete, un código como el siguiente proporciona información:

?? unitvector;

El paquete vect contempla el producto vectorial de vectores. Obviamente, dicho producto puede ser realizado con el procedimiento tradicional que aparece al final del ejemplo que aparece más abajo:

  1. load("vect")$
    Sólo se carga una vez en la sesión.
  2. express([1,2,3]~[4,5,6]);
    Tras cargar el paquete, el código que aparece en la línea precedente proporciona el vector producto escalar de los que en ella figuran.
  3. matrix( [i,j,k], [1,2,3], [4,5,6] ); determinant(%);
    Es la forma tradicional de hacerlo interpretando i, j, k como los vectores unitarios canónicos del espacio euclídeo tridimensional, cuyos coeficientes son las coordenadas del vector producto vectorial de los vectores de las filas segunda y tercera.

Maxima no implementa de forma nativa un comando para calcular la norma de un vector, pero es sencillo crearlo utilizando el producto escalar:

norm(v):= sqrt(v . v); v: [1,2,-3,-4]; norm(v);

 

Mediante comandos de Maxima se pueden construir matrices de varias formas. Y también los interfaces para trabajar con Maxima (por ejemplo wxMaxima) pueden aportar herramientas visuales que facilitan la construcción de las mismas.

Algunos ejemplos sencillos (los resultados en la consola de xMaxima):

  1. matrix([1,2,%pi], [5,9,2]);
  2. a[i,j]:=i^2 + j^2$ genmatrix(a,3,2);
    Una matriz generada mediante la fórmula para sus celdas
  3. diagmatrix(%pi,3);
  4. diag_matrix(1,2,3);
  5. ematrix(3,4,%pi,2,2);
  6. makelist( makelist(random(100),i,1,3),j,1,5); apply( matrix, % );
    Una matriz 5X3 construida usando dos listas aleatorias anidadas

 

indice

Recuperar elementos y submatrices
Añadir filas y columnas

Es posible asignar nombre a una matriz (digamos Matriz) y luego ir extrayendo de forma independiente filas (row), columnas (column) u otro tipo de submatrices haciendo uso de los comandos siguientes.

Algunos ejemplos que ilustran el funcionamiento de los comandos anteriores:

  1. a[i,j]:=i^2 + j^2$ MiMatr : genmatrix(a,4,6);
    Nuestra matriz inicial para experimentar los comandos antes descritos
  2. MiMatr[3,2];
    Recupera el elemento (3,2) de MiMatr
  3. col(MiMatr,2);
    Recupera la columna 2 de MiMatr
  4. row(MiMatr,3);
    Recupera la fila 3 de MiMatr
  5. submatrix(3,MiMatr,1);
    Elimina la fila 3 y la columna 1 de MiMatr
  6. submatrix(1,3,MiMatr,1);
    Elimina las filas 1 y 3 y la columna 1 de MiMatr.
  7. addrow(MiMatr,[1,1,2,6,3,1],[0,1,0,1,7,2]);
    Añade dos nuevas filas a MiMatr
  8. addcol(MiMatr,[1,1,1,9],[0,0,0,0]);
    Añade dos nuevas columnas a MiMatr

 

indice

Operaciones algebraicas con matrices y vectores

Pueden realizarse diferentes operaciones con matrices, las más básicas están simbolizadas del siguiente modo:

  1. kill(A,B)$ A : matrix([1,2,3],[4,8,5],[9,5,4]); B : matrix([0,1,8],[1,7,0],[3,1,0]); 'A + 'B = A+B; 'A . 'B = A.B; A^^(-1); print("el mismo resultado con otro comando")$ invert(A);
  2. kill(A,B)$ A : matrix([1,2,3],[4,8,5],[9,5,4]); B : matrix([1,2,3],[1,1,1],[3,1,2]); 'A * 'B = A*B; 'A / 'B = A/B; 7 . A; /* multiplicar todos por 7 */ B / 2; /* dividir todos por 2 */

Otras operaciones frecuentes con matrices (calcular la transpuesta, la inversa, el determinante,...) están contempladas en los comandos de Maxima.