Equation of motion of a damped oscillation
x ¨ + 2 γ x ˙ + ω 2 x = 0. (1) \tag{1}
\ddot{x} + 2 \gamma \dot{x} + \omega^2 x = 0.
x ¨ + 2 γ x ˙ + ω 2 x = 0. ( 1 ) Numerical approach using Finite Difference
f ( t + Δ t ) = f ( t ) + d f ( t ) d t Δ t . (2) \tag{2}
f(t + \Delta t) = f(t) + \frac{df(t)}{dt} \Delta t.
f ( t + Δ t ) = f ( t ) + d t df ( t ) Δ t . ( 2 ) Solution for x x x if γ ≠ γ ( t ) \gamma \ne \gamma(t) γ = γ ( t ) and ω ≠ ω ( t ) \omega \ne \omega(t) ω = ω ( t ) . To find suitable Δ t \Delta t Δ t . Time
t n + 1 = t n + Δ t , n = 0 , 1 , 2 , … . (7) \tag{7}
t_{n+1} = t_n + \Delta t, \ \ \ n = 0, 1, 2, \dots.
t n + 1 = t n + Δ t , n = 0 , 1 , 2 , … . ( 7 ) Acceleration
x ¨ ( t n ) = − 2 γ x ˙ ( t n ) − ω 2 x ( t n ) . (4) \tag{4}
\ddot{x}(t_n) = - 2 \gamma \dot{x}(t_n) - \omega^2 x(t_n).
x ¨ ( t n ) = − 2 γ x ˙ ( t n ) − ω 2 x ( t n ) . ( 4 ) Velocity
x ˙ ( t n + 1 ) = x ˙ ( t n ) + x ¨ ( t n ) Δ t . (5) \tag{5}
\dot{x}(t_{n+1}) = \dot{x}(t_n) + \ddot{x}(t_n) \Delta t.
x ˙ ( t n + 1 ) = x ˙ ( t n ) + x ¨ ( t n ) Δ t . ( 5 ) Position
x ( t n + 1 ) = x ( t n ) + x ˙ ( t n ) Δ t . (6) \tag{6}
x(t_{n+1}) = x(t_n) + \dot{x}(t_n) \Delta t.
x ( t n + 1 ) = x ( t n ) + x ˙ ( t n ) Δ t . ( 6 ) Iteration
n = 0. (7) \tag{7}
n = 0.
n = 0. ( 7 ) Time
t = t 0 . (8) \tag{8}
t = t_0.
t = t 0 . ( 8 ) Velocity
v ( t 0 ) = v 0 (9) \tag{9}
v(t_0) = v_0
v ( t 0 ) = v 0 ( 9 ) Posittion
x ( t 0 ) = x 0 . (10) \tag{10}
x(t_0) = x_0.
x ( t 0 ) = x 0 . ( 10 ) Oscillation period
T = 2 π m k . (11) \tag{11}
T = 2 \pi \sqrt{\frac{m}{k}}.
T = 2 π k m . ( 11 ) Time step
Δ t < < T . (12) \tag{12}
\Delta t \lt \lt T.
Δ t << T . ( 12 ) import math
T = 1
tbeg = 0
tend = 4 * T
N = 1
dt = (tend - tbeg) / N
time = [(i* dt + tbeg) for i in range(N+ 1 )]
k = 4 * math. pi** 2
m = ( T** 2 / (4 * math. pi** 2 ) ) * k
omega = 2 * math. pi / T
gamma = 0
x0 = 1
v0 = 0
tt = []
xx = []
for t in time:
if t == tbeg:
v = v0
x = x0
a = - 2 * gamma * v - omega** 2 * x
else :
a = - 2 * gamma * v - omega** 2 * x
v = v + a * dt
x = x + v * dt
tstr = f ' { t: .3f } '
astr = f ' { a: .3f } '
vstr = f ' { v: .3f } '
xstr = f ' { x: .3f } '
print("{x:" , tstr, ", y:" , xstr, "}," , sep= "" )
tt. append(float(tstr))
xx. append(float(xstr))
print()
print(tt)
print(xx)
It is available at https://onecompiler.com/python/3znm4u5zv .
x 0 = 1 x_0 = 1 x 0 = 1 , v 0 = 0 v_0 = 0 v 0 = 0 .T = 1 T = 1 T = 1 , k = 4 π 2 k = 4\pi^2 k = 4 π 2 , m = 1 m = 1 m = 1 .t ∈ [ 0 , 4 T ] t \in [0, 4T] t ∈ [ 0 , 4 T ] , Δ t = 4 \Delta t = 4 Δ t = 4 , N = 1 + 1 N = 1 + 1 N = 1 + 1 .γ = 0 \gamma = 0 γ = 0 .
x 0 = 1 x_0 = 1 x 0 = 1 , v 0 = 0 v_0 = 0 v 0 = 0 .T = 1 T = 1 T = 1 , k = 4 π 2 k = 4\pi^2 k = 4 π 2 , m = 1 m = 1 m = 1 .t ∈ [ 0 , 4 T ] t \in [0, 4T] t ∈ [ 0 , 4 T ] , Δ t = 0.4 \Delta t = 0.4 Δ t = 0.4 , N = 10 + 1 N = 10 + 1 N = 10 + 1 .γ = 0 \gamma = 0 γ = 0 .
x 0 = 1 x_0 = 1 x 0 = 1 , v 0 = 0 v_0 = 0 v 0 = 0 .T = 1 T = 1 T = 1 , k = 4 π 2 k = 4\pi^2 k = 4 π 2 , m = 1 m = 1 m = 1 .t ∈ [ 0 , 4 T ] t \in [0, 4T] t ∈ [ 0 , 4 T ] , Δ t = 0.04 \Delta t = 0.04 Δ t = 0.04 , N = 100 + 1 N = 100 + 1 N = 100 + 1 .γ = 0 \gamma = 0 γ = 0 .
x 0 = 1 x_0 = 1 x 0 = 1 , v 0 = 0 v_0 = 0 v 0 = 0 .T = 1 T = 1 T = 1 , k = 4 π 2 k = 4\pi^2 k = 4 π 2 , m = 1 m = 1 m = 1 .t ∈ [ 0 , 4 T ] t \in [0, 4T] t ∈ [ 0 , 4 T ] , Δ t = 0.004 \Delta t = 0.004 Δ t = 0.004 , N = 1000 + 1 N = 1000 + 1 N = 1000 + 1 .γ = 0 \gamma = 0 γ = 0 .
x 0 = 1 x_0 = 1 x 0 = 1 , v 0 = 0 v_0 = 0 v 0 = 0 .T = 1 T = 1 T = 1 , k = 4 π 2 k = 4\pi^2 k = 4 π 2 , m = 1 m = 1 m = 1 .t ∈ [ 0 , 4 T ] t \in [0, 4T] t ∈ [ 0 , 4 T ] , Δ t = 0.01 \Delta t = 0.01 Δ t = 0.01 , N = 400 + 1 N = 400 + 1 N = 400 + 1 .γ = 0 \gamma = 0 γ = 0 .
Unrealistic results are obtained for Δ t ≥ 0.4 T \Delta t \ge 0.4T Δ t ≥ 0.4 T . Displacement could be larger than amplitude for Δ t = 0.04 T \Delta t = 0.04T Δ t = 0.04 T . It is sufficient for Δ t = 0.01 T \Delta t = 0.01 T Δ t = 0.01 T . It might be too fine for Δ t = 0.004 T \Delta t = 0.004 T Δ t = 0.004 T .