Constantes, funciones y asignaciones,
globales y locales

 

Constantes matemáticas conocidas

 

Funciones conocidas

En caso de conveniencia es posible cambiar el nombre de las funciones, tanto las predefinidas en Maxima como las definidas por el usuario

 

Definición de nuevas funciones

Este tema ya ha sido introducido de forma sucinta en la sección Generalidades. En esta sección profundizamos un poco más.

Utilizando las funciones que Maxima conoce "con carácter permanente" es posible definir nuevas funciones, de una o varias variables, para su uso en una sesión y de forma muy sencilla y natural mediante el uso del comando  :=.

Cuando se define una función mediante el comando := no se desarrolla la expresión que sirva para definirla.

Si se desea que la expresión se evalue hay que emplear el comando

La diferencia entre las ambas formas de definir una función se ilustra en los siguientes ejemplos

La clave para interpretar los resultados anteriores está en que define evalua siempre su segundo argumento, a menos que se indique lo contrario con el operador de comilla simple; por el contrario := no hace esa evaluación. Para más detalles, y variaciones sobre esta cuestión puede ejecutar ? define; y ver la información proporcionada al respecto en la consola de xMaxima. También puede utilizar la ayuda existente en el menú desplegable y buscar en el índice el comando define.

 

Asignación de valores

Para asignar valores se utiliza el comando  : 

La asignación de valores, como hemos señalado, utiliza : y no utiliza =. El simbolo de igualdad se emplea fundamentalmente con las ecuaciones, si bien también aparece en las operaciones de sustitución y evaluación de expresiones.

Por otra parte, la asignación de valores tiene un ámbito de aplicación más amplio establecer el valor de una constante en una fórmula, tal y como ha sido utilizado más arriba. Por ejemplo es posible utilizar el comando : para definir una función, tal y como hacemos en los ejemplos que siguen. Si desea tener más información sobre otros posibles usos del comando : puede consultar el manual en línea de Maxima, en la forma habitual mediante ? :;

Otro código diferente para realizar la evaluación.

Maxima permite construcciones del tipo if condición then expresión1 else expresión2 y similares. La condición debe ser evaluable como true o false y las expresión1, expresion2 son expresiones válidas de Maxima, incluidas expresiones if anidadas. Si la condición es cierta entonces se ejecuta expresion1 y en otro caso se ejecuta expresión2

Un ejemplo de anidamiento

Una construcción diferente con idéntico resultado

 

Conocer o desasignar valores y funciones

Cada función definida, o cada asignación realizada, permanece activa, salvo que se haya realizado con caracter local en un bloque hasta que se desactiva.

El comando functions permite conocer la lista de las funciones definidas por el usuario. Una vez identificada puede conocerse su definición mediante el comando fundef(NombreFunción). Análogamente, las asignaciones realizadas por el usuario pueden obtenerse con el comando values.

son algunos de los usos del comando que permite desactivar definiciones y asignaciones realizadas anteriormente. Esta cuestion es interesante en procedimientos complejos para evitar resultados indeseados. En tales situaciones puede ser conveniente comenzar el procedimiento usando kill(all), como ya hemos hecho en alguno de los ejemplos incluidos más arriba.

Ejecute el comando ? kill; para más información y otros usos del mismo.

Una forma diferente de resolver el problema es usar variables locales dentro de un bloque

 

Asumir algo y olvidarse de ello después

Cuando Maxima tiene dudas sobre algún dato que puede influir en cual sea su respuesta, antes de darla hace preguntas.

El comando assume(predicado1,predicado2...) permite evitar las preguntas dando de antemano las respuestas. Los predicados tan solo pueden ser expresiones formadas con los operadores relacionales menor que <, menor o igual que <=, mayor que >, mayor o igual que >=.

El comando facts() permite conocer las suposiciones activas y con forget(predicado) se elimina la correspondiente a cada uno de los predicados.

 

Bloques

Las asignaciones se realizan, en principio, globalmente y afectan a todas las sentencias que se se ejecuten después de la asignación y que tengan que ver con ella. En comando block, entre otras cosas, permite limitar el campo de acción de una asignación a un bloque de código.

block([v_1,...,v_n], expr_1,...,expr_m) o bien
block(expr_1,...,expr_m)

El efecto de la función evalúa las expresiones secuencialmente y devuelve el valor de la última expresión evaluada.

En caso de usarse, las variables v_1,...,v_n son locales en el bloque y se distiguen de las globales que tengan el mismo nombre. Si no se declaran variables locales entonces se puede omitir la lista. Dentro del bloque, cualquier otra variable distinta de v_1,...,v_n se considera global. Al iniciarce, block guarda los valores actuales de las variables v_1,...,v_n y los recupera al finalizar, olvidando en cambio los valores que con caracter local dentro del bloque hayan tenido éstas.

Los comandos block pueden anidarse. Las variables locales se inicializan cada vez que se entra dentro de un nuevo bloque. Las variables locales de un bloque se consideran globales dentro de otro anidado dentro del primero. Si una variable es no local dentro de un bloque, su valor es el que le corresponde en el bloque superior. Este criterio se conoce con el nombre de "alcance dinámico". El valor del bloque es el de la última sentencia o el argumento de la función return, que puede utilizarse para salir del bloque.

Lea el manual para más información: ? block; [en la ventana de la consola]

En el ejemplo que sigue, creado por J. Rafael Rodríguez Galván, se realiza una utilización más elaborada del comando block para obtener los ceros aproximados de una función que cambia de signo en un intervalo. Aparecen en él otros comandos como condicionales y similares propios de programación más avanzada, cuyo significado el lector que conozca el método de bipartición será capaz de comprender.