Plot a Lorenz Attractor#

Integrate the Lorenz system and render the trajectory as a colored tube built from pyvista.lines_from_points().

import numpy as np
import pyvista as pv

Integrate the Lorenz system#

A forward-Euler scheme is enough to trace the chaotic trajectory.

sigma = 10.0
rho = 28.0
beta = 8.0 / 3.0
dt = 0.01
n_steps = 8000

points = np.empty((n_steps + 1, 3))
points[0] = (0.0, 1.0, 1.05)

for i in range(n_steps):
    x, y, z = points[i]
    points[i + 1] = (
        x + sigma * (y - x) * dt,
        y + (x * (rho - z) - y) * dt,
        z + (x * y - beta * z) * dt,
    )

trajectory = pv.lines_from_points(points)
trajectory['z'] = points[:, 2]

Render the attractor#

Tube the polyline so the trajectory has visible thickness in 3D.

pl = pv.Plotter()
pl.add_mesh(trajectory.tube(radius=0.12), scalars='z', cmap='plasma')
pl.show()
lorenz attractor

Inspect the path length#

The integrated trajectory accumulates several hundred units of arc length.

85.4544632945362

Tags: plot

Total running time of the script: (0 minutes 2.527 seconds)

Gallery generated by Sphinx-Gallery