Julia求解单摆问题
文章目录
- 单摆问题
- julia求解
- 相空间
单摆问题
单摆问题可表示为
θ ¨ + g L sin θ = 0 \ddot{\theta} + \frac{g}{L}{\sin\theta} = 0 θ¨+Lgsinθ=0
其中, g g g是重力加速度; L L L是摆长; θ \theta θ是摆动角度,这个方程是没有解析解的。
当角度比较小时,有 sin ( θ ) ≈ θ \sin(\theta) \approx \theta sin(θ)≈θ,则钟摆问题可简化为线性形式
θ ¨ + g L θ = 0 \ddot{\theta} + \frac{g}{L}{\theta} = 0 θ¨+Lgθ=0
当角度较大时,可通过数值求解。首先,将其拆分成一阶的微分方程组
θ ˙ = ω ω ˙ = − g L sin θ \begin{aligned} &\dot{\theta} = \omega \\ &\dot{\omega} = - \frac{g}{L}{\sin\theta} \end{aligned} θ˙=ωω˙=−Lgsinθ
julia求解
using OrdinaryDiffEq, Plots
plotlyjs()const g = 9.81 #g是常量
L = 1.0u₀ = [0,π/2]
tspan = (0.0,6.0)#定义问题
function simplependulum(du,u,t)θ = u[1]ω = u[2] #\omega + tab = ωdu[1] = ωdu[2] = -(g/L)*sin(θ)
endprob = ODEProblem(simplependulum, u₀, tspan)
sol = solve(prob,Tsit5())# plotlyjs绘图面板中有个相机的图标,点击可保存图片
plot!(sol, title ="钟摆问题", xaxis = "时间", label = ["θ" "ω"])
结果如图所示

其中Tsit5是一阶非线性微分方程组的求解器,之前在求解衰减曲线时曾经用过,但并未做出说明。Tsit5是SciML优先推荐的求解器,是5阶Tsitouras方法,是一种经过改进的龙格库塔法。
相空间
在物理学中,除了建立物理量随时间的变化关系之外,有时还需要建立物理量之间的关系,尤其是速度与坐标的关系,二者构成了系统可能存在的所有状态,俗称相空间。
在三维空间中,速度和动量分别有三个方向,所以三维空间中的相空间一般有6个维度。但对于摆动问题来说,可以将速度和位置简化至一维,所以相空间有两个维度。
由于我们的绘图空间也有两个维度,所以只能画线,也就是说,只能从相空间中抽出一些线来绘制。
p = plot(sol,vars = (1,2), xlims = (-15,15), title = "相空间", xaxis = "速度", yaxis = "位置", leg=false)
# 用于绘图的函数
function phase_plot(func, u0, p)prob = ODEProblem(func,u0,(0.0,2pi))sol = solve(prob,Vern9()) # Vern9精度更高plot!(p,sol,vars = (1,2))
end
for i in -4pi:pi/2:4πfor j in -4pi:pi/2:4πphase_plot(simplependulum, [j,i], p)end
end
plot(p,xlims = (-15,15))
结果如下

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
