Totis
Temas abordados
Totis
Temas abordados
nb 1
Mayo de 2004
Introducción
Estos apuntes son una aproximación al programa Mathematica en su versión 5.0. No se le
suponen conocimientos previos al lector sobre el programa, pero puede complementarse con
otros muchos manuales relativos al mismo.
inputs se pueden recalcular cuantas veces se desee (por si queremos cambiar un dato, por ejem-
plo) y la nueva salida sustituirá a la antigua asignándoles a ambos una nueva numeración.
Otro punto a tener en cuenta es que cuando escribamos comandos deberemos tener
cuidado con:
Una de las novedades más importantes que se introdujo en la versión 3.0 y que ha
continuado hasta la versión actual es lo que se denominan paletas (palettes). Las paletas son
pequeñas ventanas que podemos activar (o desactivar) y que contienen algunas de las opera-
ciones, órdenes e instrucciones más usuales que necesitaremos durante nuestro trabajo. Inicial-
mente son siete paletas que contienen todo tipo de operaciones, desde las más básicas hasta
otras más complejas de Cálculo Algebraico, Cálculo Integral o de Cálculo Diferencial. Pero no
solo nos va a servir para tenerlas más a mano, sino que además nos ofrecen la posibilidad de
escribir, y por tanto resolver, de la misma forma que escribimos en un folio. Es decir, podemos
resolver la integral definida de x entre 0 y 2 tecleando Integrate[x, {x, 0, 2}] o usar la Paleta 3
denominada BasicCalculations (la podemos encontrar en File/Palettes/3BasicCalculations) y
2
escribir ¼0 x Å x, lo cual es mucho más intuitivo.
Éste podría ser el aspecto normal de parte de una ventana de Mathematica, donde
podemos apreciar algunos de los aspectos que ya hemos comentado hasta este punto.
[Link] 3
Existen diferentes editores de texto específicos para poder visualizar documentos de trabajo de
Mathematica con la idea de que todo el mundo pueda editarlos, leerlos o modificarlos sin
necesidad de adquirir la versión completa del programa. Estos programas nos permitirán única-
mente visualizar los Notebooks (archivos .nb), es decir, no se podrán utilizar para realizar
[Link] 4
operación alguna. Los editores de texto para Mathematica no contienen el núcleo de Mathemat-
ica. El editor que recomendamos usar se denomina MathReader y ha sido creado por la misma
compañía que Mathematica (Wolfram Research, Inc.). Éste se puede descargar gratuitamente
en la dirección [Link]/products/ y nos servirá para visualizar, entre otros, artículos
de Economía y Empresa como los disponibles en la página
[Link]
Para su correcta utilización, conviene saber que Mathematica distingue entre celdas
(Cells) del tipo input, output, celdas de texto o, por ejemplo, una celda para el título del libro
(estilo Title). De hecho, si escribimos texto dentro de una celda del tipo input, Mathematica
intentará evaluar este texto y, al no comprender lo que escribimos, dará varios errores. Es decir,
cuando queramos escribir texto deberemos dividir una celda en dos celdas distintas, la primera
para el texto (estilo Text) a la que le daremos el formato que deseemos y la segunda para las
operaciones y funciones que queremos que calcule Mathematica (estilo input) las cuales llevan
un estilo por defecto, pero que también podemos modificar. Todas las operaciones que con-
ciernen a las celdas (tipo de celda, agrupación o división) se encuentran en el menú Cell. Tam-
bién es posible introducir texto dentro de una celda evaluable utilizando (* comentario *).
Desde la ayuda también se hace referencia a numerosos paquetes que, aunque pueden
formar parte de la distribución estándar de Mathematica 5.0, no pueden ser utilizados hasta que
el usuario los cargue previamente (como ya se verá, mediante << o el comando Needs).
[Link] 5
Calculadora
Mathematica reconoce los operadores habituales de suma, diferencia, producto, cociente y
potenciación:
Otras operaciones numéricas usuales son el cálculo del valor absoluto, la raíz cuadrada,
la parte entera, el factorial…
Ya que éstas son las primeras funciones que aparecen, vamos a realizar algún comen-
tario. En primer lugar destacar que, tal como se comentó al principio, todas las funciones
comienzan con mayúsculas (incluso cuando el nombre está formado por varias palabras) y, en
segundo lugar, que los argumentos de las distintas funciones siempre van entre corchetes.
Además, la mayoría de las operaciones anteriores se encuentran también en varias de las pale-
tas, como la Paleta 3 (BasicCalculations) y la Paleta 4 (BasicInputs).
2^300
203703597633448608626844568840937816105146839366593625063614044935g
4381299763336706183397376
123 s 99990
41
cccccccccccccccc
33330
N#123 s 99990'
0.00123012
N#Sqrt#3', 20'
1.7320508075688772935
La orden Sqrt[ ] (del Inglés square root) es el comando usado para calcular la raíz
cuadrada. También aparece en la paleta BasicCalculations/Arithmetic and Numbers.
123 s 99
41
ccccccc
33
123. s 99
1.24242
Constantes incorporadas
Mathematica tiene un gran número de constantes usuales predefinidas, algunas de ellas son:
Busquemos el valor de S con 20 cifras exactas. Para ello utilizaremos de nuevo la orden
N[] que sirve para calcular aproximaciones, como ya se ha visto.
N#S, 20'
3.1415926535897932385
[Link] 8
Funciones usuales
Veamos ahora una tabla de las funciones más usuales y su sintaxis en Mathematica:
Orden Significado
Expand[x] Forma expandida (efectúa sumas, productos, potencias…).
Factor[x] Factoriza x (escribe x como producto de factores mínimos).
Together[x] Escribe todos los términos de x con un denominador común.
Apart[x] Separa x en términos con denominadores lo más simples posible.
Cancel[x] Cancela factores comunes que posean numerador y denominador.
Simplify[x] Simplifica x siguiendo reglas algebraicas estándar.
FullSimplify[x] Simplifica x usando reglas algebraicas más potentes.
TrigExpand[x] Expande expresiones trigonométricas en suma de términos.
TrigFactor[x] Factoriza expresiones trigonométricas en producto de términos.
Expand#+1 x/^3'
1 3 x 3 x2 x3
Factor#%'
+1 x/3
[Link] 10
Expand#+1 x 3y/^4'
Factor#%'
Factor#x^10 1'
Expand#%'
1 4 x 6 x2 4 x3 x4 12 y 36 x y 36 x2 y
12 x3 y 54 y2 108 x y2 54 x2 y2 108 y3 108 x y3 81 y4
+1 x 3 y/4
+1 x/ +1 x/ +1 x x2 x3 x4 / +1 x x2 x3 x4 /
1 x10
Mathematica proporciona la respuesta en el formato que hemos visto. Nótese que debe
escribirse el doble signo igual entre la función y el valor cero para indicar que es una ecuación.
La x que figura después de la coma identifica la variable o incógnita a despejar.
Como este comando usa métodos aproximados iterativos, es posible que si damos
valores muy alejados para los puntos iniciales, Mathematica no pueda encontrar una solución (o
la solución que buscamos). Es conveniente hacer primero una gráfica de la función para “ver”
dónde se anula la función (más adelante explicaremos algo más sobre las representaciones
gráficas). Por ejemplo, hallemos un cero de la función h(x)=sen(x^2)-cos(x):
1.5
0.5
-3 -2 -1 1 2 3
-0.5
-1
hGraphicsh
x 0.849369
[Link] 12
Repitiendo el procedimiento, podremos hallar cualquier otra raíz que nos proponga-
mos.
Para sistemas de ecuaciones algebraicas bastará escribir las ecuaciones entre llaves e
indicar las variables del sistema.
x 5, y 2
Vectores y matrices
Para definir un vector de tres coordenadas basta con escribir los elementos entre llaves y separa-
dos por comas. Igualmente, para definir una matriz bastará escribirla como un vector de vec-
tores que corresponderán a las filas de la matriz. También se puede usar la paleta BasicCalcula-
tions/ Lists and Matrices, como se verá luego. Definamos dos vectores:
v1 1, 2, 3
v2 2, 6, 3
1, 2, 3
2, 6, 3
Nótese que se ha asignado a dos variables el valor de vectores con el signo "=".
v1.v2
o también
Dot#v1, v2'
5
[Link] 13
Cross#v1, v2'
24, 9, 2
v1 v2
Part#v1, 2'
Una vez que hemos visto cómo se introducen vectores manualmente, veamos que tam-
bién es posible generarlos con la orden Table[], cuya definición es
1, 4, 9, 16
Pasemos ahora a aspectos básicos del Cálculo Matricial. Definamos un par de matrices:
MatrixForm#a'
MatrixForm#b'
L 1 2 5]
M \
M
M 2 5 7 ]
]
M
M ]
]
M ]
N 1 0 3 ^
L1 1 1 \
M ]
M
M 6 3 2] ]
M
M ]
]
M ]
N 1 3 0 ^
La multiplicación no es más que a.b, pero si queremos que el resultado tenga la forma tradicio-
nal haremos:
MatrixForm#a.b'
L 18 8 5 \
M
M ]
M
M
M 35 8 8 ]
]
]
]
M ]
N 4 8 1 ^
Además, como es de esperar, podemos multiplicar matrices con vectores y matrices con
escalares:
[Link] 15
MatrixForm#a.v1'
L
M
20 \
]
M
M 29 ]
]
M
M ]
]
M ]
N 10 ^
MatrixForm#2a'
L 2 4 10 \
M ]
M
M 4 10 14 ]
]
M
M ]
]
M ]
N 2 0 6 ^
También es posible introducir matrices mediante el uso de las paletas. En varias de las
paletas (BasicInput, BasicCalculations y otras) aparece la opción correspondiente a una matriz
2x2. Una vez seleccionada esta opción, podemos añadirle filas y columnas pulsando Ctrl+Enter
y Ctrl+"," respectivamente.
Det#a'
16
MatrixForm#Inverse#a''
L
M ccccc
16c
15
ccc
8c
3
ccccc
16c \
11
]
M
M ]
M
M 17 ] ]
]
M
M ccccc
16c
13
ccc
8c
1
ccccc
16c ]]
M
M
M 5 ]
]
]
N ccccc
16c ccc
8c ccccc
c
1 9
16 ^
Eigenvalues#a'
1 r 1 r
cccc ,7 17 0, 2, cccc ,7 17 0
2 2
Eigenvectors#a'
1 r 3 r
3 cccc ,7 17 0, 5 cccc ,7 17 0, 1 ,
2 4
1 r 3 r
1, 3, 1, 3 cccc ,7 17 0, 5 cccc ,7 17 0, 1
2 4
MatrixRank#a'
MatrixForm#Transpose#a''
L 1 2 1 ]
M \
M
M 2 5 0] ]
M
M ]
]
M ]
N 5 7 3 ^
RowReduce#a'
MatrixForm#%'
L
M
1 0 0\
]
M
M 0 1 0]
]
M
M ]
]
M ]
N0 0 1 ^
Para la matriz "a" que estamos usando como ejemplo, la orden Eigensystem[a]
proporciona la misma información que la aplicación sucesiva de Eigenvalues[a] y
Eigenvectors[a]:
Eigensystem#a'
1 r 1 r
cccc ,7 17 0, 2, cccc ,7 17 0 ,
2 2
1 r 3 r
3 cccc ,7 17 0, 5 cccc ,7 17 0, 1 ,
2 4
1 r 3 r
1, 3, 1, 3 cccc ,7 17 0, 5 cccc ,7 17 0, 1
2 4
Para una matriz no diagonalizable, no nos puede proporcionar una base formada por
autovectores:
L
M
1 1 3\
]
M
M 0 1 2]]
M
M ]
]
M ]
N 0 0 2 ^
[Link] 18
Eigensystem#c'
Nota: En Mathematica todo lo que esté escrito entre llaves y debidamente separado por
comas es una lista, como un vector o una matriz, y responderá a las propiedades de éstos.
Como hemos visto con los vectores, podemos asignarle valores a las variables para así facilitar-
nos el trabajo. Si queremos que a partir de este momento la variable x valga 7 haremos:
x 7
x4
11
x^2 x 3
53
Es importante destacar que los valores asignados a las variables son permanentes. Una
vez que se haya asignado un valor a una variable concreta, el valor permanecerá hasta que no
“liberemos” o "limpiemos" a esta variable. Por supuesto, el valor desaparecerá cuando reinicie-
mos el núcleo o empecemos una nueva sesión de Mathematica. Para liberar a las variables
bastará con
Clear#x'
O bien
[Link] 19
x .
Obsérvese que esta entrada no produce una salida. Esto se debe a los dos puntos delante
del signo de igualdad. Lo que hacemos al añadir los dos puntos equivale a un pequeño pro-
grama que se ejecutará cada vez que lo llamemos. En cambio, si no añadimos los dos puntos,
Mathematica ejecutará la función inmediatamente.
Notemos también que la variable x lleva un guión bajo "_" delante del signo igual. Esto
es para que el programa entienda que se trata de una variable muda, es decir, x puede llevar
cualquier nombre o valor. Es importante recordar esto para evitar posibles errores, ya que si se
hubiese escrito f[x]:=x^2 se habría asignado el valor x^2 al objeto f[x] en vez de a la
función f y no entenderá, por ejemplo, f[3] ó f[y].
Podemos calcular el valor numérico de la función f que hemos definido, para distintos
valores de x:
f #3'
24
f #3 s 2'
21
ccccccc
4
Clear#a'
f #a'
5 a a2
[Link] 20
f #a h'
5 +a h/ +a h/2
Expand#%'
5 a a2 5 h 2 a h h2
Clear#f '
Primera forma:
Los signos de menor o igual y de mayor o igual se escriben como <= y >= respectiva-
mente. Esto define cada uno de los trozos de f, pero se puede definir toda la función de una
vez. El ";" al final de cada línea sirve para que, aunque se ejecuten, no produzcan salidas.
Segunda forma:
10
7.5
2.5
-4 -2 2 4
-2.5
-5
-7.5
-10
hGraphicsh
Nota: las líneas verticales que aparecen no forman parte de la gráfica de la función.
Para obtener una gráfica donde estas verticales no aparezcan, podemos utilizar el comando
Show[], pero no vamos a entrar ahora en más detalles de los necesarios.
Cálculo de límites
Una vez que hemos aprendido a definir funciones, ya podemos manipularlas cómodamente y lo
primero que vamos a aprender es a calcular límites. Podemos calcular el valor de la función
cos(x^2) en el punto x=0 simplemente reemplazando el valor x por 0 (no es necesario ni conve-
niente hacer esto para calcular límites, pero así aprendemos a realizar sustituciones).
Cos#x^2' s. x ! 0
Pero si hacemos esto mismo para algunas funciones especiales, como por ejemplo
sen(x)/x, obtenemos una indeterminación:
[Link] 22
Sin#x' s x s. x ! 0
1
— Power::infy : Infinite expression cccc encountered. More…
0
— ::indet : Indeterminate expression 0 ComplexInfinity encountered. More…
Indeterminate
Para encontrar el valor correcto al que tiende esta función en el punto, necesitamos
tomar límite. La orden es (también en la Paleta 3, BasicCalculations/Calculus)
Así, haremos
Limit#Sin#x' s x, x ! 0'
Si un límite no existe o vale infinito, obtendremos una salida que así lo indique:
Derivación
Para calcular la derivada de una función podemos utilizar los símbolos de derivadas parciales
que aparecen en la paleta BasicInput o directamente alguna de las siguientes órdenes
La última de las tres funciones es válida para funciones de varias variables. Dedicamos
una sección posterior al estudio de la derivación, integración, etc. de este tipo de funciones.
Clear#f'
f#x_' : x ^ 2 3x 4
D#f#x', x'
3 2 x
También es posible calcular la derivada de una función con f'[x]. Es más, también
la función Derivative[] sirve para el cálculo de derivadas aunque la estructura es algo
distinta (véase la Ayuda). Adelantamos únicamente que Derivative[1][f] equivale a
f'[x].
f '#x'
Derivative#1'#f'
3 2 x
3 2 #1 &
Derivative#1'#Sin'
Cos##1' &
Clear#a, b'
g#x_' a Log#x Cos#x'' b Sin#a b s x'
D#g#x', x'
ab
a Log#x Cos#x'' b Sin$ cccccccc (
x
a b2 Cos# cccccc ab
x 'c cccccccccccccccccccccccccccccccc
a Sec#x' +Cos#x' x Sin#x'/
cccccccccccccccccccccccc
2
ccccccccc cccccccccccccccccccccccccccccccc
cccccccc
x x
Simplify#%'
a +x b2 Cos# cccccc ab
x ' x Tan#x'/
2
cccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccc
2
cccccccccccc
x
FullSimplify#%'
a +x b2 Cos# cccccc ab
x c'/
cccccccccccccccccccccccccccccccc
2
cccccccc cccccc a Tan#x'
x
Otras de las funciones más frecuentes que nos encontraremos en problemas de varias
variables es el cálculo del vector gradiente, Grad[función,Cartesian[x,y,z]]. Esta
orden se encuentran en el paquete Calculus`VectorAnalysis` (que tenemos que cargar
previamente):
Veamos un ejemplo:
[Link] 25
2 x y3 , 3 x2 y2 , 1
Integración
Para resolver un problema de integración, como viene siendo habitual, tenemos dos maneras de
abordarlo: o bien usamos la orden Integrate[], o bien los símbolos de la paleta BasicInput.
La orden Integrate[] tiene tres usos distintos:
à g#x'Šx
1 ab
a x cccc Ç a x2 a b2 CosIntegral$ cccccccc ( a x Log#1 Æ2 Ç x '
2 x
1 ab
a x Log#x Cos#x'' cccc Ç a PolyLog#2, Æ2 Ç x ' b x Sin$ cccccccc (
2 x
Integrate#g#x', x'
1 ab
a x cccc Ç a x2 a b2 CosIntegral$ cccccccc ( a x Log#1 Æ2 Ç x '
2 x
1 ab
a x Log#x Cos#x'' cccc Ç a PolyLog#2, Æ2 Ç x ' b x Sin$ cccccccc (
2 x
Algo feo, pero qué le vamos a hacer. Calculemos una integral impropia dependiente
de un parámetro q:
[Link] 26
r
S
2 If$Re#q' ! 0, ccccccccc
r ,
q
Integrate$Æq x , x, , , Assumptions Re#q' 0((
2
La salida obtenida quiere decir que si la parte real de q es mayor que cero entonces la
r
S
integral es igual a 2 ccccccc
r y, si no, no sabe hacerlo.
q
32.9053
funcion#1, 2'
— NIntegrate::inum : Integrand g#x' is not numerical at x 0.785398. More…
S S
NIntegrate$g#x', x, cccc , cccc (
6 3
ab
a Log#x Cos#x'' b Sin$ cccccccc (
x
[Link] 27
Ahora evaluamos
funcion2#1, 2'
0.109469
funcion2#1, 0'
0.330295
El símbolo ":=" es más que una asignación. Si nos damos cuenta, además de servir
como asignación, hace que la operación definida no sea ejecutada inmediatamente sino cuando
se le llame más adelante. O sea, es como un pequeño programa que luego será ejecutado.
Sin#3 y2 '
Sin#2 x'
Limit#f2#y', y ! 0'
Limit#f1#x', x ! 0'
2 y 2 Cos#2 x 3 y2 '
2 x 6 y Cos#2 x 3 y2 '
4 Sin#2 x 3 y2 '
2 12 y Sin#2 x 3 y2 '
2 12 y Sin#2 x 3 y2 '
32 Cos#2 x 3 y2 '
32 Cos#2 x 3 y2 '
2 3
Finalmente, si queremos calcular la integral doble ¼1 ¼0 f +x, y/Å yÅ x, haremos
L
M r L
M \]
]\
1
cccc M
M M 6
MCos#3' FresnelS$3 cccc ( Sin#3']
6
cccc ( FresnelC$3 ]]
]
6 M81 6 S Sin#1' M
M M S S ]
]]
]
N N ^^
Simplify#%'
L
M r L
M \
]\
]
1
cccc M
M S M
M 6
cccc (
6
cccc ( ]
]]
]
6 M
M81 6 Sin#1' M
M
Cos#3' FresnelS$3
S
FresnelC$3
S
Sin#3']
]]
]
N N ^^
N#%'
13.8634
Para los casos en los que el recinto de integración no es rectangular como, por ejemplo,
2 x2
¼1 ¼x x yÅ yÅ x haremos
27
ccccccc
8
Series
En esta sección vamos a distinguir entre dos problemas bien distintos: calcular la suma de una
serie conocida y generar la serie de potencias de una función conocida en un punto dado.
Por ejemplo,
7381
ccccccccccccc
2520
933
[Link] 31
1946843
ccccccccccccccccccccc
240240
N#%'
8.10374
x3
x ccccccc O#x'4
6
x2 x3
x ccccccc ccccccc O#x'4
2 3
Æ Æ x2 O#x'4
sen+x^32x/
El coeficiente del término 20 de la serie de potencias de la función f(x)= cccccccccccccccc
x2
cccccccccccccc
en el punto x=3 es
N#%'
2.96413 109
Ecuaciones diferenciales
Para las ecuaciones o sistemas de ecuaciones diferenciales, el procedimiento es análogo a las
algebraicas. Resolvamos la ecuación diferencial de variable separadas y'=2xy. En primer
lugar podemos (aunque no es necesario) definir la ecuación diferencial a resolver:
y #x' m 2 x y#x'
y#x' Æx C#1'
2
En caso de que queramos indicarle valores iniciales para obtener una solución particu-
lar, se añade como una nueva ecuación entre llaves de la siguiente manera:
y#x' Æx
2
Representación gráfica
Representación gráfica en 2D
50
40
30
20
10
-6 -4 -2 2 4 6
hGraphicsh
40
20
-10 -5 5 10
-20
-40
-60
hGraphicsh
[Link] 34
Observemos que Mathematica realiza el gráfico con distintas escalas en ambos ejes.
Para que tome la misma unidad en los ejes, se debe agregar la orden
AspectRatio->Automatic (esta opción se verá con profundidad en la próxima sección)
como vemos en el siguiente ejemplo:
40
20
-10
-5 510
-20
-40
-60
hGraphicsh
Como vemos, la gráfica de la función ahora es “más real”, aunque hay detalles que no
se aprecian con suficiente nitidez. Por tanto, es importante decidir cuándo usar la orden
AspectRatio->Automatic y cuándo dejar que Mathematica “decida” cuál es la escala
más conveniente.
Podemos pedir que represente ambas funciones en el mismo dibujo; para ello, usamos el
comando Plot, pero como primer argumento usaremos ahora una lista de funciones:
[Link] 35
40
20
-6 -4 -2 2 4 6
-20
-40
-60
hGraphicsh
Existe otra manera de superponer gráficas; consiste en asignarle a cada una un nombre y
usar el comando Show[] como se muestra en el siguiente ejemplo:
0.5
-3 -2 -1 1 2 3
-0.5
-1
hGraphicsh
[Link] 36
3.5
2.5
-6 -4 -2 2 4 6
hGraphicsh
12
10
-3 -2 -1 1 2 3
hGraphicsh
-6 -4 -2 2 4 6
hGraphicsh
1 4 12
0.5 3.5 10
3 8
-3-2-1
-0.5 1 2 3 2.5 6
-1 -6-4-2 246 -3-2-1 1 2 3
hGraphicsArrayh
1
0.5
-3 -2 -1 1 2 3
-0.5
-1
4
3.5
3
2.5
-6 -4 -2 2 4 6
12
10
8
6
-3 -2 -1 1 2 3
hGraphicsArrayh
1 4
0.5 3.5
3
-3 -2 -1 1 2 3 2.5
-0.5
-1 -6-4-2 2 4 6
12 8
10 6
8 4
6 2
-3 -2 -1 1 2 3 -6 -4 -2 2 4 6
hGraphicsArrayh
150
125
100
75
50
25
-3 -2 -1 1 2 3
hGraphicsh
Needs#"Graphics`Graphics`"'
Graphics`Graphics`
La diferencia entre las dos formas de cargarlo consiste en que si lo hacemos mediante el
comando Needs[] no vuelve a cargarlo si el paquete ya ha sido cargado anteriormente, con el
consiguiente ahorro de memoria en la máquina. Representemos la función g(t) = sen(2t) en
coordenadas polares.
0.6
0.4
0.2
-0.4
-0.6
-0.8
hGraphicsh
140
120
100
80
60
40
20
hGraphicsh
Needs#"Graphics`ImplicitPlot`"'
0.75
0.5
0.25
-1 -0.5 0.5 1
-0.25
-0.5
-0.75
hGraphicsh
Gráficas de inecuaciones
Para estudiar optimización con restricciones necesitaremos saber, por ejemplo, cómo se dibujan
regiones en el plano. Estas regiones vienen definidas por inecuaciones y para su representación
gráfica utilizaremos el comando InequalityPlot[inecuaciones,
{x,xmin,xmax},{y,ymin,ymax}]. Esta función se encuentra en el paquete
Graphics`InequalityGraphics` que debemos cargar previamente:
Graphics`InequalityGraphics`
InequalityPlot# 1 +x 2y/3 4y 4, x, 3, 3, y, 3, 3 '
-3 -2 -1 1 2 3
-1
-2
hGraphicsh
[Link] 42
1.5
0.5
0.5 1 1.5 2
En muchas ocasiones es necesario mostrar gráficamente datos obtenidos, por ejemplo, de una
experiencia o experimento. Las coordenadas obtenidas pueden no responder a una expresión
analítica, pero puede interesarnos “ver” cómo se disponen esos puntos en una gráfica (también
denominada nube de puntos). Para ello, veremos cómo generar gráficas a partir de listas de
datos correspondientes a dos variables cuantitativas. Introducimos una lista de datos de la
siguiente forma:
tabla 1, 8, 2, 5.5, 3, 7, 4, 3, 5, 8.1, 6, 1
1, 8, 2, 5.5, 3, 7, 4, 3, 5, 8.1, 6, 1
ListPlot#tabla';
8
7
6
5
4
3
2
2 3 4 5 6
Si queremos mostrar los puntos unidos por segmentos, agregamos la siguiente opción:
8
7
6
5
4
3
2
2 3 4 5 6
hGraphicsh
8
7
6
5
4
3
2
2 3 4 5 6
hGraphicsh
Observación: el programa acomoda los ejes coordenados de forma que los datos sean
fácilmente visibles, pero esto puede no responder a la posición real de esos puntos. Para obtener
una visualización más fiel usamos el comando AxesOrigin->{0,0}, que ubica los ejes en
su posición normal:
8
7
6
5
4
3
2
1
1 2 3 4 5 6
hGraphicsh
1 2 3 4 5 6
Esta gráfica puede servir de ayuda en el caso en que deseemos interpolar y queramos
aproximar las coordenadas de un punto intermedio. Para ello, marquemos el gráfico (un click
encima del gráfico) y, posicionando el cursor sobre él, presionemos la tecla Ctrl. Así Mathemat-
ica mostrará en la parte inferior izquierda de la pantalla las coordenadas aproximadas del punto
que señalemos en la gráfica. Es importante tener en cuenta que es necesario, para que las
coordenadas obtenidas sean correctas, que el origen de coordenadas esté en (0,0) (esta obser-
vación también es válida para el resto de representaciones gráficas en 2D).
Opciones gráficas
Cuando Mathematica realiza un gráfico, tiene que elegir cómo realizar la representación gráfica
(escalas, ejes, origen, color, grosor de línea, etc). En muchas de las ocasiones, Mathematica
probablemente hará una buena elección. No obstante, si se desea cambiar algunas de estas
opciones se pueden utilizar las órdenes que veremos en esta sección.
Como último argumento del comando, por ejemplo Plot[], se puede incluir una
secuencia de órdenes del tipo nombre->valor, para especificar el valor de varias de las
opciones gráficas. A cada opción que no asignemos un valor explícito, Mathematica le asignará
un valor por defecto.
Una orden como Plot[] tiene muchas opciones que podemos modificar. Algunas de
las que veremos son las siguientes:
[Link] 46
0.5
-0.5
-1
0.5
-0.5
-1
0 0.5 1 1.5 2 2.5 3
A continuación especificamos unas etiquetas para cada uno de los ejes. Las etiquetas
aparecerán tal como aparecerían en una salida de Mathematica. Las etiquetas pueden incluir
texto escribiéndolo entre comillas.
Sin#x^2'
1
0.5
eje de abscisas
0.5 1 1.5 2 2.5 3
-0.5
-1
[Link] 48
Para la malla:
0.5
-0.5
-1
0 0.5 1 1.5 2 2.5 3
0.5
-0.5
-1
Algunos de los valores más usuales para varias de las opciones vistas hasta ahora son
[Link] 49
Automatic utiliza los valores por defecto para los algoritmos internos.
None no incluye la opción.
All lo incluye todo.
True realiza la opción.
False no realiza la opción.
Cuando Mathematica realiza un gráfico, trata de fijar unas escalas para x e y con la idea
de incluir solo las partes más interesantes de la gráfica. Si la función crece rápidamente, o tiene
singularidades, las partes de la gráfica demasiado largas las corta. Con la orden PlotRange
podemos controlar el rango de variación para la x y la y. Los posibles valores para esta opción
son:
0.5
-1 -0.5 0.5 1
-0.5
-1
Otras opciones válidas también para la orden Plot[] son las siguientes:
[Link] 50
Podemos obtener información de todas las opciones (con sus correspondientes valores
por defecto) de las que dispone una función, como por ejemplo Plot[], mediante la orden
Options[]:
Options#Plot'
1
AspectRatio ccccccccccccccccccccccccccccccccc , Axes Automatic,
GoldenRatio
AxesLabel None, AxesOrigin Automatic, AxesStyle Automatic,
Background Automatic, ColorOutput Automatic, Compiled True,
DefaultColor Automatic, DefaultFont $DefaultFont,
DisplayFunction $DisplayFunction, Epilog ,
FormatType $FormatType, Frame False, FrameLabel None,
FrameStyle Automatic, FrameTicks Automatic, GridLines None,
ImageSize Automatic, MaxBend 10., PlotDivision 30.,
PlotLabel None, PlotPoints 25, PlotRange Automatic,
PlotRegion Automatic, PlotStyle Automatic, Prolog ,
RotateLabel True, TextStyle $TextStyle, Ticks Automatic
Si queremos saber el valor por defecto de una sola de las opciones haremos algo
parecido:
Options#Plot, AspectRatio'
1
AspectRatio ccccccccccccccccccccccccccccccccc
GoldenRatio
[Link] 51
Cuando se crea un objeto gráfico en Mathematica, normalmente se añade una lista de opciones
gráficas. En esta lista se puede añadir directivas gráficas que especifican cómo se deben repro-
ducir los elementos del gráfico.
Plot#x^2, x^3, x, 3, 3, PlotStyle RGBColor#1, 0, 0', RGBColor#0, 1, 0''
-3 -2 -1 1 2 3
-1
-2
hGraphicsh
Plot#x^2, x^3, x, 3, 3, PlotStyle Hue#1, 0.75, 0.5', Hue#0.25, 0.5, 0.75''
-3 -2 -1 1 2 3
-1
-2
hGraphicsh
Cuando especificamos una opción gráfica como RGBColor[], ésta afecta a todos los
elementos gráficos que aparecen en una lista. Mathematica también dispone de opciones gráfi-
cas que son específicas a algunos tipos de gráficos:
La opción PointSize[d] sirve para que todos los puntos del gráfico los represente
como un círculo de diametro d. Con PointSize, el diametro d está medido en proporción al
ancho de todo el gráfico.
PointSize#d ' todos los puntos con diámetro d en proporción al ancho del
gráfico completo.
AbsolutePointSize#d ' todos los puntos con diámetro d en unidades absolutas.
Aquí vemos cómo construir una lista con seis puntos de dos coordenadas:
1, 2, 2, 3, 3, 5, 4, 7, 5, 11, 6, 13
Mostramos cada punto con diámetro igual a un 10% del ancho del gráfico.
[Link] 53
12
10
2 3 4 5 6
hGraphicsh
70
60
50
40
30
20
10
5 10 15 20
hGraphicsh
-2 -1 1 2
hGraphicsh
1
Thickness$ ccccccc (, Line#0, 0, 1, 1' ,
50
1
Thickness$ ccccccc (, Line#0, 0, 2, 1' ,
25
3
Thickness$ ccccccc (, Line#0, 0, 3, 1' ,
50
2
Thickness$ ccccccc (, Line#0, 0, 4, 1'
25
Show#Graphics#%''
hGraphicsh
Show#Graphics#%''
hGraphicsh
La orden Dashing nos permite crear líneas con distintos tipos de segmentos. La idea
es romper la línea en segmentos que son dibujados y omitidos alternativamente. Cambiando la
medida de los segmentos se obtienen líneas de diferentes estilos. Dashing nos permite tam-
[Link] 56
bién especificar una sucesión de medidas para los elementos. Esta sucesión se repite tantas
veces como sea necesaria hasta representar la línea completa.
hGraphicsh
hGraphicsh
Otra manera de usar las opciones gráficas es insertarlas directamente en una lista. No
obstante, algunas veces queremos que las opciones se apliquen de manera más global y, por
ejemplo, determinar el estilo global en toda la sesión de trabajo independientemente de cómo
sean algunas opciones gráficas particulares.
PlotStyle ! style especifica un estilo para ser usado en todas las
curvas dibujadas con Plot.
PlotStyle ! style1 , style2 , … especifica estilos para ser usados cíclicamente
para una sucesión de curvas en Plot.
MeshStyle ! style especifica un estilo para ser usado en una
malla en gráficos de superficie y densidad.
BoxStyle ! style especifica un estilo para ser usado por la caja
en gráficos 3D, según veremos.
0.5
2 4 6 8 10
-0.5
-1
hGraphicsh
0.75
0.5
0.25
2 4 6 8 10
-0.25
-0.5
-0.75
hGraphicsh
0.75
0.5
0.25
2 4 6 8 10
-0.25
-0.5
-0.75
hGraphicsh
[Link] 59
0.75
0.5
0.25
2 4 6 8 10
-0.25
-0.5
-0.75
hGraphicsh
0.75
0.5
0.25
2 4 6 8 10
-0.25
-0.5
-0.75
hGraphicsh
Representación gráfica en 3D
1
0.5 3
0
-0.5
-1 2
0
1 1
30
hSurfaceGraphicsh
Mathematica dispone de una gran cantidad de opciones gráficas para gráficos en 3D. Al
igual que para Plot[], podemos obtener información de todas las opciones disponibles con
Options[]:
Options#Plot3D'
En la siguiente tabla mostramos algunas de las anteriores. Muchas de las opciones que
aparecen en la siguiente tabla son análogas a otras ya vistas para gráficos en 2D.
Plot3D#10 Sin#x' Sin#x y', x, 10, 10, y, 10, 10, PlotPoints 50'
[Link] 62
10
5 10
0
-5 5
-10
-100 0
-5
0 -5
5
10 -10
hSurfaceGraphicsh
10
Valor 50 10
-5 5
-10
-10 0 0 Profundidad
-5
0 -5
Tiempo 5
10 -10
hSurfaceGraphicsh
La opción ViewPoint para Plot3D y Show nos permite cambiar el punto de vista
del observador. En muchas versiones de Mathematica existen otras maneras de elegir el punto
de vista interactivamente.
1
0.5 3
0
-0.5
-1 2
0
1 1
30
hSurfaceGraphicsh
Tomemos un punto de vista justo en frente del eje OY. Nótese que se ha usado un efecto
en la perspectiva que hace la parte del fondo más pequeña que la delantera:
1
0
1
0.5 2 3
-0.5
-1
0 1 2 3
hSurfaceGraphicsh
Los puntos de vista ligeramente por encima de la superficie suelen funcionar bien.
Generalmente es una buena idea tomar un punto de vista suficientemente cerca de la superficie.
Añadir la caja alrededor de la superficie nos ayuda a reconocer la orientación de la superficie.
[Link] 64
3
2 2
1 1
0
-2
2 0
-1
0 -1
1
2 -2
hSurfaceGraphicsh
Veamos una superficie sin malla. Usualmente es más difícil apreciar la forma de la
superficie sin la malla usual.
3
2 2
1 1
0
-2
2 0
-1
0 -1
1
2 -2
hSurfaceGraphicsh
3
2 2
1 1
0
-2
2 0
-1
0 -1
1
2 -2
hSurfaceGraphicsh
Para añadir un elemento extra de realismo, Mathematica simula una superficie ilumi-
nada. Por defecto, Mathematica asume que hay tres fuentes de luz sobre el objeto en la parte
superior derecha. No obstante, este efecto luminoso puede confundirnos en algunos casos. Si
seleccionamos la opción Lighting -> False, entonces Mathematica no usará tal efecto
sino una escala de grises para sombrear la superficie en función de la altura del punto.
1
0.5 3
0
-0.5
-1 2
0
1 1
30
hSurfaceGraphicsh
[Link] 66
1
0.5 3
0
-0.5
-1 2
0
1 1
30
hSurfaceGraphicsh
1
0.5 3
0
-0.5
-1 2
0
1 1
30
hSurfaceGraphicsh
p 2, 0, 1
v 3, 1, 1
ParametricPlot3D#p O v, O, 2, 3'
2, 0, 1
3, 1, 1
-2
-
0
2
5
0
10 -2
hGraphics3Dh
w 1, 3, 0
ParametricPlot3D#p O v P w, O, 5, 5, P, 5, 5'
1, 3, 0
2.5 20
0
-2.5 10
-5
0
-10
0 -10
10
20 -20
hGraphics3Dh
Graphics`InequalityGraphics`
[Link] 70
1
0.5
0
-0.5
-1
0.5
-0.5
-0.5
0
0.5
0 5
Estadística
Dedicamos este último capítulo a mostrar brevemente algunas de las aplicaciones que posee
Mathematica a la rama de la Estadística. Únicamente indicaremos algunos de los paquetes más
importantes que el alumno podrá utilizar para resolver muchos de los problemas que se encon-
trará en una asignatura con contenido estadístico.
Para no extendernos demasiado, enunciaremos las órdenes estadísticas más usuales y veremos
cómo se utilizan con un ejemplo. Las funciones que enunciamos a continuación se encuentran
en el paquete Statistics`DescriptiveStatistics`, que debemos cargar previamente.
Statistics`DescriptiveStatistics`
datos 1, 2, 3, 3, 4, 6.5, 7, 8.9, 9, 17
Nombre Función
Media Mean[]
Moda Mode[]
Mediana Median[]
[Link] 71
Así, para nuestro ejemplo, la media, moda, mediana, el percentil 34, los cuartiles, la
desviación estándar y el momento central de orden 3 son:
Mean#datos'
Mode#datos'
Median#datos'
Quantile#datos, 0.34'
Quartiles#datos'
StandardDeviationMLE#datos'
CentralMoment#datos, 3'
6.14
5.25
3.
4.4996
104.745
[Link] 72
En el caso de que nuestra variable sea bidimensional y queramos realizar una regresión
(lineal, cuadrática o de cualquier otro tipo) y una correlación, deberemos cargar previamente el
paquete Statistics`LinearRegression`. A continuación, en primer lugar, introducimos los datos
y, por último, utilizamos una de las dos siguientes funciones:
Regress[datos,{1,f1(x),f2(x),...},x] o bien Fit[datos,{f1(x),f2(x),...},x].
Statistics`LinearRegression`
datos2 1, 1, 1.2, 1.5, 2, 1.8, 2.1, 2, 2.5, 3, 3, 6
1, 1, 1.2, 1.5, 2, 1.8, 2.1, 2, 2.5, 3, 3, 6
O bien:
1.53514 2.07719 x
La diferencia entre Regress[] y Fit[] es evidente. Mientra que Fit[] nos proporciona la
recta de regresión de Y en función de X, la orden Regress[] realiza un estudio más completo y
nos proporciona además el coeficiente de determinación (RSquared->0.757748) y, entre otras
cosas, la tabla del análisis de la varianza (ANOVA).
Si, por ejemplo, nos interesa más una regresión cuadrática, bastará con añadir a la lista
de funciones el término x^2:
[Link] 73
ParameterTable
Estimate SE TStat PValue
1 4.63568 1.25777 3.68564 0.0346212
,
x 5.17166 1.39881 3.69718 0.034345
x2 1.85868 0.354499 5.24312 0.0135071
RSquared 0.976164, AdjustedRSquared 0.960274,
EstimatedVariance 0.130897, ANOVATable
DF SumOfSq MeanSq FRatio PValue
Model 2 16.0823 8.04115 61.431 0.00367993
Error 3 0.392692 0.130897
Total 5 16.475
En el caso de que el ajuste que deseemos sea, por ejemplo, exponencial, bastará con:
ParameterTable
Estimate SE TStat PValue
1 0.0883523 0.339534 0.260217 0.807543 ,
Æx 0.274219 0.0316264 8.67056 0.000973643
RSquared 0.949481, AdjustedRSquared 0.936852,
EstimatedVariance 0.208074, ANOVATable
DF SumOfSq MeanSq FRatio PValue
Model 1 15.6427 15.6427 75.1786 0.000973643
Error 4 0.832296 0.208074
Total 5 16.475
O un ajuste hiperbólico:
[Link] 74
ParameterTable
Estimate SE TStat PValue
1 5.46902 1.51611 3.60728 0.0226113,
ccc
xc
1
4.9435 2.37632 2.08032 0.105985
RSquared 0.519676, AdjustedRSquared 0.399595,
EstimatedVariance 1.97833, ANOVATable
DF SumOfSq MeanSq FRatio PValue
Model 1 8.56166 8.56166 4.32771 0.105985
Error 4 7.91334 1.97833
Total 5 16.475
Cálculo de Probabilidades
Para los casos en los que queramos manejar algún modelo de distribución de probabilidad,
debemos cargar previamente el paquete Statistics`ContinuousDistributions` o bien Statistics`Dis-
creteDistributions` dependiendo de si nuestro modelo corresponde a una variable continua o
discreta, respectivamente.
Así, si queremos definir una variable Normal de media 3 y desviación típica 1 haremos:
Statistics`ContinuousDistributions`
dist NormalDistribution#3, 1'
NormalDistribution#3, 1'
0.4
0.3
0.2
0.1
1 2 3 4 5 6
hGraphicsh
0.8
0.6
0.4
0.2
-10 -5 5 10
hGraphicsh
Una vez definida la distribución, podemos analizarla con muchas de las funciones
introducidas en la sección anterior:
[Link] 76
Domain#dist'
Mean#dist'
Variance#dist'
Skewness#dist'
Random#dist'
Interval#, '
2.77339
Obsérvese que hemos utilizado dos órdenes nuevas que no habíamos visto hasta ahora.
Éstas son Domain[] y Random[]. La primera nos calcula el dominio de la distribución dist y la
segunda genera un número aleatorio según la distribución dist (luego cada vez que la ejecute-
mos nos proporcionará una número distinto).
Para el caso de las distribuciones discretas, ya hemos comentado que se debe cargar el
paquete Statistics`DiscreteDistributions` donde se encuentran cargadas las distribuciones discre-
tas más importantes, como:
Por ejemplo:
[Link] 77
Statistics`DiscreteDistributions`
dist2 BinomialDistribution#10, 0.3'
Domain#dist2'
Mean#dist2'
Variance#dist2'
Plot#CDF#dist2, x', x, 1, 10'
BinomialDistribution#10, 0.3'
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
3.
2.1
0.8
0.6
0.4
0.2
2 4 6 8 10
hGraphicsh
Inferencia Estadística
Finalizamos el capítulo con otro breve comenteario sobre la Inferencia Estadística. Destacamos
dos de los paquetes más importantes que posee Mathematica dentro de esta rama. En primer
lugar, para calcular los intervalos de confianza usaremos el paquete Statistics`ConfidenceInter-
vals` y para los contrastes de hipótesis cargaremos previamente Statistics`HypothesisTests`.
Statistics`ConfidenceIntervals`
datos3
76, 73, 75, 73, 74, 74, 74, 74, 74, 77, 74, 72, 75, 76, 73, 71, 73, 80, 75, 75, 68, 72, 78, 74, 75
76, 73, 75, 73, 74, 74, 74, 74, 74, 77, 74,
72, 75, 76, 73, 71, 73, 80, 75, 75, 68, 72, 78, 74, 75
MeanCI#datos3'
73.2393, 75.1607
VarianceCI#datos3'
3.3025, 10.4829
datos4 78, 80, 80, 81, 82, 83, 87, 88, 88, 89
datos5 76, 76, 78, 78, 78, 81, 81, 81, 82, 83
VarianceRatioCI#datos4, datos5'
78, 80, 80, 81, 82, 83, 87, 88, 88, 89
76, 76, 78, 78, 78, 81, 81, 81, 82, 83
0.644746, 10.4505
MeanDifferenceCI#datos4, datos5'
1.00117, 7.39883
Con respecto a los contrastes de hipótesis, comentaremos dos: el contraste para la media
y el contraste para la diferencia de medias.
Si queremos contrastar si la media de la distribución normal que siguen los datos3 es,
por ejemplo, 74, obtenemos el p-valor
Statistics`HypothesisTests`
MeanTest#datos3, 74'
OneSidedPValue 0.335635
Como el p-valor es mayor que el nivel de significación tomado por defecto, 0.05, llega-
mos a la conclusión de que no podemos rechazar que la media de la distribución de datos3 sea
74.
OneSidedPValue 0.00674533
Como en el resto de temas explicados, todo aquél que quiera profundizar más en esta
parte que se ha tratado más superficialmente, le recomendamos que utilice la Ayuda tan ámplia
y extensa que posee Mathematica.
Mathematica provides a set of default options for both 2D and 3D graphics which aim at optimizing the visualization for general purpose. For 2D graphics using Plot[], default options include settings like AspectRatio, Axes, AxesLabel, and more, which can be customized to change the appearance of the plot . For 3D graphics using Plot3D[], users have additional options such as ViewPoint, Mesh, and Boxed, allowing for a more interactive visual arrangement . Both offer a high degree of customization through specifications of parameters such as color, shading, and lighting by adjusting options like ColorOutput and Lighting .
Mathematica uses a comprehensive system of options for function plotting, with each plot's look and behavior controlled by a wide array of adjustable parameters. Default settings like PlotRange determine which section of the function's output is visualized, automatically scaling to fit all calculated points or allowing for a manual specification to focus on a particular area of interest. PlotStyle can be adjusted to change line aesthetics or color themes, facilitating enhanced data interpretation by making plots visually distinct or better suited for discerning trends or outcomes .
Clear[] in Mathematica is used to remove definitions and values assigned to variables, which is particularly important in multivariable functions to prevent conflicts or errors from previous assignments. When defining a new function that depends on variables already used, Clear[a], Clear[b] or Clear[a, b] should be used to reset those variables, ensuring that no residual values remain that could affect the computation or the results .
Simplify[] in Mathematica reduces expressions to simpler forms using algebraic rules. It aims for efficient simplification by applying basic transformations that usually include arithmetic operations and simple identity reduction. FullSimplify[], on the other hand, goes further by applying more comprehensive transformations, employing advanced mathematical identities and algorithms. It is capable of finding more complex simplifications but at the cost of additional computation time. This makes FullSimplify[] preferable for deeply nested or highly intricate expressions where further reduction is both possible and beneficial .
Solve[] and NSolve[] in Mathematica both handle equation solving, but they differ significantly in their outputs. Solve[] returns exact solutions to equations, providing results in symbolically precise form. In contrast, NSolve[] delivers numerical approximations, suitable for cases where exact solutions are difficult or impossible to derive analytically. This distinction makes NSolve[] useful in situations requiring fast computational results or in dealing with numerically intensive problems .
Expand[] in Mathematica is used to develop polynomial expressions into their expanded forms, which involves performing all possible multiplications and distributing terms, such as applying the distributive law to expression multiplication . Conversely, Factor[] does the opposite by expressing a polynomial as a product of its factors, transforming it into a compressed form, which often reveals the roots or other structural properties of the polynomial .
To plot a 3D graph with custom lighting and viewpoint in Mathematica, one would use Plot3D[] to define the function to be graphed along with the x and y domain. Options like Lighting -> {"Directional", ...} can be set to simulate custom lighting effects, while ViewPoint -> {x, y, z} determines the observer's position relative to the plot, thus altering the perspective. Additional properties such as ColorFunction to define surface coloring and MeshStyle for grid appearance can further enhance the visual output, ensuring a fully customized 3D graph .
Mathematica uses the Integrate[] command to perform integration, including over multiple variables. The syntax varies depending on the type of integration: for a definite integral across x and y, you would use Integrate[f,{x,xmin,xmax},{y,ymin,ymax}], where f is the function to integrate, and the specified range [xmin, xmax] and [ymin, ymax] represents the bounds for x and y respectively. This allows the handling of complex integrals across multiple domains .
In Mathematica, the integration of piecewise functions can be managed by explicitly defining the pieces using the Piecewise[] command, which specifies different expressions and conditions for each piece. Using Integrate[] with a piecewise function requires the integration to consider each defined range of the function separately, ensuring continuity at boundaries. Proper handling of piecewise functions might involve verifying each segment's continuity and the establishment of unique integration conditions, sometimes using NIntegrate[] for numerical evaluations if analytic solutions are complex or infeasible .
The default value for the AspectRatio option in Mathematica is 1/GoldenRatio, which typically results in a plot that is wider than it is tall. This setting maintains a balanced visual proportion, but users can modify it to alter the height-to-width ratio, thereby influencing the perceived shape of the plot .