SciML resuelve el problema del péndulo simple

El problema del péndulo se puede expresar como

θ ¨ + gramo L pecado ⁡ θ = 0 \ddot{\theta} + \frac{g}{L}{\sin\theta} = 0θ¨+Lgsinθ=0

Entre ellos, g .g es la aceleración de la gravedad;LLL es la longitud del péndulo,θ \thetaθ es el ángulo de giro, no hay una solución analítica para esta ecuación.

Cuando el ángulo es relativamente pequeño, sin ⁡ ( θ ) ≈ θ \sin(\theta) \approx \thetapecado ( θ )θ , entonces el problema del péndulo se puede reducir a una forma lineal

θ ¨ + gramo L θ = 0 \ ddot {\ theta} + \ frac {g} {L} {\ theta} = 0θ¨+Lgθ=0

Cuando el ángulo es grande, se puede resolver numéricamente. Primero, divídalo en un sistema de ecuaciones diferenciales de primer orden

θ ˙ = ω ω ˙ = − gramo L pecado ⁡ θ \begin{alineado} &\dot{\theta} = \omega \\ &\dot{\omega} = - \frac{g}{L}{\sin \theta} \end{alineado}θ˙=ωω˙=Lgsinθ

using OrdinaryDiffEq, Plots
plotlyjs()

const g = 9.81  #g是常量
L = 1.0

u₀ = [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(θ)
end

prob = ODEProblem(simplependulum, u₀, tspan)
sol = solve(prob,Tsit5())

# plotlyjs绘图面板中有个相机的图标,点击可保存图片
plot!(sol, title ="钟摆问题", xaxis = "时间", label = ["θ" "ω"])

como muestra la imagen

inserte la descripción de la imagen aquí

Entre ellos Tsit5se encuentra un solucionador para un sistema de ecuaciones diferenciales no lineales de primer orden, que se ha utilizado antes para resolver curvas de decaimiento, pero no se describe. Tsit5Es el solucionador preferido recomendado por SciML, el método Tsitouras de quinto orden y un método mejorado de Runge-Kutta.

En física, además de establecer la relación entre magnitudes físicas en el tiempo, en ocasiones es necesario establecer la relación entre magnitudes físicas, especialmente la relación entre velocidad y coordenadas, que constituyen todos los estados posibles del sistema, comúnmente conocido como espacio de fases.

En el espacio tridimensional, la velocidad y el momento tienen tres direcciones respectivamente, por lo que el espacio de fase en el espacio tridimensional generalmente tiene seis dimensiones. Pero para el problema del bamboleo, la velocidad y la posición se pueden reducir a una dimensión, por lo que el espacio de fase tiene dos dimensiones.

Dado que nuestro espacio de dibujo también tiene dos dimensiones, solo se pueden dibujar líneas, es decir, solo se pueden dibujar algunas líneas del espacio de fase.

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))

El resultado es el siguiente

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_37816922/article/details/123752144
Recomendado
Clasificación