当前位置: 首页 > news >正文

使用Python制作Lorenz吸引子的轨道生成视频

在前面一篇文章中,使用Pyhon绘制了Lorenz吸引子的简单图像。通过绘制Lorenz方程的三维轨迹,可以直观展示吸引子的混沌结构。这是最经典的成像方法,使用数值积分求解微分方程后,通过三维绘图库(如Matplotlib)生成图像。

这次,我们实现绘制轨道生成的动态视频。

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.animation import FuncAnimation# 定义Lorenz方程组
def lorenz_system(state, t, sigma, rho, beta):x, y, z = statedxdt = sigma * (y - x)dydt = x * (rho - z) - ydzdt = x * y - beta * zreturn [dxdt, dydt, dzdt]# 参数设置
sigma, rho, beta = 10, 28, 8/3
t = np.arange(0, 30, 0.02)  # 增大时间步长以减少总帧数(原0.01改为0.02)
initial_state = [0.0, 1.0, 0.0]# 求解微分方程
trajectory = odeint(lorenz_system, initial_state, t, args=(sigma, rho, beta))# 动态轨迹生成设置
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
line, = ax.plot([], [], [], lw=0.5, color='blue')# 动态设置坐标轴范围(避免轨迹超出视野)
x_min, x_max = np.min(trajectory[:,0]), np.max(trajectory[:,0])
y_min, y_max = np.min(trajectory[:,1]), np.max(trajectory[:,1])
z_min, z_max = np.min(trajectory[:,2]), np.max(trajectory[:,2])def init():ax.set_xlim(x_min, x_max)ax.set_ylim(y_min, y_max)ax.set_zlim(z_min, z_max)return line,def update(frame):line.set_data(trajectory[:frame,0], trajectory[:frame,1])line.set_3d_properties(trajectory[:frame,2])return line# 调整参数:总帧数=1500(原3000),间隔=20ms,禁用blit(避免3D渲染问题)
ani = FuncAnimation(fig,update,frames=range(0, len(t), 2),  # 步长=2,跳过一半帧数init_func=init,blit=False,  # 3D绘图建议关闭blitinterval=20
)# 保存视频(需安装FFmpeg)
try:ani.save("lorenz_attractor.mp4", writer="ffmpeg", fps=30)
except Exception as e:print(f"视频保存失败: {e}")# 显示动态窗口
plt.show()

相关文章:

  • 《云端共生体:Flutter与AR Cloud如何改写社交交互规则》
  • 数字电子技术基础(六十)——使用Digital软件绘制脉冲触发的触发器
  • C++:static成员
  • 你引入的lodash充分利用了吗?
  • 封装、继承、多态的理解
  • 基于区块链技术的供应链溯源系统:重塑信任与透明度
  • 改进模糊C均值时序聚类+编码器状态识别!IPOA-FCM-Transformer组合模型
  • ESMFold在线预测蛋白质结构
  • ShenNiusModularity项目源码学习(26:ShenNius.Admin.Mvc项目分析-11)
  • 设备预测性维护的停机时间革命:中讯烛龙如何用AI重构工业设备管理范式
  • Linux518 YUM源仓库回顾(需查)ssh 服务配置回顾 特定任务配置回顾
  • 【驱动开发】一 字符设备驱动框架
  • tensorflow图像分类预测
  • IDEA - Windows IDEA 代码块展开与折叠(基础折叠操作、高级折叠操作)
  • 渗透测试流程-中篇
  • 5、事务和limit补充
  • Linux的内存泄漏问题及排查方法
  • 【通用智能体】Playwright:跨浏览器自动化工具
  • C++学习:六个月从基础到就业——C++20:协程(Coroutines)
  • 【Linux】ELF与动静态库的“暗黑兵法”:程序是如何跑起来的?
  • 浙江理工大学传播系原系主任刘曦逝世,年仅44岁
  • 广州医药集团有限公司原党委书记、董事长李楚源被“双开”
  • 贞丰古城:新垣旧梦间的商脉与烟火
  • 遭车祸罹难的村医遇“身份”难题:镇卫生院否认劳动关系,家属上诉后二审将开庭
  • 澎湃与七猫联合启动百万奖金征文,赋能非虚构与现实题材创作
  • 昔日千亿房企祥生集团约2.03亿元债权被拍卖,起拍价8000万元