Matemáticas con Mathematica

Práctica 1. Entorno de trabajo. Aritmética. Cálculo simbólico y aproximado. Operaciones boleanas.

Francisco Javier Pérez González
Departamento de Análisis Matemático
Universidad de Granada

El entorno de trabajo. Distintos tipos de celdas. Evaluación de celdas de input

Acabas de abrir un cuaderno (notebook) de Mathematica. Arriba tienes la barra de menú y a la derecha tienes una "paleta" cuya utilidad irás aprendiendo en lo que sigue. Lo primero que vas a hacer es maximizar esta ventana para que puedas leer mejor (la paleta se queda escondida detrás de ella). Observa que este cuaderno está estructurado en celdas. A la derecha de cada celda verás uno o varios corchetes. El más interior de ellos delimita la celda en cuestión. Mathematica suele agrupar las celdas en varias categorías como, por ejemplo, pertenecer a la misma sección o a la misma subsección; y es eso precisamente lo que reflejan los corchetes externos. Hay celdas de distintos tipos. Esta que estás leyendo es una celda de texto y si te fijas bien el corchete que la delimita tiene una doble barrita arriba. Para escribir en un cuaderno de Mathematica primero tienes que crear una nueva celda lo que se hace como sigue: situa el ratón fuera de una celda, por ejemplo, en el pequeño espacio que hay entre dos celdas consecutivas y cuando el cursor se convierta en una barra horizontal haz clic con el botón izquierdo del ratón y aparecerá una línea horizontal; seguidamente escribe lo que quieras. Cuando acabes de escribir se habrá creado una nueva celda cuyo contenido será lo que tú has escrito. Escribe ahora tu nombre debajo de esta celda.

Como no le has dicho a Mathematica que solamente querías escribir texto el programa ha creado una nueva celda de entrada (input cell). Observa que, con el estilo que estamos usando en este cuaderno, las celdas de entrada tienen un aspecto muy diferente de las celdas de texto. Pon el ratón sobre el corchete interior de la celda que has creado con tu nombre y cuando el cursor se convierta en una flecha haz clic con el botón izquierdo del ratón. Así es como se seleccionan celdas. Ahora, mientras la celda está seleccionada, pulsa Alt+7 para convertirla en una celda de texto (alternativamente, en la barra de menú Cell->Display As->Text). 
Las celdas de input son las que se crean por defecto y sirven para introducir datos y funciones y podemos pedirle a Mathematica que las ejecute y realice los cálculos indicados. Para ejecutar una celda de input debes hacer clik con el botón izquierdo del ratón en algún lugar dentro de la celda. Verás un cursor vertical que aparece y desaparece. Ahora pulsa la tecla "Intro" del teclado numérico o bien pulsa "mayúsculas" + "Return" y comprobarás que Mathematica ejecuta la celda y te da la respuesta correspondiente en una celda de salida. Ejecuta la siguiente celda.

(∫_(-∞)^∞) Sin[x]/x 
        \[DifferentialD]x

Observa que el programa ha escrito In[1] y Out[1] para referirse a la entrada y salida correspondientes. De esta forma Mathematica lleva un control de todo lo que vas haciendo lo que te permite aprovechar los resultados obtenidos para otros cálculos posteriores. Fíjate en que el corchete que delimita una celda de entrada tiene un pequeño triangulito en la parte superior. En esta primera evaluación Mathematica ha tenido que cargar el núcleo (el kernel), es decir, las reglas e instrucciones internas de cálculo del programa las cuales ya permanecerán en la memoria hasta que lo cierres. Por eso esta primera evaluación es algo más lenta de lo normal.

En una misma celda puedes escribir varias instrucciones en líneas distintas (para pasar de una línea a otra se pulsa "Return")  y Mathematica interpreta cada una de ellas como una entrada diferente. La siguiente celda de input contiene dos entradas y Mathematica producirá dos salidas, una para cada entrada.

Limit[((x - Sin[x])/(x^3)), x -> 0](∫_(-∞)^∞)(( 1 - Cos[x])/(x^2)) 
        \[DifferentialD]x

Comprueba que si ahora ejecutas otra celda de entrada no se le asignará In[3] sino In[4].

Expand[(((1 + x + (x^2)))^7), x]

A veces no interesa que se muestre en pantalla el resultado de una entrada. Por ejemplo si le pides a Mathematica que genere una lista con todos los números del 1 al 100 no te interesa para nada que se muestre el resultado en pantalla. Ejecuta la siguiente celda.

Range[100]

Para evitar esto basta escribir ";" al final de la entrada. De esta forma Mathematica hace y recuerda los cáculos pero no los muestra en pantalla.

Range[200];

Aparentemente Mathematica no ha hecho nada. Pero eso no es así. Para referirnos a una salida en Mathematica podemos hacerlo invocando de forma explícita su identificación; "Out[p]"se refiere a la salida número "p", y también con el símbolo "%" el cual se refiere siempre a la salida inmediata anterior, el símbolo "%%" se refiere a la salida penúltima, "%%%" a la salida antepenúltima, etcétera. Comprobemos que, efectivamente, la última salida son los primeros doscientos números.

%

Antes de acabar esta primera sección, te propongo que selecciones con el ratón el corchete exterior de la derecha y hagas doble clic. Verás cómo las celdas de esta sección quedan todas agrupadas en una sola viéndose solamente el encabezado de la sección. Para abrirlas de nuevo selecciona el corchete con forma de flecha que las agrupa y haz doble clic en él.

Operaciones aritméticas

Puedes realizar operaciones aritméticas con Mathematica igual que con una calculadora manual. Los símbolos para estas operaciones son los usuales  ("+", "-", "*", "/", y "^") y se realizan con la precedencia usual: la exponenciación ("^") precede a la multiplicación ("*") y a la división ("/") las cuales tienen igual precedencia y, a su vez, preceden a la suma y a la diferencia que tienen igual precedencia. En una expresión como "6*7^5+26" se calcula primero "7^5" seguido por "6*7^5" para terminar sumando "26".

6*7^5 + 26

Mathematica permite que sustituyas el símbolo de la multiplicación por un espacio en blanco.

6 7^5 + 26

Ahora que estás empezando es preferible que uses el símbolo de la multiplicación para evitar posibles errores.

A diferencia de las calculadoras manuales más sencillas, Mathematica puede trabajar con fracciones en forma simbólica, es decir, sin convertirlas a su expresión decimal.

7 + (9/13)

(8/11) + (6/7)

Las fracciones se representan siempre en su forma irreducible.

(4032/15015)

Naturalmente, la potencia de cálculo de Mathematica es muy superior a la de una calculadora manual.

3^95

Valores exactos y aproximados

En Mathematica hay dos clases de valores: exactos y aproximados. Valores exactos son los enteros, las fracciones y las representaciones simbólicas de constantes como π o (Sqrt[2]). De ellos Mathematica sabe calcular tantos dígitos como sea necesario en cualquier cálculo. Los valores aproximados son los números decimales, es decir, números en cuya expresión aparece un punto decimal.

Debes tener siempre presente que Mathematica devuelve los resultados de la misma forma que introduces los datos, es decir, Mathematica nunca tratará de convertir valores exactos en valores aproximados y si en un cálculo intervienen valores exactos y aproximados el resultado será un valor aproximado.

4^(1/2) + Log[E]

En este caso como la operación puede realizarse de forma exacta, Mathematica la hace y presenta el resultado exacto obtenido.

3^(1/2) + Log[5]

En este cálculo como el resultado no es un número exacto pero los datos sí lo son, Mathematica trabaja de forma simbólica, no realiza la operación indicada y devuelve los mismos datos. Observa lo que ocurre si ahora cambiamos el valor exacto "5" por "5." que es un número con punto decimal y por tanto es considerado por Mathematica como un valor aproximado.

3^(1/2) + Log[5. ]

Mathematica realiza las operaciones indicadas y el resultado también es un valor aproximado. Pobre resultado pensarás: sólo cinco decimales, cualquier calculadora manual es más precisa. No te precipites. Aunque Mathematica por defecto presenta en pantalla los valores aproximados con solamente seis dígitos y a veces los redondea como hizo antes; los números con punto decimal son guardados en la memoria interna de Mathematica con al menos 16 dígitos significativos. El comando ImputForm[numero] sirve para que Mathematica presente en pantalla todos los dígitos que conoce de un número.

InputForm[3^(1/2) + Log[5. ]]

Lo anterior te indica que es importante la forma en que introducimos los datos: no es lo mismo introducir 1/2 que .5. Tampoco es lo mismo 2. (un número real aproximado para Mathematica) que 2 sin punto decimal (que es tratado como un número entero). Como ya te he dicho antes, cuando Mathematica trabaja con valores exactos lo hace de forma simbólica y el resultado será también un valor exacto. 
Mathematica puede trabajar con números aproximados de cualquier cantidad de dígitos. La precisión de un número real aproximado es el número de dígitos (en base 10) de dicho número que son considerados como significativos para los cálculos. Mathematica distingue dos clases de números reales aproximados: números de precisión arbitraria y "números-máquina" con precisión de máquina. Los números de precisión arbitraria pueden tener una cantidad arbitraria de dígitos y su precisión se ajusta a medida que se hacen cálculos con ellos. Los números máquina tienen un número fijo de dígitos significativos para los cálculos y su precisión es siempre la misma. Dicha precisión, con la que Mathematica trabaja por defecto, depende del hardware de punto flotante que se utilice y su valor es el de la variable global  $MachinePrecision.

$MachinePrecision

Un valor frecuente de dicha variable es 16. Mathematica considera que los números aproximados que se especifican con un número de dígitos menor o igual que 16 son números-máquina y, por tanto, su precisión es igual a 16.

Precision[1.33]1. /7Precision[1. /7]InputForm[1. /7]

Los valores exactos tienen precisión infinita y pueden convertirse en números aproximados con la precisión que queramos. El comando "N[expr, n]" donde "expr" es un valor exacto y n>16, evalúa "expr" numéricamente convirtiéndola en un número aproximado con n dígitos de precisión, mientras que N[expr,n] para n≤16 evalúa "expr" convirtiéndola en un número-máquina con precision 16. No es posible aumentar la precisión de un número aproximado con el comando "N[expr, n]".

Precision[(Sqrt[2])]    Precision[N[(Sqrt[2]), 30]]    \(N[\@2, 30]\  (*\ 
      Mathematica\ muestra\ en\ pantalla\ el\ valor\ numérico\ de\ 
        \@2\ con\ 30\ dígitos\ *) 
\)Precision[(Sqrt[2.]) ]   
      Precision[N[(Sqrt[2.]) , 50]]   \(N[\@2. , 50]\  (*\ 
      Mathematica\ muestra\ en\ pantalla\ 16\ dígitos\ *) 
\)N[(Sqrt[2]), 3]   Precision[N[(Sqrt[2]), 3]]   \(InputForm[N[\@2, 3]]
 (*\ 
      La\ forma\ en\ que\ Mathematica\ lo\ representa\ internamente\ con\ 16\ 
          dígitos . \ El\ mismo\ resultado\ se\ obtiene\ para\ 
          N[\@2, k]\ con
			\ k ≤ 16\ *) \)

En la celda anterior hemos escrito varios comentarios. Los comentarios son imprescindibles para explicar lo que hacen los comandos que defines al escribir un programa. Un comentario es de la forma "(* aquí se escribe el texto del comentario *)" y son ignorados por el programa cuando se ejecutan las celdas que los contienen.

Cuando Mathematica trabaja con valores exactos se dice que lo hace con "precisión infinita". Ya puedes suponer que trabajar simbólicamente con valores exactos requiere más memoria y más tiempo de cálculo que trabajar con valores aproximados, por eso cuando escribas programas que deban realizar muchos cálculos es importante que te asegures de que Mathematica trabajará con valores aproximados (controlando, si es necesario, la precisión con la que trabaja).

Operaciones boleanas

Mathematica tienen algunas funciones que no devuelven un resultado numérico sino un valor "False" o "True". Entre ellas se encuentran: 
A) Operadores relacionales de comparación de dos expresiones aritméticas: menor (<), mayor (>), menor o igual (<=), mayor o igual (>=), igual (==) ¡con dos signos de igualdad!, distinto (!=). 
B) Operadores lógicos que trabajan con valores "False" y "True" y devuelven como valor "False" o "True". Entre estos operadores están: el operador "and" (&&) (conjunción lógica que devuelve "True" si los dos valores sobre los que actúa son "True" y devuelve "False" en otro caso), el oerador "or" ( | | ) (disyunción lógica que devuelve "True" si algunos de los valores sobre los que actúa es "True" y devuelve "False" si ambos son "False").
Tecleando "Esc <= Esc" obtienes ≤, tecleando "Esc >= Esc" obtienes ≥, tecleando "Esc && Esc" obtienes ∧, tecleando "Esc || Esc" obtienes ∨, tecleando "Esc != Esc" obtienes ≠.
Aquí tienes algunos ejemplos.

5 > 58 ≥ 8(5 > 7) || (3 < 4)(5 > 7) && (3 > 4)(Sqrt[2]) < 27/22

Cuando Mathematica no puede dicidir una respuesta devuelve sin comentarios la misma expresión de entrada.

x < 27

El operador de igualdad (==) puede utilizarse para comprobar si dos cantidades numéricas "expr1" y "expr2" son "iguales". Si las cantidades son aproximadas el operador de igualdad (==) comprueba si ambas son iguales con la precisión de aquella que la tiene menor. También debes de tener en cuenta que Mathematica asocia a cada número aproximado x una cota de error δ (relacionada con el número de cifras decimales de x y con el valor absoluto de x) y considera que el valor verdadero de dicho número puede ser cualquier número en el intervalo ] x - δ/2, 
      x + δ/2[. Por ello Mathematica considera iguales a x todos los números en dicho intervalo. Por esta razón el operador de igualdad puede proporcionar algunas veces respuestas extrañas. No es este el momento para entrar en detalles, solamente quiero llamarte la atención para que seas prudente en el uso del operador de igualdad (==) cuando quieras usarlo para saber cuándo dos cantidades pueden ser consideradas iguales a efectos de cálculo. Cuando el operador de igualdad "cantidad1==cantidad2" proporciona la salida True, debes interpretar que dichas cantidades son iguales con una cierta cota de error. No es propio de la asignatura de Análisis Matemático profundizar en estos temas. En otras asignaturas estudiarás la aritmética de punto flotante, la forma en que se representan internamente los números en un ordenador, la propagación de errores de redondeo y otros temas afines y entonces entenderás estos comportamientos (que no son, por supuesto, específicos de Mathematica). Aquí tienes algunos ejemplos de lo que digo.

123456789012345.  == 123456789012344

1.2345678901234 == 1.2345678901233

1.23456789012349 == 1.23456789012348

1 == 1.+10^-14

1 == N[1 + 10^-14, 17]

Pi == N[Pi, 2]

Consultar la ayuda de Mathematica

Consultar la ayuda de Mathematica es lo más fácil que te puedas imaginar. Basta que escribas uno o dos símbolos de interrogación seguido del nombre del comando del que quieres información. Ejecuta la siguiente celda.

? N

Si todavía quieres más información hazlo como sigue.

??  N

Para preguntar por todos los símbolos que empiezan por W puedes hacerlo como sigue.

? W*

Para preguntar por todos los símbolos que contienen Pre puedes hacerlo como sigue.

?*Pre*

Debes tener en cuenta que Mathematica distingue entre mayúsculas y minúsculas.

Escribir expresiones matemáticas en Mathematica

Frecuentemente las expresiones matemáticas se pueden escribir de varias formas que solamente se diferencian por su apariencia tipográfica. Puedes escribir 3^(1/7) o (3^(1/7)) a efectos de cálculo son exactamente igual. Las paletas te ayudan a escribir con la apariencia que prefieras y son muy fáciles de usar. En File->Palettes encontrarás varias paletas además de la básica (BasicInput) que se abre al iniciar el programa. También puedes consultar Edit->Expression Input.Te indico a continuación otra forma de escribir algunos símbolos de uso frecuente.
Potencias: usa "Ctrl+6". Por ejemplo: a "Ctrl+6" b = (a^b) (para salir de la celda "inline" que se crea hay que pulsar Ctrl+espacio) 
Raíces: usa "Ctrl+2". Por ejemplo: "Ctrl+2" a = (Sqrt[a]) (para salir de la celda "inline" que se crea hay que pulsar Ctrl+espacio) 
Letras griegas: usa Esc+letra latina equivalente+Esc. Por ejemplo: Esc+p+Esc = π.
La letra E está reservada en Mathematica para el número base de los logaritmos naturales. Puedes escribirlo también con Esc+ee+Esc = e.
El número π puedes escribirlo también Pi.

Precaución importante

Cuando termines de hacer una práctica con Mathematica es muy importante que borres todas las salidas (Output) antes de cerrar el cuaderno. Para ello vas a Kernel -> Delete all Output. Ten en cuenta que los archivos de Mathematica que contienen gráficos se corrompen con cierta frecuencia. Esto lo evitas suprimiendo todas las salidas antes de cerrar el cuaderno. Con ello no pierdes nada porque tu trabajo son los comandos y funciones que tú has definido y esos no se borran y pueden ejecutarse cuando el cuaderno se abra de nuevo.

Ejercicios

Ejercicio 1. Ordena de menor a mayor los números π, (1068966896/340262731) y (103993/33102).
Ejercicio 2. ¿Qué número es menor (e^π)o (π^e)?
Ejercicio 3. Explica la respuesta de Mathematica al comando N[N[Pi,15],30].