An Elementary Introduction to the Wolfram Language
27Aplicación repetida de funciones
In[1]:=
Click for copyable input
Out[1]=
Si la función que se usa es Framed, resulta un poco más obvio lo que está sucediendo:
In[2]:=
Click for copyable input
Out[2]=
Aquí aparece el resultado final de 5 niveles de anidación:
In[3]:=
Click for copyable input
Out[3]=
Aplique EdgeDetect de manera anidada a una imagen encontrando: primero, bordes, luego bordes de los bordes, y así sucesivamente.
Detecte en una imagen bordes, de manera anidada:
In[4]:=
Click for copyable input
Out[4]=
In[5]:=
Click for copyable input
Out[5]=
In[6]:=
Click for copyable input
Out[6]=
Si se aplica sucesivamente una función que suma 1, se obtienen enteros sucesivos.
In[7]:=
Click for copyable input
Out[7]=
Multiplique por 2 de manera anidada, para obtener potencias de 2.
In[8]:=
Click for copyable input
Out[8]=
In[9]:=
Click for copyable input
Out[9]=
Aplique la raíz cuadrada de manera anidada:
In[10]:=
Click for copyable input
Out[10]=
In[11]:=
Click for copyable input
Out[11]=
RandomChoice elige al azar de una lista. Esto puede usarse, por ejemplo, para crear una función pura que sume al azar +1 o 1.
En cada paso, sume o reste 1, al azar, comenzando de 0:
In[12]:=
Click for copyable input
Out[12]=
In[13]:=
Click for copyable input
Out[13]=
Hasta ahora se ha usado NestList iterativamente, de hecho, para efectuar una cadena de aplicaciones de una función dada. Ahora bien, también puede usarse para fines de recursión, donde lo que se anida es el patrón mismo de aplicaciones de la función.
Aquí se efectúa una cadena de aplicaciones de la función f:
In[14]:=
Click for copyable input
Out[14]=
Aquí el patrón de aplicaciones de f es más complicado:
In[15]:=
Click for copyable input
Out[15]=
In[16]:=
Click for copyable input
Out[16]=
En cada nivel, las cajas anidadas se combinan en pares, de manera recursiva:
In[17]:=
Click for copyable input
Out[17]=
In[18]:=
Click for copyable input
Out[18]=
In[19]:=
Click for copyable input
Out[19]=
In[20]:=
Click for copyable input
Out[20]=
In[21]:=
Click for copyable input
Out[21]=
In[22]:=
Click for copyable input
Out[22]=
Forme una estructura recursiva con dos funciones, f y g:
In[23]:=
Click for copyable input
Out[23]=
Es bastante complicado entender la estructura así formada, aun si se acomodan las cosas en columnas.
Acomodar en columnas la estructura recursiva:
In[24]:=
Click for copyable input
Out[24]=
NestGraph es básicamente como NestList, salvo que produce un grafo en vez de una lista. Aplica una función repetidamente para determinar con cuáles nodos debe conectarse un nodo particular. En este caso se produce un árbol de nodos, lo que deja más claro qué está sucediendo.
In[25]:=
Click for copyable input
Out[25]=
Aplicar repetidamente una función numérica para formar otra estructura de árbol:
In[26]:=
Click for copyable input
Out[26]=
Se puede usar NestGraph para reptar hacia afuera, creando una red. Como ejemplo, podría aplicarse repetidamente una función tal que, para cada país, produjera la lista de sus países colindantes. El resultado sería una red que conecta los países colindantes; así, podría comenzarse con Suiza.
Reptar hacia afuera 2 pasos a partir de Suiza, conectando cada país con los que le son colindantes:
In[27]:=
Click for copyable input
Out[27]=
Cree una red de palabras cercanas con respecto a cambios de una letra:
In[28]:=
Click for copyable input
Out[28]=
27.1Construya una lista con los resultados de anidar Blur hasta 10 veces, comenzando con una X rasterizada de tamaño 30. »
Salida esperada:
Out[]=
27.2Comenzando con x, forme una lista anidando Framed hasta 10 veces, con un trasfondo de color aleatorio en cada ocasión. »
Muestra de salida esperada:
Out[]=
27.3A partir de una A de tamaño 50, construya una lista poniendo 5 veces un marco y dando una rotación aleatoria de manera anidada. »
Muestra de salida esperada:
Out[]=
27.4Obtenga un gráfico con los puntos unidos de 100 iteraciones del mapeo logístico 4 #(1-#)&, comenzando en 0.2. »
Salida esperada:
Out[]=
27.5Encuentre el valor numérico del resultado de 30 iteraciones de 1+1/#& comenzando con 1. »
Salida esperada:
Out[]=
27.6Cree la lista de las 10 primeras potencias de 3 (comenzando en 0), usando multiplicación anidada. »
Salida esperada:
Out[]=
27.7Forme una lista con los resultados de anidar la función (#+2/#)/2& (el método de Newton) hasta 5 veces, comenzando con 1.0, y restando a cada uno de los resultados. »
Salida esperada:
Out[]=
27.8Obtenga el gráfico, en 2D, de una caminata aleatoria de 1 000 pasos, comenzando en {0, 0} donde, en cada paso, se añade a las coordenadas una pareja de números aleatorios entre 1 y +1. »
Muestra de salida esperada:
Out[]=
Salida esperada:
Out[]=
27.10Genere un grafo comenzando de 0, y luego conectando de manera anidada 10 veces cada nodo de valor n con los de valor n+1 y 2n»
Salida esperada:
Out[]=
27.11Genere un grafo, encontrando de manera anidada los países colindantes, comenzando con Estados Unidos, durante 4 iteraciones. »
Salida esperada:
Out[]=
+27.1Produzca un gráfico con los puntos unidos de 100 iteraciones de la función congruencia lineal Mod[59#, 101]&, comenzando con 1. »
Salida esperada:
Out[]=
+27.2Cree la lista de 5 torres de potencias de 2, es decir, 2^2^2...^2 n veces, con n de 0 a 4. »
Salida esperada:
Out[]=
+27.3Cree la lista de 20 torres de potencias de 1.2, es decir,1.2^1.2^...^1.2 n veces, con n de 0 a 19. »
Salida esperada:
Out[]=
+27.4Genere la lista de los valores numéricos obtenidos en hasta 10 anidaciones de la función Sqrt[1+#]&»
Salida esperada:
Out[]=
+27.5Produzca el gráfico 3D, de una caminata aleatoria de 1000 pasos, comenzando en {0, 0, 0} donde, en cada paso, se añade a las coordenadas una terna de números aleatorios entre 1 y +1. »
Muestra de salida esperada:
Out[]=
¿Cuál es la diferencia entre iteración y recursión?
¿Qué relación hay entre anidación, recursión y fractales?
¿Qué es el triángulo de Pascal?
¿Es NestGraph como un rastreador web?
¿Cómo es que algunos de los países, pero no todos, tienen flechas bidireccionales en el grafo de países colindantes?
Si se ejecutara NestGraph en un número suficiente de pasos, todos los países tendrían flechas bidireccionales; ya que, si A colinda con B, entonces B colinda con A. Pero el proceso se detuvo después del segundo paso, así que no se alcanzó a llegar a muchas de las conexiones inversas.
¿Por qué se usa NestList en algo como NestList[2*#&, 1, 15]?
No es necesario. Se puede simplemente usar Power, como en Table[2^n, {n, 0, 15}]. Pero vale la pena ver cómo surge la secuencia Plus, Times, Power del anidamiento sucesivo(p.ej., NestList[2+#&, 0, 15] es Table[2*n, {n, 0, 15}]).
¿Existe alguna forma de detener la aplicación de una función cuando ya no hay cambios en los resultados?
Sí. Se utiliza para ello FixedPoint o FixedPointList (ver la Sección 41).
 
Download Notebook Version
en