Figure 5.1: Response of a damped oscillator
Jump to navigation
Jump to search
Chapter | Dynamic Behavior |
---|---|
Figure number | 5.1 |
Figure title | Response of the damped oscillator to the initial condition x0 = (1, 0). |
GitHub URL | https://github.com/murrayrm/fbs2e-python/blob/main/figure-5.1-damposc response.py |
Requires | python-control |
Figure 5.1: Response of the damped oscillator to the initial condition x0 = (1, 0). The solution is unique for the given initial conditions and consists of an oscillatory solution for each state, with an exponentially decaying magnitude.
# damposc_response.py - dampled oscillator response # RMM, 28 May 2023 import matplotlib.pyplot as plt import numpy as np import control as ct import fbs # FBS plotting customizations # Oscillator parameters damposc_params = {'m': 1, 'b': 0.2, 'k': 1} # System model (as ODE) def damposc_update(t, x, u, params): m, b, k = params['m'], params['b'], params['k'] return np.array([x[1], -k/m * x[0] - b/m * x[1]]) damposc = ct.NonlinearIOSystem(damposc_update, params=damposc_params) # Simulate the response tvec = np.linspace(0, 20, 100) response = ct.input_output_response(damposc, tvec, 0, X0=[1, 0]) # Plot the states fbs.figure('211') plt.plot(response.time, response.states[0], 'b-') plt.plot(response.time, response.states[1], 'b--') plt.plot([response.time[0], response.time[-1]], [0, 0], 'k-', linewidth=0.75) plt.xlabel('Time $t$ [s]') plt.ylabel('States $x_1$, $x_2$') plt.title( "Response of the damped oscillator to the initial condition x0 = (1, 0)") fbs.savefig('figure-5.1-damposc_response-time.png')