TP5 Rezoluția numerică a ecuațiilor diferențiale; Documentație IT pentru toți -

Suntem interesați de metoda lui Euler pentru rezoluția aproximativă a pendulului armonic greu sau pendul amortizat, precum și de alte metode.

diferențiale

Mai multe portrete de fază, care arată cele trei regimuri posibile (subcritice, critice, supracritice):

Și o animație drăguță a unui pendul greu ideal în regim subcritic:

Documentație¶

TP5 la Lycée Lakanal (subiect scris de Arnaud Basson), pe pendulul greu.

  • Data: miercuri 01-13 și joi 01-14 (2016),
  • Autor: Lilian Besson, pentru informatică pentru toate cursurile de pregătire MP (http://perso.crans.org/besson/infoMP/),
  • Licență: Licență MIT (http://lbesson.mit-license.org).
TP5. l = 0,3¶

Variabilă globală \ (l = 30 \) cm (lungimea tijei).

Variabilă globală \ (g = 9.80665 \; m/s ^ 2 \) (accelerația gravitației la suprafața Pământului).

Operatorul \ (f: Y \ mapsto f (Y) \) (1), scris ca o funcție Python.

  • Argumente:
    • Y este o matrice numpy unidimensională (cu două elemente) și returnează o matrice numpy de aceeași dimensiune. \ (Y = [\ theta, \ dot \ theta] \) deci \ (Y_0 = \ theta, Y_1 = \ dot \ theta \),
    • (opțional) g este accelerația gravitației la suprafața Pământului (\ (g = 9.80665 \; m/s ^ 2 \)),
    • (opțional) l este lungimea tijei (\ (l = 30 \) cm în aplicații).
  • Exemplu:

Rezolvați numeric ecuația diferențială de ordinul 2 al pendulului simplu (2) prin metoda Euler pentru \ (t \ în [0, t _] \), cu un pas de timp \ (h> 0 \) .

Pentru a utiliza o schemă Euler, trebuie să scriem această ecuație (obișnuită de ordinul 2, dar nu liniară!) În forma \ (Y '(t) = f (t, Y) \), unde \ (Y = [\ theta, \ dot \ theta] \):

Prin urmare, schema de actualizare Euler este scrisă:

Dar în cazul nostru, timpii discreți \ (t_i \) sunt distanțați uniform, deci \ (\ forall i \ in \, \; t_ - t_ = h \) (pasul de timp), prin urmare diagrama este simplificată în (3):

  • Operatorul \ (f: (t, Y) \ mapsto f (t, Y) \) este vectorial (de dimensiune \ (2 \ ori 2 \)) și este dat de funcția f () .
  • Condițiile inițiale sunt date de theta0 și thetaPoint0 .
  • Returnează o matrice (listă) care conține valorile lui \ (u_c \) calculate câteodată \ (t_i = i \ ori h \) (pentru \ (0 \ leq i \ leq t_/h) \) .
  • Argumente:
    • h este un pas de timp (\ (h> 0 \)),
    • tmax este durata totală a simulării digitale (\ (t_> 0 \)),
    • theta0 \ (= \ theta_0 \) este valoarea \ (\ theta (t = 0) \),
    • și thetaPoint0 \ (= \ dot \) este valoarea \ (\ dot \ theta (t = 0) = \ left (\ frac \ right) (t = 0) \) .
  • Ipoteza: Vom rezolva ecuația pentru \ (t \ geq 0 \) .
  • Exemplu (întrebarea I.2.c):
  • Curba \ ((t, \ theta (t)) \), putem vedea deja că nu este tocmai o soluție armonică (există o ușoară amplificare datorită erorilor numerice introduse de aproximarea Taylor care justifică actualizarea în diagramă a lui Euler metodă):
  • Portret de fază (\ ((\ theta (t), \ dot \ theta (t)) \)), care nu este un cerc și, prin urmare, vedem că metoda lui Euler nu este exactă pentru această simulare:
  • Complexitatea timpului: \ (O (n) \), cu \ (n = \ lceil t_/h \ rceil \) .
  • Complexitate în memorie (întrebarea I.2.c): constante, plus o matrice numerică de flotări pe 64 de biți (numpy.float64, adică 4 octeți), cu dimensiunea exactă \ ((n, 2) \), cu \ (n = \ lceil t_/h \ rceil \) (dimensiunea unui tablou numpy poate fi obținută cu funcția numpy.shape ()).
  • Exemplu:

\ (\ omega_0 = \ sqrt \) este pulsația corespunzătoare a sistemului armonic (vezi această pagină pentru mai multe detalii).

Desenați curba \ (\ theta (t) \), valoarea unghiului \ (\ theta \) în funcție de timp \ (t \) .

  • Argumente:
    • listTime este o matrice (listă sau matrice numpy) care conține valorile \ (t_i \),
    • theta conține valorile (aproximative sau nu) ale \ (\ theta_i = \ theta (t_i) \) .
TP5. portraitPhase (thetas, method = "by Euler method") [sursa] ¶

Desenați portretul de fază, adică derivatul \ (\ dot \ theta \) în funcție de valoarea unghiului \ (\ theta \) .

  • Argument:
    • theta este o matrice (listă sau matrice numpy) de dimensiune \ ((n, 2) \), care conține valorile (aproximative sau nu) ale \ (Y = [\ theta, \ dot \ theta] \ ) instantaneu \ (t_i \) .
TP5. punct mediu (h, tmax, theta0, thetaPoint0) [sursă] ¶

Rezolvați numeric ecuația diferențială de ordinul 2 al pendulului simplu (4) prin metoda punctului de mijloc pentru \ (t \ în [0, t _] \) cu un pas de timp \ (h \) .

Pentru a utiliza această altă schemă, trebuie să scriem și această ecuație diferențială (obișnuită de ordinul 2, dar nu liniară!) În forma \ (Y '(t) = f (t, Y) \), unde \ (Y = [\ theta, \ dot \ theta] \):

Acesta este același operator \ (f \) (calculat de funcția f () de mai sus). Prin urmare, diagrama pentru actualizarea metodei punctului mediu este scrisă: