Julia和Python蛛网图轨道图庞加莱截面曲面确定性非线性系统

23 篇文章 0 订阅
5 篇文章 0 订阅

🎯要点

  1. 🎯确定性混沌系统计算和视图:🖊庞加莱截面曲面,赫农-海尔斯系统和洛伦兹 63 系统。
  2. 🎯零斜线演示可激发系统计算和视图:🖊 庞加莱-本迪克松定理求解二维连续系统常微分方程 | 🖊绘制菲茨休-南云模型状态空间静态图 | 🖊绘制二阶准周期运动轨迹静态图和动画 | 🖊计算赫农-海尔斯系统三个特征轨迹的归一化功率谱。
  3. 🎯敏感依赖性计算和视图​:🖊模拟洛伦兹 63 系统敏感依赖性 | 🖊绘制三维收敛轨迹静态图和演变动画 | 🖊绘制最大李亚普诺夫指数为特征的相邻轨迹的指数散度 | 🖊无穷小二维离散系统轨迹的演化动画 | 🖊计算动态系统李亚普诺夫指数 | 🖊 绘制海尔斯离散系统中拉伸和折叠静态图和动画 | 🖊计算庞加莱截面曲面和李亚普诺夫指数,绘制赫农-海尔斯系统混沌度图。
  4. 🎯系统行为分叉静态视图和动画:🖊绘制一维能量平衡的交互式分叉静态图和动画 | 🖊一维离散系统动力学蛛网图可视化倍周期分岔 | 🖊计算和绘制逻辑图和罗斯勒系统的轨道图 | 🖊计算动态系统蛛网图中间歇性。
  5. 🎯概率描述确定性动态系统:🖊计算雷尼熵 | 🖊计算和绘制磁摆吸引力的分形边界 | 🖊计算分形维数估计 | 🖊计算无噪估计分形维数。
  6. 🎯延迟坐标嵌入非线性时间序列分析 | 🎯定向信息流 | 🎯动态台球 | 🎯周期性强制振荡器 | 🎯反应扩散系统和图灵模式

🍇Python动画洛伦兹系统轨迹图

洛伦兹方程是三个耦合的一阶非线性微分方程组,描述粒子随时间的轨迹。 该系统最初是由洛伦兹作为大气对流模型推导出来的,但方程看似简单,使其成为大气物理学以外领域中经常使用的示例。

这些方程通过指定时间导数,在给定控制参数 σ \sigma σ β \beta β ρ \rho ρ 的情况下描述空间变量 x x x y y y z z z 的演化空间变量:
d x / d t = σ ( y − x ) {\rm d}x/{\rm d}t = \sigma(y - x) dx/dt=σ(yx)

d y / d t = x ( ρ − z ) − y {\rm d}y/{\rm d}t = x(\rho - z) - y dy/dt=x(ρz)y

d z / d t = x y − β z {\rm d}z/{\rm d}t = xy - \beta z dz/dt=xyβz
给出起始点 ( x 0 , y 0 , z 0 ) (x_0, y_0, z_0) (x0,y0,z0) 和时间间隔 t t t 后,所得到的动态是完全确定性的。 虽然看起来很简单,但对于参数 ( σ , ρ , β ) (\sigma, \rho, \beta) (σ,ρ,β)​ 的某些选择,轨迹会变得混乱,并且所得轨迹显示出一些令人惊讶的特性。

尽管该系统不存在通用解析解,但可以通过数值方法计算解。 Python 使此类问题非常容易解决:只需使用 Scipy 的 ODEPACK 接口即可,ODEPACK 是一种用于求解常微分方程的优化 Fortran 包。 问题的设置方法如下:

import numpy as np
from scipy import integrate

def lorentz_deriv((x, y, z), t0, sigma=10., beta=8./3, rho=28.0):
    return [sigma * (y - x), x * (rho - z) - y, x * y - beta * z]

x0 = [1, 1, 1]  # starting vector
t = np.linspace(0, 3, 1000) 
x_t = integrate.odeint(lorentz_deriv, x0, t

现在我们已经计算了这些结果,我们可以使用 matplotlib 的动画和 3D 绘图工具包来可视化多个粒子的轨迹。

import numpy as np
from scipy import integrate

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import cnames
from matplotlib import animation

N_trajectories = 20

def lorentz_deriv((x, y, z), t0, sigma=10., beta=8./3, rho=28.0):
    return [sigma * (y - x), x * (rho - z) - y, x * y - beta * z]

np.random.seed(1)
x0 = -15 + 30 * np.random.random((N_trajectories, 3))

t = np.linspace(0, 4, 1000)
x_t = np.asarray([integrate.odeint(lorentz_deriv, x0i, t)
                  for x0i in x0])

fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1], projection='3d')
ax.axis('off')

colors = plt.cm.jet(np.linspace(0, 1, N_trajectories))

lines = sum([ax.plot([], [], [], '-', c=c)
             for c in colors], [])
pts = sum([ax.plot([], [], [], 'o', c=c)
           for c in colors], [])

def init():
    for line, pt in zip(lines, pts):
        line.set_data([], [])
        line.set_3d_properties([])

        pt.set_data([], [])
        pt.set_3d_properties([])
    return lines + pts

def animate(i):

    for line, pt, xi in zip(lines, pts, x_t):
        x, y, z = xi[:i].T
        line.set_data(x, y)
        line.set_3d_properties(z)

        pt.set_data(x[-1:], y[-1:])
        pt.set_3d_properties(z[-1:])

    ax.view_init(30, 0.3 * i)
    fig.canvas.draw()
    return lines + pts

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=500, interval=30, blit=True)

plt.show()

请注意,空间中有两个位置似乎吸引了所有路径:这些是所谓的“洛伦兹吸引子”,并且具有一些有趣的属性。 随着参数 ( σ , ρ , β ) (\sigma, \rho, \beta) (σ,ρ,β) 的变化,这些洛伦兹吸引子的定性特征会以有些令人惊讶的方式变化。

参阅一:计算思维

参阅二:亚图跨际

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值