Карта Икеды
![]() | Эта статья может быть слишком технической для понимания большинства читателей . ( июнь 2016 г. ) |

В физике и математике карта Икеды с дискретным временем, представляет собой динамическую систему заданную комплексным отображением.
Исходная карта была впервые предложена Кенсуке Икеда как модель света, проходящего через нелинейный оптический резонатор ( кольцевую полость , содержащую нелинейную диэлектрическую среду) в более общей форме. К указанной выше упрощенной «нормальной» форме он был сведен Икедой, Дайдо и Акимото. [1] [2] обозначает электрическое поле внутри резонатора на n-м шаге вращения резонатора, а и — это параметры, которые указывают лазерный свет, подаваемый снаружи, и линейную фазу через резонатор соответственно. В частности, параметр называется параметром диссипации, характеризующим потери резонатора, а в пределе карта Икеда становится консервативной картой.
Исходная карта Икеды часто используется в другой модифицированной форме, чтобы учесть эффект насыщения нелинейной диэлектрической среды:
Реальный 2D-пример приведенной выше формы:
Для , эта система имеет хаотический аттрактор .
Аттрактор [ править ]
Эта анимация показывает, как аттрактор системы меняется при изменении параметра варьируется от 0,0 до 1,0 с шагом 0,01. Динамическая система Икеда моделируется для 500 шагов, начиная с 20 000 случайно расположенных начальных точек. Последние 20 точек каждой траектории изображают аттрактор . Обратите внимание на раздвоение точек аттрактора как увеличивается.
![]() |
![]() |
![]() |
![]() |
Траектории точек [ править ]
На графиках ниже показаны траектории 200 случайных точек для различных значений . На вставке слева показана оценка аттрактора , а на вставке справа показан увеличенный график основной траектории.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Код Octave/MATLAB для точечных траекторий [ править ]
Код Octave/MATLAB для создания этих графиков приведен ниже:
% u = ikeda parameter
% option = what to plot
% 'trajectory' - plot trajectory of random starting points
% 'limit' - plot the last few iterations of random starting points
function ikeda(u, option)
P = 200; % how many starting points
N = 1000; % how many iterations
Nlimit = 20; % plot these many last points for 'limit' option
x = randn(1, P) * 10; % the random starting points
y = randn(1, P) * 10;
for n = 1:P,
X = compute_ikeda_trajectory(u, x(n), y(n), N);
switch option
case 'trajectory' % plot the trajectories of a bunch of points
plot_ikeda_trajectory(X); hold on;
case 'limit'
plot_limit(X, Nlimit); hold on;
otherwise
disp('Not implemented');
end
end
axis tight; axis equal
text(- 25, - 15, ['u = ' num2str(u)]);
text(- 25, - 18, ['N = ' num2str(N) ' iterations']);
end
% Plot the last n points of the curve - to see end point or limit cycle
function plot_limit(X, n)
plot(X(end - n:end, 1), X(end - n:end, 2), 'ko');
end
% Plot the whole trajectory
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 is the ikeda parameter
% x,y is the starting point
% N is the number of iterations
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];
end
end
Код Python для точечных траекторий [ править ]
import math
import matplotlib.pyplot as plt
import numpy as np
def main(u: float, points=200, iterations=1000, nlim=20, limit=False, title=True):
"""
Args:
u:float
ikeda parameter
points:int
number of starting points
iterations:int
number of iterations
nlim:int
plot these many last points for 'limit' option. Will plot all points if set to zero
limit:bool
plot the last few iterations of random starting points if True. Else Plot trajectories.
title:[str, NoneType]
display the name of the plot if the value is affirmative
"""
x = 10 * np.random.randn(points, 1)
y = 10 * np.random.randn(points, 1)
for n in range(points):
X = compute_ikeda_trajectory(u, x[n][0], y[n][0], iterations)
if limit:
plot_limit(X, nlim)
tx, ty = 2.5, -1.8
else:
plot_ikeda_trajectory(X)
tx, ty = -30, -26
plt.title(f"Ikeda Map ({u=:.2g}, {iterations=})") if title else None
return plt
def compute_ikeda_trajectory(u: float, x: float, y: float, N: int):
"""Calculate a full trajectory
Args:
u - is the ikeda parameter
x, y - coordinates of the starting point
N - the number of iterations
Returns:
An array.
"""
X = np.zeros((N, 2))
for n in range(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 = y1
return X
def plot_limit(X, n: int) -> None:
"""
Plot the last n points of the curve - to see end point or limit cycle
Args:
X: np.array
trajectory of an associated starting-point
n: int
number of "last" points to plot
"""
plt.plot(X[-n:, 0], X[-n:, 1], 'ko')
def plot_ikeda_trajectory(X) -> None:
"""
Plot the whole trajectory
Args:
X: np.array
trajectory of an associated starting-point
"""
plt.plot(X[:,0], X[:, 1], "k")
if __name__ == "__main__":
main(0.9, limit=True, nlim=0).show()
Ссылки [ править ]
- ^ Икеда, Кенсуке (1979). «Многозначное стационарное состояние и его неустойчивость в проходящем свете системой кольцевых резонаторов». Оптические коммуникации . 30 (2). Эльзевир Б.В.: 257–261. Бибкод : 1979OptCo..30..257I . CiteSeerX 10.1.1.158.7964 . дои : 10.1016/0030-4018(79)90090-7 . ISSN 0030-4018 .
- ^ Икеда, К.; Дайдо, Х.; Акимото, О. (1 сентября 1980 г.). «Оптическая турбулентность: хаотическое поведение прошедшего света из кольцевой полости». Письма о физических отзывах . 45 (9). Американское физическое общество (APS): 709–712. Бибкод : 1980PhRvL..45..709I . дои : 10.1103/physrevlett.45.709 . ISSN 0031-9007 .