You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pylab的streamplot函数绘制单摆运动相平面?

如何用streamplot绘制单摆运动的相平面?

嘿,我来帮你搞定这个单摆相平面的绘制!首先得明确:streamplot是用来可视化一阶自治微分方程组的,而你的单摆方程是二阶的,所以第一步要把它拆成两个一阶方程,就像你之前处理捕食者-猎物模型那样。

步骤1:把二阶方程转化为一阶方程组

单摆的运动方程是:

d²θ/dt² = (-g/L)sin(θ)

我们引入状态变量:

  • 令θ为第一个变量(摆角)
  • 令ω = dθ/dt(角速度)作为第二个变量

这样就能把二阶方程拆成两个一阶方程:

  • dθ/dt = ω
  • dω/dt = - (g/L) sinθ

为了简化计算,我们可以取g/L = 1(相当于把时间尺度归一化),这样方程更简洁,不影响相图的形状。

步骤2:编写pylab代码

直接套用你熟悉的streamplot逻辑,代码如下:

from pylab import *

# 设置参数:这里取g/L=1简化计算
g_over_L = 1

# 生成相平面的网格:θ范围覆盖-2π到2π,ω范围覆盖-3到3
theta_values, omega_values = meshgrid(arange(-2*pi, 2*pi, 0.1), arange(-3, 3, 0.1))

# 计算两个一阶方程的右端项
dtheta_dt = omega_values
domega_dt = -g_over_L * sin(theta_values)

# 绘制相平面流场
streamplot(theta_values, omega_values, dtheta_dt, domega_dt)

# 添加标签和标题,让图更清晰
xlabel('摆角 θ')
ylabel('角速度 ω')
title('单摆运动的相平面')

# 显示图像
show()

代码解释

  • 我们扩展了θ的范围到[-2π, 2π],这样能看到摆角绕整圈的运动情况;ω的范围[-3,3]能覆盖大部分常见的角速度值。
  • dtheta_dt直接等于ω,这是我们定义的一阶方程;domega_dt则是根据单摆方程计算的角速度变化率。
  • 最后加上标签和标题,让相图的物理意义更明确。

运行这段代码后,你会看到:小振幅的运动对应相平面上的椭圆(简谐近似的结果),而大振幅的运动则是开放的曲线(摆角超过π,摆锤绕圈的情况),完全符合单摆的物理特性!

内容的提问来源于stack exchange,提问作者skrooms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:22:44