Approximation dérivée

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
_Carlito_
Membre Naturel
Messages: 11
Enregistré le: 23 Mai 2008, 10:30

approximation dérivée

par _Carlito_ » 23 Mai 2008, 10:40

bonjour, étant un noob sur ce forum pour l'instant, désolé si je fais une bétise lol.

voici mon probléme:

je dispose d'un systéme qui échantillonne un signal suivant une période T. les valeurs qu'il me retourne sont des distances qui evoluent tout le temps. Je veux m'en servir afin de calculer une dérivée. Je procéde donc de la maniére la plus simpliste du monde, a savoir :

(distance actuelle - distance précédente) / periode

seulement, d'aprés ma recherche sur internet, cette approximation de la dérivée ne serait en rien précise.

Je voulais donc savoir si quelques uns ou quelques unes parmi vous connaissaient une autre formulation de cette approximation utilisant plus d'états de mon systéme, a savoir la distance actuelle, la distance précédente, la distance précédente a la distance précédente etc...j'espére que vous comprenez ce que je veux dire lol

merci pour vous aide !!



JJa
Membre Relatif
Messages: 254
Enregistré le: 06 Mar 2008, 15:52

par JJa » 23 Mai 2008, 11:16

Désignons par D[n] la (n)ième distance.
Ce que tu as fait te donne une appoximation de la dérivée :
(D[n]-D[n-1])/T
qui n'est pas au (n)ième point, mais entre le (n-1)ième et le (n)ième.
Ce serait déjà mieux avec :
(D[n+1]-D[n-1])/(2T) pour la dérivée au (n)ième point.
Pour lisser un peu plus les fluctuations :
((D[n+1]-D[n-1])/(4T) + (D[n+2]-D[n-2])/(8T)
Pour lisser encore plus :
((D[n+1]-D[n-1])/(6T) + (D[n+2]-D[n-2])/(12T) + (D[n+3]-D[n-3])/(18T)
etc... (si on veut lisser encore plus).
On peut aussi choisir des "poids" différents pour les termes successufs, mais c'est plus compliqué.
L'ennui de cette méthode est que pour calculer la dérivée en un point (n), il faut attendre d'en être à plusieurs points après, c'est à dire attendre d'en être au point (n+1), ou (n+2), ou (n+3), ... selon le lissage choisi.

_Carlito_
Membre Naturel
Messages: 11
Enregistré le: 23 Mai 2008, 10:30

par _Carlito_ » 23 Mai 2008, 11:21

merci pour ta réponse rapide. le seul probléme est que je dois calculer la dérivée en temps réel et n'est donc pas les mesures suivantes dont tu as besoin dans tes formules. N'y a t-il pas moyen d'utiliser uniquement les échantillons précédents ?

_Carlito_
Membre Naturel
Messages: 11
Enregistré le: 23 Mai 2008, 10:30

par _Carlito_ » 26 Mai 2008, 08:40

personne n'a d'autres solutions ?

Luc69
Membre Relatif
Messages: 115
Enregistré le: 21 Mai 2008, 12:11

par Luc69 » 26 Mai 2008, 09:17

La dérivée en un point ne dépend que de ce point, donc ta formule (D[n]-D[n-1])/T donne la bonne dérivée quand T tend vers 0, prendre des points de mesure de plus en plus éloignés ne sert à rien pour la dérivée de la mesure courante. Pour avoir une dérivée plus précise, il faut rapprocher les mesures. Mais de toute façon tu n'obtiendras jamais la bonne dérivée car si tu es par exemple en un point singulier, la formule te donnera une dérivée alors qu'elle n'existe pas !

Prendre des points éloignés ne sert comme le dit JJa qu'à lisser le résultat, faire une moyenne donc si ta dérivée est constante, tu obtiendras un résultat plus précis, si elle ne l'est pas, tu obtiendras un résultat moins précis pour le point considéré.

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5486
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 26 Mai 2008, 18:26

_Carlito_ a écrit: N'y a t-il pas moyen d'utiliser uniquement les échantillons précédents ?

Si bien sûr :we:

Pour une fonction "normale" et t proche de 0, on peut approximer par
-- la formule , l'erreur commise est "proportionnelle" à
-- la formule , l'erreur commise est "proportionnelle" à
-- la formule , l'erreur commise est "proportionnelle" à
etc.

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5486
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 26 Mai 2008, 19:42

JJa a écrit:Ce que tu as fait te donne une appoximation de la dérivée :
(D[n]-D[n-1])/T
qui n'est pas au (n)ième point, mais entre le (n-1)ième et le (n)ième.

Ce serait déjà mieux avec :
(D[n+1]-D[n-1])/(2T) pour la dérivée au (n)ième point.

Pour lisser un peu plus les fluctuations :
((D[n+1]-D[n-1])/(4T) + (D[n+2]-D[n-2])/(8T) (*)

Pour lisser encore plus :
((D[n+1]-D[n-1])/(6T) + (D[n+2]-D[n-2])/(12T) + (D[n+3]-D[n-3])/(18T) (**)
etc... (si on veut lisser encore plus).

Luc69 a écrit:Prendre des points éloignés ne sert comme le dit JJa qu'à lisser le résultat, faire une moyenne donc si ta dérivée est constante, tu obtiendras un résultat plus précis, si elle ne l'est pas, tu obtiendras un résultat moins précis pour le point considéré.

Je voudrais qu'on m'explique ce que "lisser" signifie , svp :cry:

Personnellement, je constate que les trois formules données par JJa sont du même ordre de convergence (à savoir d'ordre 2, comme la formule au-dessus...), alors quel est l'intérêt de (*) et (**) par rapport à (D[n+1]-D[n-1])/2T ???

Il faut savoir qu'il existe une formule d'ordre k en considérant "seulement" D[n], D[n-1], ... D[n-k].

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5486
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 26 Mai 2008, 20:45

JJa a écrit:Pour lisser un peu plus les fluctuations :
((D[n+1]-D[n-1])/(4T) + (D[n+2]-D[n-2])/(8T)

Et pourquoi pas cette formule qui est d'ordre 4 ?

Il y a-t-il un problème de plus grande instabilité ? non, je ne crois pas...

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5486
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 26 Mai 2008, 21:12

_Carlito_ a écrit:je dispose d'un systéme qui échantillonne un signal suivant une période T.

on peut connaitre :
la grandeur de ? ?
et aussi la précision des données ? et celle voulue pour le résultat ?

_Carlito_
Membre Naturel
Messages: 11
Enregistré le: 23 Mai 2008, 10:30

par _Carlito_ » 27 Mai 2008, 14:06

leon1789 a écrit:on peut connaitre :
la grandeur de ? ?
et aussi la précision des données ? et celle voulue pour le résultat ?


merci pour toutes vos reponses et bien entendu je peux t'eclairer la dessus.

la periode est de 100ms, soit 10 echantillons par seconde. les donnees sont indiquees avec 6 chiffres apres la virgule, et il en est de meme pour le resultat!

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5486
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 27 Mai 2008, 20:50

_Carlito_ a écrit:la periode est de 100ms, soit 10 echantillons par seconde. les donnees sont indiquees avec 6 chiffres apres la virgule, et il en est de meme pour le resultat!

Attention à ne pas confondre les décimales et les chiffres significatifs. Ce que je voudrais, c'est le nombre de chiffres significatifs (avant et après la virgule). Je vais faire comme si on avait en tout 6 chiffres significatifs : par exemple 0.123456 ou 123.456 ou 12345.6

Ainsi on a , ce qui est une valeur assez grosse pour éviter des grandes instabilités au niveau du calcul (disons que ça pourrait être pire avec par exemple.) En revanche, il faut appliquer une méthode qui converge assez vite si on veut avoir un peu de précision dans le résultat... Par exemple, tu peux prendre cette formule d'ordre 3 :



Avec cette méthode, l'erreur "théorique" est très approximativement .

Dans la "pratique", il faut tenir compte de la précision des données et des calculs. Ici, comme les données sont fiables avec 6 chiffres significatifs, les erreurs de calcul seront négligeables face à l'erreur "théorique" commise par la méthode.

En clair, si la dérivée quatrième de f n'explose pas au voisinage de x, on peut espérer une précision de 3 (ou 4) chiffres significatifs.

Avec la formule de base , on aurait à peine 1 chiffre significatif, ce qui est effectivement bien peu précis... :we:

Si ça t'intéresse, je peux calculer une méthode d'ordre 4 pour gagner 1 chiffre significatif de plus... En tout cas, inutile d'aller chercher des méthodes d'ordre plus grand car la précision des calculs ne suivra pas.

_Carlito_
Membre Naturel
Messages: 11
Enregistré le: 23 Mai 2008, 10:30

par _Carlito_ » 28 Mai 2008, 09:42

par rapport aux nombres de chiffres significatifs, tout depend de la longueur mesurée.

Ainsi cela peut avoir cette forme : 1.123456 comme elle pourrait etre de cette forme : 10.123456.

J'en conclus qu'une precision dans le calcul de 3 ou 4 chiffres significatifs peut paraitre assez approximative, non ?

en langage C/C++, cette variable est un double.

en tout cas, merci énormement de ton aide!

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5486
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 28 Mai 2008, 17:20

_Carlito_ a écrit:par rapport aux nombres de chiffres significatifs, tout depend de la longueur mesurée.

Ainsi cela peut avoir cette forme : 1.123456 comme elle pourrait etre de cette forme : 10.123456.

ok, et si la mesure est de l'ordre du micro(mètre), 0.000001, tu n'as qu'un seul chiffre significatif ?

_Carlito_ a écrit:en langage C/C++, cette variable est un double.

Avec un double, on a 14 (ou 15 ?) chiffres significatifs en théorie, mais en réalité, sur le terrain physique, on n'a jamais cette précision dans les données.

_Carlito_ a écrit:J'en conclus qu'une précision dans le calcul de 3 ou 4 chiffres significatifs peut paraitre assez approximative, non ?

Si tu fais des calculs avec seulement 4 chiffres significatifs (avec toujours), alors il vaut mieux utiliser la formule d'approximation suivante (d'ordre 2) :

L'erreur commise est grosso-modo ...

Dans ce cas, on peut espérer 2 (ou 3 grand maximum) chiffres significatif dans l'approximation.

Le problème dans l'approximation que tu essaies de faire de la dérivée, c'est que est un peu grand et le nombre de chiffres significatifs des données (6) est un peu petit...

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5486
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 28 Mai 2008, 19:52

Voici une formule d'ordre 4. Pour qu'elle soit intéressante, les calculs doivent être réalisés avec une mantisse d'au moins 6 chiffres.

L'erreur commise est grosso-modo ...

Avec , si la dérivée cinquième de f n'explose pas au voisinage de x, on peut espérer une précision de 4 chiffres significatifs.

_Carlito_
Membre Naturel
Messages: 11
Enregistré le: 23 Mai 2008, 10:30

par _Carlito_ » 29 Mai 2008, 09:06

leon1789 a écrit:Voici une formule d'ordre 4. Pour qu'elle soit intéressante, les calculs doivent être réalisés avec une mantisse d'au moins 6 chiffres.

L'erreur commise est grosso-modo ...

Avec , si la dérivée cinquième de f n'explose pas au voisinage de x, on peut espérer une précision de 4 chiffres significatifs.



c'est parfait pour mon cas. en testant cette formule, j'ai comparer les resultats que j'avais avec l'ancienne formule que j'utilisait (cf. premier post), et je dois dire que l'erreur etait assez significative! mon systeme est donc apte desormais a faire le calcul avec une meilleure precision! merci enormement de ton aide! ca marche du tonnerre :++:

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 49 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