Algorithme — Les-mathematiques.net The most powerful custom community solution in the world

Algorithme

Bonjour,
je sollicite votre aide pour écrire un algorithme en C++ qui résout le problème non linéaire ci joint
Merci d'avance pour votre aide.114030

Réponses

  • Bonjour,

    Le schéma que philou22 t'a proposé aurait permis de résoudre ton problème si tu n'avais pas le terme d2V / dx2. Qui plus est, le schéma d'Euler est largement plus simple bien que, certes, moins rapide.

    Ce que tu peux faire, et qui marchera pour la plupart des problèmes de ce type, est de discrétiser les dérivées une-à-une à la main. Suppose que tu as maillé ton domaine, i.e. soient

    0 = t1 < ... < tm = Tfin
    0 = x1 < ... < xn = L

    On pose dt = ti+1 - ti, idem pour dx. On les appelle pas de temps et d'espace de la discrétisation. L'astuce consiste à faire un développement de Taylor de la solution exacte autour d'un de ces instants. Par exemple:

    V(ti +dt) = V(ti ) + dt dV/dt(ti) + O(dt2)

    A noter que dV/dt est une notation signifiant la dérivée par rapport au temps, et non le quotient d'une quantité dV sur le pas de temps dt (même notation). En inversant la relation,

    dV/dt(ti) = (V(ti +dt) - V(ti ) )/dt + O(dt)

    Ainsi, le schéma qui vient naturellement est de poser

    dV/dt(ti) ~= (V(ti+1) - V(ti ) )/dt

    le ~= signifiant un terme d'erreur à l'ordre 1. Pour la dérivée seconde, l'esprit est le même mais on isole, cette fois, le troisième terme du dvp de Taylor. Pour ce faire, on va développer en t+dt et en t-dt puis sommer les deux équations: on se sera débarrasé du terme en première dérivée:


    V(ti + dt) = V(ti ) + dt dV/dt(ti) + dt2/2 d2V/dt2(ti) + O(dt3)
    V(ti - dt) = V(ti ) - dt dV/dt(ti) + dt2/2 d2V/dt2(ti) + O(dt3)

    soit, en sommant,
    V(ti + dt) + V(ti - dt) = 2 V(ti ) + d2V/dt2(ti) + O(dt3)

    dont schéma:
    d2V/dt2(ti) ~= (V(ti+1) + - 2V(ti) + V(ti-1) ) / dt2


    En remplaçant les termes dérivés par ces discrétisations, tu isoles ensuite les termes ayant (i+1) en indice des autres. Il te suffira de boucler sur i en initialisant V1 à partir des conditions aux limites.

    Concernant le choix des pas de temps et d'espace, la stabilité du schéma dépendra d'une condition dite CFL liant les deux. Deux possibilités:

    - soit tu fixes un pas d'espace (mettons 1/100) et fais décroitre le pas de temps jusqu'à obtenir stabilité
    - soit tu remplaces le schéma précédent par un schéma implicite en temps

    Un indice concernant la relation CFL est qu'elle sera de la forme dt2 <= C dx. Quelquepart, tu n'as qu'à trouver une constante C où le schéma est stable, et tu l'utilises par la suite pour faire varier le pas de temps ou d'espace.
  • Bonjour,
    j'ai pensé à l'algorithme ci joint.
    Comment l'écrire en Scilab? Svp.

    Cordialement
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!