Chapter 1 Mathematica como lenguaje de programación 1.1 Fundamentos del Lenguaje Expresiones: En Mathematica todo es una expresión. Hay dos tipos de expresiones: Expresiones Normales, las cuales son de la forma: head[part1,par2,...] donde head, part1, part2,... son expresiones. Átomos: los cuales son símbolos, números y strings, por ejemplo: Sin[Log[2.5,7]] Esto es es una función donde Sin y Log son símbolos. RGBColor[1,0,0] que NO es una función. Observación: En Mathematica toda expresión puede ser construida usando átomos, paréntesis cuadrados y comas. In[1]:= a*a + D[a^3,a] Out[1]= 4a^2 1
Cuya fórmula completa es: In[3]:= FullForm[a*a + D[a^3,a]] Out[3]= Times[4,Power[a,2]] Nota: +, -, *, /, entre otros, son llamados Símbolos especiales de entrada, pues por ejemplo cuando se ejecuta 2+3 realmente Mathematica ejecuta Plus[2,3]. Obs: [ ] FullForm[4a^2] (retorna) [ ] Times[4,Power[a,2]] 1.1.1 Átomos Un átomo es, en Mathematica, una expresión que no puede ser quebrada o dividida en expresiones más pequeñas de Mathematica. Hay tres tipos: Símbolos: Un símbolo es una secuencia de letras, dígitos y el caracter $. [In1] a+b-2a [Out2] -a+b Números: Hay cuatro tipos: Enteros Reales Racionales Complejos dddd ddd.ddd integer1/integer2 { FullForm[a+bI] a+bi Complex[a,b] Strings: Un string es una secuencia de caracteres encerrados por... "Hola" 1.1.2 Evaluación de expresiones In[1]:=Trace[Sin[Log[2.5,7]]] {{Log[2.5,7], Log[7] Log[2.5], {{Log[2.5],0.916}, 1 0.916,1.091}, {Log[7], 1.945},1.091,1.945,2.123}, Sin[2.123], 0.851 (*resultado final*) }
1.2 Formas especiales de entrada 1.2.1 Operadores Aritméticos: Símbolos aritméticos 3*2^4 -> Times[3,Power[2,4]] 1.2.2 Operadores Relacionales y Booleanos: Esto son: <, <=, >, >=, ==,!=, && (AND), (OR) Ejemplos: 7 > 4 && 2!= 3 True 5 > 4 > 3 True Observación: %n es equivalente a Out[n]. 1.2.3 Operadores de Asignación: Operador Ejemplo = x=y+z := x:=y+z += x+=y x=x+y -= x-=y x=x-y *= x*=y x=x*y /= x/=y x=x/y
1.3 Llamado a funciones La sintaxis para invocar una función es: f[x] (NO f(x)) Otras formas de invocar funciones son: Notación Prefija: f @ x f[x] f @ g @ h @ x f[g[h[x]]] Notación Postfija: x // f f[x] Sqrt[3] // N N[Sqrt[3]] x // f // g g[f[x]] a+b // f f[a+b] Notación infija: x ~ f ~ y f[x,y] 1.4 Definición de funciones En Mathematica se defienen las funciones como sigue: Z[x_,y_] := x+y La parte Z[x_,y_] se conoce como declaracion y la parte x+y es conocida como cuerpo. El underscore en x_ y y_ son importantes pues indican que x y y son parámetros formales. Estos underscore se conocen como blancos. Invocación: x := 1 y := Log[2] Z[Sqrt[3],2 Pi] Sqrt[3]+2 Pi La definción de Z se pudo hacer de la siguiente manera: Z[x_,y_] = x + y x + y Nota: El valor de retorno de la función es el cálculo que se haga en la última línea la cual no lleva ;. Nota: Los valores de x y y no son alterados dentro de la función.
1.5 Listas Las listas son la estructura de datos básica y fundamental en Mathematica. Ejemplos: {1, x, i+j} (Lista de tres elementos) FullForm[%] List[1, x, Plus[i,j]] En la mayoría de los contextos de Mathematica se requieren listas, por ejemplo: Ejemplos: Plot3D[Sin[xy],{x, 0, Pi},{x, 0, Pi}] In[21]:=S={{a, b}, {c, d}, {e, f }} Out[21]={{a,b},{c,d},{e,f}} In[22]:=S[[1]] Out[22]={a,b} In[23]:=%[[2]] Out[23]= b In[24]:=S[[1,2]] Out[24]=b
1.6 Reglas Una entrada de la forma a b se conoce como regla. ReplaceAll[x+x^2, x -> w] w + w^2 que es equivalente a: x+ x^2 /. x->w (La sustitución es no algebraica) ReplaceAll[x^2+ x^4, x^2-> w+1] 1 + w + x^4 1.7 Tipos El lenguaje de programación de Mathematica, a diferencia de otros lenguajes, es muy débilmente tipificado. En general en las funciones NO se especifican los tipos de los parámetros. Sin embargo el tipos puede ser especificado como sigue: fact[n_integer]:= Product[i,{i,1,n}] cuadrado[n_integer n_real n_rational n_complex] := n^2 funcion[s_list] :=... 1.8 Variables Locales Para evitar efectos colaterales en los programas, se deben usar variables locales, mediantemódulos: Module[Declaraciones, Cuerpo]
1.9 Algoritmo óptimo para calcular series Entrada: x, n, f Calcula: n k=0 f(x, k) Paso 1: k a Paso 2: s 0 Paso 3: T f(a) Paso 4: Repita s s + T T T ( ) f(x,k+1) f(x,k) k k+1 Hasta k = n Calcular n ( 1) k x (2k) cos(x) ; x IR (2k)! k=0 f(x, k + 1) f(x, k) = ( 1) (k+1) x (2k+2) (2k+2)! ( 1) (k) x (2k) (2k)! = ( 1)x 2 (2k + 1)(2k + 2) 1.10 Programación Funcional No se usa asignación ni se usan ciclos. En lugar de esto se usan: Los datos se mueven a través de funciones, mediante el paso de parámetros. Se usa recursividad, Apply y Map. Las funciones tienen como argumento a funciones y retornan funciones. Map y Apply: Map[f,a,b,c] = f[a], f[b], f[c] Apply[f,a,b,c] = f[a,b,c] Promedio[s_list]:=Apply[Plus,s]/Length[s] Promedio[{2,4,9,4,3}] 22/5"
Lo anterior se pudo hacer con ciclos, pero es mecho mejor de esta forma. Through: Aplica una lista de funciones a un argumento. Through[{Sin, Cos, Tan][a]] = {Sin[a], Cos[a], Tan[a]} 1.10.1 Funciones Anónimas (Funciones λ) En muchas situaciones se requiere evaluar una función, pero sin necesidad de darle un nombre, para no llenar la memoria (kernel) de nombres. la sintaxis es: Function[{x}, Cuerpo] Ejemplos: Function[{x},x^2][5] = 25 Function[{x},x^2+y][3,2] = 11 Si se tienen definidas 2 funciones F[x] y G[x] y se desea aplicar la suma de F y G a una lista, la mejor forma de hacerlo es: Map[Function[{x},F[x]+G[x]],a,b,c] = {F[a]+G[a],F[b]+G[b], F[c]+ G[c]} Paradigma de la programación funcional. Trate las estructuras matemáticas como un todo, nunca las descomponga para reconstruirlas luego.