Drgania mechaniczne

Kurs opiera się na wykorzystaniu metod mechaniki analitycznej do analizy różnego typu oscylatorów. Zagadnienia uszeregowane są w kolejności od najmniejszego do największego stopnia skomplikowania. By skorzystać z udostępnionych kodów niezbędne jest pobranie biblioteki dynpy dostępnej w przycisku poniżej. Wybrany kod należy następnie wkleić do projektu Jupyter Notebook.


Biblioteka dynpy

Pobierz PDF z rozwiązanym zadaniem

Wyświelt kod źródłowy

1. Układy o jednym stopniu swobody

Prosty oscylator harmoniczny

Najprostszy przykład pokazujący odpowiedź układu nietłumionego o jednym stopniu swobody. Jest to elementarny przykład pozwalający zrozumieć terminoglogię używaną w stosowanej dynamice, co będzie pomocne w analizie bardziej skomplikowanych zagadnień.

from dynpy.models.mechanics.trolley import SpringMassSystem
from sympy import *
from sympy.physics.mechanics import init_vprinting
init_vprinting()


# Stworzenie instancji klasy
dynsys = SpringMassSystem().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])

Mocowanie silnika

Przykład drgań wymuszonych przez harmoniczną siłę pochodzącą od ruchu obrotowego niezbalansowanej masy. Zagadnienie przedstawia faktyczny inżynierski problem występujący przy projektowaniu maszyn z elemenatami obrotowymi.

from dynpy.models.mechanics.engine import EngineVerticalSpringGravity
from sympy import *
from sympy.physics.mechanics import init_vprinting
init_vprinting()


# Stworzenie instancji klasy
dynsys = EngineVerticalSpringGravity().get_constant_velocity()

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])

Wahadło

Najprostszy przykład drgań współrzędnej uogólnionej zdefiniowanej przez kąt. Zupełnie podstawowe zagadnienie w zrozummieniu zachowania ciał podnoszonych za pomocą dźwigów, czy innych elementów podwieszanych za pomocą lin lub kabli.

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. Tłumione układy o jednym stopniu swobody

Napinacz paska zębatego

Przykład pokazujący wpływ tłumienia na odpowiedź układu na wymuszenie harmoniczne zaprezentowane na modelu napinacza z napędu pasowego. Samo zrozumienie działania urządzenia i wpływu drgań na jego pracę jest kluczowe w projektowaniu napędów, lub przekładni pasowych.

from dynpy.models.mechanics.tensioner import DampedBlowerToothedBelt
from sympy import *
from sympy.physics.mechanics import init_vprinting
init_vprinting()


# Stworzenie instancji klasy
dynsys = DampedBlowerToothedBelt().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])

Tłumione mocowanie silnika

Przykład dający możliwość analizy wpływu tłumienia na analizowany wcześniej układ. W rzeczywistości układy z zerowym tłumieniem praktycznie nie istnieją, więc porównanie zachowania znanego układu w którym tłumienie jest obecne może znacznie pomóc zrozumieć to zjawisko.

from dynpy.models.mechanics.engine import DampedEngineVerticalSpringGravity
from sympy import *
from sympy.physics.mechanics import init_vprinting
init_vprinting()


# Stworzenie instancji klasy
dynsys = DampedEngineVerticalSpringGravity().get_constant_velocity()

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])

3. Układy o wielu stopniach swobody

Masowy tłumik drgań

Przykład pokazujący możliwość zmiany częstości własnej drgań poprzez dołożenie dodatkowego stopnia swobody. Rozwiązania typu TMD często stosowane są w budynkach lub mostach w celu zmniejszenia niebezpieczeństwa wynikającego ze zjawiska rezonansu.

from dynpy.models.mechanics.engine import EngineWithTMD
from sympy import *
from sympy.physics.mechanics import init_vprinting
init_vprinting()


# Stworzenie instancji klasy
dynsys = EngineWithTMD().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])

Zawieszenie samochodowe

Analiza układu przemieszczającego się zarówno kątowo jak i liniowo. Model odzwierciedla uproszczoną dynamikę zawieszenia pojazdu. Sposobów na zamodelowanie tego układu jest wiele tak, jak wiele jest możliwych konstrukcji zawieszenia. W tym przypadku to dwie proste kolumny zamodelowane jako sprężyna.

from dynpy.models.mechanics.vehicle import UndampedSymmetricalVehicleSuspension
from sympy import *
from sympy.physics.mechanics import init_vprinting
init_vprinting()


# Stworzenie instancji klasy
dynsys = UndampedSymmetricalVehicleSuspension().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])

4. Układy tłumione o wielu stopniach swobody

Tłumione zawieszenie samochodowe

Znany model zawieszenia pojazdu rozszerzony o wpływ tłumienia wiskotycznego. W porównaniu do rozważanego wcześniej przypadku, dużo lepiej odzwierciedla pracę faktycznego zawieszenia wyposażonego w amortyzatory.

from dynpy.models.mechanics.vehicle import DampedSymmetricalVehicleSuspension
from sympy import *
from sympy.physics.mechanics import init_vprinting
init_vprinting()


# Stworzenie instancji klasy
dynsys = DampedSymmetricalVehicleSuspension().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])

Dynamika konstrukcji mostu

Model odzwierciedlający przybliżoną dynamikę przęseł mostu i ich względnego ruchu w odpowiedzi na wymuszenie harmoniczne. Tego typu budwole projektowane są w sposób dający elementom pewną swobodę ruchu. Model skonstruowany za pomocą wózków, sprężyn i tłumików, odzwierciedla dynamikę takiego ruchu.

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


# Stworzenie instancji klasy
dynsys = ForcedDampedTrolleysWithSprings().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])

5. Układy nieliniowe

Dysk z nielionową spręzyną

Przykład charkteryzujący się sztywnością definiowaną przez nielionową funkcję współrzędnej uogólnionej. Pokazuje zastosowanie szeregu Taylora do linearyzacji funkcji

from dynpy.models.mechanics.disk import DiskWithNonlinearSpring
from sympy import *
from sympy.physics.mechanics import init_vprinting
init_vprinting()


# Stworzenie instancji klasy
dynsys = DiskWithNonlinearSpring()

# 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])

Odwrócone whadło

Przykład szeroko stosowanego zagadnienia w teorii regulacji. Odwrócone wahadło jest często wykorzystywanym benchmarkiemm dla systemów automatyki.

from dynpy.models.mechanics.pendulum import KinematicallyExcitedInvertedPendulum
from sympy import *
from sympy.physics.mechanics import init_vprinting
init_vprinting()


# Stworzenie instancji klasy
dynsys = KinematicallyExcitedInvertedPendulum().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])