“LLamamos caos al orden que todavía no comprendemos”
Edward Lorenz
Introducción
Vivimos en un mundo tan bello como complejo. El enfoque tradicional de la ciencia,que busca generalmente reducir a los sistemas complejos en cada una de sus partes, comprender cada parte, y luego entender todo el sistema, parece no ser suficiente. Cuando las partes comienzan a conectarse e interactuar entre sí, las bases científicas de este enfoque comienzan a fallar, y se torna casi imposible predecir el comportamiento del sistema. Los simples supuestos como la linealidad, la independencia, o la distribución normal parecen no ser de mucha utilidad a la hora de modelar los fenómenos incluso más sencillos del mundo que nos rodea. Es a partir de esta realidad, que nuevos enfoques se comenzaron a desarrollar y surgieron nuevos campos de estudio multidisciplinarios como los sistemas dinámicos, la complejidad, o la teoría del caos.
¿Qué es un sistema complejo?
Los sistemas complejos se caracterizan fundamentalmente porque su comportamiento es imprevisible. Sin embargo, complejidad no es sinónimo de complicación: este último hace referencia a algo enmarañado, enredado, de difícil comprensión. En realidad, y por el momento, no existe una definición precisa y absolutamente aceptada de lo que es un sistema complejo, pero pueden darse algunas peculiaridades comunes
En primer lugar, está compuesto por una gran cantidad de elementos relativamente idénticos. Por ejemplo, las células en un organismo, o las personas en una sociedad.
En segundo lugar, la interacción entre sus elementos es local y origina un comportamiento emergente que no puede explicarse a partir de dichos elementos tomados aisladamente. Un desierto puede contener billones de granos de arena, pero sus interacciones son excesivamente simples comparadas con las que se verifican en las abejas de un enjambre.
Por último, es muy difícil predecir su evolución dinámica futura; o sea, es prácticamente imposible vaticinar lo que ocurrirá más allá de un cierto horizonte temporal.
¿Qué es la teoría del caos?
La teoría del caos, más que una teoría, es un paradigma que supuso en su momento una gran revolución científica, al reflejar que muchos sistemas que eran considerados deterministas y previsibles tenían severos límites en dicha previsibilidad. Es decir, que no eran tan útiles como se creía a la hora de predecir eventos futuros. Iniciada por Henri Poincaré y popularizada gracias al trabajo del matemático y meteorólogo Edward Lorenz, la teoría del caos se ha utilizado en campos como las matemáticas y la meteorología para explicar la inexactitud y la dificultad para obtener resultados previsibles de la realidad.
El efecto mariposa
Esta teoría es ampliamente conocida por lo que se denomina el efecto mariposa, según el cual el débil aleteo de una mariposa puede ser la causa de un huracán a miles de kilómetros de distancia. Se indica de este modo que la existencia de una variable concreta puede provocar o alterar otras, influyéndose progresivamente hasta obtener un resultado fuera de lo esperado. En síntesis, podemos considerar que la teoría del caos establece que pequeños cambios en las condiciones iniciales crean grandes diferencias respecto al resultado final, con lo que una gran mayoría de los sucesos y sistemas no resultan totalmente predecibles.
Es importante tener en cuenta que a pesar de las apariencias, el caos al que se refiere esta teoría no implica una falta de orden, sino que los hechos y la realidad no se ajustan a un modelo lineal.
El mapa logístico
El mapa logístico es un mapeo polinomial (equivalentemente, relación de recurrencia ) de grado 2 , a menudo citado como un ejemplo arquetípico de cómo el comportamiento caótico y complejo puede surgir de ecuaciones dinámicas no lineales muy simples . El mapa fue popularizado en un artículo de 1976 por el biólogo Robert May , en parte como un modelo demográfico de tiempo discreto análogo a la ecuación logística escrita por Pierre François Verhulst . Matemáticamente, el mapa logístico está escrito
\[ x_n +1 = rx_n(1-x_n)
\]
donde x n es un número entre cero y uno que representa la relación entre la población existente y la población máxima posible. Los valores de interés para el parámetro r (a veces también denominado μ ) son los del intervalo [0,4] , de modo que x n permanece acotado en [0,1] . Esta ecuación en diferencias no lineales pretende capturar dos efectos:
reproducción donde la población aumentará a una tasa proporcional a la población actual cuando el tamaño de la población es pequeño.
inanición (mortalidad dependiente de la densidad) donde la tasa de crecimiento disminuirá a una tasa proporcional al valor obtenido tomando la “capacidad de carga” teórica del medio ambiente menos la población actual.
import numpy as np
import matplotlib.pyplot as plt
from random import randint
import pandas as pd
def logistic_iteration(N, xinicial, r):
logistic=0
for i in range(N):
logistic = r*xinicial*(1-xinicial)
xinicial = logistic
return logistic
valor_f = []
eje_r = []
valor_r = list(np.linspace(0, 4, 100000))
N = 2000
Xo = 0.5
for elems in valor_r:
log = 0
log = logistic_iteration(randint(100, N), Xo, elems)
valor_f.append(log)
eje_r.append(elems)
plt.scatter(eje_r, valor_f)
plt.show()
Como podemos ver, se obtiene exactamente lo que buscamos: el Diagrama de Bifurcación, con sus distintas regiones periódicas, y luego la región caótica.
Diagrama de bifurcación
En matemáticas, un diagrama de bifurcación de un sistema dinámico es una estratificación de su espacio de parámetros inducida por la equivalencia topológica, junto con los retratos de fase representativos de cada estrato. Las soluciones estables suelen representarse mediante líneas continuas, mientras que las soluciones inestables se representan con líneas punteadas
Bifurcación de Pitchfork
La bifurcación de Pitchfork es habitual en sistemas dotados de alguna simetría. Al igual que las bifurcaciones de Hopf, las bifurcaciones de Pitchfork pueden ser supercríticas o subcríticas.
Las supercríticas tienen la forma normal:
\[
\frac{dx}{dt} = rx - x^3
\]
Las subcríticas tienen la forma normal:
\[
\frac{dx}{dt} = rx + x^3
\]
Ruptura de la simetría en sistemas de bifurcación
En un sistema dinámico como : \(\ddot{x} + f(x;µ) + ϵg(x) = 0\)
Juego de Caos
En matemáticas , el término juego del caos se refería originalmente a un método para crear un fractal , usando un polígono y un punto inicial seleccionado al azar dentro de él. El fractal se crea mediante la creación iterativa de una secuencia de puntos, comenzando con el punto aleatorio inicial, en el que cada punto de la secuencia es una fracción dada de la distancia entre el punto anterior y uno de los vértices del polígono; el vértice se elige al azar en cada iteración. Repetir este proceso iterativo una gran cantidad de veces, seleccionar el vértice al azar en cada iteración y descartar los primeros puntos de la secuencia a menudo (pero no siempre) producirá una forma fractal. El uso de un triángulo regular y el factor 1/2 dará como resultado el triángulo de Sierpinski , mientras que la creación de la disposición adecuada con cuatro puntos y un factor 1/2 creará una visualización de un “Tetraedro de Sierpinski”, el análogo tridimensional del Sierpinski. triángulo. A medida que el número de puntos aumenta a un número N, la disposición forma un Sierpinski Simplex de dimensión (N-1) correspondiente.
from PIL import Image, ImageDraw
import random
import math
def distance(p1, p2):
return ((p2[0] - p1[0])**2 + (p2[1] - p1[1])**2)**0.5
def midPointAdjust(p1, p2, r, size):
return ( int((p1[0] + p2[0])/r) + size[0]//6 , int((p1[1] + p2[1])/r) + size[1]//6 )
def midPoint(p1, p2, r, size):
return ( int((p1[0] + p2[0])/r), int((p1[1] + p2[1])/r))
n = 9
r = 3
base = 800
points = 1000000
white = (255, 255, 255)
color = (255, 0, 0)
if n == 3:
size = base, int(3**.5 / 2 * base)
redCorner = (size[0]//2, 5)
blueCorner = (5, size[1]-5)
greenCorner = (size[0]-5, size[1]-5)
corners = (redCorner, blueCorner, greenCorner)
elif n >= 4:
size = base, base
radious = base
angle = 2 * math.pi / n
corners = [ ( int(size[0]//2 + radious * math.sin(i * angle)), int(size[1]//2 + radious * math.cos(i * angle)) ) for i in range(n) ]
polygonImg = Image.new('RGB', size, (0,0,0))
draw = ImageDraw.Draw(polygonImg)
current = corners[ random.randint(0,len(corners)-1) ]
for i in range(points):
randCorner = corners[ random.randint(0,len(corners)-1) ]
if n == 3:
current = midPoint(current, randCorner, r, size)
else:
current = midPointAdjust(current, randCorner, r, size)
draw.point(current, color)
polygonImg.save("Caos.png")