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
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.
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?
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 ?
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.
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)| ) :
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.
Excatement, les xi sont les abscisses des noeuds.
Ok, je vais ajouter des commentaires à mon programme. Merci de votre temps
Une question quand même.
As tu fait tourner ton programme en double avec, par exemple, N=100 ?
Fonctionne t-il correctement ?
Supprime les programmes compilés, les fichiers annexes, redémarre ton ordinateur, recompile et regarde ce qui se passe.
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
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 ...
Bonjour,
J'ai essayé d'écrire mon code en utilisant Python cette fois-ci mais ça fonctionne pas correctement ...
Voici mon code :
https://*****
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :