Python系统仿真其三:洛伦兹系统仿真展示

本文介绍了如何使用Python的scipy库中的odeint函数来模拟经典的Lorenz系统,通过3个微分方程展示混沌行为,并展示了吸引子的图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



一、Lorenz系统

参考我之前的文章MATLAB混沌系统仿真其一:Lorenz系统和Rossler系统。Lorenz系统包含3个微分方程。Lorenz在1963年证明了这个系统中存在混沌(Lorenz认为由三变量非线性耦合微分方程描述的系统都能产生chaos,1975)。变量X、Y、Z分别表示循环流体的流速、上升和下降流体的温差和垂直温度剖面的畸变。其微分形式如下:
d x = − σ ( x − y ) dx\mathrm{=}-\sigma\left(x-y\right) dx=σ(xy) d y = r x − y − x z dy\mathrm{=}rx-y-xz dy=rxyxz d z = − β   z + x y dz\mathrm{=}-\beta\ z+xy dz=β z+xy其中控制参数 σ = 10 \sigma\mathrm{=}10 σ=10 r = 28 r\mathrm{=}28 r=28 β = 8 / 3 \beta\mathrm{=}8/3 β=8/3时也叫经典Lorenz系统,本次展示也是用这些参数。有关吸收于和李指数的部分可阅读MATLAB混沌系统仿真其一:Lorenz系统和Rossler系统

二、代码和仿真

与MATLAB的ode函数类似,Python提供响应的求解函数,是scipy库内的odeint,用法也跟MATLAB相差不大。首先需要定义一个函数,y0传入上一个 x 、 y 和 z x、y和z xyz的值, t t t没有使用, p a r a para para用于传入三个控制参数,此处使用默认参数形式,可以不需要在odeint函数中使用args。

def Lorenz(y0, t, para=[10,28,8/3]):
    # 设置默认参数可以不使用odeint的args参数
    p, r, b = para
    x, y, z = y0
    dx = -p*(x-y)
    dy = r*x-y-x*z
    dz = -b*z+x*y
    return np.array([dx,dy,dz])

函数的调用和绘图也是怎么简单怎么来,甚至可以一行代码解决:

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

t = np.arange(0, 50, 0.01)
y0 = [1,0,-1]
sol = odeint(Lorenz, y0, t)
# sol = odeint(Lorenz,y0,t,args=([10,28,8/3],)) # 定义函数时不使用默认参数则需要使用这个方法传参

plt.figure()
plt.axes(projection='3d')
plt.plot(sol[:, 0], sol[:, 1], sol[:, 2])

plt.figure(2)
plt.plot(t,sol)
plt.legend(['x','y','z'])
plt.xlabel('time')
plt.title('Lorenz')
plt.show()

仿真的三个变量的波形图如下:
Lorenz系统仿真
系统的吸引子图形,为了好看,这里同样也绘制成了动图。
Lorenz吸引子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捡到野生的惠惠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值