파이썬/Chat GPT

작업24: Chat GPT 사용해보기3 (로렌츠 방정식)

이석사 중 2023. 2. 12. 00:18
728x90

오늘도 Chat GPT를 사용해보겠습니다


저번 포스팅에서는 간단한 날씨 모델을 요구해서 정말 간단한 결과를 얻었습니다

 

그래서 오늘은 질문에서부터 복잡한 모델을 만들어 달라고 했습니다

 

- Make a more complex numerical model with Python and show me the code.

(Python으로 더 복잡한 수치 모델을 만들고 코드를 보여줘)

 

결과는 이렇게 나왔습니다

 

이 예에서, 우리는 방정식의 로렌츠 시스템을 정의하고 시간에 따른 시스템의 동작을 해결하기 위해 

싸이파이 라이브러리의 solve_ivp 함수를 사용한다. 

그런 다음 솔루션을 표시하여 변수 x, y 및 z가 시간에 따라 어떻게 변하는지 보여줍니다. 

로렌츠 시스템(Lorenz system)은 대기의 단순화된 모델의 행동을 설명하는 비선형 상미분 방정식의 

시스템으로, 혼돈의 행동을 생성하는 것으로 알려져 있다.

라고 설명을 해줍니다

 

코드를 실행해보기 전에 로렌츠 방정식이 어떤 식인지를 알아봐야겠죠?


로렌츠 방정식인 정말정말 간단하게 얘기해서 공기의 대류 현상에 관한 방정식입니다

 

대류는 따뜻한 공기는 상승하고 차가운 공기는 하강하는 현상을 말합니다

 

로렌츠라는 과학자는 이 현상에 대해 알고 싶었던 것입니다

 

여기서 로렌츠라고 하면 바로 같이 나오는 이론이 하나 있습니다

 

들어보셨을 수도 있는 이름인 카오스 이론입니다

 

카오스 이론도 정말 쉽게 말하면 결정적이지 않은 계나 시스템은 초기 상태에 매우 민감하고

 

일정한 시간이 흐른 후에는 둘이 시스템이라고 할 수 있을 정도로 차이가 생긴다는 이론입니다

 

카오스 이론을 설명드린 이유는 로렌츠 시스템 자체가 카오스 이론을 따르기 때문입니다

 

바로 로렌츠 방정식부터 볼까요?


dx/dt = σ(y - x)
dy/dt = x(ρ - z) - y
dz/dt = xy - βz

로렌츠 방정식은 이렇게 3줄 입니다

 

여기서 보면 x, y, z 빼고 3가지의 변수가 더 있습니다

 

σ = 프란틀 수, 유체의 점성도와 열전도도의 비율로 대기 자체 성질과 관련된 계수

ρ = 레일리 수,  유체 사이의 열 전달과 관련된 수, 가열되는 바닥과 상대적으로 차가운 위쪽의

온도차에 의해 결정

β = 비열 용량의 비율

(이 변수는 제대로 설명하는 곳이 많이 없었어요.. 어디서는 측정하는 차원의 가로 세로 비율이라고 하기도 하고 

되게 다양하더라구요 

저는 Chat GPT 결과를 보는거니까 Chat GPT가 설명하는대로 써놓겠습니다 정확하지 않을수도 있어요)

 

이렇게 정의가 됩니다

 

로렌츠의 연구에서는  σ = 10, β = 8/3로 두고, ρ를 변화시키며 계의 상태 변화를 살펴봤습니다

 

Chat GPT는 어떻게 했는 보겠습니다


import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

# Lorenz system equations
def lorenz_system(t, y, sigma, beta, rho):
    x, y, z = y
    return [sigma * (y - x), x * (rho - z) - y, x * y - beta * z]

# solve the Lorenz system using scipy's solve_ivp
sigma = 10
beta = 8 / 3
rho = 28
t_eval = np.linspace(0, 100, 10000)
y0 = [1, 1, 1]
sol = solve_ivp(lambda t, y: lorenz_system(t, y, sigma, beta, rho), [0, 100], y0, t_eval=t_eval, rtol=1e-8, atol=1e-8)

# plot the solutions
plt.figure(figsize=(10, 7))
plt.plot(sol.t, sol.y[0, :], label=r"$x(t)$")
plt.plot(sol.t, sol.y[1, :], label=r"$y(t)$")
plt.plot(sol.t, sol.y[2, :], label=r"$z(t)$")
plt.legend()
plt.xlabel("Time (t)")
plt.title("Lorenz System")
plt.show()

Chat GPT는 σ = 10, β = 8/3, ρ = 28로 두고 계산을 한 모습입니다

 

이 코드를 실행해보면

 

이렇게 그림이 만들어집니다

legend를 보면 x(t), y(t), z(t)가 있기 때문에 전부 따로 그려보겠습니다

차이점이나 공통점들이 보이시나요?

 

공통점들은 시간이 흐르고 얼마 되지 않은 극 초기 상태에서는 매우 불안정하다가

 

어느 순간부터 잠잠해지는 패턴이 보입니다

 

그러다가 대략 16초 정도부터는 패턴이 없는 이상한 형태로 계속 흘러갑니다

 

차이점이라고 한다면 y축의 값들이 저마다 다른것들이겠죠

 

이렇게 그림을 그려보면서 로렌츠 방정식이 카오스 이론을 따른다는 것이 무엇인지를 알아봤습니다


이번에는 x, y, z를 제외한 3가지 변수를 값을 줄일 때, 값을 키울 때 두가지 경우로 보겠습니다

 

이번 경우에는 값을 변화시키는 정도를 작게 하겠습니다

 

1 . σ = 8 , β = 2, ρ = 25

초기에 안정적인 상태더 더 길게 유지되는 모습니다

 

2 . σ = 12 , β = 3, ρ = 31

초기 안정적인 상태가 더 빨리 사라지고 y축을 보면 값의 변화가 훨씬 커진 모습입니다


이번 경우에는 값을 변화시키는 정도를 크게 하겠습니다

 

1 . σ = 2 , β = 1, ρ =10 

오히려 초기 상태가 활씬 불안정하다가 시간이 흐를수록 일정한 값으로 수렴하는 모습입니다

 

2 . σ = 30 , β = 8, ρ = 50

여기서는 좀 의외의 결과가 나왔습니다

 

위에 값을 줄였을때와 비슷한 결과가 나왔는데 다른 부분이 있다면

 

초기 상태에 너무 격렬한 변화가 일어나서 거의 면적에 가깝에 그림이 그려졌습니다

 

이 부분은 제가 로렌츠 방정식을 아직 이해하지 못해서 그런 것 같습니다

 

조금 더 공부해보고 결과를 도출해보겠습니다


이렇게 Chat GPT로 복잡한 로렌츠 방정식도 풀어봤습니다

 

다음 포스팅에서는 기상학적으로 어떻게 사용할 수 있을지 생각해보는 글을 써보겠습니다

 

긴 글 감사합니다!

728x90

'파이썬 > Chat GPT' 카테고리의 다른 글

작업23: Chat GPT 사용해보기2  (0) 2023.02.11
작업22: Chat GPT 사용해보기1  (0) 2023.02.08