Mechanical vibrations

The course is based on applications of the analytical mechanics in analysis of different type of oscillators. Concepts are sorted in the order of increasing degree of complexity. Generation of solutions of the problems is powered by dynamical systems implemented in the DynPy library for Python language. In order to use the source code, the installation of attached DynPy library is required.


DynPy library

Download PDF with solution of the problem.

Display the source code

1. Single degree of freedom systems

Simple harmonic oscillator

The simplest example showing the response of undamped single degree of freedom system. It's an elementary example allowing to understand the vocabulary used in applied dynamics, which will be helpful in analysis of more complex concepts.

                                  
                                    from dynpy.models.mechanics.trolley import SpringMassSystem
                                    from sympy import *
                                    from sympy.physics.mechanics import init_vprinting
                                    init_vprinting()
                                    
                                    
                                    # Class instance assignment
                                    dynsys = SpringMassSystem().from_reference_data()
                                    
                                    display('Data assumed for the calculations is the following:')
                                    display(dynsys._given_data)
                                    
                                    # Displaying the scheme
                                    display(dynsys.preview())
                                    
                                    
                                    # Kinetic energy
                                    Ek = Symbol('E_k', positive=True)
                                    Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                                    display(Ek_eq)
                                    
                                    
                                    # Potential energy
                                    Ep = Symbol('E_p', positive=True)
                                    Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                                    display(Ep_eq)
                                    
                                    
                                    # Dissipative potential
                                    D = Symbol('D', positive=True)
                                    D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                                    display(D_eq)
                                    
                                    
                                    # Lagrangian of the system
                                    L = Symbol('L', positive=True)
                                    L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                                    display(L_eq)
                                    
                                    
                                    # Equations of motion
                                    eoms_eq = Eq(dynsys._eoms[0], 0)
                                    display(eoms_eq)
                                    
                                    
                                    # Inertia matrix
                                    M = Symbol('M', positive=True)
                                    M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                                    display(M_eq)
                                    
                                    
                                    # Stiffness matrix
                                    K = Symbol('K', positive=True)
                                    K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                                    display(K_eq)
                                    
                                    
                                    # Damping matrix
                                    D = Symbol('D', positive=True)
                                    D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                                    display(D_eq)
                                    
                                    
                                    # Fundamental matrix
                                    A = Symbol('A', positive=True)
                                    A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                                    display(A_eq)
                                    
                                    
                                    # Characteristic polynomial
                                    Delta = Symbol('Delta', positive=True)
                                    Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                                    display(Delta_eq)
                                    
                                    
                                    # General solution
                                    gen_sol = dynsys._ode_system.general_solution.as_eq_list()
                                    
                                    display(gen_sol[0])
                                    display(gen_sol[1])
                                    
                                    
                                    # Steady solution
                                    steady_sol = dynsys._ode_system.steady_solution.as_eq_list()
                                    
                                    display(steady_sol[0])
                                    display(steady_sol[1])  

                                  
                              

Engine mount

Case of vibrations forced by a force with harmonic component coming from rotational motion of unbalanced mass. Concept shows actual engineering problem occuring in rotating machinery design.

                                  
                                    from dynpy.models.mechanics.engine import EngineVerticalSpringGravity
                                    from sympy import *
                                    from sympy.physics.mechanics import init_vprinting
                                    init_vprinting()
                                    
                                    
                                    # Class instance assignment
                                    dynsys = EngineVerticalSpringGravity().get_constant_velocity()
                                    
                                    display('Data assumed fot calculations is the following:')
                                    display(dynsys._given_data)
                                    
                                    # Displaying the scheme
                                    display(dynsys.preview())
                                    
                                    
                                    # Kinetic energy
                                    Ek = Symbol('E_k', positive=True)
                                    Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                                    display(Ek_eq)
                                    
                                    
                                    # Potential energy
                                    Ep = Symbol('E_p', positive=True)
                                    Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                                    display(Ep_eq)
                                    
                                    
                                    # Dissipative potential
                                    D = Symbol('D', positive=True)
                                    D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                                    display(D_eq)
                                    
                                    
                                    # Lagrangian of the system
                                    L = Symbol('L', positive=True)
                                    L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                                    display(L_eq)
                                    
                                    
                                    # Equations of motion
                                    eoms_eq = Eq(dynsys._eoms[0], 0)
                                    display(eoms_eq)
                                    
                                    
                                    # Inertia matrix
                                    M = Symbol('M', positive=True)
                                    M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                                    display(M_eq)
                                    
                                    
                                    # Stiffness matrix
                                    K = Symbol('K', positive=True)
                                    K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                                    display(K_eq)
                                    
                                    
                                    # Damping matrix
                                    D = Symbol('D', positive=True)
                                    D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                                    display(D_eq)
                                    
                                    
                                    # Funfdamental matrix
                                    A = Symbol('A', positive=True)
                                    A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                                    display(A_eq)
                                    
                                    
                                    # Characteristic polynomial
                                    Delta = Symbol('Delta', positive=True)
                                    Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                                    display(Delta_eq)
                                    
                                    
                                    # General solution
                                    gen_sol = dynsys._ode_system.general_solution.as_eq_list()
                                    
                                    display(gen_sol[0])
                                    display(gen_sol[1])
                                    
                                    
                                    # Steady solution
                                    steady_sol = dynsys._ode_system.steady_solution.as_eq_list()
                                    
                                    display(steady_sol[0])
                                    display(steady_sol[1])
                                  
                              

Pendulum

The simplest example of vibration of generalized coordinate defined by an angle. Totally basic concept in inderstanding of the behaviour of bodies lifted by cranes or other elements suspended by ropes or cables.

                                  
                                    from dynpy.models.mechanics.pendulum import Pendulum
                                    from sympy import *
                                    from sympy.physics.mechanics import init_vprinting
                                    init_vprinting()
                                    
                                    
                                    # Stworzenie instancji klasy
                                    dynsys = Pendulum().from_reference_data()
                                    
                                    display('Do obliczeń przyjęto:')
                                    display(dynsys._given_data)
                                    
                                    # Wyświetlenie schematu
                                    display(dynsys.preview())
                                    
                                    
                                    # Energia kinetyczna
                                    Ek = Symbol('E_k', positive=True)
                                    Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                                    display(Ek_eq)
                                    
                                    
                                    # Energia potencjalna
                                    Ep = Symbol('E_p', positive=True)
                                    Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                                    display(Ep_eq)
                                    
                                    
                                    # Potencjał dyssypacyjny
                                    D = Symbol('D', positive=True)
                                    D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                                    display(D_eq)
                                    
                                    
                                    # Lagranżjan ukladu
                                    L = Symbol('L', positive=True)
                                    L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                                    display(L_eq)
                                    
                                    
                                    # Równania ruchu
                                    eoms_eq = Eq(dynsys._eoms[0], 0)
                                    display(eoms_eq)
                                    
                                    
                                    # Macierz bezwładnosci
                                    M = Symbol('M', positive=True)
                                    M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                                    display(M_eq)
                                    
                                    
                                    # Macierz sztywności
                                    K = Symbol('K', positive=True)
                                    K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                                    display(K_eq)
                                    
                                    
                                    # Macierz tłumienia
                                    D = Symbol('D', positive=True)
                                    D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                                    display(D_eq)
                                    
                                    
                                    # Macierz fundamentalna
                                    A = Symbol('A', positive=True)
                                    A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                                    display(A_eq)
                                    
                                    
                                    # Wielomian charakterystyczny
                                    Delta = Symbol('Delta', positive=True)
                                    Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                                    display(Delta_eq)
                                    
                                    
                                    # Rozwiązania ogólne
                                    gen_sol = dynsys._ode_system.general_solution.as_eq_list()
                                    
                                    display(gen_sol[0])
                                    display(gen_sol[1])
                                    
                                    
                                    # Rozwiązania szczególne
                                    steady_sol = dynsys._ode_system.steady_solution.as_eq_list()
                                    
                                    display(steady_sol[0])
                                    display(steady_sol[1])
                                  
                              

2. Damped single degree of freedom systems

Blower toothed belt tensioner

Example showing influence of damping on the response of the system to a harmonic excitation presented on the model of belt tensioner used in belt drives. The understading of operation of such device and influence of vibrations on it's performance plays a key role in belt drives and belt transmition design.

                                  
                                    from dynpy.models.mechanics.tensioner import DampedBlowerToothedBelt
                                    from sympy import *
                                    from sympy.physics.mechanics import init_vprinting
                                    init_vprinting()
                                    
                                    
                                    # Class instance assignment
                                    dynsys = DampedBlowerToothedBelt().from_reference_data()
                                    
                                    display('Data assumed for the calculations:')
                                    display(dynsys._given_data)
                                    
                                    # Displaying the scheme
                                    display(dynsys.preview())
                                    
                                    
                                    # Kinetic energy
                                    Ek = Symbol('E_k', positive=True)
                                    Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                                    display(Ek_eq)
                                    
                                    
                                    # Potential energy
                                    Ep = Symbol('E_p', positive=True)
                                    Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                                    display(Ep_eq)
                                    
                                    
                                    # Dissipative potential
                                    D = Symbol('D', positive=True)
                                    D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                                    display(D_eq)
                                    
                                    
                                    # Lagranian of the system
                                    L = Symbol('L', positive=True)
                                    L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                                    display(L_eq)
                                    
                                    
                                    # Equations of motion
                                    eoms_eq = Eq(dynsys._eoms[0], 0)
                                    display(eoms_eq)
                                    
                                    
                                    # Inertia matrix
                                    M = Symbol('M', positive=True)
                                    M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                                    display(M_eq)
                                    
                                    
                                    # Stiffness matrix
                                    K = Symbol('K', positive=True)
                                    K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                                    display(K_eq)
                                    
                                    
                                    # Damping matrix
                                    D = Symbol('D', positive=True)
                                    D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                                    display(D_eq)
                                    
                                    
                                    # Fundamental matrix
                                    A = Symbol('A', positive=True)
                                    A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                                    display(A_eq)
                                    
                                    
                                    # Characteristic polynomial
                                    Delta = Symbol('Delta', positive=True)
                                    Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                                    display(Delta_eq)
                                    
                                    
                                    # General solution
                                    gen_sol = dynsys._ode_system.general_solution.as_eq_list()
                                    
                                    display(gen_sol[0])
                                    display(gen_sol[1])
                                    
                                    
                                    # Steady solution
                                    steady_sol = dynsys._ode_system.steady_solution.as_eq_list()
                                    
                                    display(steady_sol[0])
                                    display(steady_sol[1])
                                 
                                  
                              

Damped engie mount

Example allowing anlysis of damping influence of previously analyzed system. In reality purely undamped systems do not exist, so investigation of known system in which damping is introduced may be helpful in understanding of the overall concept od damping.

                                  
                                    from dynpy.models.mechanics.engine import DampedEngineVerticalSpringGravity
                                    from sympy import *
                                    from sympy.physics.mechanics import init_vprinting
                                    init_vprinting()
                                    
                                    
                                    # Class instance assignment
                                    dynsys = DampedEngineVerticalSpringGravity().get_constant_velocity()
                                    
                                    display('Data ssumed for calculations:')
                                    display(dynsys._given_data)
                                    
                                    # Displaying the scheme
                                    display(dynsys.preview())
                                    
                                    
                                    # Kinetic energy
                                    Ek = Symbol('E_k', positive=True)
                                    Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                                    display(Ek_eq)
                                    
                                    
                                    # Potential energy
                                    Ep = Symbol('E_p', positive=True)
                                    Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                                    display(Ep_eq)
                                    
                                    
                                    # Dissipative potential
                                    D = Symbol('D', positive=True)
                                    D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                                    display(D_eq)
                                    
                                    
                                    # Lagrangian of the system
                                    L = Symbol('L', positive=True)
                                    L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                                    display(L_eq)
                                    
                                    
                                    # Equations of motion
                                    eoms_eq = Eq(dynsys._eoms[0], 0)
                                    display(eoms_eq)
                                    
                                    
                                    # Inertia matrix
                                    M = Symbol('M', positive=True)
                                    M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                                    display(M_eq)
                                    
                                    
                                    # Stiffness matrix
                                    K = Symbol('K', positive=True)
                                    K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                                    display(K_eq)
                                    
                                    
                                    # Damping matrix
                                    D = Symbol('D', positive=True)
                                    D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                                    display(D_eq)
                                    
                                    
                                    # Fundamental matrix
                                    A = Symbol('A', positive=True)
                                    A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                                    display(A_eq)
                                    
                                    
                                    # Characteristic polynomial
                                    Delta = Symbol('Delta', positive=True)
                                    Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                                    display(Delta_eq)
                                    
                                    
                                    # General solution
                                    gen_sol = dynsys._ode_system.general_solution.as_eq_list()
                                    
                                    display(gen_sol[0])
                                    display(gen_sol[1])
                                    
                                    
                                    # Steady solution
                                    steady_sol = dynsys._ode_system.steady_solution.as_eq_list()
                                    
                                    display(steady_sol[0])
                                    display(steady_sol[1]) 
                                 
                                  
                              

3. Multi degree of freedom systems

Tuned mass damper

Example showing the possibility of change in natural frequency of the system, by introduction of additional degree of of freedom. Solutions known as TMD are often applied in buildings or bridges in order the reduce the danger coming from the resonance phenomenon.

                              
                                from dynpy.models.mechanics.engine import EngineWithTMD
                                from sympy import *
                                from sympy.physics.mechanics import init_vprinting
                                init_vprinting()
                                
                                
                                # Class instance assignment
                                dynsys = EngineWithTMD().from_reference_data()
                                
                                display('Data assumed for calculations:')
                                display(dynsys._given_data)
                                
                                # Displaying the scheme
                                display(dynsys.preview())
                                
                                
                                # Kinetic energy
                                Ek = Symbol('E_k', positive=True)
                                Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                                display(Ek_eq)
                                
                                
                                # Potential energy
                                Ep = Symbol('E_p', positive=True)
                                Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                                display(Ep_eq)
                                
                                
                                # Dissipative potential
                                D = Symbol('D', positive=True)
                                D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                                display(D_eq)
                                
                                
                                # Lagrangian of the system
                                L = Symbol('L', positive=True)
                                L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                                display(L_eq)
                                
                                
                                # Equations of motion
                                eoms_eq = Eq(dynsys._eoms[0], 0)
                                display(eoms_eq)
                                
                                
                                # Inertia matrix
                                M = Symbol('M', positive=True)
                                M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                                display(M_eq)
                                
                                
                                # Stiffness matrix
                                K = Symbol('K', positive=True)
                                K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                                display(K_eq)
                                
                                
                                # Damping matrix
                                D = Symbol('D', positive=True)
                                D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                                display(D_eq)
                                
                                
                                # Fundamental matrix
                                A = Symbol('A', positive=True)
                                A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                                display(A_eq)
                                
                                
                                # Characteristic polynomial
                                Delta = Symbol('Delta', positive=True)
                                Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                                display(Delta_eq)
                                
                                
                                # General solution
                                gen_sol = dynsys._ode_system.general_solution.as_eq_list()
                                
                                display(gen_sol[0])
                                display(gen_sol[1])
                                
                                
                                # Steady solution
                                steady_sol = dynsys._ode_system.steady_solution.as_eq_list()
                                
                                display(steady_sol[0])
                                display(steady_sol[1])
                               

                              
                          

Vehicle suspension

Analysis of the model with both linear and angular displacement. Model respresents simplified dynamics of the vehicle suspension. There are many possible ways to model such system and many possibilities to design a vehicle suspension as well. In this case it's modeled by two simple columns represented by springs.

                              
                                from dynpy.models.mechanics.vehicle import UndampedSymmetricalVehicleSuspension
                                from sympy import *
                                from sympy.physics.mechanics import init_vprinting
                                init_vprinting()
                                
                                
                                # Class instance assignment
                                dynsys = UndampedSymmetricalVehicleSuspension().from_reference_data()
                                
                                display('Data assumed for calculations:')
                                display(dynsys._given_data)
                                
                                # Displaying the scheme
                                display(dynsys.preview())
                                
                                
                                # Kinetic energy
                                Ek = Symbol('E_k', positive=True)
                                Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                                display(Ek_eq)
                                
                                
                                # Potential energy
                                Ep = Symbol('E_p', positive=True)
                                Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                                display(Ep_eq)
                                
                                
                                # Dissipative potential
                                D = Symbol('D', positive=True)
                                D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                                display(D_eq)
                                
                                
                                # Lagrangian of the system
                                L = Symbol('L', positive=True)
                                L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                                display(L_eq)
                                
                                
                                # Equations of motion
                                eoms_eq = Eq(dynsys._eoms[0], 0)
                                display(eoms_eq)
                                
                                
                                # Inertia matrix
                                M = Symbol('M', positive=True)
                                M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                                display(M_eq)
                                
                                
                                # Stiffness matrix
                                K = Symbol('K', positive=True)
                                K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                                display(K_eq)
                                
                                
                                # Damped matrix
                                D = Symbol('D', positive=True)
                                D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                                display(D_eq)
                                
                                
                                # Fundamental  matrix
                                A = Symbol('A', positive=True)
                                A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                                display(A_eq)
                                
                                
                                # Characteristic polynomial
                                Delta = Symbol('Delta', positive=True)
                                Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                                display(Delta_eq)
                                
                                
                                # General solution
                                gen_sol = dynsys._ode_system.general_solution.as_eq_list()
                                
                                display(gen_sol[0])
                                display(gen_sol[1])
                                
                                
                                # Steady solution
                                steady_sol = dynsys._ode_system.steady_solution.as_eq_list()
                                
                                display(steady_sol[0])
                                display(steady_sol[1])   

                              
                          

4. Damped multi degree of freedom systems

Damped vehicle suspension

Known model of vehicle suspension extented by influence of viscous damping. In comparison with previously analyzed case, this approach is much closer to a physical model of actual suspension equipped with shock absorbers.

                              
                                from dynpy.models.mechanics.vehicle import DampedSymmetricalVehicleSuspension
                                from sympy import *
                                from sympy.physics.mechanics import init_vprinting
                                init_vprinting()
                                
                                
                                # Class instance assignment
                                dynsys = DampedSymmetricalVehicleSuspension().from_reference_data()
                                
                                display('Data assumed  for calculations:')
                                display(dynsys._given_data)
                                
                                # Displaying the scheme 
                                display(dynsys.preview())
                                
                                
                                # Kinematic energy
                                Ek = Symbol('E_k', positive=True)
                                Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                                display(Ek_eq)
                                
                                
                                # Potential energy
                                Ep = Symbol('E_p', positive=True)
                                Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                                display(Ep_eq)
                                
                                
                                # Dissipative potential
                                D = Symbol('D', positive=True)
                                D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                                display(D_eq)
                                
                                
                                # Lagrangian of the system
                                L = Symbol('L', positive=True)
                                L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                                display(L_eq)
                                
                                
                                # Equations of motion
                                eoms_eq = Eq(dynsys._eoms[0], 0)
                                display(eoms_eq)
                                
                                
                                # Inertia matrix
                                M = Symbol('M', positive=True)
                                M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                                display(M_eq)
                                
                                
                                # Stiffness matrix
                                K = Symbol('K', positive=True)
                                K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                                display(K_eq)
                                
                                
                                # Damping matrix
                                D = Symbol('D', positive=True)
                                D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                                display(D_eq)
                                
                                
                                # Fundamental matrix
                                A = Symbol('A', positive=True)
                                A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                                display(A_eq)
                                
                                
                                # Characteristic polynomial
                                Delta = Symbol('Delta', positive=True)
                                Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                                display(Delta_eq)
                                
                                
                                # General solution
                                gen_sol = dynsys._ode_system.general_solution.as_eq_list()
                                
                                display(gen_sol[0])
                                display(gen_sol[1])
                                
                                
                                # Steady solution
                                steady_sol = dynsys._ode_system.steady_solution.as_eq_list()
                                
                                display(steady_sol[0])
                                display(steady_sol[1])    
                                

                              
                          

Bridge span lateral dynamics

Model representing approximated dynamics of bridge spans and their relative motion in response to the harmonic excitation. Constructions of this type are designed in a way which gives the elements some freedom of motion. Model assembled with trolleys, springs and dampers respresnts the dynamics of such motion.

                              
                            from dynpy.models.mechanics.trolleys import ForcedDampedTrolleysWithSprings
                            from sympy import *
                            from sympy.physics.mechanics import init_vprinting
                            init_vprinting()


                            # Class instance assignment
                            dynsys = ForcedDampedTrolleysWithSprings().from_reference_data()

                            display('Data assumed for calculations:')
                            display(dynsys._given_data)

                            # Displaying the scheme
                            display(dynsys.preview())


                            # Kinetic energy
                            Ek = Symbol('E_k', positive=True)
                            Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                            display(Ek_eq)


                            # Potential energy
                            Ep = Symbol('E_p', positive=True)
                            Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                            display(Ep_eq)


                            # Dissipative potential 
                            D = Symbol('D', positive=True)
                            D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                            display(D_eq)


                            # Lagrangian of the system
                            L = Symbol('L', positive=True)
                            L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                            display(L_eq)


                            # Equations of motion
                            eoms_eq = Eq(dynsys._eoms[0], 0)
                            display(eoms_eq)


                            # Inertia matrix
                            M = Symbol('M', positive=True)
                            M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                            display(M_eq)


                            # Stiffness matrix
                            K = Symbol('K', positive=True)
                            K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                            display(K_eq)


                            # Damping matrix
                            D = Symbol('D', positive=True)
                            D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                            display(D_eq)


                            # Fundamental matrix
                            A = Symbol('A', positive=True)
                            A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                            display(A_eq)


                            # Characteristic polynomial
                            Delta = Symbol('Delta', positive=True)
                            Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                            display(Delta_eq)


                            # General solution
                            gen_sol = dynsys._ode_system.general_solution.as_eq_list()

                            display(gen_sol[0])
                            display(gen_sol[1])


                            # Steady solution
                            steady_sol = dynsys._ode_system.steady_solution.as_eq_list()

                            display(steady_sol[0])
                            display(steady_sol[1])
                                

                              
                          

5. Nonlinear systems

Disc with nonlinear spring

System performing nonlinear vibrations, additionally introdcing motion by rolling. Analysis of this system introduces the concept of spring with nonlinear characteristic, which is often used in nonlinear systems modeling.

                              
                                from dynpy.models.mechanics.disk import DiskWithNonlinearSpring
                                from sympy import *
                                from sympy.physics.mechanics import init_vprinting
                                init_vprinting()
                                
                                
                                # Class instance assignment
                                dynsys = DiskWithNonlinearSpring()
                                
                                # Displaying the scheme
                                display(dynsys.preview())
                                
                                
                                # Kinetic energy
                                Ek = Symbol('E_k', positive=True)
                                Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                                display(Ek_eq)
                                
                                
                                # Potential energy
                                Ep = Symbol('E_p', positive=True)
                                Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                                display(Ep_eq)
                                
                                
                                # Dissipative potential
                                D = Symbol('D', positive=True)
                                D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                                display(D_eq)
                                
                                
                                # Lagrangian of the system
                                L = Symbol('L', positive=True)
                                L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                                display(L_eq)
                                
                                
                                # Equations of motion
                                eoms_eq = Eq(dynsys._eoms[0], 0)
                                display(eoms_eq)
                                
                                
                                # Inertia matrix
                                M = Symbol('M', positive=True)
                                M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                                display(M_eq)
                                
                                
                                # Stiffness matrix
                                K = Symbol('K', positive=True)
                                K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                                display(K_eq)
                                
                                
                                # Damping matrix
                                D = Symbol('D', positive=True)
                                D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                                display(D_eq)
                                
                                
                                # Fundamental matrix
                                A = Symbol('A', positive=True)
                                A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                                display(A_eq)
                                
                                
                                # Characteristic polynomial
                                Delta = Symbol('Delta', positive=True)
                                Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                                display(Delta_eq)
                                
                                
                                # General solution
                                gen_sol = dynsys._ode_system.general_solution.as_eq_list()
                                
                                display(gen_sol[0])
                                display(gen_sol[1])
                                
                                
                                # Steady solution
                                steady_sol = dynsys._ode_system.steady_solution.as_eq_list()
                                
                                display(steady_sol[0])
                                display(steady_sol[1])    
                               

                              
                          

Inverted pendulum

Inverted pendulum is a widely applied benchmark for control systems. Analysis allows to understand conpept of linearization and terms such as stable and unstable equilibrium points of the system.

                              
                                from dynpy.models.mechanics.pendulum import KinematicallyExcitedInvertedPendulum
                                from sympy import *
                                from sympy.physics.mechanics import init_vprinting
                                init_vprinting()
                                
                                
                                # Class instance assignment
                                dynsys = KinematicallyExcitedInvertedPendulum().from_reference_data()
                                
                                display('Data assumed for calculations:')
                                display(dynsys._given_data)
                                
                                # Displaying the scheme
                                display(dynsys.preview())
                                
                                
                                # Kinetic energy
                                Ek = Symbol('E_k', positive=True)
                                Ek_eq = Eq(Ek, dynsys._kinetic_energy, evaluate=False)
                                display(Ek_eq)
                                
                                
                                # Potential energy
                                Ep = Symbol('E_p', positive=True)
                                Ep_eq = Eq(Ep, dynsys._potential_energy, evaluate=False)
                                display(Ep_eq)
                                
                                
                                # Dissipative potential
                                D = Symbol('D', positive=True)
                                D_eq = Eq(D, dynsys._dissipative_potential, evaluate=False)
                                display(D_eq)
                                
                                
                                # Lagrangian of the system
                                L = Symbol('L', positive=True)
                                L_eq = Eq(L, dynsys.lagrangian(), evaluate=False)
                                display(L_eq)
                                
                                
                                # Equations of motion
                                eoms_eq = Eq(dynsys._eoms[0], 0)
                                display(eoms_eq)
                                
                                
                                # Inertia matrix
                                M = Symbol('M', positive=True)
                                M_eq = Eq(M, dynsys.inertia_matrix(), evaluate=False)
                                display(M_eq)
                                
                                
                                # Stiffness matrix
                                K = Symbol('K', positive=True)
                                K_eq = Eq(K, dynsys.stiffness_matrix(), evaluate=False)
                                display(K_eq)
                                
                                
                                # Damping matrix
                                D = Symbol('D', positive=True)
                                D_eq = Eq(D, dynsys.damping_matrix(), evaluate=False)
                                display(D_eq)
                                
                                
                                # Fundamental matrix
                                A = Symbol('A', positive=True)
                                A_eq = Eq(A, dynsys.fundamental_matrix(), evaluate=False)
                                display(A_eq)
                                
                                
                                # Characteristic polynomial
                                Delta = Symbol('Delta', positive=True)
                                Delta_eq = Eq(Delta, dynsys.fundamental_matrix().det().expand().simplify().simplify().expand(), evaluate=False)
                                display(Delta_eq)
                                
                                
                                # General solution
                                gen_sol = dynsys._ode_system.general_solution.as_eq_list()
                                
                                display(gen_sol[0])
                                display(gen_sol[1])
                                
                                
                                # Steady solution
                                steady_sol = dynsys._ode_system.steady_solution.as_eq_list()
                                
                                display(steady_sol[0])
                                display(steady_sol[1])