Ode - program pentru rezolvarea ecuațiilor diferențiale obișnuite

scalar real, timp inițial.

Un vector real, momentele de timp pentru care soluția este localizată.

funcția externă (funcție, șir sau listă), partea dreaptă a ecuației diferențiale.

line, tipul programului de soluții utilizat. Sunt disponibile următoarele tipuri de programe de soluții: # 0034; adams # 0034; # 0034; rigid # 0034; # 0034; rk # 0034; # 0034; rkf # 0034; # 0034; fix # 0034; # 0034; discret # 0034; # 0034; rădăcini # 0034; .

o constantă reală sau un vector real de aceeași dimensiune ca y. toleranța relativă.

o constantă reală sau un vector real de aceeași dimensiune ca y. toleranța absolută.

funcția externă (funcție, șir sau listă), Jacobian de funcție f.

vectori reali (INPUT / OUTPUT).

funcție externă (funcție, șir de caractere sau listă).

integer (ora de începere).

un vector real sau o matrice (OUTPUT).

vectorul real (OUTPUT).

ode rezolvă ecuații diferențiale obișnuite explicite definite ca:

Aceasta este interfața pentru diverse programe de soluții, în special pentru ODEPACK.

Acest ajutor descrie utilizarea lui ode pentru sistemele ODE standard explicite.

Cea mai ușoară modalitate de a suna ouda. y = ode (y0, t0, t, f). unde y0 este vectorul condițiilor inițiale, t0 este timpul inițial, t este vectorul momentelor de timp pentru care se calculează soluția y și y este matricea vectorilor soluției y = [y (t (1)], y (t (2) ). ].

Argumentul de intrare f definește partea dreaptă a ecuației diferențiale de ordinul întâi. Acest argument este o funcție cu un antet specific.

Dacă f este o funcție Scilab, atunci secvența de apeluri trebuie să fie:

unde t este un scalar real (timp) și y este un vector real (stare) și ydot este un vector real (derivat dy / dt de prim ordin).

Dacă f este un șir, atunci acesta este numele procedurii Fortran compilat sau funcția C. De exemplu, dacă se numește ode (y0, t0, t, # 0034; fex # 0034;). atunci se cheamă fex subrutina.

Procedura Fortran trebuie să aibă un antet:

unde n este un număr întreg, t este un scalar cu dublă precizie, y și ydot sunt vectori cu dublă precizie.

Funcția C trebuie să aibă un antet:

unde t este timpul, y este starea, iar ydot este derivatul statului (dy / dt).

Această funcție externă poate fi colectată într-un mod independent de sistemul de operare, folosind ilib_for_link și este legat dinamic de Scilab utilizând funcția de legătură.

Se poate întâmpla ca simulatorul f să necesite argumente suplimentare. În acest caz, puteți utiliza următoarea opțiune. Argumentul f poate fi, de asemenea, o listă a lst = list (simuf, u1, u2. Un). unde simuf este o funcție Scilab cu sintaxă: ydot = f (t, y, u1, u2. un). și u1. u2. un - argumente suplimentare au trecut automat la simulatorul simuf.

Funcția f poate returna matricea p x q în locul vectorului. Cu această notație de matrice, sistemul n = p + q ODEdY / dt = F (t, Y) este rezolvat. unde Y este matricea p x q. Apoi condițiile inițiale, Y0. trebuie să fie și o matrice p x q. iar rezultatul ode este matricea p x q (T + 1) [Y (t_0), Y (t_1). Y (t_T)].

Toleranțele pentru rtol și atol sunt praguri pentru erorile relative și absolute estimate. Eroarea estimată y (i) este: rtol (i) * abs (y (i)) + atol (i) și integrarea este efectuată în timp ce această eroare este mică pentru fiecare dintre elementele de stare. Dacă rtol și / sau atolul este o constantă, atunci rtol (i) și / sau atolul (i) sunt un set de constante. Valorile implicite pentru rtol și atol sunt rtol = 1.d-5 și atol = 1.d-7 pentru majoritatea programelor de soluții și pentru # 0034; rfk # 0034; și # 0034; fix # 0034; rtol = 1.d-3 și atol = 1.d-4.

Pentru sarcini mai grele, este mai bine să specificați funcția Jacobian din partea dreaptă ca argument opțional pentru jac. Jacobianul este o funcție externă, adică o funcție cu o sintaxă specială, fie numele procedurii Fortran, fie funcția C (șir de caractere) cu o anumită secvență a apelului sau o listă.

Dacă jac este o funcție, atunci sintaxa ar trebui să fie J = jac (t, y). unde t este un scalar real (timp), iar y este un vector real (stare). Matricea rezultată J trebuie să calculeze df / dx, adică J (k, i) = dfk / dxi. unde fk este elementul k al lui f.

Dacă jac este un șir de caractere, acesta se referă la numele procedurii Fortran sau a funcției C.

Procedura Fortran trebuie să aibă un antet:

Funcția C trebuie să aibă un antet:

În majoritatea cazurilor, nu trebuie să menționați ml. mu și nrpd.

Dacă jac este o listă, atunci aceleași aranjamente se aplică f.

Argumentele opționale w și iw sunt vectori pentru stocarea informațiilor returnate de rutina de integrare (a se vedea ode_optional_output). Când aceste vectori sunt specificate în partea dreaptă a ode. Integrarea începe din nou cu aceiași parametri ca înainte de oprire.

Soluțiile ODEPACK pot fi transmise mai multe opțiuni cu variabila% ODEOPTIONS. Vedeți răspunsurile.

soluţii de program

Tipul de sarcină care trebuie rezolvată și metoda folosită depind de valoarea primului tip de argument opțional. care poate fi una dintre următoarele linii:

Programul de soluție lsoda din pachetul ODEPACK este denumit implicit. Se selectează automat între metoda non-rigidă a metodei Adams de corectare a predicției și metoda rigidă a metodei formulare diferențială inversă (BDF). Inițial, utilizează o metodă non-rigidă și verifică dinamic datele, pentru a decide ce metodă să utilizeze.

Folosit pentru sarcini non-rigide. Programul soluției lsode este apelat din pachetul ODEPACK și utilizează metoda Adams.

Aceasta este pentru sarcini dificile. Programul soluției lsode este apelat din pachetul ODEPACK și utilizează metoda ODF.

Metoda adaptivă Runge-Kutta a ordinului 4 (RK4).

Se utilizează programul Champine și Watts (Shampine and Watts), pe baza metodei Runge-Kutta-Felberg de ordin de pereche 4 și 5 (RKF45). Este pentru sarcinile soft și mijlocii, atunci când calculele nu sunt costisitoare. Această metodă nu ar trebui utilizată, în general, dacă utilizatorul necesită o precizie ridicată.

Același program de decizie ca și # 0034; rkf # 0034; dar interfața cu utilizatorul este foarte simplă, adică numai parametrii rtol și atol pot fi trecuți la programul de soluție. Aceasta este cea mai simplă metodă de eșantionare.

Programul de rezolvare a ODE cu posibilitatea găsirii rădăcinilor. Este folosit programul de soluție lsodar din pachetul ODEPACK. Este o versiune a soluției lsoda. unde caută rădăcinile unei funcții vectoriale date. Consultați ajutorul rădăcină ode_root.

Modelarea timpului discret. Consultați ajutorul pentru ode_discrete.

În exemplul următor, rezolvăm ecuația obișnuită dy / dt = y ^ 2-y * sin (t) + cos (t) cu condiția inițială y (0) = 0. Utilizăm programul implicit de soluții.

În următorul exemplu, rezolvăm ecuația dy / dt = A * y. Soluția exactă este y (t) = expm (A * t) * y (0). unde expm este exponentul matricei. Necunoscutul este egal cu matricea y (t) de dimensiunea 2 cu 1.

În următorul exemplu, rezolvăm ODE dx / dt = A * x (t) + B * u (t) cu u (t) = sin (omega * t). Rețineți că argumentele suplimentare f. A. u. B. omega sunt transferate în f în listă.

În exemplul următor, rezolvăm ecuația Riccati diferențială dX / dt = A # 0 '* X + X * A - X # 0 * * B * X + C.

În următorul exemplu, rezolvăm ecuația diferențială dY / dt = A * Y. unde Y (t) necunoscut este o matrice 2 la 2. Soluția exactă este egală cu expm Y (t) = expm (A * t). unde expm este exponentul matricei.

Cu compilatorul

Următorul exemplu necesită compilatorul C.

Vezi de asemenea

  • ode_discrete - program pentru rezolvarea ecuațiilor diferențiale obișnuite, simulare de timp discret
  • ode_root - program pentru rezolvarea ecuațiilor diferențiale obișnuite cu căutarea radacinilor
  • dassl este ecuația diferențială algebrică
  • impl - ecuația diferențială algebrică
  • odedc - program pentru rezolvarea ODE discrete-continuu
  • odeoptions - opțiuni de setare pentru programele de soluții ODE
  • csim - simulare (răspunsul de timp) al sistemului liniar
  • ltitr - răspuns discret timp (spațiu de stare)
  • rtitr - răspuns de timp discret (matrice de transfer)
  • intg este un integral integrat

literatură

Alan C. Hindmarsh, Lsode și lsodi, două noi soluții inițiale obișnuite de rezolvare a ecuațiilor diferențiale # 0034; newsletter ACM-Signum, vol. 15, nr. 4 (1980), pag. 10-11.

Funcțiile utilizate

Procedurile similare pot fi găsite în directorul SCI / modules / differential_equations / src / fortran: lsode.f lsoda.f lsodar.f

Articole similare