Sophie

Sophie

distrib > Mandriva > 2010.2 > i586 > media > contrib-backports > by-pkgid > a44f8c7e78ee9c5838c1fb080c9e7630 > files > 1190

python-matplotlib-doc-1.1.1-1mdv2010.1.noarch.rpm

.. _mplot3d-lorenz_attractor:

mplot3d example code: lorenz_attractor.py
=========================================



.. plot:: /home/mandrake/rpm/BUILD/matplotlib-1.1.1/doc/mpl_examples/mplot3d/lorenz_attractor.py

::

    # Plot of the Lorenz Attractor based on Edward Lorenz's 1963 "Deterministic
    # Nonperiodic Flow" publication.
    # http://journals.ametsoc.org/doi/abs/10.1175/1520-0469%281963%29020%3C0130%3ADNF%3E2.0.CO%3B2
    #
    # Note: Because this is a simple non-linear ODE, it would be more easily
    #       done using SciPy's ode solver, but this approach depends only
    #       upon NumPy.
    
    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    
    def lorenz(x, y, z, s=10, r=28, b=2.667) :
        x_dot = s*(y - x)
        y_dot = r*x - y - x*z
        z_dot = x*y - b*z
        return x_dot, y_dot, z_dot
    
    
    dt = 0.01
    stepCnt = 10000
    
    # Need one more for the initial values
    xs = np.empty((stepCnt + 1,))
    ys = np.empty((stepCnt + 1,))
    zs = np.empty((stepCnt + 1,))
    
    # Setting initial values
    xs[0], ys[0], zs[0] = (0., 1., 1.05)
    
    # Stepping through "time".
    for i in xrange(stepCnt) :
        # Derivatives of the X, Y, Z state
        x_dot, y_dot, z_dot = lorenz(xs[i], ys[i], zs[i])
        xs[i + 1] = xs[i] + (x_dot * dt)
        ys[i + 1] = ys[i] + (y_dot * dt)
        zs[i + 1] = zs[i] + (z_dot * dt)
    
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    
    ax.plot(xs, ys, zs)
    ax.set_xlabel("X Axis")
    ax.set_ylabel("Y Axis")
    ax.set_zlabel("Z Axis")
    
    plt.show()
    
    

Keywords: python, matplotlib, pylab, example, codex (see :ref:`how-to-search-examples`)