Articulo de referencia

Mapa de Ikeda

Las trayectorias de 2000 puntos aleatorios en un mapa de Ikeda con u = 0,918. En la teoría del caos , el mapa de Ikeda es un sistema dinámico de tiempo discreto que produce un a...

Las trayectorias de 2000 puntos aleatorios en un mapa de Ikeda con u = 0,918.

En la teoría del caos , el mapa de Ikeda es un sistema dinámico de tiempo discreto que produce un atractor extraño . Fue introducido en 1979 por el físico Kensuke Ikeda como un modelo para el comportamiento de la luz dentro de un resonador óptico no lineal . [ 1 ] El mapa demuestra cómo un conjunto simple de reglas puede conducir a un comportamiento complejo y caótico a través de un proceso de rotación, escalado y traslación repetidos, una operación de "estiramiento y plegado" común en los sistemas caóticos.

El mapa se define mediante una función iterativa en el plano complejo . Para un número complejo dadoznorte{\displaystyle z_{n}}, el siguiente valor se calcula como:znorte+1=A+Bznortemii(|znorte|2+do){\displaystyle z_{n+1}=A+Bz_{n}e^{i(|z_{n}|^{2}+C)}}Aquí,znorte{\displaystyle z_{n}}representa el campo eléctrico en el resonador en el pasonorte{\displaystyle n}Los parámetrosA{\displaystyle A}ydo{\displaystyle C}relacionarse con la luz láser externa y la fase del sistema, mientras queB{\displaystyle B}(dóndeB1{\displaystyle B\leq 1}) es un parámetro de disipación que representa la pérdida de energía en el resonador. [ 2 ]

Una versión de valor real del mapa, comúnmente estudiada, viene dada por las ecuaciones bidimensionales:incógnitanorte+1=1+(incógnitanorteporquetnorteynortepecadotnorte),{\displaystyle x_{n+1}=1+u(x_{n}\cos t_{n}-y_{n}\sin t_{n}),\,}ynorte+1=(incógnitanortepecadotnorte+ynorteporquetnorte),{\displaystyle y_{n+1}=u(x_{n}\sin t_{n}+y_{n}\cos t_{n}),}dónde{\displaystyle u}es un parámetro ytnorte=0,461+incógnitanorte2+ynorte2.{\displaystyle t_{n}=0.4-{\frac {6}{1+x_{n}^{2}+y_{n}^{2}}}.}Para valores del parámetro0,6{\displaystyle u\geq 0.6}Este sistema exhibe un comportamiento caótico, generando el característico atractor fractal que se muestra en las imágenes del artículo.

Atractor

Esta animación muestra cómo cambia el atractor del sistema a medida que el parámetro{\displaystyle u}se varía de 0,0 a 1,0 en pasos de 0,01. El sistema dinámico de Ikeda se simula durante 500 pasos, comenzando desde 20.000 puntos de partida colocados aleatoriamente. Los últimos 20 puntos de cada trayectoria se grafican para representar el atractor . Nótese la bifurcación de los puntos del atractor como{\displaystyle u}aumenta.

Trayectorias de puntos

Los gráficos que se muestran a continuación ilustran las trayectorias de 200 puntos aleatorios para diversos valores de{\displaystyle u}El gráfico insertado a la izquierda muestra una estimación del atractor, mientras que el gráfico insertado a la derecha muestra una vista ampliada del gráfico de la trayectoria principal.

Código Octave/MATLAB para trayectorias de puntos

El mapa de Ikeda se compone de una rotación (con un ángulo que depende del radio), un reescalado y un desplazamiento. Este proceso de "estiramiento y plegado" da lugar al atractor extraño.

El código Octave/MATLAB para generar estos gráficos se muestra a continuación:

% u = parámetro ikeda % opción = qué graficar % 'trajectory' - graficar la trayectoria de puntos de inicio aleatorios % 'limit' - graficar las últimas iteraciones de puntos de inicio aleatorios function ikeda ( u, opción ) P = 200 ; % cuántos puntos de inicio N = 1000 ; % cuántas iteraciones Nlimit = 20 ; % graficar estos últimos puntos para la opción 'limit' x = randn ( 1 , P ) * 10 ; % los puntos de inicio aleatorios y = randn ( 1 , P ) * 10 ; para n = 1 : P , X = compute_ikeda_trajectory ( u , x ( n ), y ( n ), N ); switch option case 'trajectory' % graficar las trayectorias de un montón de puntos plot_ikeda_trajectory ( X ); hold on ;caso 'límite' plot_limit ( X , Nlimit ); hold on ;de lo contrario disp ( 'No implementado' ); fin fineje ajustado ; eje igual texto ( - 25 , - 15 , [ 'u = ' num2str ( u )]); texto ( - 25 , - 18 , [ 'N = ' num2str ( N ​​) ' iteraciones' ]); fin% Graficar los últimos n puntos de la curva - para ver el punto final o el ciclo límite función plot_limit ( X, n ) plot ( X ( end - n : end , 1 ), X ( end - n : end , 2 ), 'ko' ); fin% Traza la trayectoria completa function plot_ikeda_trajectory ( X ) plot ( X (:, 1 ), X (:, 2 ), 'k' ); % hold on; plot(X(1,1), X(1,2), 'bo', 'markerfacecolor', 'g'); hold off end% u es el parámetro ikeda % x,y es el punto de partida % N es el número de iteraciones function [X] = compute_ikeda_trajectory ( u, x, y, N ) X = zeros ( N , 2 ); X ( 1 , :) = [ x y ]; for n = 2 : N t = 0.4 - 6 / ( 1 + x ^ 2 + y ^ 2 ); x1 = 1 + u * ( x * cos ( t ) - y * sin ( t )); y1 = u * ( x * sin ( t ) + y * cos ( t )); x = x1 ; y = y1 ;X ( n , :) = [ x y ]; fin fin

Código Python para trayectorias de puntos

importar matemáticasimport matplotlib.pyplot as plt import numpy as npdef main ( u : float , points = 200 , iterations = 1000 , nlim = 20 , limit = False , title = True ): """  Argumentos:  u:float  parámetro ikeda  points:int  número de puntos de inicio  iterations:int  número de iteraciones  nlim:int  grafica estos últimos puntos para la opción 'limit'. Graficará todos los puntos si se establece en cero  limit:bool  grafica las últimas iteraciones de puntos de inicio aleatorios si es True. De lo contrario, grafica trayectorias.  title:[str, NoneType]  muestra el nombre del gráfico si el valor es afirmativo  """x = 10 * np.random.randn ( puntos , 1 ) y = 10 * np.random.randn ( puntos , 1 )para n en rango ( puntos ): X = compute_ikeda_trajectory ( u , x [ n ][ 0 ], y [ n ][ 0 ], iteraciones )si límite : plot_limit ( X , nlim ) tx , ty = 2.5 , - 1.8else : plot_ikeda_trajectory ( X ) tx , ty = -30 , -26plt.title ( f " Mapa de Ikeda ( { u =: .2g } , { iteraciones =} )" ) if title else None return pltdef compute_ikeda_trajectory ( u : float , x : float , y : float , N : int ): """Calcula una trayectoria completa Argumentos:  u - es el parámetro de Ikeda  x, y - coordenadas del punto de partida  N - el número de iteraciones Devuelve:  Un array.  """ X = np . zeros (( N , 2 ))para n en rango ( N ): X [ n ] = np . array (( x , y ))t = 0,4 - 6 / ( 1 + x ** 2 + y ** 2 ) x1 = 1 + u * ( x * math . cos ( t ) - y * math . sin ( t )) y1 = u * ( x * math . sin ( t ) + y * math . cos ( t ))x = x1 y = y1devolver Xdef plot_limit ( X , n : int ) -> None : """  Grafica los últimos n puntos de la curva, para ver el punto final o el ciclo límite. Argumentos:  X: np.array  trayectoria de un punto de partida asociado  n: int  número de puntos "últimos" a graficar  """ plt . plot ( X [ - n :, 0 ], X [ - n :, 1 ], 'ko' )def plot_ikeda_trajectory ( X ) -> None : """  Traza toda la trayectoria Argumentos:  X: trayectoria np.array  de un punto de partida asociado  """ plt . plot ( X [:, 0 ], X [:, 1 ], "k" )if __name__ == "__main__" : main ( 0.9 , limit = True , nlim = 0 ) . show ()

Referencias

  1. Ikeda, Kensuke (1979). "Estado estacionario multivaluado y su inestabilidad de la luz transmitida por un sistema de cavidad anular". Optics Communications . 30 (2). Elsevier BV: 257– 261. Bibcode : 1979OptCo..30..257I . CiteSeerX 10.1.1.158.7964 . doi : 10.1016/0030-4018(79)90090-7 . ISSN 0030-4018 .  
  2. Ikeda, K.; Daido, H.; Akimoto, O. (1980-09-01). "Turbulencia óptica: comportamiento caótico de la luz transmitida desde una cavidad anular". Physical Review Letters . 45 (9). American Physical Society (APS): 709– 712. Bibcode : 1980PhRvL..45..709I . doi : 10.1103/physrevlett.45.709 . ISSN 0031-9007 .