Maxima
Las prácticas la realizaremos con Maxima, un sistema para la manipulación de expresiones simbólicas y numéricas. Esta herramienta informática nos ayudará a resolver problemas de la asignatura de forma sencilla y aplicada.
El sitio de descargas está en siguiente enlace descarga maxima. Aunque podéis trabajar con él, hay un entorno, muy intuitivo y cómodo que será con el que trabajaremos wxMaxima (si tenéis problemas con esa versión, hay una versión para windows en https://wolfgang.dautermann.at/maxima/nightlybuild/), con una colección amplia de menús en los que, agrupados por temáticas, se recogen las operaciones más habituales, de suerte que el usuario principiante no necesita recordar los comandos, aunque os aconsejo tenerlos a mano. Con wxMaxima podremos resolver nuestras prácticas y presentar los resultados de forma más sencilla.

En la web de maxima disponéis de documentación, https://maxima.sourceforge.io/docs/manual/es/maxima.html. Nosotros no veremos todos los comandos y funciones, solo utilizaremos los que mostremos en los ejercicios. También, encontraréis bastante material, aparte del que os proporcionaremos, como el del profesor Jeronimo Alaminos et al, Prácticas de ordenador con Maxima, un valioso documento para la iniciación. O la web del excelente profesor José Manuel Mira Ros(del que tengo un grato recuerdo) con su manualico, que os será de tremenda ayuda.
Prácticas con Maxima
Hoy nos iniciamos en un sistema para la manipulación de expresiones simbólicas y numéricas, Maxima. Un herramienta informática que nos ayudará a resolver problemas de la asignatura de forma sencilla y aplicada.
Para comenzar, nos iniciaremos en la definición de vectores y matrices, y las operaciones que podemos hacer con ellos.
Vectores
Un vector se define utilizando [] y los elementos del vector separados por comas. Con los vectores podemos hacer las operaciones básicas de suma y multiplicación por escalar.
Ejercicio: Sean los vectores \(v:[1,2,3]\) y \(u:[4,5,6]\), calcular \(2v-3u\)
Como hemos visto en el ejercicio anterior, el operador "+" suma componente a componente de dos vectores. El operador "*" multiplica un escalar por cada uno de los elementos de un vector. Una diferencia cuando utilizamos los operadores "*" o "." entre vectores. El operador "*" entre dos vectores nos proporciona otro vector de la misma dimensión donde las componentes se han multiplicado dos a dos; mientras que el operador "." nos proporciona el producto escalar de dos vectores.
Otro operador importante es "^", en este caso \(v\)^n, siendo \(v\) un vector, eleva cada una de las componentes de \(v\) a \(n\).
Ejercicio: Como veremos más adelante, definimos el producto escalar, euclídeo, de los vectores \(v:[v_1,v_2,\ldots,v_n]\) y \(u:[u_1,u_2,\ldots,u_n]\), como \[v\bullet u=\sum_{i=1}^nv_i\cdot u_i.\]
Construir una función que dados dos vectores nos devuelva su producto escalar.
Ejercicio: Dados los vectores \(u\):[2,-2], \(v\):[5,8] y \(w\):[-4,3], y el producto escalar euclídeo, ¿cuál es el valor de \(u\bullet (v-2w)\)?
Ejercicio: Como veremos más adelante, definimos la norma, euclídea, de un vector \(v:[v_1,v_2,\ldots,v_n]\) como \[\|v\|=\sqrt{\sum_{i=1}^nv_i^2}.\]
Construir una función que dado un vector nos devuelva su norma.
Ejercicio: Continuando con los ejemplos anteriores, llamamos normalizar un vector al proceso de dividir un vector por su norma. Construir una función que, dado un vector, nos lo devuelva normalizado.
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\)?
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