Matrices
Si queremos utilizar matrices nos bastará con definirla mediante matrix(). Las filas de definimos como vectores:
Ejercicio: Definir las matrices \(A=\begin{bmatrix}1 & 2 & 3\\
4 & 5 & 6\end{bmatrix}\) y \(B=\begin{bmatrix}1 & 2 \\ 3& 4 \\ 5 & 6\end{bmatrix}\).
La primera, A, sería una matriz de 2×3, B sería una matriz de 3×2. La manera de acceder a los elementos es mediante A[i,j].
Los operadores anteriores comentados para vectores funcionan igual en matrices. En el caso de elevar una matriz a una potencia tendríamos que utilizar "^^".
Otra forma de acceder a submatrices es con los comandos:
- col((Matriz,NúmColumna)): Recupera la columna NúmColumna.
- row((Matriz,NúmFila)): Recupera la fila NúmFila.
- submatrix(\(i_1,i_2,\ldots,i_p\), Matriz,\(j_1,j_2,\ldots,j_q\)): Elimina de la Matriz las filas cuyos números son \(i_1,i_2,\ldots,i_p\) y las columnas cuyos números son \(j_1,j_2,\ldots,j_q\). No es preciso que estén ambas: pueden eliminarse únicamente filas o columnas.
- addrow(Matriz, \(v_1, \ldots, v_p\)): Añade en la base de Matriz las filas dadas por vectores (o matrices) \(v_1, \ldots, v_p\). Las longitudes deben ser concordantes.
- addcol(Matriz, \(v_1, \ldots, v_p\)): Añade en la base de Matriz las filas dadas por vectores (o matrices) \(v_1, \ldots, v_p\). Las longitudes deben ser concordantes.
- matrix_size(Matriz): Proporciona las dimensiones de la matriz.
- transpose(Matriz): Proporciona la matriz traspuesta de Matriz.
- mat_trace(\(M\)): dada la matriz \(M\) nos devuelve su traza.
Algunas matrices interesantes:
- diagmatrix(Número,Valor): Genera una matriz cuadrada diagonal cuyo tamaño se establece mediante el valor de Número y en la que todos los elementos de la diagonal tienen el mismo Valor.
- diag_matrix(\(a_1,a_2,\ldots,a_n\)): Genera una matriz diagonal cuadrada con \(a_1,a_2,\ldots,a_n\) en la diagonal.
- ident(Número): Genera la matriz identidad (cuadrada) cuyo tamaño viene dado por el valor Número; es un caso particular del anterior.
- zeromatrix(n,m): Genera la matriz de n filas y m columnas en la que todos sus elementos son ceros.
Ejercicio: Construir la matriz \[\begin{pmatrix}2 & 2 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
2 & 2 & 0 & 0 & 0 & 0 & 0 & -1 & 0\\
0 & 0 & 3 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 3 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 3 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 4 & 4 & 4 & 4\\
0 & 0 & 0 & 0 & 0 & 4 & 4 & 4 & 4\\
0 & 1 & 0 & 0 & 0 & 4 & 4 & 4 & 4\\
0 & 0 & 0 & 0 & 0 & 4 & 4 & 4 & 4\end{pmatrix}\]
Ejercicio: Escribir en forma matricial el sistema \[\begin{matrix}x+2y=10\\ 2x-2y=4\\ 3x+5y=26\end{matrix}\]
Ejercicio: Dadas \(A\)=[[1,-3],[2,2],[4,1]] y \(B\)=[[-1,-7], [4,-5]], Si \(C=B^t\cdot A^t\), ¿cuánto es \(c_{12}\)?
Ejercicio: Sea \(A=\begin{bmatrix} 1 & 3\\ \alpha & 1 \end{bmatrix}\), ¿cuál es el valor de \(\alpha\) para el cual A es una raíz del polinomio \(f(x)=x^2-2x-8\)?
Operaciones con matrices en maxima
El pasado día vimos como realizar transformaciones elementales para encontrar una matriz escalonada de cualquier matriz. Estas operaciones son fáciles con maxima utilizando estos comandos:
- rowswap(\(M\), i, j): dada la matriz \(M\) nos devuelve la misma donde la se han intercambiado las filas i y j, \(f_i\leftrightarrow f_j\).
- columnswap(\(M\), i, j): dada la matriz \(M\) nos devuelve la misma donde la se han intercambiado las columnas i y j, \(c_i\leftrightarrow c_j\).
Ejercicio: Dar las matrices de paso, por la izquierda y por la derecha, que verifica la semejanza \[\begin{bmatrix}
0 & 0 & 1 & 2 \\
0 & 0 & 2 & 1 \\
3 & 4 & 0 & 0 \\
4 & 3 & 0 & 0 \\
\end{bmatrix}\sim \begin{bmatrix}
0 & 0 & 3 & 4 \\
0 & 0 & 4 & 3 \\
1 & 2 & 0 & 0 \\
2 & 1 & 0 & 0
\end{bmatrix}\]
- rowop(\(M\), i, j, \(\alpha\)): dada la matriz \(M\) nos devuelve la misma donde la \(f_i\leftarrow f_i-\alpha f_j\).
- columnop(\(M\), i, j, \(\alpha\)): dada la matriz \(M\) nos devuelve la misma donde la \(c_i\leftarrow c_i-\alpha c_j\).
Con estos comandos podemos realizar las operaciones elementales que tratamos en clases anteriores. Sin embargo, una de las operaciones tiene un procedimiento más delicado: la multiplicación de una fila por un escalar. Imaginemos que el elemento \(a_{ic}=\gamma\) de una matriz queremos que su valor sea \(\beta\), necesitamos saber qué escalar \(\alpha\) debemos multiplicar a la fila \(f_i\) para que el comando rowop(\(M\), i, i, \(\alpha\)) transforme \(a_{ic}=\gamma\) en \(a_{ic}=\beta\). Luego \[\beta f_i={\gamma}f_i \ -\ {\gamma}{\alpha}f_i\to \alpha=1-\frac{\beta}{\gamma}.\]
De esta forma, solo necesitamos sustituir para encontrar el \(\alpha\) apropiado que nos proporcione \(\beta\).
Ejercicio: Dada \(\begin{bmatrix}2 & \operatorname{-}4 & 3\\ 6 & \operatorname{-}8 & 5\\ 6 & 1 & 7\end{bmatrix}\). Encontrar una matriz triangular superior que sea semejante por operaciones elementales.
Ejercicio: Dada la matriz propuesta en el video, realizar las mismas operaciones con maxima para concluir con la matriz escalonada que proporciona.
Ejercicio: Realizar como anteriormente con la matriz dada en:
A veces, podemos necesitar comandos que nos ayuden a simplificar expresiones, algunos son:
- expand(expr): Expande la expresión expr. Los productos de sumas y de sumas con exponentes se multiplican, los numeradores de las expresiones racionales que son sumas se separan en sus respectivos términos, y las multiplicaciones (tanto las que son conmutativas como las que no) se distribuyen sobre las sumas en todos los niveles de expr.
- radcan(expr): Simplifica la expresión expr, que puede contener logaritmos, exponenciales y radicales, convirtiéndola a una forma canónica, lo que significa que todas las expresiones funcionalmente equivalentes se reducen a una forma única.
- ratsimp(expr): Simplifica la expresión expr y todas sus subexpresiones, incluyendo los argumentos de funciones no racionales.
- fullratsimp(expr): Aplica repetidamente ratsimp a una expresión, seguida de simplificaciones no racionales, hasta que no se obtienen más transformaciones; entonces devuelve el resultado.
Podéis ver más en Funciones y variables para simplificación
Rango de una matriz
Tenemos una función que nos permite calcular el rango de una matriz:
- rank(M): Calcula el rango de la matriz M.
Ejercicio: Verifica el resultado del ejercicio
Ejercicio: Sea A:[[1,2,-3], [-2,0,4], [0,4,-2], [-2,-4,a]]. ¿Cuál es el valor de a para que el rango de la matriz sea par?
Ejercicio: Sea A:[[1,a,b,0], [2,2a,b,1], [2,3,b,0], [0,1,0,1]], con a,b\(\in\mathbb{R}\). ¿Cuál es el rango de la matriz según los parámetros dados?
Inversa de una matriz
Recordad que para calcular la inversa de una matriz utilizaremos:
Sea \(A\) matriz cuadrada de orden \(n\). Si conseguimos mediante semejanza por transformaciones elementales una matriz tal que \[[A\, |\, I_n] \sim [I_n\, |\, B],\]entonces \(B\) es la inversa de \(A\).
Ejercicio: Dada la matriz A=[[1,1,0,0], [-1,1,-1,0], [0,1,1,1], [0,0,1,1]], ¿cuánto es \(\mathbf{tr}(A^{-1})\)
Inversa mediante los comandos de maxima
- invert(\(M\)): dada la matriz \(M\) nos devuelve su inversa.
- invert(\(M\)),detout: dada la matriz \(M\) nos devuelve su inversa con el determinante fuera.
Ejercicio: Utiliza estos comandos para encontrar la matriz \(X\) tal que \[\begin{bmatrix}1&2\\ 3& 4\end{bmatrix}X=\begin{bmatrix}6&3\\ 19& 2\end{bmatrix}\]
Ejercicio: Sea A=[[-1,1,3], [1,-2,0], [1,-2,1], [1,0,1]], y \(L\) su pseudoinversa. ¿cuánto es el valor de \(\sum L[i,j]\)
Bibliografía
- Arriaza Gómez A. J., del Águila Garrido L., Rambla Barreno F., Redondo Neble M. V., Rodríguez Galván J. R., Viglialoro G. Manual de prácticas de Matemáticas con Máxima. Cádiz: Editorial UCA; 2015.
| Ejercicio: Sea \(A=\begin{bmatrix}1&1&-1\\ 2&0&1\end{bmatrix}\), ¿cuál es la suma de todos los elementos de su pseudoinversa? |