Python 을 이용한 3D Lorenz 어트랙터 플롯

Beginner

This tutorial is from open-source community. Access the source code

소개

이 랩은 mplot3d 를 사용하여 Edward Lorenz 의 1963 년 "Deterministic Nonperiodic Flow"를 3 차원 공간에 플로팅하는 단계별 튜토리얼입니다. Python 과 Python 프로그래밍 언어용 플로팅 라이브러리인 Matplotlib 을 사용합니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접속하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

라이브러리 임포트

필요한 라이브러리인 Matplotlib 과 NumPy 를 임포트하는 것으로 시작합니다.

import matplotlib.pyplot as plt
import numpy as np

Lorenz 함수 정의

세 개의 매개변수를 받아 세 개의 값을 반환하는 Lorenz 함수를 정의합니다. Lorenz 매개변수에 대해 기본값 s=10, r=28, b=2.667을 사용합니다.

def lorenz(xyz, *, s=10, r=28, b=2.667):
    """
    Parameters
    ----------
    xyz : array-like, shape (3,)
       세 차원 공간의 관심 지점.
    s, r, b : float
       Lorenz 어트랙터 (attractor) 를 정의하는 매개변수.

    Returns
    -------
    xyz_dot : array, shape (3,)
       *xyz*에서 Lorenz 어트랙터의 편미분 값.
    """
    x, y, z = xyz
    x_dot = s*(y - x)
    y_dot = r*x - y - x*z
    z_dot = x*y - b*z
    return np.array([x_dot, y_dot, z_dot])

초기 매개변수 설정

시뮬레이션을 위한 초기 매개변수를 설정합니다. 여기에는 시간 간격 dt, 단계 수 num_steps, 그리고 x, y, z의 초기 값이 포함됩니다.

dt = 0.01
num_steps = 10000

xyzs = np.empty((num_steps + 1, 3))  ## Need one more for the initial values
xyzs[0] = (0., 1., 1.05)  ## Set initial values

Lorenz 어트랙터 계산

시간을 단계별로 진행하고 이전 지점과 Lorenz 함수를 사용하여 다음 지점을 추정하여 Lorenz 어트랙터를 계산합니다.

for i in range(num_steps):
    xyzs[i + 1] = xyzs[i] + lorenz(xyzs[i]) * dt

Lorenz 어트랙터 플롯

Matplotlib 의 mplot3d 모듈을 사용하여 Lorenz 어트랙터를 플롯합니다.

ax = plt.figure().add_subplot(projection='3d')

ax.plot(*xyzs.T, lw=0.5)
ax.set_xlabel("X Axis")
ax.set_ylabel("Y Axis")
ax.set_zlabel("Z Axis")
ax.set_title("Lorenz Attractor")

plt.show()

요약

이 튜토리얼에서는 Python 과 Matplotlib 을 사용하여 Lorenz 어트랙터를 플롯하는 방법을 배웠습니다. Lorenz 함수를 정의하고, 초기 매개변수를 설정하고, Lorenz 어트랙터를 계산하고, Matplotlib 의 mplot3d 모듈을 사용하여 이를 플롯했습니다.