Beruflich Dokumente
Kultur Dokumente
Jos Cceres Gonzlez Departamento de Estadstica y Matemtica Aplicada Universidad de Almera Breve introduccin
Mathematica es un producto de Wolfrang Research Inc. pensado principalmente para realizar de forma sencilla una gran cantidad de clculos complejos, tanto numricos como simblicos. Por tanto, como primera aproximacin, podemos pensar que Mathematica es una calculadora extremadamente potente en donde, como en todas las calculadoras, el usuario puede introducir diferentes expresiones matemticas y solicitar el valor de las mismas. Sin embargo, Mathematica tambin dispone de suficientes recursos para implementar algoritmos por lo que puede considerarse como un pequeo compilador. Para aquellos usuarios acostumbrados a la programacin encontrarn que la sintaxis utilizada es muy cercana a la familia del lenguaje C. Finalmente, ciertas capacidades de Mathematica facilitan la creacin y edicin de textos cientficos, por lo que tambin se puede decir que es un pequeo procesador de textos, un procesador que permite bastante interaccin con el usuario y que lo hacen ideal para el desarrollo de prcticas de enseanza. El objetivo de este pequeo documento es explicar sucintamente los comandos y posibilidades ms habituales de Mathematica, especialmente aquellos necesarios para desarrollar las prcticas de la asignatura de Clculo numrico. Como la intencin de este trabajo es la de servir de gua rpida, las explicaciones sern necesariamente muy sucintas aunque se incluirn una cierta cantidad de ejemplos. Para mayor nivel de detalle se recomienda dirigirse a la Ayuda de Mathematica o al Manual del Usuario del programa.
El orden de las operaciones por defecto es potenciacin, productos y divisiones, y finalmente sumas y restas.Para forzar que una operacin se realice antes que otra se pueden utilizar parntesis e incluso parntesis anidados, pero nunca corchetes o llaves que estn reservados en Mathematica para otras cuestiones. La coma decimal se expresa mediante un punto, y las constantes matemticas habituales por Pi,E. El usuario puede comprobar que al escribir una nueva expresin, sta queda encerrada por un corchete azul en el lado derecho, que llamaremos una celda. De esta manera podemos diferenciar una expresin que puede ocupar varias lneas,de otras expresiones. Para calcular el valor de una celda basta con situar el cursor en cualquier punto de ella y teclear Shift+Intro o la tecla Intro del pad de nmeros del teclado. En ese instante, Mathematica numera la entrada del usuario e indica cul es la salida correspondiente. Comprubelo con el siguiente ejemplo:
In[1]:=
34+12 5 4
Out[1]=
A esto le llamaremos a partir de ahora "evaluar una celda". A veces no es deseable que aparezca el resultado en pantalla. En ese caso, podemos terminar la expresin con un punto y coma. El resultado de la evaluacin de una celda puede ser tanto numrico como simblico dependiendo de cul haya sido nuestra entrada. As una entrada simblica devuelve una salida tambin simblica como en el ejemplo anterior. Sin embargo, la misma expresin escrita de forma numrica tiene una salida numrica. Comprubelo evaluando lo siguiente:
In[2]:= Out[2]=
3 4 + 0.5 1.25
Para obtener una salida numrica sea cual sea la entrada se utiliza el comando N[ ] Con este comando adems se puede fijar el nmero de decimales deseados.
In[3]:=
Out[3]= Out[4]=
3.1415926535897932384626433832795028841971693993751058209749 44592307816406286208998628034825342117068
Naturalmente existen una gran cantidad de operadores que se pueden utilizar, en el siguiente cuadro se enumeran algunos de ellos.
Cuestiones bsicas
Los smbolos + y - se utilizan para la suma y diferencia. Para la multiplicacin se usa * o un espacio en blanco. Para la divisin / y ^ para la potenciacin. La coma decimal se expresa con un punto. Con un punto y coma final, no muestra salida alguna.
Constantes matemticas
Pi y E son las dos constantes matemticas ms utilizadas. GoldenRatio es el nmero (1+Sqrt[5])/2 o razn urea. Degree es exactamente un grado de ngulo Infinity es el valor infinito
Diferentes salidas
Si se evala una expresin simblica (resp. numrica) da como resultado una salida simblica (resp. numrica). N[z] da el valor numrico de z. N[z,n] da n cifras decimales del valor numrico de z.
Operadores habituales
Sqrt[z] es la raz cuadrada de z. Abs[z] da el valor absoluto de un nmero real. Sign[z] devuelve -1, 0, 1 dependiendo de si z es negativo, cero o positivo. IntegerPart[z] y BaseForm[z,b] son respectivamente la parte entera y la expresin decimal de z en base b. Mod[n,m] y Quotient[n,m] corresponden al resto y el cociente de la divisin eucldea de n entre m. Sin[z], Cos[z] y Tan[z] son las razones trigonomtricas seno, coseno y tangente. Las razones inversas correspondientes son ArcSin[z], ArcCos[z] y ArcTan[z] Log[z] y Log[b,z] calculan el logaritmo neperiano de z y logaritmo de z en base b. Max[z1,z2,...,zn] y Min[z1,z2,...,zn] calculan el mximo y el mnimo de un conjunto de nmeros.
a = 2; a^3 a^5 8 32
Out[6]= Out[7]=
Atencin, aunque cerremos un documento de Mathematica, el valor de todas las variables que hemos utilizado quedar guardado hasta que cerremos el programa. El comando Clear borra el valor de cualquier variable que hayamos creado. Para borrar todas las variables se utiliza Clear["Global`*"]
In[8]:=
Clear@aD a^2 a2
Out[9]=
Tambin es posible realizar comparaciones utilizando los smbolos >, <, , y (estos tres ltimos smbolos se obtienen tecleando >= , <= != seguidos de un espacio). Para comprobar si dos expresiones son iguales se utiliza la doble igualdad == reservando la igualdad simple para las asignaciones. El resultado de una de estas comparaciones es siempre True o False
In[10]:= In[11]:=
Por ltimo para dar una salida en pantalla, se utiliza el comando Print
In[14]:=
El valor de la variable a es 2 Para condiciones ms complejas y para controlar el flujo de la ejecucin del algoritmo utilizaremos los operadores lgicos habituales AND y OR que se representan como && y || respectivamente
In[15]:=
Out[16]= Out[17]=
Otros operadores lgicos utilizables son: Xor y Not El comando que permite tomar decisiones es If, que tiene tres partes separadas por comas. La primera es la condicin a comprobar, la segunda es la secuencia de instrucciones que se ejecutan si la condicin es cierta, y la tercera parte, que es opcional, es la secuencia de condiciones a ejecutar si la condicin no es cierta.
In[18]:=
Es cierto
In[19]:=
Es falso Un comando parecido a If es Which . En este comando se alternan una condicin y la secuencia de comandos a ejecutar si la condicin es cierta. Las condiciones se evalan de izquierda a derecha y se para cuando se encuentra que una de ellas es cierta. Es habitual poner al final una condicin True para el caso de que todas las anteriores sean falsas.
In[20]:=
Which@1 2, Print@"Lo primero es cierto"D, 2 > 1, Print@"Lo segundo es cierto"D, True, Print@"Todo lo anterior es falso"DD
Lo primero es cierto Mathematica dispone de varios comandos para ejecutar bucles: el bucle For cuando el nmero de iteraciones es conocido de antemano y While si hay que comprobar una condicin al comienzo de cada
iteracin. La sintaxis de los comandos es exactamente la opuesta de las correspondientes instrucciones en C, as que hay que tener cuidado.
In[21]:=
1 4 9 16 25
In[22]:=
1 4 9 16 25 Aunque es perfectamente correcto hacer un programa de Mathematica sin ms que tecleando una instruccin tras otra, esto no permite estructurar adecuadamente algoritmos complejos. En su lugar, podemos utilizar el comando Module para definir subrutinas o funciones. Por ejemplo la siguiente funcin calcula el factorial de un nmero.
In[24]:=
Fact@n_D := Module@8i, temp<, temp = 1; For@i = 1, i n, i ++, temp = temp * iD; Return@tempDD
Al utilizar el comando Module es necesario tener en cuenta varios aspectos fundamentales. En primer lugar, es imprescindible utilizar como smbolo de asignacin := en vez de slo la igualdad y el smbolo de subrayado acompaando la variable de entrada. Adems Module tiene dos argumentos, el primero es la lista de variables locales a utilizar y en segundo lugar la secuencia de instrucciones a ejecutar. Por ltimo en algn punto de esas instrucciones debe haber una instruccin Return que devuelva el valor de la funcin. Una vez definida la funcin, se puede utilizar como una instruccin predefinida.
In[25]:= Out[25]=
Con el comando Module , es posible utilizar tcnicas recursivas para definir subrutinas. Por ejemplo, la funcin anterior tambin se puede escribir como:
In[26]:=
Por ltimo una curiosidad relativa a la eficiencia de un algoritmo. El comando Timing sirve para comprobar el tiempo de ejecucin de un programa. Veamos por ejemplo cul de las dos versiones de factorial es ms rpida.
In[27]:=
Out[27]=
80. Second, 3060575122164406360353704612972686293885888041735769994167 767412594765331767168674655152914224775733499391478887017 263688642639077590031542268429279069745598412254769302719 546040080122157762521768542559653569035067887252643218962 642993652045764488303889097539434896254360532259807765212 708224376394491201286786753683057122936819436499564604981 664502277165001851765464693401122260347297240663332585835 068701501697941688503537521375549102891264071571548302822 849379526365801452352331569364822334367992545940952768206 080622328123873838808170496000000000000000000000000000000 00000000000000000000000000000000000000000000< 80.05 Second, 3060575122164406360353704612972686293885888041735769994167 767412594765331767168674655152914224775733499391478887017 263688642639077590031542268429279069745598412254769302719 546040080122157762521768542559653569035067887252643218962 642993652045764488303889097539434896254360532259807765212 708224376394491201286786753683057122936819436499564604981 664502277165001851765464693401122260347297240663332585835 068701501697941688503537521375549102891264071571548302822 849379526365801452352331569364822334367992545940952768206 080622328123873838808170496000000000000000000000000000000 00000000000000000000000000000000000000000000<
Out[28]=
Asignacin de variables
a=2 almacena el valor 2 en la variable a Clear[a] borra el valor de la variable y Clear["Global`*"] borra todas las variables.
Comparaciones
Para realizar comparaciones entre cualquier par de objetos de Mathematica se utilizan los smbolos >,<,>= , <= y !=. La comparacin de igualdad se realiza con la doble igualdad ==. El resultado de una comparacin siempre es True o False.
Operadores lgicos
&& y || son respectivamente AND y OR. Xor y Not tambin son operadores lgicos utilizables
Condiciones
If[condicion, comandos1, comandos2] si la condicin es cierta, se ejecuta comandos1. Si la condicin es falsa se ejecuta comandos2. No es necesario incluir esta ltima parte. Which[condicion1, comandos1, condicion2, comandos2,...,condicionN, comandosN] La primera condicin cierta de izquierda a derecha activa la ejecucin la serie de comandos inmediatamente posterior.
Bucles
For[valorincial, condicinsalida, incremento, comandos] a partir del valor inicial y hasta que la condicion de salida sea cierta, se ejecuta la serie de instrucciones, incrementando como se indica el contador del bucle. While[condicion, comandos] se ejecuta la serie de comandos siempre que la condicin sea cierta.
Module
Este comando nos permite estructurar adecuadamente los programas en Mathematica. Su sintaxis es NombreFuncion[parametros]:= Module[{variables locales}, cuerpofuncin] en el cuerpo de la funcin se debe incluir el comando Return[ ] que devuelve el resultado de la funcin.
Tiempo
Timing[funcion] nos da el tiempo de ejecucin de la funcin
f@x_D = x ^ 2 + 1 1 + x2
10
Ntese que se usan corchetes en vez de parntesis y que es necesario un smbolo de subrayado que acompae la primera aparicin de la variable independiente. A partir de esta definicin podemos evaluar la funcin como habitualmente se acostumbra.
In[30]:= Out[30]= In[31]:=
f@0D 1
Out[32]=
Out[34]=
Para dibujar una funcin de una o dos variables se utilizan los comandos Plot y Plot3D. Es necesario indicar el dominio de representacin.
In[35]:=
-4 Out[35]=
-2
Graphics
Mathematica para Clculo numrico Plot3D@g@x, yD, 8x, - 1, 1<, 8y, - 1, 1<D
11
In[36]:=
SurfaceGraphics
En ocasiones es interesante definir una funcin a trozos, eso se puede hacer utilizando el comando Which como en el ejemplo siguiente.
In[37]:= In[38]:=
-2
-1 -1
Out[38]=
Graphics
Hay que tener cuidado porque si la funcin no est bien definida, Mathematica la acepta igualmente.Por ejemplo, en el siguiente caso cunto vale f[0]?
In[39]:=
Out[40]=
12
Para Mathematica no hay ninguna duda porque se evala de izquierda a derecha pero es posible que se no sea el resultado deseado. Para resolver ecuaciones sencillas podemos utilizar el comando Solve. Ntese que de nuevo se usa aqu la doble igualdad y no una igualdad slo. Como segundo argumento se incluye la variable que queremos despejar.
In[41]:= Out[41]=
El clculo diferencial es extremadamente sencillo con Mathematica . Despes de definir una funcin como
In[42]:=
16 Cos@xD Sin@xD D@f@xD, 8x, 4<D 16 Cos@xD Sin@xD g@x_, y_D = x y ^ 2; D@g@x, yD, xD D@g@x, yD, yD y2 2xy
Out[48]= Out[49]=
13
Grficas de funciones
Plot[f[x],{x,a,b}] dibuja una funcin f de una variable en el intervalo [a,b] Plot3D[g[x,y],{x,a,b},{y,c,d}] dibuja una funcin de dos variables en el dominio [a,b][c,d]
Funciones a trozos
f[x_]=Which [subdominio1, funcin1, ...., subdominiop, funcinp] subdominio2, funcin2,
Resolucin de ecuaciones
Solve[f[x]==z,x] da los valores de x que verifican la ecuacin f(x)=z
Derivadas
f'[x] D[f[x],x] dan la derivada de una funcin f definida previamente. D[f[x],{x,n}] calcula la derivada de orden n de la funcin f D[g[x,y],x] calcula por ejemplo la derivada parcial de g respecto de x.
Y una matriz, con un cierto nmero de llaves anidadas como en el siguiente ejemplo.
14
Jos Cceres Gonzlez A = 882, 1, 0<, 8- 1, 0, 3<, 84, 4, 1<< 882, 1, 0<, 8- 1, 0, 3<, 84, 4, 1<<
In[51]:= Out[51]=
Esto es bastante incmodo. Por ello, para poder visualizar una matriz o un vector como habitualmente estamos acostumbrados podemos utilizar MatrixForm
In[52]:=
MatrixForm@xD MatrixForm@AD y z z z z {
Out[52]//MatrixForm=
1 i j j j j4 k3
Out[53]//MatrixForm=
2 1 0y i j z j z j j 1 0 3z z k 4 4 1{
Si queremos referirnos a un elemento concreto de una matriz o a una coordenada de un vector, utilizaremos los subndices adecuados entre dobles corchetes.
In[54]:= Out[54]= In[55]:= Out[55]=
x@@2DD 4
El doble corchete tambin se utiliza para cambiar el valor de una posicin de una lista.
In[56]:=
Out[57]=
Comentaremos a continuacin las principales instrucciones relativas a matrices y vectores. Para empezar, la suma de dos matrices se hace con el smbolo +, pero para la multiplicacin de matrices se usa el punto .
In[58]:=
A = 882, 1, 0<, 8- 1, 0, 3<, 84, 4, 1<< ; P = 882, 3, 4<, 81, 9, 5<, 8- 7, 3, - 1<<;
15
In[59]:=
A+P A.P
Out[59]= Out[60]=
Otro comando interesante para generar matrices es Table. Por ejemplo, vamos a construir la matriz 4x4 donde cada elemento sea la suma de la fila y columna que ocupa.
In[62]:=
Out[63]//MatrixForm=
i2 j j j 3 j j j j j4 k5
Det@AD -11
Inverse@AD
Out[65]=
12 1 3 13 2 6 4 4 1 99 , , - =, 9- , - , =, 9 , , - == 11 11 11 11 11 11 11 11 11
Supongamos que queremos resolver un sistema de ecuaciones lineales que viene dado por la matriz anterior A y el vector de trminos independientes
In[66]:= Out[66]=
Entonces utilizamos LinearSolve. Atencin porque para sistemas compatibles indeterminados slo da una solucin.
16
In[67]:=
Out[67]=
Por ltimo los valores y vectores propios de una matriz se calculan con:
In[68]:= Out[68]=
91, 1 - 2 !!! 3 , 1 + 2 !!! 3= Eigenvectors@AD 1 6 + !!! 3 1 -6 + !!! 3 98- 1, 1, 0<, 9 , - , 1 = , 9 , , 1== ! !! !!! 4 4 4 3 4 3
In[69]:=
Out[69]=
17
Sumatorias y productorios
Los comandos de Mathematica que realizan sumatorias y productorios son claramente insuficientes para los propsitos del Clculo numrico. Veamos por qu Para sumar utilizamos Sum como en el siguiente ejemplo que suma los cuadrados de los primeros treinta nmeros naturales.
In[70]:= Out[70]=
70359079638545882374689246780656119576032161719910400000000 000000
Pero supongamos que queremos realizar la anterior multiplicacin excepto para i=23. En ese caso tenemos dos alternativas. Una sencilla que sirve para muy pocos casos.
In[72]:= Out[72]=
13300393126379183813740878408441610505866193141760000000000 0000 Product@i ^ 2, 8i, 1, 22<D * Product@i ^ 2, 8i, 24, 30<D 13300393126379183813740878408441610505866193141760000000000 0000
Sumatorias y productorios
Estos comandos son Sum y Product cuya sintaxis es: Sum[expresin, {variable de la sumatoria, min valor, max valor}] Product[expresin, {variable del productorio, min valor, max valor}]
18
If@condition, t, fD gives t if condition evaluates to True, and f if it evaluates to False. If@condition, t, f, uD gives u if condition evaluates to neither True nor False. ? Com* Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction Compose ComposeList
? If
In[75]:=
Composition
Varios comandos de Mathematica tienen una serie de opciones para alterar el aspecto de su salida. Para consultarlas, slo debemos utilizar Options como en el siguiente ejemplo.
19
In[76]:=
Out[76]=
1 9AspectRatio , Axes Automatic, GoldenRatio AxesLabel None, AxesOrigin Automatic, AxesStyle Automatic, Background Automatic, ColorOutput Automatic, Compiled True, DefaultColor Automatic, Epilog 8<, 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 8<, RotateLabel True, Ticks Automatic, DefaultFont $DefaultFont, DisplayFunction $DisplayFunction, FormatType $FormatType, TextStyle $TextStyle=
En cuanto a los mensajes de error ms comunes, empezemos con aquellos relativos a la sintaxis de los comandos. En Mathematica no existe el mensaje de Sintax Error, sino que educadamente nos indica que hay una instruccin que se escribe de manera muy parecida a lo que estamos escribiendo
In[77]:=
Whila
General::spell1 : Possible spelling error: new symbol name "Whila" is similar to existing symbol "While".
Out[77]=
Whila
Si escribimos un comando correctamente pero con un nmero equivocado de argumentos entonces obtenemos:
In[78]:=
For@i = 1D For@i = 1D
En ocasiones, uno se empea en utilizar un nombre de variable que ya est reservado por Mathematica
20
In[79]:=
D = 1;
Set::wrsym : Symbol D is Protected. o bien algn otro que hemos utilizado anteriormente con fines muy distintos. Recuerda que en este caso se puede utilizar Clear
In[80]:=
Set::write : Tag Integer in 1@x_D is Protected. Si no hemos definido adecuadamente una funcin, al dibujarla podemos obtener el siguiente error.
In[82]:=
f = 1; f@x_D = x ^ 2 + 1;
Plot::plnr : p@xD is not a machine-size real number at x = - 1.. Plot::plnr : p@xD is not a machine-size real number at x = - 0.918866. Plot::plnr : p@xD is not a machine-size real number at x = - 0.830382. General::stop : Further output of Plot::plnr will be suppressed during this calculation.
1 0.8 0.6 0.4 0.2
0.2 Out[83]=
0.4
0.6
0.8
Graphics
Si nos empeamos en referenciar una coordenada fuera del rango de un vector o una matriz, sucede esto:
21
In[84]:=
Por ltimo, algo verdaderamente desastroso ocurre cuando se utiliza mal una funcin recursiva
In[86]:=
Ayudas
Como ayudas activas mientras se escribe un documento de Mathematica tenemos dos: ?comando nos da la sintaxis del comando deseado ?algo* nos da una lista con aquellas instrucciones disponibles que empiezan por algo Options[comando] nos proporciona las diferentes opciones que se pueden utilizar con ese comando.