十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

3分钟跑通洛伦兹吸引子:Python + Manim 混沌系统可视化指南

3分钟跑通洛伦兹吸引子:Python + Manim 混沌系统可视化指南 3分钟跑通洛伦兹吸引子Python Manim 混沌系统可视化指南【免费下载链接】videosCode for the manim-generated scenes used in 3blue1brown videos项目地址: https://gitcode.com/GitHub_Trending/vi/videos两个从仅相差 0.00001 的起点出发的点30 秒后落在完全不相干的位置但每一步都由固定方程决定。在 3Blue1Brown 动画源码库GitHub 推荐项目 vi/videos里跑一条命令洛伦兹吸引子一组方程把轨迹卷成的形状就转起来这是混沌系统可视化最直接的形态核心代码只有几十行。三步跑通装依赖、拉仓库、一条命令出画面场景代码在 _2024/manim_demo/lorenz.py需要三样东西3b1b 版 Manim命令行工具叫manimgl社区版装出来跑不了这个场景、SciPy、以及渲染 LaTeX 公式的 texlive。pip install numpy scipy # manimgl 按 3b1b 官方说明从源码安装Ubuntu 再装 # sudo apt install texlive texlive-latex-extra git clone https://gitcode.com/GitHub_Trending/vi/videos cd videos manimgl _2024/manim_demo/lorenz.py LorenzAttractor -p这段先装依赖、拉仓库最后一条命令直接渲染并预览场景嫌慢就先加-ql用低分辨率试跑。看图说话洛伦兹吸引子为什么是两片翅膀动画里黑色背景上立着 3D 坐标轴左上角写着三个微分方程x、y、z 分别染成红、绿、蓝。十条深浅不同的蓝色曲线从同一位置出发每条后面跟一个发光小点摄像机绕着缓缓转圈。曲线整体卷成两片镜像对称的翅膀轨迹在左右两翼之间不断切换30 秒内不重复经过同一个位置。这个形状不是画出来的是方程自己卷出来的。模型描述热空气对流z 表示上下温差高度x、y 是水平流速。轨迹停在某一翼时热气流会把它推向另一侧而何时推、推多重取决于状态里极细微的差别。吸引子轨迹最终被卷入、反复绕行的那片区域恰好是两翼并排的结构所以只能左右横跳。十条线一开始重叠、随后逐条分开是因为起点在 z 方向只差了 1e-5——系统把这个差别指数级放大最后各落在不同翅膀上。这就是蝴蝶效应的完整机制。原理拆解洛伦兹方程 一次数值积分整个文件的核心只有两个函数。第一个定义洛伦兹方程组——一组非线性微分方程变化率由当前位置算出解不出封闭公式只能逐步推进def lorenz_system(t, state, sigma10, rho28, beta8/3): x, y, z state return [sigma*(y-x), x*(rho-z)-y, x*y-beta*z] def ode_solution_points(function, state0, time, dt0.01): sol solve_ivp(function, (0, time), y0state0, t_evalnp.arange(0, time, dt)) return sol.y.T # (n_points, 3) 轨迹点第一个函数给出任意状态点的三个变化率σ(y−x) 让 x、y 速度差互相混匀x(ρ−z)−y 让高度 z 调制放大强度xy−βz 是耗散。第二个函数把方程交给solve_ivp做数值积分反复计算下一时刻在哪每 0.01 秒记一个点拼成轨迹返回的数组直接就是可绘制的点云。三个参数各管一摊σ10 是混合比例β8/3 是耗散强度ρ28 是对流强度——低于约 24.7 时系统收敛到静止点升到 28 进入经典混沌区。场景真正的主角在初始条件这一行epsilon 1e-5 states [[10, 10, 10 n*epsilon] for n in range(10)]沿 z 方向以 0.00001 的间隔取 10 个起点后面的动画就是求解这 10 条轨迹再用ThreeDAxes.c2p把数据坐标映射到屏幕、set_points_smoothly连成光滑曲线。动手实验改三个地方看混沌轨迹分岔把 epsilon 改成 0十条轨迹完全重合为一条证明分岔确实来自初始条件而不是求解器引入的随机性。把 rho 从 28 改成 16.8翅膀消失轨迹螺旋收敛到一个固定点再调大到 99还是那个吸引子但换翼明显更剧烈。同一个方程组改一个数就换了一种状态。换另一个混沌系统用 Rössler 方程替换lorenz_systemdx/dt−y−zdy/dtxa·ydz/dtbz·(x−c)取 a0.2、b0.2、c5.7。你会看到一条平面盘旋很久、再猛地一翻的过山车轨道——形状变了对初值敏感的脾气没变。延伸方向把同一套绘制管线用到别的系统算出差别的放大速度每帧记录相邻两点的距离画 ln(距离) 对时间的折线斜率就是李雅普诺夫指数的近似这是衡量混沌强度的标准量。复用solve_ivpc2pset_points_smoothly这条 3D 轨迹管线换掉方程函数就能画天体轨道、捕食者-猎物模型等任何 ODE 系统的相图。仓库里同门的例子_2018/turbulence.py 做流场与湍流的可视化_2015/ka_playgrounds/fluid_flow.py 演示对流类流场的演化都和本文的例子同源。【免费下载链接】videosCode for the manim-generated scenes used in 3blue1brown videos项目地址: https://gitcode.com/GitHub_Trending/vi/videos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表