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
  • $\begingroup$ 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). $\endgroup$
    – Wrzlprmft
    Commented Feb 17 at 9:32
  • 3
    $\begingroup$ 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. $\endgroup$ Commented Feb 17 at 9:51

1 Answer 1


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$.

This derivation was adapted from the following paper, where it was used to construct a signal masking system between two Lorenz circuits.

Cuomo, Kevin M.; Oppenheim, Alan V.; Strogatz, Steven H., Synchronization of Lorenz-based chaotic circuits with applications to communications, IEEE Transactions on circuits and systems II: Analog and digital signal processing 40, No. 10, 626-633 (1993).

  • $\begingroup$ Thanks for answering. I don't understand where is the coupling term in the equation and how are you coupling the two Lorenz systems? $\endgroup$
    – Sm1
    Commented Mar 28 at 6:02
  • $\begingroup$ 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$. $\endgroup$
    – whpowell96
    Commented Mar 28 at 14:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.