# Educational Purpose: How to synchronize chaotic systems

The graph plots the X coordinate of the synchronized Lorenz chaotic system. I am self learning by reading research articles on how to synchronize identical chaotic systems. But as seen from the figure, synchronization does not happen. I used two Lorenz systems with slightly different initial conditions and played around with the coupling strength. The output of one chaotic system lorenz_system_sync1 is used as input to the second Lorenz system with a coupling strength of epsilon = 10 across all the variables.

Can somebody please tell me where I am going wrong and what is the proper implementation?

clear all close all

sigma = 10; rho = 28; beta = 8/3; epsilon = 10; % Coupling strength

% Initial conditions for both systems initial_state1 = [1; 1; 20]; initial_state2 = [1.1; 1.1; 20.1]; % Slightly perturbed initial condition for synchronization

% Define Lorenz system dynamics for the first system lorenz_system1 = @(t, Y) [
sigma * (Y(2) - Y(1));
Y(1) * (rho - Y(3)) - Y(2);
Y(1) * Y(2) - beta * Y(3) ];

% Define Lorenz system dynamics for the second system lorenz_system2 = @(t, Y) [
sigma * (Y(2) - Y(1));
Y(1) * (rho - Y(3)) - Y(2);
Y(1) * Y(2) - beta * Y(3) ];

% Extended tspan to include warm-up period tspan = linspace(0, 100, 50000); % Use linspace for finer resolution

% Solve the differential equations for both systems [t, Ydata1] = ode45(lorenz_system1, tspan, initial_state1); [t, Ydata2] = ode45(lorenz_system2, tspan, initial_state2);

% Define Lorenz system dynamics for synchronization
lorenz_system_sync1 = @(t, Y, Y2) [
sigma * (Y(2) - Y(1))  ;
Y(1) * (rho - Y(3)) - Y(2) ;
Y(1) * Y(2) - beta * Y(3) ];

lorenz_system_sync2 = @(t, Y, Y1) [
sigma * (Y(2) - Y(1)) + epsilon * (Y1(1) - Y(1));
Y(1) * (rho - Y(3)) - Y(2) + epsilon * (Y1(2) - Y(2));
Y(1) * Y(2) - beta * Y(3) + epsilon * (Y1(3) - Y(3)) ];

% Time point for synchronization specified by the user
sync_time = 90; % Adjusted synchronization time

% Indices corresponding to sync_time in tspan
sync_index = find(t >= sync_time, 1);

% Perform synchronization from sync_time onwards
[t_sync1, Ydata_sync1] = ode45(@(t, Y) lorenz_system1(t, Y), t(sync_index:end),
Ydata1(sync_index, :)');
[t_sync2, Ydata_sync2] = ode45(@(t, Y) lorenz_system2(t, Y), t(sync_index:end),
Ydata2(sync_index, :)');

% Concatenate synchronized trajectories with the unsynchronized ones
Ydata_sync1 = [Ydata1(1:sync_index-1, :); Ydata_sync1]; Ydata_sync2 =
[Ydata2(1:sync_index-1, :); Ydata_sync2];

% Plot synchronized X trajectories with synchronization time indicated
figure; plot(1000:numel(Ydata_sync1(:, 1)), Ydata_sync1(1000:end, 1), 'b'); hold on;
plot(1000:numel(Ydata_sync2(:, 1)), Ydata_sync2(1000:end, 1), 'r'); xlabel('Time');
ylabel('X Coordinate'); title('Synchronized X Trajectories'); legend('System 1',
'System 2'); line([sync_time, sync_time], ylim, 'Color', 'c', 'LineStyle', '--'); %
Vertical line for synchronization time

• Please do not cross-post questions. It’s wasting the time of those who take the time to edit and answer your questions, as people may be doing the same thing twice. This is also no way to find out, where your question is on-topic (which I also have no good recommendation, since your question and code are rather chaotic). Commented Feb 17 at 9:32
• Do you have examples where such a strategy works? With a harmonic or vander Pol oscillator you have a stable target, but with (uncontrolled) Lorenz you know that any (small, positive) distance between states quickly evolves to have the maximally possible amplitude. So weak nudging will not work, and even strong forcing will only drag the controlled solution along, never to converge completely to the controlling solution. Commented Feb 17 at 9:51

The exact manner in which you couple the systems seems to be the issue here. This can be done for the Lorenz system. Consider the coupled Lorenz systems given by \begin{aligned} \dot{x}_1 &= \sigma(y_1-x_1) \\ \dot{y}_1 &= x_1(\rho-z_1) - y_1 \\ \dot{z}_1 &= x_1y_1 - \beta z_1 \\ \\ \dot{x}_2 &= \sigma(y_2-x_2) \\ \dot{y}_2 &= x_1(\rho-z_2) - y_2 \\ \dot{z}_2 &= x_1y_2 - \beta z_2. \\ \end{aligned} Now denote the separation between the two systems $$e_x = x_1 - x_2$$ with $$e_y$$ and $$e_z$$ defined similarly. We then have \begin{aligned} \dot{e}_x &= \sigma(e_y - e_x) \\ \dot{e}_y &= -e_y - x_1e_z \\ \dot{e}_z &= x_1e_y - \beta e_z. \end{aligned} If we can show that this system goes to zero as $$t\to\infty$$, then the systems are synchronized. To show this, consider the Lyapunov function $$V(e) = \frac{1}{2}\left(\frac{1}{\sigma}e_x^2 + e_y^2 + e_z^2\right)$$. We then have \begin{aligned} \dot{V}(e) &= \frac{1}{\sigma}e_x\dot{e}_x + e_y\dot{e}_y + e_z\dot{e}_z \\ &= e_xe_y - e_x^2 - e_y^2 - x_1e_ye_z + x_1e_ye_z - \beta e_z^2 \\ &= -\left(e_x + \frac{1}{2}e_y\right)^2 - \frac{3}{4}e_y^2 - \beta e_z^2 < 0 \iff e_x,e_y,e_z\neq0. \end{aligned} Therefore, the origin is an asymptotically stable fixed point of the system for $$e$$, which implies that the two coupled Lorenz system synchronize asymptitically as $$t\to\infty$$.
• The $x$-component from the first system is being fed into the $\dot{y}$ equation of the second system. This particular coupling makes the systems sync as $t\to\infty$. Commented Mar 28 at 14:38