Calculer la dérivée d'une courbe

[Résolu]
Signaler
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
-
Messages postés
221
Date d'inscription
vendredi 30 novembre 2001
Statut
Membre
Dernière intervention
13 février 2010
-
Violent Ken


bonjour.
j'ai créé un programme pour tracer des courbes et leurs dérivée (première et seconde)
> http://www.vbfrance.com/code.aspx?id=33070
Pour le traçage de la dérivée, j'utilise le fait que
f ' (a)=f(a+h)-f(a))/h quand h tend vers 0
Mais ce n'est pas bon car h qui tend vers 0 pour VB ressemble à :
h=0.00001 , ce qui représente un nombre bcp trop grand pour permettre un calcul fiable : quand on zoome sur la dérivée dans mon appli., la courbe de la dérivée n'apparait pas "lisse", c'est parce que le calcul de la dérivée n'est pas assez précis.
Quelqu'un aurait t'il une idée pour résoudre ce problème ?

3 réponses

Messages postés
221
Date d'inscription
vendredi 30 novembre 2001
Statut
Membre
Dernière intervention
13 février 2010
4
Il y a plusieurs manières de résoudre ton problème:

1) tu prends un "h" pas trop petit dans ton calcul, disons, 0.01, tu
calcules f ', puis tu diminues h à 0.001, tu calcules le nouveau f ',
et tu compares les 2. S'ils sont proches (c'est à toi de décider quelle
précision tu veux), alors tu as ta dérivée, sinon tu peux encore
dimimuer h d'un facteur 10 et comparer les résultats. Pour avoir de
bons résultats avec cette méthode, il faut utiliser le type Double, et
ça devrait marcher.

2) au lieu de prendre la formule de la limite pour ta dérivée, tu peux
utiliser les règles de base des dérivées, te créer une sorte de
bibliothèque de dérivées connues (en l'occurence toutes celles que tu
proposes) dans un module. Par exemple, tu crées une fonction qui te
retourne "cos" quand tu lui envoies "sin", etc... Ensuite (moi je
l'avais fait avec des modules de classe et je créais un arbre
récursivement, mais y'a sûrement moyen de garder tout ton code) tu
prends la fonction de l'utilisateur, tu l'analyses et tu crées
récursivement une nouvelle fonction qui sera ta dérivée. Ensuite, il
n'y a qu'à réutiliser ton programme de départ pour dessiner la dérivée;
et puis tu peux continuer comme ça avec la dérivée seconde, troisième,
etc... En plus, comme tu ne fais que tracer la dériver, tu n'as pas
besoin d'optimiser ta récursivité pour donner une "jolie" fonction (cf
exemple).

Exemple : tu as comme fonction f(x) = x * sin(x)

ton analyseur voit le "*" comme opérateur principal, et tu appliques la règle élémentaire des dérivées:

f ' = x' * sin(x) + x * sin(x)'

ensuite tu as comme règles que x'=1 et que sin(x)' = cos(x) * x' (dérivée interne, règle générale)

récursivement, tu auras donc

f ' = 1 * sin(x) + x * cos(x) * 1

c'est ici que tu pourrais rendre ta fonction "jolie", en supprimant les 1*, et tu aurais f ' = sin(x) + x*cos(x)



Bonne chance?
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
214
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
12 avril 2008

la dessus je ne peu pas t'aider cela dit j'ai vu ton prog et je tenais à te dire qu'il est super bien et très interessant
Messages postés
214
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
12 avril 2008

essai d'ecrir un message privé a à julien39 il est très callé en mathj peut etre qu'il pourra t'aider...