# Tutorial Breve de wxMaxima

INTRODUCCIÓN AL SOFTWARE CIENTÍFICO Y A LA PROGRAMACIÓN
Primer curso del Grado de Matemáticas de la Universidad de Murcia. España.

GRUPO DE DOCENTES DE INFORMÁTICA EN EL GRADO DE MATEMÁTICAS
Dpto. de Ingeniería de la Información y las Comunicaciones
Universidad de Murcia
Gregorio Martínez, Santiago Paredes, L. Daniel Hernández

## ¿Qué es wxMaxima?

Un sistema algebraico computacional o sistema de álgebra computacional SAC (CAS, del inglés computer algebra
system) es un programa de ordenador o calculadora avanzada que facilita el cálculo simbólico. La principal 
diferencia entre un CAS y una calculadora tradicional es la habilidad del primero para trabajar con 
ecuaciones y fórmulas simbólicamente, en lugar de numéricamente. Es decir, una expresión como a + b es 
interpretada siempre como "la suma de dos variables", y no como "la suma de dos números" (con valores 
asignados). 

Maxima es un motor de cálculo simbólico escrito en lenguaje Lisp publicado bajo licencia GNU GPL. Según su
página web: 

``Maxima es un sistema para la manipulación de expresiones simbólicas y numéricas, incluyendo 
diferenciación, integración, serie de Taylor, transformadas de Laplace, ecuaciones diferenciales ordinarias, 
sistemas de ecuaciones lineales, polinomios y conjuntos, listas, vectores, matrices y tensores. Maxima 
produce resultados numéricos de alta precisión utilizando fracciones exactas, enteros de precisión arbitraria
y números de punto flotante de precisión variable. Maxima puede dibujar funciones y datos en dos y tres 
dimensiones. 

El código fuente de Maxima puede ser compilado en varios sistemas, incluyendo Windows, Linux y MacOS X. 
El código fuente para todos los sistemas y los binarios precompilados para Windows y Linux están disponibles 
en el gestor de archivos de SourceForge (http://sourceforge.net/project/maxima/files)''.

En http://andrejv.github.io/wxmaxima leemos:

``wxMaxima es una interfaz de documento basado en el sistema de álgebra computacional Maxima. wxMaxima 
utiliza wxWidgets y se ejecuta de forma nativa en Windows, X11 y Mac OS X. wxMaxima ofrece menús y cuadros 
de diálogo para muchos comandos comunes de Maxima, autocompletado, parcelas en línea y animaciones simples. 
wxMaxima se distribuye bajo la licencia GPL''.

En la URL mencionada se puede descargar wxMaxima para Windows y Mac OS X. Para GNU/Linux lo encontrará 
fácilmente en su distribución.

## Escritura en wxMaxima

Los contenidos en wxMaxima se muestran en ``celdas''. Los tipos de celdas se muestran en el menú ``Celda''
cuya captura se muestra en la siguiente Figura.

Opciones del menú ``Celda''.

### Celdas que no son de entrada

Las celdas que no son de entrada son aquellas que se utilizan para escribir comentarios o desarrollar 
explicaciones con el fin de realizar un documento en wxMaxima, como un artículo científico o un documento
divulgativo.

El documento final se puede generar seleccionando la opción de imprimir de wxMaxima cuya salida será
lo que estés visualizando en la pantalla; es decir, de poca calidad. Puedes generar documentos de mejor
calidad exportando el documento a HTML o a TeX (realmente a LaTeX) - ver 'Archivo > Exportar'.

En wxMaxima puedes escribir también en LaTeX iniciando la celda con la secuencia TeX, como se muestra 
en la siguiente celda.

TeX:
Existen cuatro tipos de celdas que permiten incluir texto que no será ejecutado por wxMaxima y que nos
ayuda a explicar lo que desarrollamos en wxMaxima:

\begin{itemize}
\item Celda de texto. Este párrafo que estas leyendo se encuentra en una celda de texto.
\item Celda de título. Se corresponde a \texttt{title} de \LaTeX{}.
\item Celdas de sección y subsección. Se corresponde a \texttt{section} y \texttt{subsection} de \LaTeX{}.
\end{itemize}

Y existe un tipo de celda que permite incluir gráficos.

\begin{itemize}
\item Celda de imagen. Se corresponde en \LaTeX{} a:

\begin{verbatim}
\begin{figure}[htb]
   \begin{center}
      \includegraphics{ApuntesMaxima_img/ApuntesMaxima_1.png}
      \caption{Un ejemplo}
   \end{center}
\end{figure}
\end{verbatim}
\end{itemize}

Para saber más, leer http://facultyweb.berry.edu/wmixon/maxima/Typesetting/Typesetting.pdf

### Celdas de entrada

Las celdas de entrada son aquellas donde se introducen acciones que debe de realizar Maxima. Estas celdas 
se reconocen porque empiezan con la secuencia --> o con la cabecera (%in) donde 'n' es un número, el número
de entrada.

Las dos celda que tienes a continuación son celdas de entrada.

kill(all);

1+1;

## Primeros pasos en wxMaxima

Maxima es bastante más que una calculadora tradicional, pero no por ello deja de hacer cálculos.
En esta sección veremos algunos ejemplos sencillos de cálculo aritmético.

TeX:
Para empezar observa la celda de entrada anterior. Donde pone \texttt{-->1+1;}.
Distinguimos las siguientes partes:
\begin{itemize}
\item \texttt{-->} Es la indicación de wxMaxima de que estamos en una celda de entrada.
\item \texttt{;} El punto y coma indica que todo lo que hay antes de él es la acción que debe realizarase.
\item \texttt{1+1} Es la acción a realizar por Maxima. Las acciones están siempre entre \texttt{-->} y 
        \texttt{;}.
\end{itemize}

Te preguntarás que si 1+1 es 2 ¿por qué no se ve el resultado?. La respuesta está en que lo que hemos
escrito es lo que queremos que haga pero aún no le hemos dado orden de que actúe. Para ejecutar las 
acciones de una celda de entrada tienes que realizar los siguientes pasos:

(1) Activar la celda. Es decir, colocar el cursor sobre la celda de entrada y hacer clic con el ratón.
Sabrás que la celda está activa porque la línea vertical de la izquierda cambiará de color. 

(2) Ejecutar la acción. Es decir presionar SHIFT+ENTER para evaluar la expresíón.

Ejecuta el contenido de las dos primeras celdas de entrada de este documento.

-- kill(all); borra la memoria de Maxima. Es lo primero que deberías de hacer antes de empezar a trabajar.
-- 1+1; realiza la suma de los dos números naturales.

TeX: Observa que cada vez que realizas una operación, asociada a cada entrada $n$, (\%in),  aparecen una 
o varias salidas $m$, (\%om). El significado es muy intuitivo: (\%in) hace referencia a la entrada n y 
(\%om) hace referencia a la salida m.

Si deseas utilizar el resultado de una entrada solo hace falta hacer referencia a ella, como se muestra
en la siguiente operación (de nuevo, coloca el cursor en la celda de entrada y presiona SHIFT+ENTER).

%o1 * 100;

Para utilizar la salida última obtenida usalo así:

% * 0.3;

TeX:
Ten cuidado con su uso. El hecho de que se utilice \% después de una celda de entrada anterior, no 
significa que se utilice la salida de esa celda de entrada anterior. Lo que significa es que se usará
la ``última salida obtenida'', salida que puede ser el resultado de una celda de entrada que se encuentre
en el documento muchas celdas de entrada anteriores o bastantes celdas de entrada posteriores.

Una forma de asegurarnos de que \% tomará el resultado de la última acción es poner las accions juntas.
O si lo prefieres, no pongas ; entre las dos acciones. Por ejemplo:

1.0 / 3.0;
% * 100;

En la celda de entrada de arriba, hemos enviado 2 ``líneas'' a Maxima. Cada línea debe terminar con un ';' 
o un '$'. En caso de que la línea termina con un ';' Maxima mostrará el resultado de la operación, mientras
que los resultados de las líneas que finalicen con '$' no se mostrará el resultado. El "$" es muy útil 
cuando se hacen cálculos más largos o no queremos mostrar el resultado de otras acciones de Maxima.

### Ayuda y ejemplos

Si necesitas ayuda, puedes hacerlo de varias formas. 

- Una es utilizando el menú Help de wxMaxima. No tiene más misterios, sigue los enlaces.
- Otra forma es usando un celda de entrada y ejecutando el comando concreto de la ayuda para un comando.

Esta instrucción nos da información exacta del comando sqrt.

? sqrt;

Esta otra instrucción nos da información inexacta del comando sqrt. Es decir, nos mostrará aquellos 
comandos donde aparece la cadena sqrt. Introduce 1 si te piden algún dato.

?? sqrt;

La instrucción example(Comando) te mostrará un ejemplo para 'Comando'.

example("product");

## Aritmética

Realiza las siguientes operaciones básicas:

kill(all); 2+3;
2-3;
2*3;
2/3;
2.3/3.0; 
2^3;
2**3;
2 . 3;
3!;
sqrt(3); sqrt(3.0); 

Observa las diferencias entre 2/3 y 2.3/3.0 y las diferencias entre sqrt(3) y sqrt(3.0).
Esto se debe a que Maxima, a diferencia de los lenguajes matemáticos que manipulan matrices numéricas 
(Matlab, etc), trata de mantener cálculos precisos - no evalúa, a menos que se le pida. 
Los números de punto flotante, son evaluados.

Maxima tiene algunos númeoros reales constantes muy relevantes en las matemáticas:

%pi; %e;

Para conocer sus valores podemos hacerlo de varias formas:

- Una forma:

%pi, numer;
%e, numer;

- Otra forma

%pi; float(%);
%e; float(%);

Para evaluar la expresión simbólica usa float()

sqrt(8)/12; float(%);

También podemos realizar operaciones básicas con complejos. La raíz cuadrada de -1, la constante i, se 
representa igual que las constantes reales pi y e.

%i; %i*%i; %i**%i; sqrt(%i); 

También podemos obtener su parte real e imaginaria.

kill(all);
3 * (2+ 4*%i) * (2 + 4* %i);
realpart(%o1);
imagpart(%o1);

Para exigir que el resultado esté en forma cartesiana o en forma polar utilizando estas instrucciones. 
Recuerda que float() obtendrá los valores numéricos de las expresiones.

kill(all);
(3+5*%i)/(1/2+4*%i);
float(%);
rectform(%o1);
float(%);
polarform(%o1);
float(%);

Otras operaciones con números complejos son:

- cabs(Expresión), obtiene el valor absoluto de un número complejo.

- carg(Expresión), obtiene el argumento de un número complejo.

- conjugate(Expresión), obtiene el complejo conjugado.

### Definición de variables

TeX:
Al igual que Maxima contiene las constantes \%pi, \%e, \%i, nosotros también podemos definir las constantes 
con el nombre que queramos. Si bien en el lenguaje matemático se utiliza el simbolo = para darle valor a las
letras, p.e. a=3, en Maxima se utilizan los dos puntos, p.e. a:3. 

Mira como defino mi valor 'a', y como opero con él.

a: ((3^7/(4+3/5))^(-1)+7/9)^2;
a * 5^2 * 1/2^8;
a, numer;

Ahora bien, como al nombre de la constante le puedo cambiar su valor en cualquier momento, estrictamente
hablando estamos trabajando con variables.

a: 1;
a: 2;
a, number;

Es decir, Maxima dispone de constantes como %pi y %e, y para utilizar su valores debes usar el símbolo %.
Y Maxima disponde de tantas variables como desees, tantas como nombres se te ocurran. Para usar su valor
utiliza su nombre, sin % ni ningún símbolo especial.

### Algunas funciones para manejar números

Maxima puede trabajar con precisión arbitraria. La precisión requerida se indica en la constante fpprec.

fpprec:50$

La instrucción anterior establece una precisión de 50 decimales. Recuerda que $ al final de la instrucción
hace que no se muestre el resultado.

Para solicitar que se muestre el resultado con esta precisión utiliza la función bfloat(expresión).
Si indicas una precisión de 50 decimales, bfloat() mostrará el resultado con 50 decimales.
En la notación punto flotante se suele utilizar la letra 'e' para indicar el exponente.
Observa que la notación en punto flotante de bfloat() se indica con una 'b' al final (en vez de la 'e').

cociente: %e / %pi;
bfloat(cociente);

Otras instrucciones son:

factor(exp); Obtiene la factorización en números primos.

primep(exp); Indica si la expresión es un número primo o no.

evenp(exp); Indica si la expresión es par.

oddp(exp); Indica si la expresión es impar.

divisors(exp); Muestra los divisores de la expresión.

quotient(e1, e2); y  remainder(e1 ,e2); muestran el cociente entero  y el resto del cociente e1/e2.

### Sumas y productos

Maxima dispone de una serie de librerías que mejoran algunas de las funciones ya implementadas en Maxima,
e incorporan funciones nuevas. Este conjunto de ``añadidos'' de Maxima se cargan de forma modular 
(por grupos de funciones).

Para trabajar con sumas simbólicas y series se aconseja el uso del módulo simplfy_sum.
Para cargar módulos se utiliza la instrucción load.

load(simplify_sum)$

- sum(Expresión,Variable,ValorInferior,ValorSuperior);
realiza la suma entre el ValorInferior y el ValorSuperior cuando estos son numéricos, cuando no lo son, 
lo deja indicado en forma de sumatorio.

- simpsum es una variable booleana (cuyo valor por defecto es false) que en caso de ser utilizada hace 
que Maxima trate de aplicar reglas adicionales para realizar la suma.

sum(1/n, n, 1, 1000);
simpsum:false$ 
sum(k^2, k, 1, n);
sum(k^2, k, 1, n),simpsum; 
sum(1/n^2, n, 1, inf); 
sum(1/n^2, n, 1, inf),simpsum;

Con ayuda del paquete "simplify_sum" es posible calcular la suma de muchas series de potencias utilizando 
simpsum, aunque también se puede utilizar simplify_sum().

sum(1/n^2, n, 1, inf); 
simplify_sum ( sum(1/n^2, n, 1, inf));
sum((n^2+2*n+3)/n!* x^n, n, 0, inf);
simplify_sum( sum((n^2+2*n+3)/n!* x^n, n, 0, inf) );

Comando análogo a sum es product, y la variable booleana simpproduct determina si debe realizarse o no
la simplificación.

product(i^2, i, 1, 5);
product (k, k, 1, n);
product (k, k, 1, n),simpproduct;

## Funciones

TeX:
Estas son algunas de las funciones conocidas que contiene Maxima:

\begin{itemize}
\item abs (exp) valor absoluto o módulo
\item entier (x) parte entera de x
\item round (x) redondeo de x
\item exp (x) función exponencial de x
\item log (x) logaritmo neperiano de x
\item max (x1, x2, ...), min (x1, x2, ...) máximo y mínimo
\item sign (exp) trata de determinar el signo de una expresión. Devuelve una de las respuestas siguientes: 
pos (positivo), neg (negativo), zero, pz (positivo o cero), nz (negativo o cero), pn (positivo o negativo), 
o pnz (positivo, negativo, o cero, i.e. no se sabe).
\item sqrt (x) raíz cuadrada de x. Se representa internamente mediante x^(1/2).
\item acos(x) arco coseno de x
\item acosh(x) arco coseno hiperbólico de x
\item acot(x) arco cotangente de x
\item acoth(x) arco cotangente hiperbólico de x
\item acsc(x) arco cosecante de x
\item acsch(x) arco cosecante hiperbólico de x
\item asec(x) arco secante de x
\item asech(x) arco secante hiperbólico de x
\item asin(x) arco seno de x
\item asinh(x) arco seno hiperbólico de x
\item atan(x) arco tangente de x
\item atan2(y,x) proporciona el valor de atan(y/x) en el intervalo -%pi to %pi
\item atanh(x) arco tangente hiperbólico de x
\item cos(x) coseno de x
\item cosh(x) coseno hiperbólico de x
\item cot(x) cotangente de x
\item coth(x) cotangente hiperbólica de x
\item csc(x) cosecante de x
\item csch(x) cosecante hiperbólica de x
\item sec(x) secante de x
\item sech(x) secante hiperbólica de x
\item sin(x) seno de x
\item sinh(x) seno hiperbólico de x
\item tan(x) tangente de x
\item tanh(x) tangente hiperbólica de x
\item gamma(x) gamma de x
\item beta(x,y) beta de x, y
\item isqrt(x) parte entera de la raiz cuadrada de x, que debe ser entero
\item binomial(x,y) número combinatorio x sobre y
\item random(N) donde si N es un número natural genera un pseudoaleatorio natural entre 0 y N-1. 
Cuando N es un decimal genera un pseudoaleatorio decimal entre 0 y N
\end{itemize}

### Definición y borrado de funciones propias

Estas son las instrucciones básicas asociadas a la manipulación de funciones propias.

Para definir una función se utiliza la sintaxis:
        nombreDeLaFuncion(argumentos) := expresiónDependienteDeLosArgumentos.

miFuncion(x) := x^2;

También se pueden definir a partir de una expresión. Primero definimos la expresión, y después la 
asignamos a una función. Las expresiones se definen igual que las constantes. De hecho las constantes son
un caso particular de expresiones.

Por ejemplo:

miExp:x^3 - 1;
define (otraFuncion(x), miExp);

Podemos evaluar la función con valores numéricos o con expresiones algebraicas.

Si la función ya se definió, se invoca con los valores adecuados en su argumento.

miFuncion(10);
miFuncion(x+10);
otraFuncion(2);
otraFuncion(x-10);

Si la función no fue definida, entonces se puede evaluar para valores numéricos concretos con la función 
'ev' o directamente.

ev(x^2, x= 10);
x^2, x=10;

Si la función depende de un parámetro el resultado de la evaluación dependerá de dicho parámetro.
Si deseas un valor concreto, tendrás que asignar un valor

f(x) := x^2 + a$
f(5);
f(5), a = -5;

Para saber la definición original se usa la instrucción dispfun()

dispfun(miFuncion);
dispfun(all);

Para mostrar la lista de funciones definidas se usa la instrucción

functions;

Para borrar una definición ya definida se utiliza remfunction()

remfunction(miFuncion);
functions;
remfunction(all);
functions;

### Límites

La función para calcular límites es simple. Hay que indicar la función, la variable sobre la que calcular el límite, el
punto al que nos queremos aproximar y si es por la derecha o por la izquierda.

Aquí tienes algunos ejemplos:

kill(all); 
limit( 1/(1+x^2), x, inf);
limit( (1+sin(x) - %e^x)/(atan (x)*atan (x)), x, 0); 
limit( %e^(1/cos(x)), x, %pi/2,plus);
limit( %e^(1/cos(x)), x, %pi/2,minus);

Se puede utilizar tlimit(Función, Variable, Punto, Dirección); 
Con una 't' delante.
Es análogo a limit pero usa desarrollos de Taylor para evaluar los límites.

tlimit( 1/(1+x^2), x, inf);
tlimit( (1+sin(x) - %e^x)/(atan (x)*atan (x)), x, 0); 
tlimit( %e^(1/cos(x)), x, %pi/2,plus);
tlimit( %e^(1/cos(x)), x, %pi/2,minus);

### Derivación

Para calcular derivadas utiliza la función diff. Algunos ejemplos:

f(x) := x^2 $
diff(f(x), x);
g(y) := sin(y)$
diff( g(x) , x);

Observa cómo Maxima conoce la regla de la cadena.

kill(a);
g(f(x));
diff( g(f(x)) , x);
diff ( (x^2*e^x)/(x-a), x );

### Integración

Con Maxima también podemos calcular integrales indefinidas con la instrucción 'integrate'.
Si se quiere que sea definida basta indicar su límites.

Por ejemplo:

kill(all);
integrate( sin(x), x);
integrate( sin(x), x, 0, %pi);

A veces Maxima necesita información adicional para evaluar una expresión y nos hará una pregunta. Debería
de aparcer un curso indicando que necesita una respuesta. Si no te lo pregunta es porque en alguna celda
anterior ya le suministrastes la información necesaria.

Haz SHIFT+ENTER. Para responder "positive;" basta con escribir solo "p".

integrate( 1 / (x^2 + b), x);

También puedes asumir un valor antes de la integración y después "olvidarlo".

assume(a > 0)$
integrate( 1 / (x^2 + a), x);
forget(a > 0)$

## Gráficas

Maxima puede generar gráficos de una o más funciones. La mejor forma de ver como funciona es con ejemplos:

Esta instrucción dibuja una función en un rango de los valores de la variable independiente:

kill(all);
plot2d (sin(x)/x, [x, -20, 20])$

Para imprimir varias funciones se utiliza la estructura de lista, una secuencia de valores entre corchetes [ ]. 
El rango del eje vertical no es necesario especificarlo, se establecerá de forma automática como aquel 
rango en el que la función toma sus valores. En ocasiones puede resultar conveniente especificarlo mediante 
la sintaxis [y, min, max].

En este ejemplo se muestran varias funciones sobre un rango de dominio e imagen.

plot2d ([sin(x)/x, atan(x), tanh(x)], [x, -5, 5], [y, -1.5, 2])$

No sólo es posible determinar a priori el rango de valores para la dimensión vertical de la caja; 
también puede hacerse lo mismo con la dimensión horizontal de la caja, de forma independiente del 
rango de variabilidad de la variable independiente.

plot2d(sin(x),[x,-%pi,%pi])$
plot2d(sin(x),[x,-%pi,%pi],[x,-3.5, 3.5],[y,-1.2, 1.2])$

Para mostrar funciones matemáticas 3d se puede utilizar esta función.

plot3d (sin(sqrt(x^2 + y^2))/sqrt(x^2 + y^2),

         [x, -12, 12], [y, -12, 12])$

Al igual que en 2d podemos mostrar varias funciones simultaneamente:

plot3d([-x^2+y^2, 4*sin((x^2+y^2))/(x^2+y^2),[x,-2,2],[y,-2,2]],
[plot_format, openmath])$

Para utilizar el gráfico en un docmento LaTeX, tenemos que cambiar el terminal (la salida).

plot3d([-x^2+y^2,4*sin((x^2+y^2))/(x^2+y^2),[x,-2,2],[y,-2,2]],
[plot_format, gnuplot],
[gnuplot_term, png], 
[gnuplot_out_file, "grafico.png"]);

TeX:
\begin{figure}
  \begin{center}
    \IfFileExists{grafico.png}{\includegraphics[width=\textwidth]{grafico.png}}{}
  \end{center}
\caption{Gráfico en formato PNG de nombre grafico.png}
\label{uno}
\end{figure}

También se pueden dibujar puntos del plano. Se puede hacer de dos formas:
    - Indicando separadamente las coordenadas x e y

plot2d ([discrete,  [10, 20, 30, 40, 50],
                            [.6, .9, 1.1, 1.3, 1.4]],
        [x, 9, 51], [y, 0, 1.5],
                            [style, points], [color, green])$

    - O bien indicando una a una las coordenadas.

plot2d([discrete, [[10, .6], [20, .9], [30, 1.1],
[40, 1.3], [50, 1.4]]],
                            [x, 9, 51], [y, 0, 1.5],[style, [points, 4, red, 5]])$

Observa que en ambos casos se utilizan "style point" de forma diferente. Desde la perspectiva 
de la seguda versión, el parámetro points acepta de uno a tres números enteros; 
    - el primero corresponde al radio (grosor) del punto, 
    - el segundo selecciona el color, 
    - y el tercero es usado por Gnuplot para sustituir los puntos por otros objetos. 
       Los objetos dse identifican con números del 1 al 13.

Por supuesto también puedes compaginar la representación discreta con la continua,
como se muestra de este ejemplo: 

xy: [[10, .6], [20, .9], [30, 1.1], [40, 1.3], [50, 1.4]]$
plot2d([[discrete, xy], 2*%pi*sqrt(l/980)], [l,0,50],
            [style, points, lines], [color, red, blue],
           [point_type, asterisk],
            [legend, "experiment", "theory"],
            [xlabel, "pendulum's length (cm)"],
            [ylabel, "period (s)"])$

## Consejo: guardar los ficheros en formato wxmx

A veces podemos recibir ciertos ficheros .wxm que no se pueden abrir. Puedes obtener mensajes de error como
"wxMaxima encontró un error durante la carga fichero.wxm" o "Failed to convert file "fichero.wxm" to Unicode."

Este tipo de error se produce cuando el fichero.wxm se guardó con un sistema de codificación diferente del 
sistema de codificación que utiliza nuestro sistema operativo. Lo más usual es que el fichero "problemático"
se guardara con el sistema de codificación ISO-8859-1 (sistema latino que aún usan algunos sistemas Windows
algo obsoletos) y ahora lo intentes visualizar con el sistema de codificación UTF8 (sistema internacional que
usan los sistemas operativos más modernos como los últimos Windows, Mac OS X o los sistemas GNU/Linux).
Simple y llanamente, todo lo que tenga acentos como son nuestras vocales y la ñ se guarda de forma diferente
en un sistema ISO-8859-1 y en un sistema UTF8, y entre ambos "no se entienden".

Esto se debe a que los ficheros .wxm son ficheros de texto plano. La ventaja de un .wxm es que puedes usar
cualquier editor de textos para leer y escribir tus "programas" de wxMaxima. La desventaja es la posible
incompatibilidad entre diferentes sistemas de codificación. 

Para evitar estos problemas de codificación, se recomienda guardar el fichero con la extensión .wxmx 
en el que se guarda no solo el código e instrucciones de wxMaxima sino además los resultados y los 
gráficos. No tendrás problema de compatibilidad entre sistemas operativos, pero a cambio no podrás 
escribir o leer con otras aplicaciones los ficheros de wxMaxima pues este formato es propio y exclusivo
de wxMaxima y solo podrá ser leído y escrito con esta aplicación. Incluso Maxima te puede dar problemas.
Para evitar que Maxima tenga problemas con .wxmx asegurate de instalar todos los complementos que pueda 
requerir la aplicación para tu sistema operativo.

## Ejercicios

Realiza las instrucciones que consideres oportunas para responder a las siguientes cuestiones.
Genera un documento .tex que deberás añadir al miniproyecto de documentación en LaTeX en la sección
con nominación "Ejercicios de Maxima".

1. Define dos constantes z1 y z2 para los números complejos (3+5*%i) y (1/2+4*%i). Realiza la 
suma, diferencia, producto y división de ambos complejos utilizando solo las constantes z1 y z2.

2. Para un cilindro, define las constantes 'radio' y 'altura', con valores 10 y 100, repectivamente.
Calcula la superficie de la base y el volumen del cilindro. Almacena los resultados en las constantes
'superficie' y 'volumen'. Expresa 'volumen' en función de 'superficie'.

3. Calcula la descomposición en factores primos del número 100. Calcula los divisores del número 100.

4. ¿Es el número 23911 primo? ¿y el 23913?

5. Realiza los siguientes pasos:

- Define la expresión 'exp' que contenga la expresión 2x+4.
- Define las funciones:  f(x,y,z) = 3x^2 + 4y^3 -z + a;  g(x) = (x-1)^2
- Define la expresión h(x) como la expresión 'exp'.
- Evalua f, en el punto (1,3,4) para a=10;
- Evalua la función g para el valor h(x). Es decir, g(h(x)).

6. Descubre cómo se definiría la función f(x) dada por:
    f(x)=-cos(x), si x<0
    f(x)=sin(x), si x>=0

    - Representa la función para el intervalo -%pi, %pi y para una caja vertical entre -1.5 y 1.5.
    - Calcula su límite en el punto x=0, así como sus límites por la derecha y por la izquierda.

7. Define la función t(x)=|x|

    - Representa la función para el intervalo -4, 4.
    - ¿Es derivable en x=-2? ¿en x=0? ¿en x=2? ¿Qué dice Maxima?
    - ¿Cómo se puede calcular su integral?