View in NBViewer Open in binder Download notebook View source


7.6. Análise do período de um pêndulo planar simples

Importando bibliotecas e definindo funções a serem usadas abaixo

using Images
using Plots
using BenchmarkTools
using DifferentialEquations.OrdinaryDiffEq

O pêndulo

imresize(load("../../../_assets/attachments/img/pendulo_museu_politecnica.jpg"), ratio = 3/4)

Um pêndulo esquematizado

load("../../../_assets/attachments/img/pendulum_256x256.png")

O modelo clássico

Hipóteses e modelo

imresize(load("../../../_assets/attachments/img/pendulo_forcas.png"), ratio = 2/3)

Modelo via leis de Newton

\[ m\ell\ddot\theta = - m g \sin\theta. \]

Pequenas oscilações e aproximação linear do modelo

\[ \sin\theta \approx \theta, \qquad (\text{para } |\theta| \ll 1 ). \] \[ \ell\ddot\theta = - g \theta. \] \[ \theta(t) = C_1 \sin\left(\sqrt{\frac{g}{\ell}} t\right) + C_2 \cos\left(\sqrt{\frac{g}{\ell}} t\right) = A \cos\left(B + \sqrt{\frac{g}{\ell}} t\right), \qquad \forall t\in \mathbb{R}. \]

com \(A\) pequeno. O ângulo inicial é \(\theta_0 = A\cos(B)\) e a velocidade angular inicial é \(\omega_0 = A\sqrt{g/\ell}\sin(B)\), onde \(A\) é a amplitude e \(B\) é a fase temporal.

\[ \theta(t) = \theta_0 \cos\left(\sqrt{\frac{g}{\ell}} t\right), \qquad \forall t\in \mathbb{R}. \]

Período de pequenas oscilações

\[ \theta(t) = A \cos\left(B + \sqrt{\frac{g}{\ell}} t\right), \qquad \forall t\in \mathbb{R}. \]

e da periodicidade do cosseno, extraímos o período \(T\) de oscilação:

\[ \sqrt{\frac{g}{\ell}} T = 2\pi \quad \Longleftrightarrow \quad T = 2\pi\sqrt{\frac{\ell}{g}}. \] \[ T \propto \sqrt{\frac{\ell}{g}}. \]

Pêndulo com grandes oscilações

\[ \sin(\theta) = \theta - \frac{1}{3!}\theta^3 + \frac{1}{5!}\theta^5 - \cdots \] \[ |\ddot\theta| = \frac{g}{\ell}|\sin(\theta)| < \frac{g}{\ell}|\theta|. \]
plot(title="função seno e aproximação linear", titlefont = 10,
    xaxis = "θ", yaxis = "f", legend = :topleft)
plot!(-π:0.01:π, [θ -> sin(θ); θ -> θ], label = ["f(θ) = sin(θ)" "f(θ) = θ"])

Período do pêndulo

\[ T = T(\theta_{\max}, \ell, g). \] \[ \Pi_1 = T\sqrt{\frac{g}{\ell}}, \qquad \Pi_2 = \theta_{\max}. \] \[ \Pi_1 = \mathcal{T}(\Pi_2), \]

ou seja,

\[ T = \mathcal{T}(\theta_{\max}) \sqrt{\frac{\ell}{g}}. \]

Mudança de escala

\[ \ell\ddot\theta = - g \sin(\theta). \]

com ângulo máximo de oscilação \(\theta_{\textrm{max}}\) e período de oscilação \(T = T(\theta_{\textrm{max}}, \ell, g)\)

\[ \phi(\tau) = \theta(\tau t_0), \qquad \tau \in \mathbb{R}, \]

onde

\[ t_0 = \sqrt{\frac{\ell}{g}}. \] \[ \mathcal{T} = \frac{T}{t_0} = T\sqrt{\frac{g}{\ell}}. \]

Equação adimensionalizada

\[ \ell \frac{\mathrm{d}^2 \phi(\tau)}{\mathrm{d}\tau^2} = \ell \frac{\mathrm{d}^2}{\mathrm{d}\tau^2} \theta(\tau t_0) = \ell t_0^2 \frac{\mathrm{d}^2\theta}{\mathrm{d} t^2}(\tau t_0) = - g t_0^2\sin(\theta(\tau t_0) = - g t_0^2\sin(\phi(\tau)). \] \[ \phi'' = -\sin(\phi). \] \[ \mathcal T(\theta_{\textrm{max}}). \]

Período

\[ T\sqrt{\frac{g}{\ell}} = \mathcal T(\theta_{\textrm{max}}), \]

ou seja

\[ T(\theta_{\textrm{max}}, \ell, g) = \mathcal T(\theta_{\textrm{max}}) \sqrt{\frac{\ell}{g}}. \]

Conservação de energia e Hamiltoniano

\[ \begin{cases} \dot \theta = \omega, \\ \dot \omega = -\frac{g}{\ell}\sin\theta. \end{cases} \] \[ \begin{cases} \dot \theta = \displaystyle \frac{\partial H}{\partial\omega}(\theta, \omega), \\ \dot \omega = \displaystyle -\frac{\partial H}{\partial\theta}(\theta, \omega). \end{cases} \]

com Hamiltoniano

\[ H(\theta, \omega) = \frac{1}{2}\omega^2 - \frac{g}{\ell}\cos\theta. \] \[ H(\theta(t), \omega(t)) = \textrm{constante em } t\in\mathbb{R}. \]

com a constante dependendo da órbita, ou seja, dependendo do ângulo máximo \(\theta_{\textrm{max}}\) (caso ele, de fato, oscile, ao invés de girar continuamente em torno do extremo fixo).

Fórmula para a velocidade angular

\[ H(\theta(t), \omega(t)) = H(\theta_{\textrm{max}}, 0) = - \frac{g}{\ell}\cos\theta_{\textrm{max}}. \] \[ \frac{1}{2}\omega(t)^2 - \frac{g}{\ell}\cos\theta(t) = - \frac{g}{\ell}\cos\theta_{\textrm{max}}. \] \[ \frac{\mathrm{d}\theta}{\mathrm{d}t}(t) = \omega(t) = \pm \sqrt{ \frac{2g}{\ell}\left(\cos(\theta(t)) - \cos(\theta_{\textrm{max}})\right)} \]

Fórmula para o período

\[ \frac{\mathrm{d}t(\theta)}{\mathrm{d}\theta} = \frac{1}{\displaystyle \frac{\mathrm{d}\theta}{\mathrm{d}t}(t(\theta))}. \] \[ \frac{\mathrm{d}t}{\mathrm{d}\theta}(\theta) = \pm \frac{1}{\displaystyle \sqrt{ \frac{2g}{\ell}\left(\cos\theta - \cos\theta_{\textrm{max}}\right)}}. \] \[ T(\theta_{\textrm{max}}, \ell, g) = 4 \int_{\theta_{\textrm{max}}}^0 \frac{\mathrm{d}t}{\mathrm{d}\theta}(\theta) \;\mathrm{d}\theta. \] \[ T(\theta_{\textrm{max}}, \ell, g) = - 4 \int_{\theta_{\textrm{max}}}^0 \frac{1}{\displaystyle \sqrt{ \frac{2g}{\ell}\left(\cos\theta - \cos\theta_{\textrm{max}}\right)}} \;\mathrm{d}\theta. \] \[ T(\theta_{\textrm{max}}, \ell, g) = 4 \sqrt{\frac{\ell}{2g}}\int_0^{\theta_{\textrm{max}}} \frac{1}{\displaystyle \sqrt{\cos\theta - \cos\theta_{\textrm{max}}}} \;\mathrm{d}\theta. \] \[ T(\theta_{\textrm{max}}, \ell, g) = \sqrt{\frac{\ell}{g}} \mathcal T(\theta_{\textrm{max}}), \]

com

\[ \mathcal T(\theta_{\textrm{max}}) = 2\sqrt{2}\int_0^{\theta_{\textrm{max}}} \frac{1}{\displaystyle \sqrt{\cos\theta - \cos\theta_{\textrm{max}}}} \;\mathrm{d}\theta. \]

Aproximando a fórmula integral do período

\[ \mathcal T(\theta_{\textrm{max}}) = \frac{2\pi}{\mathop{AGM}(1, \cos(\theta_{\textrm{max}}/2))}, \]

onde \(\mathop{AGM}(a, b)\) é a função média aritmética-geométrica entre \(a\) e \(b\).

\[ T(\theta_{\textrm{max}}) = \frac{T_p}{\mathop{AGM}(1, \cos(\theta_{\textrm{max}}/2))}, \]

onde

\[ T_p = 2\pi \sqrt{\frac{\ell}{g}}. \]

Período em termos de séries de potências pares

\[ {\displaystyle T=2\pi {\sqrt {\frac {\ell}{g}}}\left[\sum _{n=0}^{\infty }\left({\frac {\left(2n\right)!}{2^{2n}\left(n!\right)^{2}}}\right)^{2}\sin ^{2n}\left({\frac {\theta _{0}}{2}}\right)\right]=2\pi {\sqrt {\frac {\ell}{g}}}\left(1+{\frac {1}{16}}\theta _{0}^{2}+{\frac {11}{3072}}\theta _{0}^{4}+\cdots \right)} \]
coef(n::Int) = (factorial(2*n)/ 4^n / factorial(n)^2 )^2
coef (generic function with 1 method)
function 𝒯_s(θ, N)
    r = 0.0
    for n in 0:N
        r += coef(n) * sin(θ / 2)^(2n)
    end
    return 2π * r
end
𝒯_s (generic function with 1 method)
# Wiki pendulo (math), https://oeis.org/A223068/list
denoms = [
    1, 16, 3072, 737280, 1321205760, 951268147200, 2009078326886400, 265928913086054400,
    44931349155019751424000, 109991942731488351485952000, 668751011807449177034588160000,
    2471703739640332158319837839360000
]

#https://oeis.org/A223067/list
numers = [
    1, 1, 11, 173, 22931, 1319183, 233526463, 2673857519, 39959591850371,
    8797116290975003, 4872532317019728133, 1657631603843299234219
    ]

cis = numers ./ denoms

function 𝒯_pol(t::Real)
    r = 0.0
    for i in eachindex(cis)
        r += cis[i] * t^(2(i-1))
    end
    return 2π * r
end
𝒯_pol (generic function with 1 method)

Média aritmética-geométrica

Implementando a função média aritmética-geométrica

# definindo a função AGM

function medias(a::Real, b::Real)
    (a ≥ 0 && b ≥ 0) || throw(ArgumentError("arguments must be nonnegative"))
    ma = (a + b)/2
    mg = sqrt(a * b)
    return ma, mg
end

function agm(a::Real, b::Real; tol::Real = 1e-10, maxiter::Int = 100)
    tol > 0 || throw(ArgumentError("tolerance must be positive"))
    maxiter > 0 || throw(ArgumentError("maximum number of iterations must be positive"))
    y1, y2 = a, b
    n = 0
    while abs(y1 - y2) > tol && n < maxiter
        y1, y2 = medias(y1, y2)
        n += 1
    end
    return (y1 + y2)/2, abs(y1 - y2), n
end

println(agm(1, 2))
println(agm(1, 2, tol = 1e-5))
println(agm(12.345, 98.765))
println(agm(12.345, 98.765, tol = 1e-5))
println(agm(1, cos(0.001)))
println(agm(1,1000))
(1.4567910310469068, 0.0, 4)
(1.4567910310469068, 3.421470373687896e-8, 3)
(44.63812979234222, 0.0, 5)
(44.63812979234222, 4.441749013039953e-8, 4)
(0.9999997500000053, 3.11972669919669e-14, 1)
(189.38830240995088, 2.842170943040401e-14, 6)
𝒯(θ_max) = 2π / first(agm(1, cos(θ_max / 2)))
𝒯 (generic function with 1 method)
θ = 0:0.01:π/2
plot(title = "Período x ângulo de oscilação", titlefont = 10,
    xaxis = "ângulo", yaxis = "período", 
    ylims = (6.0, 8.0), legend=:topleft
    )
plot!(θ, θ -> 2π, label = "período via modelo linear")
for N in 1:5
    plot!(θ, θ -> 𝒯_s(θ, N), label="período via potências de senos pares até N=$N")
end
plot!(θ, 𝒯, label="período via AGM")
@btime $(2π)
for N in 1:5
    @btime 𝒯_s($(π/4)/2, $N)
end
@btime 𝒯($(π/4))
nothing
2.146 ns (0 allocations: 0 bytes)
  35.775 ns (0 allocations: 0 bytes)
  94.555 ns (0 allocations: 0 bytes)
  142.832 ns (0 allocations: 0 bytes)
  190.322 ns (0 allocations: 0 bytes)
  238.798 ns (0 allocations: 0 bytes)
  25.790 ns (0 allocations: 0 bytes)

Comparando as aproximações via AGM e via linear

plot(θ, θ -> (𝒯(θ) - 2π)/2π, label=nothing)
θ₁ = round(rad2deg(maximum(filter(θ -> abs(sin(θ) - θ) ≤ 0.01, 0.001:0.001:π/2))), digits = 2)
println("Ângulo máximo: $(θ₁)°")
Ângulo máximo: 22.46°
θ₂ = round(rad2deg(maximum(filter(θ -> abs(𝒯(θ) - 2π)/2π ≤ 0.01, 0:0.001:π/2))), digits = 2)
println("Ângulo máximo: $(θ₂)°")
Ângulo máximo: 22.8°
function f_pendulo!(dω, ω, θ, p, t)
    ℓ, g = p
    dω .= - ( g / ℓ ) * sin.( θ )
    return dω
end

ℓ = 1.0
g = 9.8

tspan = 12 * 2π * √(ℓ / g) # aproximadamente doze ciclos

θ₀ = π / 4
ω₀ = 0.0

prob = SecondOrderODEProblem(f_pendulo!, [ω₀], [θ₀], tspan, [ℓ, g])
sol = solve(prob, KahanLi8(), dt=1/10)
println(sol.retcode)
Success
plot(sol, label = ["θ" "ω"], xaxis = "t")
angulos = (π / 20, π / 14, π / 10, π / 8, π / 6, π / 4, π / 3)
for θ₀ in angulos
    prob = SecondOrderODEProblem(f_pendulo!, [ω₀], [θ₀], tspan, [ℓ, g])
    lsol = solve(prob, KahanLi8(), dt = 0.02)
    p = plot(title = "angulo em graus: $(round(rad2deg(θ₀), digits = 2))°", titlefont = 10,
        xaxis = "t", yaxis = "θ (rad)", size = (600, 200), legend = :bottomleft)
    plot!(p, lsol, vars = 2, label = "modelo não linear")
    plot!(p, lsol.t, θ₀ * cos.( √(g/ℓ) * lsol.t ), label = "modelo linear")
    display(p)
end

Exercícios

  1. Usando a fórmula

\[ \mathcal T(\theta_{\textrm{max}}) = 2\sqrt{2}\int_0^{\theta_{\textrm{max}}} \frac{1}{\displaystyle \sqrt{\cos\theta - \cos\theta_{\textrm{max}}}} \;\mathrm{d}\theta. \]

mostre que \(\lim_{\theta_{\textrm{max}} \searrow 0} \mathcal{T}(\theta_{\textrm{max}}) = 2\pi\).

  1. Mostre que \(AGM(\lambda a, \lambda b) = \lambda AGM(a,b)\), para todo \(\lambda > 0\).