ODEs

(3.1)

(a)

(b)

Ansatz:

We have three cases:

  • => Overdamped. Will go to steady state without oscillating.
  • => Critically-damped. Will return to steady state as quickly as possible.
  • => Underdamped. Will overshoot zero faster than critically-damped, and start oscillating.

(c)

Click here for an interactive Google Colab notebook

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

m = 1
k = 1
gamma = 0.1

omega = np.arange(0, np.pi, .001)
A = 1 / (-m * omega ** 2 + 1j * gamma * omega + k)

plt.plot(omega, np.absolute(A))
plt.ylabel("Magnitude")
plt.xlabel("Frequency")
plt.show()

plt.plot(omega, np.angle(A))
plt.ylabel("Phase")
plt.xlabel("Frequency")
plt.show()

(d)

Try

Hmmm, to be continued. Useful links: 1, 2

(e)

Useful link: 1

(f)

Not sure what lower order correction means, yet

(3.2)

For each particle:

For brevity, denote

Now, we find the eigenvalues and then eigenvectors so we can eventually get the normal modes:

(3.3)

Apply two sided z-transform:

Let’s define , thus:

And apply the inverse z-transform:

Now for the frequency response, set and look at the asymptotic output (3.57):

Click here for an interactive Google Colab notebook

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

alpha = 0.1
k = 100
delta = 1

omega = np.arange(0, 100, .01)
y = ((1 - alpha) * np.exp(1j * omega * delta * (k + 1))) / (np.exp(1j * omega * delta) - alpha)

plt.figure(figsize=(12, 8))
plt.plot(omega, np.absolute(y))
plt.ylabel("Amplitude")
plt.xlabel("Frequency")
plt.show()