PDF de programación - Capítulo 3 - Programación funcional

Imágen de pdf Capítulo 3 - Programación funcional

Capítulo 3 - Programación funcionalgráfica de visualizaciones

Publicado el 1 de Agosto del 2019
666 visualizaciones desde el 1 de Agosto del 2019
512,7 KB
22 paginas
Creado hace 13a (24/03/2011)
á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
  • Links de descarga
http://lwp-l.com/pdf16403

Comentarios de: Capítulo 3 - Programación funcional (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad