Résolution EDP par discrétisation explicite

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
ChristopheCab
Messages: 4
Enregistré le: 18 Avr 2017, 14:58

Résolution EDP par discrétisation explicite

par ChristopheCab » 18 Avr 2017, 15:31

Bonjour à tous !

Je suis actuellement en train de me familiariser avec Matlab afin d'essayer de résoudre un système d'équa diff mais j'ai beaucoup de difficultés ne serait-ce que pour poser le problème...

J'ai le système d'équations suivant :



Je dois utiliser une méthode de discrétisation explicite pour résoudre ce système mais je n'arrive pas à poser mon problème sous forme de schéma explicite.
Une fois que ça sera fait je pourrai obtenir des matrices à résoudre sur Matlab.

Je ne vous embête pas avec le contexte de mon étude (sauf si il y a des intéressés) et donc voila si certains peuvent m'aider à poser mon problème je vous serai grandement reconnaissant.
Merci d'avance de votre aide et bonne journée !



Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 20:08

Re: Résolution EDP par discrétisation explicite

par Skullkid » 18 Avr 2017, 16:41

Bonjour, les notations sont un peu surprenantes de prime abord et a priori tes équations sont des EDO (ce qui ne change pas grand-chose à la procédure de discrétisation, mais bon). Histoire d'être sûr de bien comprendre, est-on bien d'accord que :
- Tes inconnues sont uniquement M et h.
- Tes sources (les , W et consorts) sont données et ne dépendent que de t.

Si oui, tout ce que tu as à faire pour discrétiser c'est remplacer les dérivées par des différences finies, par exemple avec la méthode d'Euler, et réecrire les équations pour donner une formule explicite donnant l'état n+1 en fonction de l'état n (ou plus généralement des états précédents si tu choisis un schéma d'ordre supérieur).

ChristopheCab
Messages: 4
Enregistré le: 18 Avr 2017, 14:58

Re: Résolution EDP par discrétisation explicite

par ChristopheCab » 19 Avr 2017, 13:21

Salut Skullkid !
Merci pour ta réponse, effectivement mes équations sont des EDO et seulement h et M sont inconnues, le reste ne dépend que du temps.

Je vois bien comment appliquer la méthode d'Euler dans l'équation sur la masse M(t) mais pour celle de "h(t)", étant donné qu'elle n'est pas linéaire je ne sais pas comment faire...

Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 20:08

Re: Résolution EDP par discrétisation explicite

par Skullkid » 19 Avr 2017, 18:47

Ce n'est pas grave qu'elle ne soit pas linéaire. Pour formuler un schéma explicite il suffit d'écrire des équations du genre état(n+1) = f(état(n)), avec f définie de façon explicite. Pour ta deuxième équation, avec Euler ça donne quelque chose du genre , qui est bien de la forme voulue.

ChristopheCab
Messages: 4
Enregistré le: 18 Avr 2017, 14:58

Re: Résolution EDP par discrétisation explicite

par ChristopheCab » 20 Avr 2017, 14:41

D'accord merci Skullkid ! Je vais tenter de faire tourner ça sur Matlab maintenant.
Si je veux maintenant résoudre le problème en implicite cela changera beaucoup mis à part que l'on partira de l'état (n+1)?
Si tu as des connaissances dans Matlab peux-tu me dire si ma première approche est correcte ? (je n'ai pas touché au logiciel depuis bien longtemps)


Code: Tout sélectionner
function h=EulerExp(fun, h0, t0, t1, n)

% Arguments entrée :
% fun le nom de la fonction second membre
% t0 le temps initial
% h0 la condition initiale en t0
% t1 le temps final
% n le nombre de pas de temps entre t0 et t1
% deltat le pas de temps

% Arguments sortie :
% h le vecteur de dimension n+1 contenant la solution numérique
% correspondant aux temps t0+i*deltat avec deltat=(t1-t0)/n

%function t=t(n,t0,t1,y0)
function dh=dh(n,t0,t1,dh0)
deltat=(t1-t0)/n;
t(1)=t0;
dh(1)=dh0;

for i=1:n
t(i+1)=t(i)+deltat;
dh(i+1)=dh(i)+deltat*equ(t(i),dh(i));
end;


(Avec equ() l'équation dh/dt étudiée)
Merci encore de ton aide !

Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 20:08

Re: Résolution EDP par discrétisation explicite

par Skullkid » 20 Avr 2017, 19:47

Ton code a l'air correct à vue de nez, enfin tel quel y a l'air d'avoir quelques soucis de déclarations et noms de variables, genre h et dh qui ont l'air d'être la même chose ou dh0 qui est non défini, plus des possibilités d'optimisation (une des grandes règles avec Matlab, c'est de préférer les opérations "vectorisées" aux boucles for quand c'est possible), mais jvois pas de gros problèmes sur l'algo.

Avec un schéma implicite, tu n'as pas de formule te permettant de calculer directement l'état n+1 en fonction de l'état n, à la place tu as une équation du type f(état n,état n+1) = 0 à résoudre numériquement, donc il faut en plus que tu utilises un solveur algébrique (soit à coder toi-même, soit en piochant dans ce qui est dispo sur Matlab). Pour ce qui est de l'obtention de cette équation à partir de ton problème, la méthode la plus simple est en effet "backward Euler", où tu écris tes sources au temps n+1 au lieu du temps n. Note que dans ton cas les équations sont suffisamment simples pour que tu puisses sans doute arriver à un schéma explicite avec cette méthode - mais tu peux faire semblant de pas savoir résoudre ces équations directement et garder le schéma implicite.

Après si tu veux aller plus loin, c'est un bon exercice d'implémenter des schémas plus compliqués que les méthodes d'Euler, par exemple les méthodes de Runge-Kutta qui sont souvent utilisées, et de comparer les performances entre ces schémas, et avec le solveur standard de Matlab (ode45, qui utilise d'ailleurs une méthode de Runge-Kutta explicite).

ChristopheCab
Messages: 4
Enregistré le: 18 Avr 2017, 14:58

Re: Résolution EDP par discrétisation explicite

par ChristopheCab » 21 Avr 2017, 14:31

Super, un grand merci pour ton aide et ta clarté dans tes réponses Skullkid, je vais partir sur tes conseils et développer tout ça à partir des différentes méthodes que tu as proposées.
Je reviendrai sur le sujet si jamais je me retrouve bloqué ! Encore merci :)

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 40 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite