5. Sisteme dinamice: folosind SciPy¶

Conținutul capitolului

  • Prezentarea modulului SciPy
  • Efectuarea procesării avansate a datelor cu SciPy
  • Generarea de cifre avansate cu Matplotlib
  • Scrieți documentația unei funcții

În cadrul modulelor științifice ale Python, există o colecție impresionantă de funcții care efectuează diverse operațiuni pe tablourile digitale ale NumPy. Mai presus de toate, acestea ar trebui utilizate, mai degrabă decât să reinventeze roata recodificând (probabil mai puțin bine) o funcționalitate care există deja în altă parte !

În NumPy, am văzut deja că există multe operații care permit, de exemplu, să

  • genera matrici specifice: np.arange, np.ones, np.linspace, .
  • efectuați operațiuni din valorile matricei: np.sum, np.sin, np.histogram etc.
  • exprima condiții (booleene) pe elementele unui tablou sau extrage părți ale unui tablou: np.logical_not, np.in1d
  • modificați aranjamentul valorilor unei matrice, forma acesteia sau chiar creați o matrice nouă din mai multe altele: np.reshape, np.concatenate .
  • etc. .

Modulul SciPy este aici trusa de scule numeric pentru tablourile NumPy. Găsim în SciPy operații clasice de manipulare/prelucrare a datelor digitale, dar specifice unui tip de aplicație (algebră liniară, statistici etc.). Prin urmare, acestea sunt funcții mai „de nivel înalt” decât cele ale NumPy.

SciPy este un modul stabil, bine testat și relativ bine documentat.

Modulul SciPy efectuează diferite operațiuni pe matrici numerice (ndarray) de numpy. Prin urmare, putem folosi direct aceste matrici ca argumente pentru diferite funcții

Pentru a arăta utilizarea SciPy, ne vom concentra pe integrarea ecuațiilor diferențiale, luând în considerare sistemele dinamice bazate pe pendule mecanice.

5.1. Pendul simplu¶

scipy

Scriind relația fundamentală a dinamicii (conservarea impulsului), obținem ecuația simplă a pendulului dată de

unde este unghiul pendulului față de verticală și notăm cu un punct derivata în timp.

Pentru oscilații mici putem face aproximarea. Când aproximarea nu este validă, această ecuație diferențială trebuie integrată numeric pentru a obține evoluția poziției și viteza unghiulară a pendulului, în timp.

Deci, trebuie să avem un integrator de ecuații diferențiale, pe care ne-am aștepta să îl găsim în SciPy. Dar care este funcția corespunzătoare? Să încercăm o căutare pe Google pentru „ecuație diferențială integrată scipy” sau să consultăm conținutul ajutorului http://docs.scipy.org/doc/scipy/reference/index.html. Există un submodul integrat, care în sine conține o funcție odeint

Pentru început, trebuie să punem ecuația diferențială de ordinul doi sub forma unui sistem de ecuații de ordinul întâi

Acum putem integra o traiectorie dintr-o condiție inițială

La fel ca funcția odeint, există un număr mare de funcții care permit operațiuni de calcul științific la nivel înalt.

De exemplu, putem verifica conservarea energiei mecanice în timp

Pentru a genera figura de mai sus, am folosit un număr de comenzi din modulul matplotlib .