Simulacije dinamičkih sustava u programskom jeziku Python Vladimir Milić Sveučilište u Zagrebu Fakultet strojarstva i brodogradnje Zagreb, 19. siječnja 2017. Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 1 / 14
Sadržaj Sadržaj 1 Uvod 2 Potrebni Python paketi i moduli 3 Primjer: mehanički sustav s jednim stupnjem slobode gibanja pogonjen istosmjernim električnim motorom 4 Ukratko o problemu rubnih uvjeta i dinamičkim sustavima opisanim diferencijalno-algebarskim jednadžbama 5 Literatura i korisni linkovi Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 2 / 14
Uvod 1 Uvod 2 Potrebni Python paketi i moduli 3 Primjer: mehanički sustav s jednim stupnjem slobode gibanja pogonjen istosmjernim električnim motorom 4 Ukratko o problemu rubnih uvjeta i dinamičkim sustavima opisanim diferencijalno-algebarskim jednadžbama 5 Literatura i korisni linkovi Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 3 / 14
Uvod Uvod Razmatramo Pythonove ugradene funkcije (engl. built-in) s numeričkim metodama za aproksimaciju rješenja običnih diferencijalnih jednadžbi prvog reda oblika na vremenskom intervalu t [t 0, t f ]. ẋ(t) = f(x, t), x(t 0) = x 0, (1) Općenitiji problem je sustav od n običnih diferencijalnih jednadžbi prvog reda ẋ 1 = f 1(x 1, x 2,... x n, t), x 1(t 0) = x 10, ẋ 2 = f 2(x 1, x 2,... x n, t), x 2(t 0) = x 20,. ẋ n = f n(x 1, x 2,... x n, t), x n(t 0) = x n0, za n nepoznatih realnih funkcija x i(t), i = 1, 2,..., n. Sustav jednadžbi (2) možemo napisati u obliku analognom izrazu (1) koristeći vektorsku notaciju gdje su (2) ẋ = f(x, t), x(t 0) = x 0, (3) ẋ 1 f 1(x 1, x 2,..., x n, t) x 10 ẋ 2 f 2(x 1, x 2,..., x n, t) ẋ =, f(x, t) =.., x0 = x 20.. ẋ n f n(x 1, x 2,..., x n, t) x n0 Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 3 / 14
Uvod U matematičkom opisu dinamičkih sustava pojavljuju se diferencijalne jednadžbe višeg reda oblika ( ) x (n) = f x, ẋ, ẍ,..., x (n 1), t, x (i) (t 0) = x i0, i = 0, 1, 2,..., n 1, (4) koje se svode na sustav diferencijalnih jednadžbi prvog reda. Da bi se to postiglo potrebno je uvesti dodatne funkcije x 1(t) := x(t), x 2(t) := ẋ(t), x 3(t) := ẍ(t),. x n(t) := x (n 1) (t), čime se diferencijalna jednadžba (4) transformira u ekvivalentni sustav diferencijalnih jednadžbi prvog reda u vektorskom obliku ẋ 1 ẋ 2. ẋ n 1 ẋ n = x 2 x 3. x n f(x 1, x 2,..., x n, t), (5) pa možemo koristiti numeričke metode za rješavanje diferencijalne jednadžbe (1). Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 4 / 14
Potrebni Python paketi i moduli 1 Uvod 2 Potrebni Python paketi i moduli 3 Primjer: mehanički sustav s jednim stupnjem slobode gibanja pogonjen istosmjernim električnim motorom 4 Ukratko o problemu rubnih uvjeta i dinamičkim sustavima opisanim diferencijalno-algebarskim jednadžbama 5 Literatura i korisni linkovi Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 5 / 14
Potrebni Python paketi i moduli Potrebni Python paketi i moduli NumPy predstavlja proširenje Pythona na rješavanje numeričkih problema (prethodnik mu je Numeric) jer sadrži veliki broj funkcija koje omogućavaju matematičke operacije na višedimenzionalnim poljima i matricama. Temeljni paket za znanstveno računanje u programskom jeziku Python. >>> from numpy import* SciPy je skup paketa i modula, tj. Pythonova biblioteka (engl. library) raznih matematičkih algoritama izgradenih na NumPy objektima polja. Sadrži podpakete i module za linearnu algebru, numeričku integraciju, numeričko rješavanje diferencijalnih jednadžbi, interpolaciju, optimizaciju itd. >>> from scipy import* >>> from scipy import linalg, integrate Funkcija odeint iz modula scipy.integrate služi za numeričko rješavanje inicijalnog (početnog ili Cauchyjevog) problema sustava običnih diferencijalnih jednadžbi oblika (3). Automatski bira izmedu Adamsove metode i metode podijeljenih razlika unazad (engl. backward differentiation formula BDF) linearne višekoračne metode. >>> from scipy.integrate import odeint Matplotlib je Pythonova biblioteka za crtanje raznih vrsta grafova. >>> from matplotlib import pyplot as plt Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 5 / 14
Primjer 1 Uvod 2 Potrebni Python paketi i moduli 3 Primjer: mehanički sustav s jednim stupnjem slobode gibanja pogonjen istosmjernim električnim motorom 4 Ukratko o problemu rubnih uvjeta i dinamičkim sustavima opisanim diferencijalno-algebarskim jednadžbama 5 Literatura i korisni linkovi Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 6 / 14
Primjer Mehanički sustav s jednim stupnjem slobode gibanja pogonjen istosmjernim električnim motorom Gibanje mehaničkog sustava prikazanog na slici 1 opisano je sljedećom diferencijalnom jednadžbom J q(t) + B q(t) + m g l sin (q(t)) = T, (6) gdje su q kut zakreta članka [rad], T ulazni moment [Nm], J ukupni moment tromosti oko osi koja prolazi zglobom [kgm 2 ], B koeficijent viskoznog prigušenja [Nms/rad], masa članka [kg], l udaljenost težišta od osi zgloba [m], g akceleracija sile teže [m/s 2 ]. Slika: Preuzeto iz: R. Kelly, V. Santibanez and A. Loria: Control of Robot Manipulators in Joint Space, Springer-Verlag, London, 2005. Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 6 / 14
Primjer Dinamika el. motora prikazanog na slici 2 opisana je sljedećom diferencijalnom jednadžbom: di a(t) R a i a(t) + L a + e = u a, (7) dt gdje su u a napon armature [V], i a struja armature [A], R a ukupni radni otpor armaturnog kruga [Ω], L a ukupni induktivitet armaturnog kruga [H] i e protuelektromotorna sila [V]. Nadalje imamo, e = K e Φ n ω m = K v ω m protuelektromotorna sila, (8) τ m = K t i a moment motora uz Φ n = const., (9) pri čemu su K e konstrukcijska konstanta motora, Φ n nazivna vrijednost glavnog magnetskog toka po polu [Vs], K v naponska konstanta motora [Vs], ω m mehanička brzina vrtnje [s 1 ] i K t momentna konstanta motora [Nm/A]. R a i a L a ω m, τ m N u a e M q, T Slika: Istosmjerni motor s nezavisnom i konstantnom uzbudom. Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 7 / 14
Primjer Uzimajući u obzir prijenosni omjer N, imamo relacije pa je ukupni sustav opisan sljedećim diferencijalnim jednadžbama T = N τ m = N K t i a, (10) ω m = N q, (11) J q + B q + m g l sin(q) = N K t i a, (12) L a di a dt Uvodimo nove zavisne varijable definirane na sljedeći način + Ra ia + Kv N q = ua. (13) x 1(t) = q(t), x 2(t) = q(t), x 3(t) = i a(t). (14) Deriviranjem varijabli x 1, x 2, x 3 po vremenu t i na osnovu sustava (12)-(13) dobivamo sustav diferencijalnih jednadžbi prvog reda ẋ 1 = x 2, ẋ 2 = m g l J ẋ 3 = Kv N L a sin(x 1) B J x2 + N Kt J (15) x 3, (16) x 2 Ra L a x 3 + 1 L a u a. (17) Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 8 / 14
Primjer Simulacija u Pythonu Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 9 / 14
Ukratko 1 Uvod 2 Potrebni Python paketi i moduli 3 Primjer: mehanički sustav s jednim stupnjem slobode gibanja pogonjen istosmjernim električnim motorom 4 Ukratko o problemu rubnih uvjeta i dinamičkim sustavima opisanim diferencijalno-algebarskim jednadžbama 5 Literatura i korisni linkovi Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 10 / 14
Ukratko Problem rubnih uvjeta dinamičkih sustava Problem rubnih uvjeta dinamičkih sustava Opći oblik problema rubnih uvjeta (engl. Boundary Value Problem BVP) u vektorskoj notaciji je ẏ(x) = f(x, y(x), p), a x b, r(y(a), y(b)) = 0, gdje je p vektor nepoznatih parametara sustava. (18) Tipični oblik problema je ÿ + ψ(x) ẏ + ϕ(x) y = g(x), a x b, y(a) = y 0, y(b) = y 1. (19) Problem oblika (18) u Pythonu se može riješiti primjenom funkcije solve_bvp iz modula scipy.integrate (SciPy v0.18.1). >>> from scipy.integrate import solve_bvp Takoder, u kolekciji dodatnih paketa i modula iz SciKits nalaze se moduli bvp_solver i bvp1lg. Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 10 / 14
Ukratko Dinamički sustavi opisani diferencijalno-algebarskim jednadžbama Dinamički sustavi opisani diferencijalno-algebarskim jednadžbama Promotrimo dinamički sustav čiji je matematički model opisan implicitnom diferencijalnom jednadžbom F(ẋ(t), x(t), t) = 0. (20) ( ) F Ako je det 0 tada iz izraza (20) možemo odrediti eksplicitni oblik ẋ = f(x, t). ẋ ( ) F Ako je det = 0 tada iz izraza (20) ne možemo odrediti oblik ẋ = f(x, t) i rješenje x ẋ mora zadovoljiti odredena algebarska ograničenja. Jednostavniji je tzv. polu-eksplicitni oblik ẋ = f(x, y, t), g(x, y, t) = 0, (21) gdje je g vektor algebarskih ograničenja. Primjer: njihalo u Kartezijevom koordinatnom sustavu. Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 11 / 14
Ukratko Dinamički sustavi opisani diferencijalno-algebarskim jednadžbama Simulacije dinamičkih sustava opisanih u obliku (21) primjenom programskog jezika Python: Kombinacijom funkcija iz modula scipy.inegrate i funkcija za rješavanje nelinearnih jednadžbi iz modula scipy.optimize, npr. funkcija fsolve. U kolekciji SciKits postoji modul scikits.odes u kojem se nalazi funkcija ode s ugradenim solverom ida. Assimulo paket za simulaciju dinamičkih sustava razvijen na Sveučilištu u Lundu (Švedska). PyDSTool paket za simulaciju dinamičkih sustava razvijen na Sveučilištima u SAD-u. CasADi paket za numeričku optimizaciju s ugradenim solverima za implicitne diferencijalne jednadžbe razvijen na K. U. Leuven (Belgija). Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 12 / 14
Literatura i korisni linkovi 1 Uvod 2 Potrebni Python paketi i moduli 3 Primjer: mehanički sustav s jednim stupnjem slobode gibanja pogonjen istosmjernim električnim motorom 4 Ukratko o problemu rubnih uvjeta i dinamičkim sustavima opisanim diferencijalno-algebarskim jednadžbama 5 Literatura i korisni linkovi Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 13 / 14
Literatura i korisni linkovi H. P. Langtangen. Python Scripting for Computational Science; Chapter 4: Numerical Computing in Python. Springer-Verlag, Berlin Heidelberg, 2008. H. Sayama. Introduction to the Modeling and Analysis of Complex Systems. Open SUNY Textbooks, New York, 2015. Numpy and Scipy Documentation: http://docs.scipy.org/doc Linear Algebra (scipy.linalg): http://docs.scipy.org/doc/scipy/reference/tutorial/linalg.html Integration (scipy.integrate): http://docs.scipy.org/doc/scipy/reference/tutorial/integrate.html Popis dodatnih SciPy paketa za znanstveno računanje: http://www.scipy.org/topical-software.html SciKits: https://scikits.appspot.com Assimulo: http://www.jmodelica.org/assimulo PyDSTool: http://www.ni.gsu.edu/ rclewley/pydstool CasADi: http://www.casadi.org Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 13 / 14
Hvala na pažnji! Vladimir Milić Nastupno predavanje Zagreb, 19. siječnja 2017. 14 / 14