Fittage de courbe par des fcts exponentielles

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
BQss
Membre Irrationnel
Messages: 1202
Enregistré le: 02 Nov 2006, 04:32

par BQss » 09 Fév 2007, 17:23

Oui la formule est juste mais mais vu ton dessein il y a un probleme.

Plusieurs remarques:

1)est que tu as choisi des bonnes series, je vois beaucoup de mini serie, ca rend les resultats un peu bizarre avec peu de valeurs. Je vois plein de mini droite alors que sur ton premier dessein je voyais 2, 3 exponentielle modelisable seuleument.


2)C'est bizarre aussi parce que en toute logique dans les moindres carrés ca doit passer en majorité entre les points pour minimiser l'ecart avec la courbe theorique, toi tes courbes sont au dessus ou en dessous, bizarre .

3) tu peux nous donner l'ensemble des valeurs sous forme d'un tableau?
Apres comme ca je te donne ce que je trouve si tu veux.
Et je regarderai aussi peut-etre comment programmer automatiquement la reconnaissance des sous series, suivant un critere d'ecart par rapport a une sous famille adjointe.

Sinon voila comment il me semble plus judicieux de faire:

prend les deux premieres valeures ensemble(la premiere est trop eloigné des 9 suivantes, elle appartient a une autre exp surement)-->1ere exp

Reutilise la deuxieme valeure avec les 8 d'apres, ca fait 9 valeures--> 2eme exp

les 4 suivantes-->3eme exp

les 5 suivantes(en prenant la premiere en commun avec la 4eme d'avant, en tout ca fait les 4 derniere et la dernieres de la sous serie precedente, ca fait 5 données)-->4eme exp.

Ca devrait te faire un truc plus joli.



Giansolo
Membre Naturel
Messages: 44
Enregistré le: 02 Fév 2007, 15:38

par Giansolo » 09 Fév 2007, 18:27

Voici l'ensemble des données :

Code: Tout sélectionner
#dates
1901
1911
1918
1924
1930
1934
1954
1958
1966
1981
1988
1991
1992
1994
1996
1999
2002
2005
2006

#Records
1080
1060
1060
1040
1030
1020
1010
1000
995
993
992
990
986
985
984
979
978
977
977

Et en colonnes :

#dates #Records
1901 1080
1911 1060
1918 1060
1924 1040
1930 1030
1934 1020
1954 1010
1958 1000
1966 995
1981 993
1988 992
1991 990
1992 986
1994 985
1996 984
1999 979
2002 978
2005 977
2006 977


Je vais regarder en détail ce que tu m'as dis...
merci pour ta disponibilité et ton coup de main! c'est vraiment sympa!

Gian

BQss
Membre Irrationnel
Messages: 1202
Enregistré le: 02 Nov 2006, 04:32

par BQss » 11 Fév 2007, 08:02

Image

Voila le resultat que j'obtiens.

En fait tu rencontrais un probleme par ce que la modelisation:
y=Aexp(ax) est insuffisante ici.
Le "A" assure bien la translation selon l'axe des x, le "a" assure bien le type de "periodicité" exponentielle, mais aucun terme ne s'occupe de la translation en y. Et si on ne s'en occupe pas, la modelisation exponentielle est innefficace est aboutie à un modele affine, car le A doit s'occuper a la fois de la translation en x et de l'ordonnée a l'origine, de fait le coefficient A>>a et sur les zones concerné il en resulte une variation suivant la variable x presque lineaire et la modelisation insuffisante.

Le modele juste est donc le suivant:
y=Aexp(ax)+H
soit:
y-H=Aexp(ax)
et on est ramené a la regression lineaire suivante:
log(y-H)=log(A)+ax.
La variable H doit etre fixé de sorte que l'exponentielle soit translatée sur l'origine en y du repere.
En toute rigueur il faudrait proceder a une double minimisation car le coefficient H ne peut etre obtenue directement, c'est un parametre qui est normalement aussi optimisable.
On effectuerait alors dans une deuxieme temps l'optimisation suivante:

avec et les moyennes empirique de x et log(y)-H

soit





Et donc des solutions du type:

Ou H est une constante que j'ai établi comme je l'ai expliqué ci dessus.





Pour u1, sur les trois premieres valeures(je detaille un peu, ici par exemple on prend H=1059<ymin=1060 )):




Pour u2( valeures 3 à 7):



Pour u3( valeures 7 à 12):



Pour u4( valeures 12 à 15):


Pour u5( valeures 15 à 19):

Giansolo
Membre Naturel
Messages: 44
Enregistré le: 02 Fév 2007, 15:38

par Giansolo » 11 Fév 2007, 11:37

Merci BQss!

une réponse à 7h du mat'! dis donc c'est dur pour un dimanche! :-P Mais un grand merci quand meme!

J'ai parcouru ton post, et il est clair qu'il faudra que je my attarde pour tout comprendre, mais ca sent bon en tout cas.

Si je vois que je bloque je reposterais ici...

BQss
Membre Irrationnel
Messages: 1202
Enregistré le: 02 Nov 2006, 04:32

par BQss » 11 Fév 2007, 21:48

En gros nous on veut localement des exponentielles est pas juste des exponentielles. Si tu ne rajoutes pas un +H, tu vas chercher une exponentielle qui va "stagner"(dans le sens s'aprocher de son asymptote) pour des y elevés, mais ce n'est pas possible(l'asymptote de Aexp(-ax) est en y=0), pour minimiser l'ecart naturellement les coefficients se fixe alors tel que le modele soit lineaire, car "l'allure exponentielle " debouche sur un trop gros ecart si on ne translate pas en H, un point sera proche et puis l'exponentielle plongera vers l'axe. Du coup le coefficient "a" minimisant dans exp(-ax) se fixe sur une valeure tres petite, pour donc ainsi aprocher le resultat par un modele affine(et eviter que la fonction plonge vers l'axe comme je l'ai dit, ce qui donnerait un gros ecart moyen entre les valeures réelles et la fonction qui modelise, et donc opposé a l'idée d'aproximation par les moindres carrés), de sorte qu'on est le comportement de l'exp(-ax) classique mais tres proche de l'axe des y, dans cette zone peu etendue l'exponentielle se comporte alors comme sa tangente(modelisation au premiere ordre) car "a" est tres petit (a <y=(-A*a)x+A (on voit ici que meme si a est tres petit, comme A est tres grand, on a bien une pente adaptable a la pente des données).

Cela revient a considerer les données comme peu etendues dans une exponentielle classique, sur cette zone(zoomé) comme pour toute fonction on observe un droite (aproximation affine).
Il est a noté que je parle souvent du probleme en x=0, mais c'est car j'ai deja admis qu'on avait tralsaté de ln(A), evidemment l'aproximation affine marche pour tout x proche de x0 et tout ce que je dis reste valable, il suffit de remplacer "proche de l'axe des y" par "etendue tres faible relativement à a, on a en effet l'entendue, aDx, ou a<
Au final pour compenser le manque du "+H", le coefficient "a" renvoie le probleme a un probleme locale, ce qui est normalement le role de H.
Mais H permet de le faire en conservant l'allure exponentielle, alors que a le fait artificiellement en ramenant le probleme a un probleme du premier ordre, seule facon de minimiser un probleme exponentielle de données stagnantes loin de leur asymptote. Et c'est pour ca que sans le +H tu voyais des droites.


Et donc une modelisation exponentielle sans terme correcteur +H, abouti a une regression lineaire classique et insatisfaisante.

Donc Si l'on veut vraiment modeliser localement les phenomenes par une exp, on rajoute un + H, ce qui autorise alors les variable minimisante a se fixer de sorte que le modele epouse l'allure exponentielle(on a recentré le probleme en 0 et alors l'asymptote correspond bien avec à hauteur ou les valeures stagnent). Ce qui n'est pas le cas si non, quand on garde l'asymptote en 0 en "collant" les données a l'axe grace à un "a" tres petit.

Ce que je decris ensuite, c'est comment on peut choisir H theoriquement (une seconde minimisation qui elle n'est pas une regression lineaire mais une recherche de minimum classique pour une fonction d'une seule variable, cette minimisation s'operant a l'aide de la fonction solution des moindres carrés du probleme en fonction de H fixé,(le truc ou on a ln(yi-H) la).
Ensuite j'explique juste comment j'ai choisi une valeure satisfaisante et approchée de H plus facilement.
Finalement j'explicite les resultats obtenue avec cette valeure approchée de H(c'est a dire que je n'ai fait que la mimisation de la regression lineaire mais avec un H fixé choisi intelligemment (dans le model (log(y-H)=log(A)+ax) ).

Giansolo
Membre Naturel
Messages: 44
Enregistré le: 02 Fév 2007, 15:38

par Giansolo » 12 Fév 2007, 16:44

Merci pour tout ces détails!

As-tu une idée sur la méthode à utiliser pour déterminer de manière automatique ou pseudo-automatique (suivant quelles contraintes) les sous-séries ?

Je poste mes courbes qui sont identiques aux tiennes (heureusement!) suivant les H que tu as fourni :
Image

Je vais maintenant m'atteler à essayer de trouver le H de manière automatique avec les informations que tu m'as fournit, j'imagine que ca consiste à résoudre l'équation :
Image=Image

S'agit-t'il de minimiser la fonction par des méthodes comme les descentes de gradients, ou un recuit simulé ?

Edit :
bon j'ai un peu cogité sur la question et je propose une solution, qui n'est pas très élégante, et qui doit être entachée d'erreur dans certains cas, voici l'algorithme:
-Tout d'abord, je crée une droite d'observation y2 = ax+dist suffisament distante des données X,Y suivant l'axe Y. dist doit etre suffisament grand pour ne pas être en intersection avec la courbes de données (X,Y)
-Ensuite, je calcule la distance euclidienne entre les données et la droite d'observation, ce qui revient à calculer en fait : y2(x) - Y(x)
puisque nous nous placons toujours sur les mêmes dates (les memes X).
Je me retrouve du coup avec l'ensemble des distances entre les points et ceux projettés sur la droite d'observation.
Il suffit de rechercher tous les minimums locaux qui correpondront à l'indice des sous-séries :
voici ce que ca donne sur les données en cours :
Image
On voit bien que les minimums locaux sont les points de 'liaisons' des series :
1 à 3 / 3 à 7 / etc...

Mais je suppose qu'il existe une manière beaucoup plus simple et plus robuste d'obtenir ce genre de résultat!
une idée?

Giansolo
Membre Naturel
Messages: 44
Enregistré le: 02 Fév 2007, 15:38

par Giansolo » 14 Fév 2007, 08:28

Bon, cette méthode semble marcher plus ou moins, je ne l'ai pas encore utilisée "en détails"...

J'ai un autre problème qui est apparut en appliquant le fittage sur d'autres jeux de données... En effet, le A deviens rapidement énorme, (je rappelle A = exp(mean(log(Y-H)) - B*mean(X))) et je me retrouve maintenant avec des données tellement énormes, qu'elles sont "Infinies" (non calculables).

Comment puis-je contourner le problème ?

Merci pour vos réponses!

cesar
Membre Rationnel
Messages: 841
Enregistré le: 05 Juin 2005, 08:12

par cesar » 14 Fév 2007, 09:08

essayez le logiciel suivant :CurveExpert 1.3 à telecharger à :

http://www.ebicom.net/~dhyams/cftp.htm

vous vous epargnerez bien des peines pour votre probleme....

andros06
Membre Relatif
Messages: 180
Enregistré le: 30 Aoû 2006, 14:30

par andros06 » 14 Fév 2007, 09:49

Hello cesar,
c'est pas mal du tout dis donc curve expert ! Je vais m'en servir pour présenter des resultats tiens .

vous vous epargnerez bien des peines pour votre probleme....


Oui mais imagine la satisfaction lorsque tout est fait "maison" et qu'en plus ça marche.

Giansolo
Membre Naturel
Messages: 44
Enregistré le: 02 Fév 2007, 15:38

par Giansolo » 14 Fév 2007, 14:33

Est-ce que ca répond bien à mon problème ? (aka déterminer automatiquement les sous ensemble de données décrits par exemple ?)

Sinon, c'est vrai que ca à l'air plutot chouette (carérment!), mais je ne peux malheureusement pas utiliser cette toolbox car j'ai besoin, pour la suite de mes travaux de pouvoir disposer des équations de fit, et je dois avouer que j'apprends plein de choses en les faisant à la main... d'ailleurs à ce propos merci aux utilisateurs d'être si dispnible et à BQss en particulier qui à pris la peine de détailler ses réponses à plusieurs reprises.

BQss
Membre Irrationnel
Messages: 1202
Enregistré le: 02 Nov 2006, 04:32

par BQss » 14 Fév 2007, 16:20

De rien Giansolo.

Super le logiciel. Mais apres avoir vu rapidement les possibilités offertes,
il n'offre que le modele de regression exponentielle Aexp(bx)(c'est deja pas mal) et pas celui qui est adapté au probleme ici soit Aexp(bx)+H qui est plus compliqué car l'optimisation sur H n'est pas une regression lineaire et qu'il y a deux optimisations composées.

On constate rapidement grace au logiciel notamment, le fait que plus A grandi, l'allure restant exponentielle, plus le modele de regression Aexp(bx) debouche sur une droite comme prevu. Ce qui n'est pas satisfaisant donc.



Si non Giansolo oui tu peux faire des methodes de gradient(gradient conjugué) pour H, mais peut-etre y a-t-il une solution exacte facile a explicité(je ne me suis pas attardé sur la resolution de l'equation que je t'avais proposée), il suffit que la dérivée s'annule ici, au cours de la deuxieme minimisation la fonction ne dependant que de H, il s'agit de rechercher le minimum de maniere classique.

Mais ici c'est parceque tes series sont relativements petites, avec 10 15 100 données la il faudra effectivement resoudre le probleme par l'analyse numerique.

cesar
Membre Rationnel
Messages: 841
Enregistré le: 05 Juin 2005, 08:12

par cesar » 14 Fév 2007, 19:56

BQss a écrit:De rien Giansolo.

Super le logiciel. Mais apres avoir vu rapidement les possibilités offertes,
il n'offre que le modele de regression exponentielle Aexp(bx)(c'est deja pas mal) et pas celui qui est adapté au probleme ici soit Aexp(bx)+H qui est plus compliqué car l'optimisation sur H n'est pas une regression lineaire et qu'il y a deux optimisations composées.


il y a un fonction "user" où l'on peut rentrer la fonction que l'on veut....

BQss
Membre Irrationnel
Messages: 1202
Enregistré le: 02 Nov 2006, 04:32

par BQss » 14 Fév 2007, 21:50

cesar a écrit:il y a un fonction "user" où l'on peut rentrer la fonction que l'on veut....


Ah super merci je vais regarder.

BQss
Membre Irrationnel
Messages: 1202
Enregistré le: 02 Nov 2006, 04:32

par BQss » 15 Fév 2007, 06:43

Il n'y arrive pas avec le modele a+b*exp(c*x).
Il me fait une droite.
Pour le model
a+b*exp(x) il me fait une exp, pas la meilleure mais une exp quand meme.

Mais pour a+b*exp(c*x) il me fait une droite ou presque, mais en tout cas pas une allure exp et donc pas la meilleure optimisation compte tenue des parametres...

BQss
Membre Irrationnel
Messages: 1202
Enregistré le: 02 Nov 2006, 04:32

par BQss » 15 Fév 2007, 06:51

J'ai egalement utilisé le model existant deja avec a*exp(-b*x)+c*exp(-d*x), ou il suffit de poser d=0 mais malheureusement il n'y arrive pas non plus, il dit que l'algo est divergent. Et quand je l'oriente vers d=0 il ne s'execute pas et me redemande de l'orienter...

Dommage, ce programme est tres complet et vraiment bourré de modeles, un truc a avoir quoi.

il me dit justement "scaling the data could help", ba ouai c'est justement le choix de H ou de c ici, redimensioner, si il me demande de le faire moi meme, je reste au meme point, il faut minimiser sur h(sur c) sur le resultat de la premiere minimisation sur a et b...

Ici il y a une minimisation en deux temps a faire et le logiciel aussi complet qu'il soit ne peut apparement pas le faire.

Giansolo
Membre Naturel
Messages: 44
Enregistré le: 02 Fév 2007, 15:38

par Giansolo » 15 Fév 2007, 12:15

Et en ce qui concerne ma question sur la détermination automatique des sous séries ? avez-vous jeté un oeil à ma méthode, j'ai peur qu'elle soit un peu "folklo" mais bon...

je rencontre également un problème avec les autres jeux de données (A trop grand -> exp(A...) = Inf, dois-je "réduire" les données ? ou avez vous des solutions dans vos manches ?

merci!

Edit : cela dit, je suis aussi très interessé pour déterminer K au mieux de manière automatique (la double minimisation)

Giansolo
Membre Naturel
Messages: 44
Enregistré le: 02 Fév 2007, 15:38

par Giansolo » 19 Fév 2007, 12:48

Rebonjour à tous,

Un petit d'aide concernant la réponse précédante (robustesse du modèle ? autre solution? faut-il que je fasse un nouveau topic concernant ce problème qui n'a rien a voir avec le fittage?) et l'application des méthodes de minimisation de la fonction serait la bienvenue.

Concernant le gradient conjugué, il s'applique pour résoudre des systèmes d'équations linéaires dont la matrice est symétrique (wikipedia).
Dans la fonction spécifiée ou se trouve Ax = b ?
log(y-H) - log(A) = aX ?

BQss
Membre Irrationnel
Messages: 1202
Enregistré le: 02 Nov 2006, 04:32

par BQss » 19 Fév 2007, 14:26

Giansolo a écrit:Rebonjour à tous,

Un petit d'aide concernant la réponse précédante (robustesse du modèle ? autre solution? faut-il que je fasse un nouveau topic concernant ce problème qui n'a rien a voir avec le fittage?) et l'application des méthodes de minimisation de la fonction serait la bienvenue.

Concernant le gradient conjugué, il s'applique pour résoudre des systèmes d'équations linéaires dont la matrice est symétrique (wikipedia).
Dans la fonction spécifiée ou se trouve Ax = b ?
log(y-H) - log(A) = aX ?



*Edit

Le gradient conjugué n'est pas specialement pour les sytemes lineaires, mais pour d'autre probleme. "Conjugué" c'est juste une maniere de choisir la direction.

Si non les techniques de gradient s'adaptent a la resolution de systeme lineaire pour une matrice symetrique definie positive, car cela revient a chercher le minimum de f(x)=1/2-.
comme A est symetrique le gradient vaut:
Ax-b, et le minimum est atteint quand celui ci s'annule soit Ax=b car la matrice est definie positive et donc il s'agit bien d'un minimum.
Pour trouver ce minimum on utilise alors un algorythme dit de descente de gradient.
On recherche le minimum par minimisations successives dans des directions donné, puis a partir du nouveau minimum on recommence dans une nouvelle direction. La direction a l'iteration k vaut car c'est la valeur du gradient au point . On cherche alors le minimum qui minimise la fonction d'une variable t: dans la direction . puis on recommence.



Ces techniques sont evidemment valables donc pour la recherche de minimum de fonction quelquonque(juste quelle peuvent aussi aider resoudre numeriquement des systemes lineaire par modelisation pour des matrices particulieres).

La methode est la suivante, on cherche donc come je l'ai dit plus haut dans une direction, celle de la plus grande pente, c'est a dire la direction du gradient au point qui est normal au ligne de niveau.

Dans cette direction on va rechercher le minimum .




Donc toi soit tu appliques cela directement sur la fonction de trois variables et tu recherches le minimum du probleme au moindre carré(qui n'est pas alors lineaire, c'est a dire une somme de difference au carré quelquonque).

Soit tu minimises la solution dans un deuxieme temps avec H comme je te l'ai dit.
Mais ici le probleme est deja en une dimension, il n'y a que la variable H, donc appliquer les technique de gradient n'est pas interessant, tu ne te deplaces que sur l'axe des x:
donc une simple dichotomie est suffisante, programme une dichotomie sur la solution en H en choisissant un H de depart a hauteur de tout simplement.

BQss
Membre Irrationnel
Messages: 1202
Enregistré le: 02 Nov 2006, 04:32

par BQss » 19 Fév 2007, 14:32

voir ici pour methode de minimisation d'un probleme non lineaire.
http://www.lesia.obspm.fr/plasma/SBT/node35.html

methode de Levenberg-Marquardt

wikipedia en anglais(francais il n'y a rien):
http://en.wikipedia.org/wiki/Levenberg-Marquardt_algorithm

ici en francais des details:
http://www.becoz.org/these/memoirehtml/apbs02.html


si non il y a les technique de gradient , meme systeme que le gradient conjugué en fait, le principe est simple:
http://www.becoz.org/these/memoirehtml/apbs01.html

Giansolo
Membre Naturel
Messages: 44
Enregistré le: 02 Fév 2007, 15:38

par Giansolo » 19 Fév 2007, 15:46

Ok merci pour cette réponse!
Si jamais je coince je posterais ici,
Si tu as le temps pour regarder pour la sélection automatique des sous séries, et que tu juges de la robustesse de la méthode que j'ai developpé, ce serait chouette.

Merci encore!

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

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