Programmer calcul dérivées

Fermé
Kiki - 9 déc. 2005 à 16:45
 koolvagner - 7 févr. 2011 à 22:04
Bonjour les programmeurs,

Je suis étudiant et je dois programmer en C ou JAVA une méthode permettant de calculer une dérivée en un point, grace à la méthode d'extrapolation.
Je vous savoir si quelqu'un pourriez m'aider autant sur l'analyse que sur le développement en lui-même.

Merci pour votre aide.
A voir également:

7 réponses

hibou57 Messages postés 130 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 4 juillet 2010 61
11 déc. 2005 à 01:40
Kiki, Emanuel,

Il ne faut pas oublier d'abord que le calcul formel, et le calcul « en pratique » sur un ordinnateur, ce n'est pas du tout la même chose. Et c'est là que se pose le délicat problème de la maitrise de la précision.

Par exemple, avec la première formule d'emanuel, le problème est de savoir comment faire varier h. D'un point de vue formel, la réponse est simple : h doit être infiniment petit, mais sans être zéro.

On pourrait penser naïvement que d'un point de vu informatique, si on utilise un type float (le nombre réel en informatique), on pourra choisir une valeur aussi petite que possible. Mais dans ce domaine tout d'abord, la notion de tendre vers zéro n'existe pas, car en informatique, le zéro, on tombe dessus d'un coup!

Prendre la plus petite valeur possible pour un float, et qui ne soit pas zéro, serait une erreur. Car les choses se passeront ainsi, si on fait évoluer h entre x e 0.

Commençont à x. 1) On applique la formul d'emanuel, et on obtient une valeur pas trés précise. 2) On diminue h, on applique la formule, on obtient une valeur un peu plus précise. 3) On continue à faire varier h, la valeur deviens de plus en plus précise, et ainsi de suite. Mais à une valeur x' de h, la précision du calcul sera maximal, et si on continue à faire varier h vers 0, la précision ne va pas augmenter, mais diminuer de plus en plus (et l'erreur finira par atteindre son paroxisme avec une belle division par 0 lol )

Nous aurons shématiquement un courbe en cloche, pas nécéssairement symétrique, avec un x' ou la précision est maximal

n.b. je ne pense pas, intuitivement, qu'il puisse y avoir plusieurs extremum dans la courbe de mesure de la précision.

Alors est-ce que cette question est bien celle à laquelle tu dois répondre ? Ou te demande t-on juste de montrer que tu es capable de coder un petit alogorithme en c ou en java (sans différence pour ça) ?

Je crois qu'il faudrait qu'on sache se que tes profs attendent de toi, ce que tu fait comme étude, etc, pour se faire une idée...

... sinon on va vite partire dans le gros hors-sujet lol

Mais si maitrise de la précision des calcul informatique est à ton programme, alors ok, on va pouvoir s'y mettre, et s'amuser pour plusieurs nuit.

Mais si tu n'a qu'un peut d'algo à ton programme, histoire de t'inculquer quelque notion qui te seront utile en phylosophie, logique mathématique, epistémologie, ou autre culture général ou scientifique, alors là on va devoir partire sur quelque chose de beaucoup plus simple.

Tu en pense quoi Kiki ?
4
emmanuelP Messages postés 137 Date d'inscription vendredi 8 février 2002 Statut Contributeur Dernière intervention 7 mai 2006 161
11 déc. 2005 à 02:03
Slt hibou57,

Tu as bien noté les difficultés d'effectuer ce calcul sur ordi et pourtant je ne peux être d'accord avec toi sur les conclusions que tu en tires...
1/ La précision est maitrisable à condition de s'en donner les moyens, (pour ne citer qu'un exemple, personne n'est capable d'effectuer à la main le calcul de plusieurs milliers de décimales de pi, mais avec un simple ordi c'est très faisable voir http://perso-info.enst-bretagne.fr/~brouty/Maths/pi.html)
Faire un calcul sur un ordi peut aussi signifier se creuser un minimum les méninges ....

2/Concernant le calcul formel même remarque...(il n'y a qu'à voir le nombre de calculatrices qui équipe les collégiens et lycéens pour se faire une idée...)

3/ Tu parles de la notion de tendre vers 0 en info... en fait elle est tout aussi précise que pour un matheux....(si au passage tu m'en trouve un qui est capable de la chiffrer ;-))

En conclusion: il faut se sortir de la tête que la seule manière de manipuler les chiffres dans un prog est d'utiliser des int double et autres reals... ce ne sont que des structures de données qui correspondent à des tailles mémoires et dans une certaine mesure à des opérations.
A titre d'exemple: il est très facile d'utiliser des objets de manière récursive pour manipuler des nombres très grands ou très courts...

NB: n'oublie pas que l'informatique a été créée par des électroniciens et que ses théoriciens les plus illustres sont des mathématiciens: Turing, Von Neumann... et encore aujourd'hui dans tous les domaines des statistiques (fouilles de données, ...) jusqu'à la preuve de théorèmes (voir IA, complexité,...).
Plus que jamais l'informatique est à la fois un sujet permanent de recherche pour les maths et en même temps un outil irremplaçable.

Good luck
0
hibou57 Messages postés 130 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 4 juillet 2010 61 > emmanuelP Messages postés 137 Date d'inscription vendredi 8 février 2002 Statut Contributeur Dernière intervention 7 mai 2006
11 déc. 2005 à 02:40
Oops, j'espère ne pas t'avoir véxé... et rassure toi, j'ai bien à l'esprit tout ce que tu dit. Mais il faut reconnaitre que les structure récursive (en fait, des chaînes) dont tu parle pour certains calcul spéciaux, ne sont pas trés courantes, et reste l'exception. Les structure de données standard que tu semble qualifié de trop limitées, sont pourtant utilisé dans une majorité largement ecrasante. Et avec ces type de données, on arrive en moyenne à une précision d'une dizaine de décimal. Car en effet, les calculatrice et les ordinnateur standard utilise le même type, quasiment... et ce n'est certainement pas avec ceux ci que l'on stoque un pi avec plusieurs millions de décimals (sauf à concevoir une fonction qui renvoie un à un les élément d'un série, mais alors ils sortent, et ne sont pas stocké... bref, cette exemple que tu donne est un cas extreme).

Je suis bien d'accord avec toi aussi, que le précision se maitrise, mais on a pas besoin d'embarquer Kiki dans une telle affaire si ce n'est pas de cela dont il a besoin.

Je pense que tu me comprends. Il faut rester dans le cadre de sa demande. Sinon on fera tout le contraire de l'aider... le pauvre...
0
hibou57 Messages postés 130 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 4 juillet 2010 61
9 déc. 2005 à 20:14
Coucou Kiki! :P

Je ne voudrais pas faire le travail à ta place ;) mais je veux bien t'assister un peu...

As-tu déjà commencer le travail d'une manière ou d'une autre ? As-tu essayer d'avoir des idées, de faire une solution abstraite ou écrite en pseudo-code ?

Bonne inspiration... à+
0
Bonjour Hibou,

Je te fais part de mes recherches si tu le veux bien, puisque c'est plus un travail de recherche que quelque chose qu'on a vu en cours d'Analyse de la valeur.

Tout d'abord, qu'est ce que l'extrapolation?
J'ai trouvé qu'une telle méthode permet de reconstruire un signal grace à ce qui précède ou ce qui suit.
Pour le cas d'un calcul de dérivée je ne sais aps trop ce que ca représente car ce n'est pas un signal mais une suite de tangente qui le signal.

J'ai trouvé plusieurs méthodes d'extrapolation:
Extrapolation de Richardson. Dans le cas d'un calcul de dérivée en un point , il faut arriver a trouver les dérivées avec des pas constant. Donc pour calculer D(0), si on prend un pas de h=0.1 faut calculer D(h/10); puis D(h/100) puis D(h/1000).
Romberg. Elle utilise en plus la méthode composite des trapezes avec des pas décroissants.

Voila ce que j'ai trouvé comme méthodes.
Pour le développement, j'ai vu des exemples mais que sur matlab ou par exemple la fonction romberg() existe.

Voila Hibou où j'en suis aujourd'hui. En tout cas merci de me donner un coup de main.

A bientot!
0
emmanuelP Messages postés 137 Date d'inscription vendredi 8 février 2002 Statut Contributeur Dernière intervention 7 mai 2006 161
10 déc. 2005 à 19:52
Slt,

Concernant le calcul de la dérivée en un point, je pense que tu peux faire appel à la définition (que tu as certainement vue à l'école il y a qques années ;-)):
f'(x)= (f(x+h)-f(x-h)) / (2h) en tout point f(x) défini (classe C1) pour h->0.
L'implémentation de ce calcul coule de source, tu n'as qu'à calculer la valeur de ta fonction sur 2 valeurs proches ...
Ce n'est pas la méthode la plus "élégante" mais elle est élémentaire.

Tu peux aussi commencer par calculer la dérivée de ta fonction de manière formelle (pas trop complexe si il s'agit par ex d'un polynôme) et calculer sa valeur au point choisi => c'est plus précis mais ça peut rapidement devenir compliqué si tu veux attaquer des fonctions + complexes (exponentielles, logs, compositions et autre produits...)

Good luck
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
11 déc. 2005 à 02:30
bonsoir,

je crains que l'extrapolation de richardson ne te permette de calculer la dérivée en un point que si tu connais la dérivée. En effet, cette méthode te permet de calculer la valeur d'une fonction en l'approchant par la droite ou par la gauche (d'où le terme extrapolation)

pour romberg, c'est plutôt pour l'intégration.

pour calculer la dérivée en un point en partant de la fonction, et non pas de la fonction dérivée, il y a les différences centrées ou décentrées.

je serais d'avis de le faire en décentré à droite puis à gauche (pour vérifier qu'elles sont égales) et de ne pas pousser le h trop bas (http://www.mema.ucl.ac.be/~vl/documents/bac/num/fsab1104-5.pdf).

A+
0
hibou57 Messages postés 130 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 4 juillet 2010 61
11 déc. 2005 à 02:45
Tout à fait d'accord avec toi JvDo... c'est exactement une observation de l'évolution de la valeur qui permettra de detecter une chute de précision. J'y réfléchirai, mais là, je suis naze et ko.

Reste encore à savoir de quoi à besoin exactement Kiki... parce que je crois qu'on s'embarque peut-être un peu loin, et qu'il n'a peut-être pas besoin de quelque chose de si compliqué.

Bonne nuit blanche à toi JvDo :P
0
Kiki > hibou57 Messages postés 130 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 4 juillet 2010
11 déc. 2005 à 11:21
Bonjour Hibou, Emmanuel et JvDo,

Je suis content que ca sollicte un débat. DOnc je suis en 2ème année d'écome d'ingénieur et ce cours s'appelle Analyse Numérique. Son interet est de nous faire réfléchir sur les précisions des méthodes de clacul etc... Il va falloir aussi que j'étudie les résultats trouvés afin de les critiquer.

L'énoncé de mon sujet est tel comme je l'ai ecris au premier message, il faut que j'utilise UNE méthode d'extrapolation.
Alors Emmanuel j'ai bien pensé à la formule de définition d'une dérivée que tu m'as donné (même si dans ce cas je vois pas comment la programmer a cause de la variation de h), mais je pense qu'on attend de moi une autre méthode. C'est la raison pour laquelle je me suis renseigné sur ce qui existait, et la JvDo me dit que les 2 méthodes que j'ai cité sont inadaptées.
Alors j'avoue être un peu perdue.

Peut etre qu'il faudrait déjà que je m'arrete sur une "bonne" méthode et que je la creuse. Qu'en pensez vous?

En tout cas je vous remercie tous.
0
emmanuelP Messages postés 137 Date d'inscription vendredi 8 février 2002 Statut Contributeur Dernière intervention 7 mai 2006 161
11 déc. 2005 à 14:58
Slt,

Je suis en 3e année en école d'ingé en info... Et si on a à peu près les mêmes cours d'analyse, je pense que tu devrais trouver ce qu'il te faut dans le chapitre développements limités, notamment avec les formules de Taylor (la formule que je donne ds mon premier post est + connue sous le nom de theo. des accroissements finis et est en fait la formule de Taylor Lagrange à l'ordre 0).
Pour ton pb, cette formule me semble d'autant plus intéressante qu'elle te permettra de quantifier l'évolution de l'erreur de troncature en fonction de h (voir Taylor-Young à l'ordre1) et qu'en pratique, c'est la méthode qui est couramment employée. Qui plus est, si tu y regardes de plus près, les méthodes de Richardson et Romberg sont une mise en pratique dérivée des développements de Taylor.
Tu noteras au passage qu'un calcul de différence décentrée sera moins précis (d'ordre 1) que la différence décentrée (d'ordre2)...

Si tu veux aller plus loin en précision tu peux utiliser des méthodes variées de minimisation de l'erreur, de la régression statistique à la minimisation au carré (voir Marquardt-Levenberg) ou l'interpolation (voir interpolation de Lagrange).

Pour ce qui est de la manipulation de h tu as donc la possibilité soit de manipuler des valeurs décroissantes, soit de faire le calcul en plusieurs points puis d'appliquer un filtre correctif (cf ci dessus) et toute combinaison des 2.

NB pour hibou57, je ne suis évidemment pas vexé, mais comme on dit, on a rien sans rien... s'il existait une méthode simple et 100% précise, on aurait pas besoin d'inventer des méthodes complexes pour approximer et réduire l'erreur: en conclusion simple=> erreur max, complexe=>temps et réflexion... et qque part au milieu est la bonne solution pour un problème donné.

Good luck
0
c'est quoi la derivabilite, comment calculer la derivee, et son application
0