Inscription / Connexion Nouveau Sujet
Niveau doctorat
Partager :

Différences finies (résolution d'une équation différentielle)

Posté par
HanaChan
08-07-19 à 20:36

Bonjour,

J'ai résolu, par la méthode des différences finies, l'équation différentielle suivante :

-d²u /dx² + 0.1 du/dx + u = 0 pour x appartenant à [0,1], avec u(1) = 2 et u(1) = 1.

Voici le code en langage C que j'ai utilisé pour la résolution :


Pour un nombre de noeuds N = 10, 100 , 1000, j'obtiens deux courbes confondues pour les solutions numérique et analytique, mais pour N = 10000 par exemple, ce n'est plus le cas (voir figure en attaché).

Auriez-vous une idée de la cause de l'écart entre les 2 courbes ?

Merci de votre aide

Différences finies (résolution d\'une équation différentielle)

Posté par
verdurin
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 21:24

Bonsoir,
je n'ai pas lu ton programme : je ne connais pas le C.

Mais je vois une possibilité.
Quand le pas devient trop petit, les erreurs d'arrondi lié aux calculs deviennent « grandes » en valeur relative.
Et elles sont multipliées par le nombre de nœuds.

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 21:29

Bonsoir,

Merci de votre réponse

N'y aurait-il pas moyen de contrôler ces erreurs d'arrondi? Est-ce que le choix du langage peut influencer sur ça?

Posté par
lionel52
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 21:35

Question : pourquoi faire ça en C plutôt que dans un langage numérique plus classique?

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 21:44

En fait, je n'ai des notions qu'en langage C, d'où le choix de ce langage. Pensez-vous que le choix du langage peut influencer les résultats obtenus ?

Posté par
verdurin
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 22:08

Ce qui influence les résultats ( je suppose que ton programme est juste ) c'est la manière dont sont implémentés les calculs.

J'ai quand même jeté un un œil sur ton programme et vu que tes variables sont du type float.
Je crois qu'il y a des types plus précis en C.
Par exemple double comme l'apprend une recherche facile sur le net.

Tu peux essayer de changer tous les types float en double pour voir si ça marche mieux.

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 22:15

En fait, j'avais déjà essayé de faire ça, et c'est encore pire ... Voici un extrait de ce que j'obtiens comme résultats (les colonnes sont sensées représenter respectivement les xi, Unum(xi), U(xi), |U(xi) - Unum(xi)| ) :

Différences finies (résolution d\'une équation différentiell

Posté par
verdurin
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 22:37

Je suppose que les xi sont les abscisses des nœuds.
Il y a une erreur dans ton programme.

Je suis incapable de la trouver mais, si tu commentes ton programme, il y a sans doute des gens qui la trouveront.

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 22:40

Excatement, les xi sont les abscisses des noeuds.

Ok, je vais ajouter des commentaires à mon programme. Merci de votre temps

Posté par
verdurin
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 22:54

Une question quand même.
As tu fait tourner ton programme en double avec, par exemple, N=100 ?

Fonctionne t-il correctement ?

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 23:10

Mon programme ne tourne plus, ça affiche "Allocation impossible".

Posté par
verdurin
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 23:39

Supprime les programmes compilés, les fichiers annexes, redémarre ton ordinateur, recompile et regarde ce qui se passe.

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 08-07-19 à 23:56

Toujours rien :/

Posté par
lionel52
re : Différences finies (résolution d'une équation différentiell 09-07-19 à 00:03

Honnêtement si tu veux faire de l'analyse numérique va voir du côté de Python ou R, là t'as des centaines de lignes pour rien en C et t'es même pas sûr d'avoir fait les choses bien

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 09-07-19 à 00:05

Ok, merci de votre remarque.

Posté par
lg124
re : Différences finies (résolution d'une équation différentiell 09-07-19 à 12:18

Bonjour,

Si tu met des 'double', il faut changer le format des scanf de "%f" à "%lf".

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 09-07-19 à 16:18

En fait, j'avais oublié de le faire au début, mais même après avoir tout remplacer correctement, j'ai pas obtenu les résultats auxquels je m'attendais ...

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 09-07-19 à 16:30

Et, à présent, le programme affiche toujours "Allocation Impossible" :/

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 15-07-19 à 17:28

Bonjour,

J'ai essayé d'écrire mon code en utilisant Python cette fois-ci mais ça fonctionne pas correctement ...

Voici mon code :

https://*****


Le but du code est de résoudre par la méthode des différences finies l'équation :
a d²u /dx² + b du/dx +c u = 0 pour x appartenant à [0,L], avec u(0) = U0 et u(L) = UL.
Ceci à revient à résoudre l'équation matricielle A*U = B (voir capture2).

Voici ce que j'obtiens pour l'équation :  -d²u /dx² + u = 0 pour x appartenant à [0,1], avec u(0) = 2,  u(1) = 1 et N (nombre des noeuds) = 10 (voir capture1).

La solution analytique est correcte, contrairement à la solution numérique obtenue par  numpy.linalg.solve ...

Je ne comprends pas non plus pourquoi j'obtiens plusieurs courbes pour l'erreur ?

Merci de votre aide

Différences finies (résolution d\'une équation différentiell

Différences finies (résolution d\'une équation différentiell

Posté par
HanaChan
re : Différences finies (résolution d'une équation différentiell 15-07-19 à 17:30

voici le code :



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !