crosslang/octive-lean/Sim_Lorenz.m
Maximus Gorog 6592cd058d Add 'octive-lean/' from commit '4b6fcec565a170d7029d4ccba21be2ecd0512d13'
git-subtree-dir: octive-lean
git-subtree-mainline: fd3d42ae33
git-subtree-split: 4b6fcec565
2026-05-12 02:59:14 -06:00

53 lines
1.2 KiB
Matlab

% Example 3: Lorenz system
% x' = -sigma*x + sigma*y
% y' = rho*x - y - x*z
% z' = -beta*z + x*y
% Slide uses sigma = 10, rho = 70, beta = 8/3, x0=y0=z0=1.
sigma = 10.0;
rho = 70.0;
beta = 8.0/3.0;
n = 5000;
t0 = 0; tf = 25.0;
h = (tf - t0) / n;
t = zeros(1, n+1);
xs = zeros(1, n+1);
ys = zeros(1, n+1);
zs = zeros(1, n+1);
xs(1) = 1.0;
ys(1) = 1.0;
zs(1) = 1.0;
for i = 1:n
ti = t(i); xi = xs(i); yi = ys(i); zi = zs(i);
k1x = -sigma*xi + sigma*yi;
k1y = rho*xi - yi - xi*zi;
k1z = -beta*zi + xi*yi;
ax = xi + h/2*k1x; ay = yi + h/2*k1y; az = zi + h/2*k1z;
k2x = -sigma*ax + sigma*ay;
k2y = rho*ax - ay - ax*az;
k2z = -beta*az + ax*ay;
ax = xi + h/2*k2x; ay = yi + h/2*k2y; az = zi + h/2*k2z;
k3x = -sigma*ax + sigma*ay;
k3y = rho*ax - ay - ax*az;
k3z = -beta*az + ax*ay;
ax = xi + h*k3x; ay = yi + h*k3y; az = zi + h*k3z;
k4x = -sigma*ax + sigma*ay;
k4y = rho*ax - ay - ax*az;
k4z = -beta*az + ax*ay;
t(i+1) = ti + h;
xs(i+1) = xi + h/6 * (k1x + 2*k2x + 2*k3x + k4x);
ys(i+1) = yi + h/6 * (k1y + 2*k2y + 2*k3y + k4y);
zs(i+1) = zi + h/6 * (k1z + 2*k2z + 2*k3z + k4z);
endfor
% Print every 10th sample
for i = 1:10:n+1
printf("%f,%f,%f,%f\n", t(i), xs(i), ys(i), zs(i));
endfor