# INTRODUCCIÓN A wxMAXIMA

La interacción del usuario con el programa se lleva a cabo mediante instrucciones que se escriben en lo que llamamos "celdas"

## CELDAS DE TÍTULO, DE SECCIÓN Y DE TEXTO

Nos permiten dar un aspecto más claro a nuestra hoja de trabajo introduciendo explicaciones, títulos, .... Son ignoradas por el compilador
Celdas de título. Se aplican para escribir el título del tema a que hace referencia el trabajo que sigue. Podemos insertar una celda de título de dos formas:
    Desde el menú Celda → Insertar celda de título

    Haciendo click con el botón derecho del ratón. 

Celdas de sección. Se aplican para estructurar el fichero de trabajo en las diferentes secciones o apartados.

Celdas de texto. Se aplican para poner comentarios u observaciones en el documento de trabajo.

Para insertar una celda de sección o de texto, pocederemos de la misma forma que para insertar una celda de título. 
El formato que aparece en cada uno de estos tipos de celda se puede personalizar yendo al menú Editar → Configuración → Estilo → Cuadro de diálogo que aparece

__________________________________________________________________________________
EJEMPLO: Escribimos a continuación una celda de título, otra de sección y otra de texto

# ESTO ES UNA CELDA DE TÍTULO

## ESTO ES UNA CELDA DE SECCIÓN

Esto es una celda de texto
___________________________________________________________________________________

Veamos a continuación, alguno de los objetos que podemos utilizar en máxima

## CONSTANTES

Algunas de las constantes que tenemos en Máxima son:
    el número pi → %pi
    el número e → %e
    la unidad imaginaria → %i
    el número aúreo → %phi

________________________________________________________________________________________________________________________________
EJEMPLO:

[%pi, %e, %i, %phi];

/*Los valores aproximados de π, e y Φ son:*/
[float(%pi), float(%e), float(%phi)];

________________________________________________________________________________________________________________________________

## OPERADORES 

Los principales operadores de Máxima son:
    Operadores aritméticos:
        + (suma)        - (resta)       * (multiplicación)      / (división)        ^ o ** (potencia)
        sqrt( ) → raíz cuadrada
        . (producto no conmutativo)     ^^ (potencia no conmutativa)
        ! → factorial de un número

___________________________________________________________________________________________________________
EJEMPLO: Realizamos algunas operaciones básicas

[5 - 4 +2, 8/2 * 4, 3^5, sqrt(25/9), sqrt(5), sqrt(-25/9), 3!];

_____________________________________________________________________________________________________________

    Operadores relacionales:
        >  (mayor que)      >= (mayor o igual que)      < (menor que)       <= (menor o igual que)      = (igual que)       # (distinto que)
    Estos operadores se evalúan con is

_______________________________________________________________________________________________________________
EJEMPLO: Definimos una relación y evaluamos

[rel:5*x+1=3*x, is(rel)];

________________________________________________________________________________________________________________

    Operadores lógicos:
        not  (negación)     and  (conjunción)       or  (disyunción inclusiva)

_________________________________________________________________________________________________________________
EJEMPLO: 

[rel1:2*x=x-1, rel2:2>-1];
[not(rel1), rel1 or rel2, rel1 and rel2];

__________________________________________________________________________________________________________________

## FUNCIONES MATEMÁTICAS BÁSICAS

Máxima tiene implementadas numerosas funciones matemáticas. Algunas de ellas son:

    exp(x) → exponencial de un número (también puede implementarse como %e^x)
    log(x)  → logaritmo neperiano de x (para implementar el logaritmo en cualquier otra base, utilizamos la fórmula de cambio de base de los logaritmos)

___________________________________________________________________________________________________________________________________
EJEMPLO: Calculamos Ln e^2 y log_10(1000)

[log(%e^2), float(log(1000)/log(10))];

___________________________________________________________________________________________________________________________________

    sin(x)      cos(x)      tan(x)  → seno, coseno y tangente de x
    asin(x)     acos(x)     atan(x)  → arcoseno, arcocoseno y arcotangente de x

___________________________________________________________________________________________________________________________________
EJEMPLO: Calculamos sen 60º y arccos(√3/2)

[sin(%pi/3), acos(sqrt(3)/2)];

_____________________________________________________________________________________________________________________________________

    float(x)  → devuelve x en notación decimal con precisión de 16 dígitos
    bfloat(x)  → escribe x en notación científica con precisión de 16 dígitos

_______________________________________________________________________________________________________________________________________
EJEMPLO: Expresamos 2/7 en notación decimal y científica

[2/7, float(2/7), bfloat(2/7)];

_________________________________________________________________________________________________________________________________________

    abs(x)  → devuelve el valor absoluto de x si x es un número real y su módulo si x es un número complejo

_________________________________________________________________________________________________________________________________________
EJEMPLO:

[abs(-2.5), abs(2.5), abs(3+4*%i)];

___________________________________________________________________________________________________________________________________________

floor(x)  → devuelve el primer entero menor o igual que x
ceiling(x)  → devuelve el primer entero mayor o igual que x
round(x)  → devuelve el redondeo de x a entero

___________________________________________________________________________________________________________________________________________
EJEMPLO:

[floor(-5.26), ceiling(-5.26), round(-5.26)];

___________________________________________________________________________________________________________________________________________

## DEFINICIÓN Y EVALUACIÓN DE FUNCIONES

Además de las funciones que, como hemos visto, Máxima tiene ya implementadas, existe la posibilidad de que el usuario pueda definir sus propias funciones. Esto puede hacerse de dos formas: 
    con la asignación :=   →   nombrefuncion(variable1, variable2, ... , variablen) := expresión
    con la función de Máxima define()  →  define(nombrefuncion(variable1, variable2, ... , variablen), expresión)

Para evaluar funciones, tenemos varias posibilidades:
    la sustitución directa de las variables por los valores
    utilizando la función de máxima ev()  →  ev(función, valores)
    utilizando la función de máxima subst()  →  subst(expresión1, expresión2, función)  (sustituye la expresión1 por la expresión2 en la función)

___________________________________________________________________________________________________________________________________________
EJEMPLO: Vamos a definir dos funciones, una con := y otra con define

f(x, y):=x^2 + x*y - y^2;
define(g(x), x^3 - 2);

A continuiación evaluaremos f en x=2 e y=-1 y g en x=3 de varias formas
1. Por sustitución directa

[f(2, -1), g(3)];

2. Con la función ev()

[ev(f(x,y), x:2, y:-1), ev(g(x), x:3)];

3. Con subst()  

subst(3, x, g(x));

_____________________________________________________________________________________________________________________________________________

## LISTAS

Las listas son conjuntos ordenados de objetos
Se definen introduciendo entre corchetes los objetos que vamos a usar separados por comas. 
Con las listas podemos utilizar las siguientes funciones básicas:
    length(lista)  → devuelve el número de objetos que tiene la lista
    first(lista)        last(lista)     lista[k]  → devuelven el primer elemento, el último y el elemento k-ésimo de la lista respectivamente
    reverse(lista)  → da la vuelta a la lista

___________________________________________________________________________________________________________________________________________
EJEMPLO: Definimos una lista, obtenemos su longitud, extraemos el segundo y el último elemento y le damos la vuelta

lista:[2/3, x^2, 2*x=2, 1+%i];
length(lista);
lista[2];
last(lista);
reverse(lista);

__________________________________________________________________________________________________________________________________________

Otra forma de crear listas es con makelist (expresión, i, i0, imax). Esta instrucción crea una lista utilizando la expresión para los valores de i desde i0 hasta imax. Veamos un ejemplo.

___________________________________________________________________________________________________________________________________________
EJEMPLO: Haremos una lista con los 20 primeros cuadrados perfectos

makelist(i^2, i, 1, 20);

___________________________________________________________________________________________________________________________________________

## MATRICES

Una de las formas de introducir matrices es a través de listas de igual longitud con la instrucción matrix
En el siguiente ejemplo, vamos a definir dos matrices y vamos a realizar con ellas varias operaciones

___________________________________________________________________________________________________________________________________________
EJEMPLO:

A:matrix([1, 2], [-1, 1]);
B:matrix([0, 3], [2, 1]);

[A + B, A - B, A.B, A^^2];

determinant(A);  /*Determinante de A*/

transpose(B);   /*Traspuesta de B*/

rank(B);    /*Rango de B*/

____________________________________________________________________________________________________________________________________________