Вы находитесь на странице: 1из 12

Leve aproximacin al programa Mathematica:

Manual para empezar


La idea es que al leer esto te sea ms fcil comenzar a usar el programa. Seguramente lo que aqu se incluye corresponde
a un dcimo de todo lo que es posible hacer con el software, as que no bases tu manejo solamente en este manual porque
esto es slo un pequeo muestrario de lo que se puede hacer. Es muy recomendable recurrir al Help siempre que sea
necesario, ya que es una muy buena gua (el mejor Help que se haya visto por ah) y se aprende mucho al ocuparlo. Por
supuesto que t debes repetir todo lo que aqu se muestra, porque es la nica manera de aprender.
Cristbal Espinoza, Marzo 2003.
Uso y manejo de funciones definidas por uno mismo
Asignaciones
Muchas veces ocurre que una letra, palabra, o lo que sea, tiene algn valor asociado. Digamos que la letra A vale diez,
entonces la manera de comunicarle eso al sistema es escribirlo en una linea aparte y luego presionar ShiftEnter o Intro.
Esto ltimo es para que el computador se entere de la asignacin. Veamos:
In[1]:= A 10
Out[1]= 10
El computador nos responde "10", es decir que ha entendido el mensaje. Eso que dice In[1]:= y luego Out[1]:= lo pone el
computador despus de hacer ShiftEnter y no tiene mayor importancia por ahora; t solamente debes escribir la asig-
nacin y listo. Si no queremos que el computador nos responda agregamos un ";" (punto y coma) depus de la asignacin:
In[2]:= A 10;
Si de pronto olvidamos el valor de A y queremos saber cunto vale podemos averiguarlo poniendo "A" y presionando
ShiftEnter (o Intro):
In[3]:= A
Out[3]= 10
Qu pasar si reasignamos el valor de A? Digamos
In[4]:= A 15;
Lo que ocurre es que simplemente tomar el nuevo valor :
In[5]:= A
Out[5]= 15
Asignemos un valor a la palabra casa :
In[6]:= casa 1 2;
Ahora podemos hacer cualquier cosa con las dos asignacones que hemos hecho, por ejemplo digamos que la letra K es
igual a sumarlos y dividirlos por 32:
In[7]:= k casa A 32
Out[7]=
29
-------
64
Si queremos el valor munrico de la fraccin usamos la funcin N[] que entrega el valor numrico de lo que pongamos
dentro.
In[8]:= Nk
Out[8]= 0.453125
Esta funcin est predefinida, viene con el programa.
Uso de funciones
Definir una funcin
Es posible definir funciones analticas y luego evaluarlas, graficarlas, derivarlas, integrarlas, etc.
Para definir una funcin debemos asignarle un nombre e indicar su variable. Adems debemos ser cuidadosos en la
sintxis. Por ejemplo definamos una parbola:
In[9]:= fx_ x^2
Out[9]= x
2
Notemos que la variable x lleva un "_". Esto es para que el computador entienda que se trata de una variable muda, es
decir que 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 habra asignado el valor x^2 al objeto f[x] en vez de a la funcin f. Por ejemplo,
evaluemos la funcin f con la variable y:
In[10]:= fy
Out[10]= y
2
Evaluemos ahora en un valor cualquiera :
In[11]:= f2
Out[11]= 4
Adems, si no se ha cerrado el programa o borrado el kernel (quit kernel en los mens), el sistema recuerda siempre
las asignaciones anteriores:
In[12]:= NfA fcasa
Out[12]= 225.25
El uso del smbolo "@" equivale al uso de los parntesis cuadrados.
Por supuesto, es posible definir funciones an ms complicadas:
In[13]:= gz1_ a Logz1 Cosz1 b Sina b z1
Out[13]= a Log[z1 Cos[z1]] + b Sin
a b
--------
z1

Intentemos evaluar g an sin haber asignado los valores a y b:
2 manual.nb
In[14]:= g0.2
Out[14]= -1.62957 a + b Sin[5. a b]
Las funciones como Cos[t], Sin[t],Log[t] y muchas otras vienen predefinidas y slo hay que escribirlas correctamente (Por ejemplo, empiezan
con mayscula).
Graficar funciones
En dos dimensiones
Para graficar utilizamos la funcin Plot[ ]de la siguiente manera:
In[15]:= Plotfsopa, sopa, 10, 10
-10 -5 5 10
20
40
60
80
100
Out[15]= ~ Graphics ~
Hemos graficado la funcin f, antes definida, usando la variable sopa. Cambiemos el intervalo en el que estamos
graficando y evitemos que el computador nos responda " Graphics ":
In[16]:= Plotfu, u, 0, 5;
1 2 3 4 5
5
10
15
20
25
Intentemos graficar gx :
manual.nb 3
In[17]:= Plotgx, x, 1, 2;
Plot::plnr :
g[x] is not a machine-size real number at x = 1.0000000416666666.
Plot::plnr :
g[x] is not a machine-size real number at x = 1.0405669915729157.
Plot::plnr :
g[x] is not a machine-size real number at x = 1.0848087998593736.
General::stop :
Further output of Plot::plnr will be suppressed during this calculation.
0.2 0.4 0.6 0.8 1
0.2
0.4
0.6
0.8
1
Qu ha pasado? Es evidente; no han sido asignados los valores a y b. Entonces los asignamos :
In[18]:= a 1; b 3;
Veamos ahora
In[19]:= Plotgx, x, 0.1, 2;
Plot::plnr :
g[x] is not a machine-size real number at x = 1.5978730890706745.
Plot::plnr :
g[x] is not a machine-size real number at x = 1.5763846111565272.
Plot::plnr :
g[x] is not a machine-size real number at x = 1.5718463876796263.
General::stop :
Further output of Plot::plnr will be suppressed during this calculation.
0.25 0.5 0.75 1 1.25 1.5
-5
-4
-3
-2
-1
1
2
El problema ahora fue que la funcin no est definida en x=/2. Probemos un intervalo en el que no haya problemas:
4 manual.nb
In[20]:= Plotgx, x, Pi 16, Pi 3;
0.2 0.4 0.6 0.8
-4
-3
-2
-1
1
2
En tres dimensiones
Primero es necesario que definamos una funcin de dos variables. La manera de hacerlo es simple, probemos una
gaussiana:
In[21]:= Hx_, y_ Expx^2 y^2;
Ahora la graficamos con la funcin Plot3D[ ]:
In[22]:= Plot3DHx, y, x, 2, 2, y, 2, 2;
-2
-1
0
1
2
-2
-1
0
1
2
0
0.25
0.5
0.75
1
-2
-1
0
1
2
Otras operaciones con grficos
Animaciones
Es posible ver en una especie de pelcula una serie de grficos. Veamos una cuerda:
Supongamos que est decrita por
In[23]:= Cuerdax_, t_ Sint Sinx
Out[23]= Sin[t] Sin[x]
Grafiquemos a lo largo de un periodo para tres tiempos distintos (o sea para tres valores de la variable t):
manual.nb 5
In[24]:= PlotCuerdax, 2, Cuerdax, 1, Cuerdax, 3, x, 0, 2 Pi;
1 2 3 4 5 6
-0.75
-0.5
-0.25
0.25
0.5
0.75
Para graficar varias funciones al mismo tiempo las ponemos entre llaves y separadas por una coma, o sea un vector de funciones.
Ahora hacemos una tabla de grficos, cada uno para un tiempo distinto:
lote Table
PlotCuerdax, i, x, 0, 2 Pi, PlotRange 1, 1, i, 0, 6.5, 0.5;
Estamos usando la funcin Table[ ], que genera una matriz de elementos, ya sea de valores numricos, o de objetos tipo grfico, de acuerdo
a la iteracin del parmetro i, que vara, en este caso, entre 0 y 6, en intervalos de 0.5
La opcin PlotRange, en la funcin Plot[], es para indicar el rango vertical en el cual se va agraficar. Existen muchas opciones, que puedes
averiguarlas poniendo ??Plot[ ]. Y de la misma manera para otras funciones.
Al ejecutar este comando (con ShiftEntero Intro) aparecen todos los grficos hacia abajo. "lote" es ahora un
conjunto (Tabla) de grficos. Si se hace doble click sobre alguno de ellos se ver una animacin de todos los
grficos.
Arreglos; disponer grficos a gusto y placer.
Definamos algunas funciones:
In[25]:= f1x_ Sin1 x x;
f2x_ Sin2 x x;
f3x_ Sin10 x x;
f4x_ Sin30 x x;
Lo que queremos es graficarlas en un arreglo de manera que aparezcan todos los grficos ordenados en un mismo
cuadro.
Creamos los grficos:
In[29]:= g1 Plotf1x, x, 0.1, 10, DisplayFunction Identity;
g2 Plotf2x, x, 0.1, 10, DisplayFunction Identity;
g3 Plotf3x, x, 0.1, 10, DisplayFunction Identity;
g4 Plotf4x, x, 0.1, 10, DisplayFunction Identity;
Eso de "DisplayFunction>Identity"es para que el grfico no sea mostrado de inmediato.
Y ahora le decimos que los muestre, con la funcin Show[]:
6 manual.nb
In[33]:= ShowGraphicsArrayg1, g2, g3, g4;
2 4 6 8 10
-0.75
-0.5
-0.25
0.25
0.5
0.75
2 4 6 8 10
-0.75
-0.5
-0.25
0.25
0.5
0.75
2 4 6 8 10
-0.2
0.2
0.4
0.6
2 4 6 8 10
-0.4
-0.2
0.2
0.4
0.6
0.8
Notar que la funcin GraphicsArray[ ] recibe como argumento un vector, o una matriz (como en el ejemplo) y es segn eso cmo se
dispondrn los diferentes grficos. Probar con GraphicsArray[{g1,g2,g3,g4}] GraphicsArray[{g1},{g2},{g3},{g4}].
Operar con las funciones
Una vez definida una funcin es posible realizar con ella todas las operaciones bsicas; sumarle algo, ya sea otra
funcin, un valor, una letra an no asignada, etc. multiplicarla, restarla y dividirla. Adems es posible definir funci-
ones a partir de otras funciones, etc. El programa trae consigo dos importantes funciones: una para derivar y otra para
integrar. Lo relevante es que pueden hacerlo analticamente.
Derivar
Para esto ocupamos el smbolo de derivar que aparece en la paleta Basic Input (men: File/Palettes/..) o directa-
mente la funcin D[]. Existe tambin la funcin Derivative[] con sus opciones y mucho ms. Hay que mirar el
Help.
Recordemos la funcin f y derivmosla :
In[34]:= fx
Out[34]= x
2
In[35]:= Dfx, x
Out[35]= 2 x
La funcin D[ ] tiene dos argumentos, el primero es el objeto a derivar y el segundo corresponde a la variable de derivacin.
Podemos derivar cosas ms complicadas. Ocupemos la funcin g que definimos antes, pero antes borremos los
valores de los parmetros a y b:
In[36]:= Cleara, b
La funcin es
manual.nb 7
In[37]:= gx
Out[37]= a Log[x Cos[x]] + b Sin
a b
--------
x

y su derivada es
In[38]:= Dgx, x
Out[38]= -
a b
2
Cos[
a b
------
x
]
---------------- ------------------
x
2
+
a Sec[x] (Cos[x] - x Sin[x])
-------------------------------- -------------------------------- --------
x
Podemos simplificar:
In[39]:= SimplifyDgx, x
Out[39]=
a (x - b
2
Cos[
a b
------
x
] - x
2
Tan[x])
-------------------------------- -------------------------------- ------------
x
2
... o de otra manera (ver detalles de estas funciones en el Help)
In[40]:= FullSimplifyDgx, x
Out[40]=
a (x - b
2
Cos[
a b
------
x
])
-------------------------------- ----------------
x
2
- a Tan[x]
Integrar
Usamos la funcin Integrate[ ] o los smbolos de la paleta Basic Input.
Veamos si es posible hacer la integral indefinida de g[x]
In[41]:= Integrategx, x
Out[41]=
1
----
2
f a x
2
- a x + b
2
CosIntegral
a b
--------
x
- a x Log[1 + c
2 f x
] +
a x Log[x Cos[x]] +
1
----
2
f a PolyLog[2, -c
2 f x
] + b x Sin
a b
--------
x

Feo, pero qu le vamos a hacer. Hagamos una integral definida:
In[42]:= Integraten Expq x^2, x, Infinity, Infinity
Out[42]= n IfRe[q] > 0,
_

---------
_
q
,

-

c
-q x
2
ox
Nos dice que si la parte real de q es mayor que cero entonces la integral es n



q , y si no, no sabe hacerlo.
Tambin es posible hacer integrales numricamente. Probemos hacer la integral de g en algun intervalo razonable.
Para eso hay que darle valores a a y b, entonces, por ejemplo, podemos hacer una funcin que dependa de estos
valores:
In[43]:= funciona_, b_ : NIntegrategx, x, Pi 6, Pi 3
Ahora intentamos evaluar la integral para cualquier valor de a y de b:
8 manual.nb
In[44]:= funcion1, 2
NIntegrate::inum : Integrand
-0.588138 a + b Sin[1.27324 a b] is not numerical at {x] = {0.785398].
Out[44]= NIntegrateg[x], x,

----
6
,

----
3

No funciona. Por qu? Es porque la dependencia en a y b no est explcita y no la entendi. Creemos una funcin
g2 que ya tenga como variables a a y b:
In[45]:= g2x_, a_, b_ gx
Out[45]= a Log[x Cos[x]] + b Sin
a b
--------
x

Entonces ahora s es posible definir nuestra "funcin", ya que la dependencia en a y b es explcita:
In[46]:= funciona_, b_ : NIntegrateg2x, a, b, x, Pi 6, Pi 3
Ahora evaluamos:
In[47]:= funcion1, 2
Out[47]= 0.109469
Podemos hacerlo para otros valores de a y b:
In[48]:= funcion1, 0
Out[48]= 0.330295
El smbolo ":=" es ms que una asignacin. Si te das cuenta, adems de servir como asignacin hace que la operacion definida no sea
ejecutada inmediatamente sino cuando se le llame ms adelante. O sea, es como un pequeo programa que luego ser ejecutado.
Uso de vectores y matrices
Vectores
Definamos un par de vectores en tres dimensiones:
In[1]:= v1 a1, b1, c1
v2 a2, b2, c2
Out[1]= {a1, b1, c1]
Out[2]= {a2, b2, c2]
Notar que un vector es tal si los parntesis que ocupas son del tipo "de llave = { }"
Podemos hacer el producto punto entre ellos:
In[3]:= Dotv1, v2
Out[3]= a1 a2 + b1 b2 + c1 c2
manual.nb 9
o tambin, que resulta ser lo mismo
In[4]:= v1.v2
Out[4]= a1 a2 + b1 b2 + c1 c2
Tambin el producto cruz:
In[5]:= Crossv1, v2
Out[5]= {-b2 c1 + b1 c2, a2 c1 - a1 c2, -a2 b1 + a1 b2]
Y ojo con esta multiplicacin:
In[6]:= v1 v2
Out[6]= {a1 a2, b1 b2, c1 c2]
Matrices
Definamos un par de ellas:
In[7]:= M m11, m12, m13, m21, m22, m23, m31, m32, m33;
P p11, p12, p13, p21, p22, p23, p31, p32, p33;
Te das cuenta que es un vector de vectores?
Podemos verlas en el formato tradicional:
In[9]:= MatrixFormM
Out[9]//MatrixForm=

m11 m12 m13


m21 m22 m23
m31 m32 m33
|

Veamos la multiplicacin:
In[10]:= MatrixFormM.P
Out[10]//MatrixForm=

m11 p11 + m12 p21 + m13 p31 m11 p12 + m12 p22 + m13 p32 m11 p13 + m12 p23 + m13 p33
m21 p11 + m22 p21 + m23 p31 m21 p12 + m22 p22 + m23 p32 m21 p13 + m22 p23 + m23 p33
m31 p11 + m32 p21 + m33 p31 m31 p12 + m32 p22 + m33 p32 m31 p13 + m32 p23 + m33 p33
|

Tambin es posible sacar el determinante, los valores propios, la inversa,etc. Para eso te recomiendo mirar el Help. (List
and Matrices/Vector(Matrix)operation)
En el programa todo lo que est escrito entre llaves y separado por comas debidamente es un vector o una mtriz y responder a las propiedades de
estos.
Adems, como es de esperar, podemos multiplicar matrices con vectores y todas las mezclas posibles:
In[11]:= M.v1
Out[11]= {a1 m11 + b1 m12 + c1 m13, a1 m21 + b1 m22 + c1 m23, a1 m31 + b1 m32 + c1 m33]
10 manual.nb
Resolucin de ecuaciones
Usar funciones Solve[], NSolve[] para ecuaciones (o sistemas de ecuaciones) algebraicas y DSolve[]y
NDSolve[]para ecuaciones (o sistemas de ecuaciones) diferenciales. Lo mejor es ver el Help, aqu solo te muestro un
ejemplo. Ojo, porque no es la nica manera de hacer lo mismo.
Ejemplo
Sistema de ecuaciones diferenciales, dos dimensiones:
Supongamos que hay un planeador que se mueve con con velocidad v[t] y un ngulo [t] con la horizontal. La
interaccin con el aire est caracterizada por un parmetro d. El movimiento es modelado por un sistema de ecua-
ciones diferenciales acopladas:
In[1]:= eq1d_ Sint d vt^2 Dvt, t
eq2 Cost vt^2 vt Dt, t
Out[1]= -Sin[[t]] - d v[t]
2
== v

[t]
Out[2]= -Cos[[t]] + v[t]
2
== v[t]

[t]
Lo que se ha hecho es asignarle a cada ecuacin un nombre (eq1[d] y eq2); la utilidad de esto es que luego al solo
poner el nombre se est diciendo que hay una igualdad entre dos trminos, o sea la ecuacin. Mira el Help y vers
que no hay porqu hacerlo de esta manera.
Se ha definido la primera ecuacin como funcin del parmetro d. La igualdad con doble signo igual, en las ecua-
ciones, es para asignar la igualdad entre los dos trminos; es indispensable que as se escriba una ecuacin.
La solucin del sistema se buscar numricamente, as que lo que hacemos es, primero, definir el valor mximo de la
variable t, y luego plantear la solucin como funcin del parmetro d (tambin podra hacerse como funcin de las
condiciones iniciales, o simplemete con todo ya predefinido):
In[3]:= tmax 35;
sol1d_ :
NDSolveeq1d, eq2, v0 1, 0 1, vt, t, t, 0, tmax
Estamos resolviendo para las funciones v[t] y [t] con t entre cero y tmax y con las condiciones iniciales v[0]=1
y [0]=1. La solucin (ambas funciones v[t] y [t]) es funcin de d y se llama sol1[d].
Ahora creamos un par de soluciones, para d=0.0:
In[5]:= x1t_ vt . Flattensol10.0;
y1t_ t . Flattensol10.0;
Lo que se est haciendo es asignar a la funcin x1[t] la funcin v[t] bajo la condicin d=0.0 y a la funcin y1[t] se le est
asignando [t] tambin bajo d=0.0. Entonces tenemos las dos soluciones que queremos para un valor dado de d (en este caso d=0).
Acerca de la funcin Flatten[] es mejor que veas el Help. Lo que hace es quitar los parntesis de ms afuera. El smbolo "/." sirve para
asignar.
Hacemos otros tres par de soluciones para diferentes valores de d:
In[7]:= x2t_ vt . Flattensol10.05;
y2t_ t . Flattensol10.05;
manual.nb 11
In[9]:= x3t_ vt . Flattensol10.2;
y3t_ t . Flattensol10.2;
In[11]:= x4t_ vt . Flattensol10.4;
y4t_ t . Flattensol10.4;
y las graficamos en un arreglo:
In[18]:= graph1 ParametricPlotx1t, y1t, t, 0, tmax,
DisplayFunction Identity, PlotLabel "d0.0", AxesLabel "v", "";
graph2 ParametricPlotx2t, y2t, t, 0, tmax,
DisplayFunction Identity, PlotLabel "d0.05", AxesLabel "v", "";
graph3 ParametricPlotx3t, y3t, t, 0, tmax,
DisplayFunction Identity, PlotLabel "d0.2", AxesLabel "v", "";
graph4 ParametricPlotx4t, y4t, t, 0, tmax,
DisplayFunction Identity, PlotLabel "d0.4", AxesLabel "v", "";
In[22]:= ShowGraphicsArraygraph1, graph2, graph3, graph4;
0.940.960.98 1.02
v
-0.26
-0.24
-0.22
-0.18
-0.16
-0.14

d=0.2
0.958 0.9620.9640.9660.968
v
-0.386
-0.384
-0.382
-0.378
-0.376

d=0.4
0.250.50.75 1 1.251.5
v
-1
-0.5
0.5
1

d=0.0
0.250.50.75 1 1.251.5
v
-1
-0.5
0.5
1

d=0.05
12 manual.nb