área bajo la curva en el intervalo [xi1, xi] por el área bajo el segmento parabólico que paroxima la curva en el
intervalo [xi1, xi] . Este área se calcula por la fórmula h/6 (f(xi1)+f(xi)+4f(ci)), siendo ci el punto medio del
intervalo [xi1, xi] y h la longitud de los subintervalos en que dividimos el intervalo [a,b]. Cunato más fina sea la
20 Cálculo avanzado con Mathematica.nb
partición más se aproxima el área bajo los segmentos parábolicos al área bajo la curva.
(a)Programar el método anterior solicitando del usuario la función f, los extremos de integración y un error
máximo permitido.
(b)Probar el programa anterior para calcular
resultado exacto
3ex sen
1
x
xcon un error menor que 1/1000. Compara con el
CAPÍTULO 3
PROGRAMACIÓN FUNCIONAL
En muchos lenguajes de programación los bucles e iteraciones presentados en el capítulo anterior son posibles. Sin
embargo aunque Mathematica ofrece este tipo de programación tradicional, es preferible reducir su uso continuado.
La verdadera potencia de Mathematica se hace patente cuando hacemos cálculo simbólico. Por esta razón resulta
más eficaz diseñar nuestros programas bajo modelos de programación funcional y reglas de transformación. En este
capítulo nos ocuparemos de la programación funcional, lo que nos permitirá tratar todo tipo de expresiones, en
particular las funciones, como datos.
Veremos como incluso en problemas númericos (Método de Newton...) la programación funcional es una alterna-
tiva a bucles e iteraciones.
La programación funcional se basa :
Por un lado, en la noción de expresión ("TODO ES UNA EXPRESION"). Esto hace de Mathematica un
lenguaje muy flexible, donde las funciones pueden operar sobre todo tipo de datos.
Por otro, en operadores funcionales, funciones que a su vez actúan sobre otras funciones.
3.1.LISTAS
Las listas constituyen una de los elementos más comunes y también uno de los más potentes en Mathematica. Las
listas sirven para agrupar elementos de cualquier tipo. Por ejemplo: a={x,2,f[x]}
Es importante manejar con soltura las listas, ya que su estructura es común a la totalidad de las expresiones. A
continuación hacemos un breve recorrido por las instrucciones básicas para manejar listas.
3.1.1. Construyendo listas
Dos de las instrucciones más corrientes para construir listas son Table y Array.
3.1.1.1. Table
Table[f, {i, imin, imax, d}] generamos la lista {f[imin],...f[imax]}
Table[f,{i,imax,d}] generamos la lista {f[1],...f[imax]}
Table[f,{i,imax}] generamos la lista {f[1],...f[imax]} , el paso d se supone1
Table[f,{i,imin,imax,di},{j,jmin,jmax,dj}] generamos listas multidimensionales
Table
Ejemplo: generamos la lista formada por los diez primeros números primos
Cálculo avanzado con Mathematica.nb
21
Table
Prime
i
,
i, 10
2, 3, 5, 7, 11, 13, 17, 19, 23, 29
3.1.1.2. Array
Se denominan arrays a un tipo especial de listas en el que todas las sublistas tienen la misma longitud. Por ejemplo,
serán arrays los vectores y las matrices, pero no una lista de la forma {1,2,{3,4}}.
En Mathematica disponemos de la instrucción Array para construir arrays genéricos que luego podemos rellenar.
La sintaxis es la siguiente
Array[a,{n,m...}] generamos un array de dimensiones n× m×...
Array
A Array
a,
2, 3
, a
1, 2
, a
a
1, 1
1, 3
,
a
2, 1
, a
2, 2
, a
2, 3
Podemos escribirla en forma de matriz
MatrixForm
1, 1
2, 1
a
a
1, 2
2, 2
i_, j_
: i j;
MatrixForm
a
a
1, 3
2, 3
a
a
a
A
2 3 4
3 4 5
3.1.2. Longitud y dimensión de una lista.
Length[lista] obtenemos la longitud de lista
Dimensions[lista] obtenemos la dimensión de lista
Por ejemplo:
1, 2
m
m
Length
Dimensions
,
3, 4
,
2, 5
;
m
3
3, 2
Obtenemos que la longitud de m es tres, que es el número de elementos encerrados entre las primeras llaves y la
dimensión es {3,2} donde 3 es la longitud del primer nivel (el número de filas) y dos es la longitud de las listas en
el segundo nivel ( el número de columnas).
Notar que Dimensions sólo se puede aplicar si la longitud de las sublistas es la misma, si lo aplicamos a listas con
distinta longitud en los subniveles da el mismo resultado que Length.
22 Cálculo avanzado con Mathematica.nb
3.1.3. Tomando trozos de listas
3.1.3.1
Algunas de las instrucciones más comunes para extraer elementos de listas son:
lista, i
extrae la parte i de lista
lista[[i]] extrae el elemento i-ésimo de lista
Part
lista[[i,j,...]] extrae el elemento situado en la posición i,j,...
lista[[i]][[j]]... extrae el elemento situado en la posición i,j,...
Part[lista,i,j,...] extrae el elemento situado en la posición i,j,..
Por ejemplo si escribimos:
m
1, 2, 3
,
2,
a, 3
, 7
1, 2, 3
,
2,
a, 3
, 7
El elemento a, lo podemos obtener de las siguientes maneras:
2, 1, 2, 1
m
2
m
Part
1
m, 2, 1, 2, 1
2
1
a
a
a
• Si en lista[[i]] especificamos un i negativo se entenderá que nos referimos al elemento que ocupa la posición i
contada desde el final de lalista.
First[lista] obtenemos el primer elemento de lista
Last[lista] obtenemos el último elemento de lista
3.1.3.2.
Para referirnos a trozos de listas contamos con las siguientes instrucciones:
Take[lista,n] obtenemos los n primeros elementos de lista
Take[lista,-n] obtenemos los n últimos elementos de lista
Take[lista,{n, m}] obtenemos los elementos desde el n hasta el m ambos incluidos
Take
Rest[lista]obtenemos lista con el primer elemento eliminado.
Drop[lista,n] obtenemos lista con los n primeros elementos eliminados.
Drop[lista,-n] obtenemos lista con los n últimos elementos eliminados
Drop[lista,{n,m}] eliminamos los elementos desde n hasta m.
Drop y Rest
Cálculo avanzado con Mathematica.nb
23
3.1.4 Testeando y buscando elementos en la lista
Position[lista, forma]da la posición en que forma ocurre en la lista.
Por ejemplo:
Position
x ^ 3, 5, x ^ 2,
7, x ^ 4
, x ^ _
1
,
3
,
4, 2
Obtenemos que las posiciones de x elevado a "algo" son {{1},{3},{4,2}}
Count[lista,forma] cuenta el número de veces que forma ocurre en la lista
En el ejemplo de antes contamos el número de veces que x^_ aparece en la lista como elemento de la lista.
Count
x ^ 3, 5, x ^ 2,
7, x ^ 4
, x ^ _
2
MemberQ[lista, forma] da True si forma es un elemento de lista y False en caso contrario
En el ejemplo anterior 7 no es un elemento de la lista
MemberQ
x ^ 3, 5, x ^ 2,
7, x ^ 4
, 7
False
FreeQ[lista,forma] testea si forma ocurre en algún lugar en la lista
En el ejemplo anterior 7 aparece en algún lugar de la lista
FreeQ
x ^ 3, 5, x ^ 2,
7, x ^ 4
, 7
False
En todas estas instrucciones forma puede ser una expresión como 7, que hemos usado en MemberQ y FreeQ, pero
también puede ser un modelo (pattern, en inglés), como x^_, que hemos usado en Position y Count. Nos ocupare-
mos de los modelos en el capítulo 4.
3.1.5. Modificando listas
Prepend[lista,elemento] añade al principio de la lista elemento.
PrependTo[lista,elemento] además actualiza el valor de la lista.
Append[lista,elemento] añade elemento al final de la lista
AppendTo[lista,elemento] además actualiza el valor de la lista
Prepend y Append
Insert[lista,elemento,i] inserta elemento en el lugar i de lista
Delete[lista, elemento,i] elimina el elemento situado en el lugar i de lista
24 Cálculo avanzado con Mathematica.nb
Insert[lista,elemento,i] inserta elemento en el lugar i de lista
Delete[lista, elemento,i] elimina el elemento situado en el lugar i de lista
Insert y Delete
Se puede especificar un i negativo y también posiciones en niveles más interiores que el primero con {i,j,....}.
Es conveniente obtener previamente con Position la posición de los elementos a insertar o eliminar.
Si en la lista de ejemplos anteriores queremos eliminar el elemento 7 lo hacemos con
Delete
x ^ 3, 5, x ^ 2,
7, x ^ 4
,
4, 1
x3, 5, x2,
x4
3.1.6. Combinando listas
Join[lista1,....,listan] obtenemos la concatenación de las listas
Union[lista1,...., listan] obtenemos la unión disjunta de las listas,con el resultado puesto en orden standard.
Join y Union
Por ejemplo:
, x ^ 2, 7, 2
2, 3
x,
2, 4, 7, hola
m, n
m
n
Join
Union
m, n
;
;
x,
2, 3
, x2, 7, 2, 2, 4, 7, hola
2, 4, 7, hola, x, x2,
2, 3
Observar que primero se ordenan los números, después las letras, y después las variables por grado.
3.1.7. Reordenando listas
Sort[lista] pone los elementos de la lista en orden standard.
Reverse[lista] invierte el orden de los elementos en la lista.
RotateRight[lista,n] mueve los elementos de la lista n lugares a la derecha.
RotateLeft[lista,n] mueve los elementos de lista n lugares a la izquierda
3.1.8. Manipulando listas anidadas
Ya hemos mencionado antes que el interés de las listas reside en que, aunque esta estructura es particular, todas las
expresiones se adaptan a este patrón, y especialmente a las listas anidadas (listas en las que algunos de sus elemen-
tos son listas).
Algunas de las instrucciones para manejar listas anidadas son:
Transpose[lista] transpone lista si lista es una matriz
Flatten[lista] elimina todas las sublistas.
FlattenAt[lista,i] elimina todas las sublistas del lugar i.
FlattenAt[lista,{i,j,...}]. elimina las sublistas que aparecen en la posición indica
Comentarios de: Capítulo 3 - Programación funcional (0)
No hay comentarios