Bonjour,
Je ne sais pas si c'est la bonne rubrique pour poser ma question...
Je cherche à résoudre numériquement le système d'équations différentielles couplées sous C# suivant (étude réalisée sur 24h soit 24x60 minutes) :
du/dt = F(u,v), où F(u,v) = -k (u - v)
dv/dt = G(u,v), ou G(u,v) = -k (u² - v²)
Pour cela j'utilise la méthode des différences finies d'ordre 2 décentrée à gauche.
Après discrétisation, cela donne (h est le pas de temps) :
u = 2/3 * [(2.0 * u1 - 0.5 * u2) + h * F(u,v)]
v = 2/3 * [(2.0 * v1 - 0.5 * v2) + h * G(u,v)]
u1 et u2 sont les valeurs de la fonction u aux temps n-1 et n-2 respectivement.
v1 et v2 sont les valeurs de la fonction v aux temps n-1 et n-2 respectivement.
Voici les principales lignes du code que j'ai écris sous C# (peut importe le langage en fait) :
Ce code est tout à fait opérationnel. Cependant, je souhaiterais ajouter un terme supplémentaire qui dépend explicitement du temps afin de résoudre le système suivant :Code:double F = 0.0; double G = 0.0; double u = u0; double u1 = u; double u2 = u; double v = u0; double v1 = v; double v2 = v; double h = 0.1; solution.Add(u); for (int j = 0; j < 24 * 60; j++) { for (int i = 0; i < 60 / h; i++) { F = -k (u - v); G = -k (u² - v²); u = (2.0 / 3.0) * ((2.0 * u1 - 0.5 * u2) + h * F); v = (2.0 / 3.0) * ((2.0 * v1 - 0.5 * v2) + h * G); u2 = u1; u1 = u; v2 = v1; v1 = v; } solution.Add(u); }
du/dt = F(u,v) + P(t)
dv/dt = G(u,v)
où P(t) = A*exp(-r*t) (fonction exponentielle décroissante).
Comment doit-on faire apparaître ce terme dans le code précédent ?
Merci pour vos réponses !
-----