Lorenz equation using Leapfrog method

31 views (last 30 days)
sagi maor
sagi maor on 17 Feb 2022
Answered: Ayush on 4 Jan 2024
Hi, i'm trying to right a code for the lorenz system with using the leapfrog method - centered differencing yet without success.
Any help would be appreciated

Answers (1)

Ayush
Ayush on 4 Jan 2024
Hi Sagi,
I understand that you want to write a code for the Lorenz system using the leapfrog method.
The Lorenz system can be defined as follows:
  • dx/dt = sigma * (y-x)
  • dy/dt = x * (rho-z) - y
  • dz/dt = x * y - beta * z
Where "sigma", "rho", and "beta" are the system parameters and "x","y", and "z" are the positions or states of the body. The leapfrog method, also known as the midpoint or centred difference method, is a second-order method used to solve differential equations. It uses the difference between future and past values to estimate the derivative at the current time.
To implement the leapfrog method for the Lorenz system, we need to update the positions and velocities in a staggered manner. However, the Lorenz system is a set of first-order ODEs, not second-order, so we don't have a direct analogy to "position" and "velocity". Instead, we'll use the leapfrog concept to update the state variables with a staggered approach.
Refer the below example code for better understanding:
lorenz_leapfrog
function lorenz_leapfrog
% System parameters
sigma = 10;
rho = 28;
beta = 8/3;
% Time settings
dt = 0.01; % time step
T = 40; % total time
N = floor(T/dt); % number of steps
% Initial conditions
x = 1; y = 1; z = 1;
% Preallocate arrays for performance
X = zeros(1, N); Y = zeros(1, N); Z = zeros(1, N);
% Initial values
X(1) = x; Y(1) = y; Z(1) = z;
% First step using Euler's method to bootstrap leapfrog
x_dot = sigma * (y - x);
y_dot = x * (rho - z) - y;
z_dot = x * y - beta * z;
x_half = x + x_dot * dt/2;
y_half = y + y_dot * dt/2;
z_half = z + z_dot * dt/2;
% Leapfrog integration
for i = 2:N
% Calculate the rates of change at the half step
x_dot = sigma * (y_half - x_half);
y_dot = x_half * (rho - z_half) - y_half;
z_dot = x_half * y_half - beta * z_half;
% Update the full step using the rates of change from the half step
x = X(i-1) + x_dot * dt;
y = Y(i-1) + y_dot * dt;
z = Z(i-1) + z_dot * dt;
% Update the half step for the next iteration
x_half = x_half + x_dot * dt;
y_half = y_half + y_dot * dt;
z_half = z_half + z_dot * dt;
% Store the full step
X(i) = x;
Y(i) = y;
Z(i) = z;
end
% Plot the results
plot3(X, Y, Z);
title('Lorenz System - Leapfrog Method');
xlabel('X');
ylabel('Y');
zlabel('Z');
grid on;
end
For more information on solving differential equations and Lorenz system you can refer below documentation links:
Regards,
Ayush

Categories

Find more on Numerical Integration and Differential Equations in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!