IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Signal Discussion :

Ajustement d'une courbe (fitting)


Sujet :

Signal

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Ajustement d'une courbe (fitting)
    bonjour,

    voila j'ai un, problème pour faire un fitting de courbe, alors voila les données

    ma fonction est : Phi(f) cette fonction est la réponse en phase d'un système. donc j'ai les 2000 échantillons de Phi et leur fréquence correspondantes (c'est des données expérimentales) donc ce que je souhaite c'est crée un algorithme sous matlab qui va me faire un ajustement (fitting) au sens des moindres carrés de ma courbe Phi(f).

    j'ai essayé avec la fonction polyfit de matlab mais ça donne de très mauvais résultats

    voila tout, j'attends vos réponse svp, pour plus de précision n'hésitez pas m'écrire merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Tu peux essayer interp1.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    merci pour la fonction, mais je veux juste une precision, l'algorithme suit ma courbe mais à partir d'une certaine frequence ça commence à diverger, la chose à la quelle je ne trouve pas d'explication, pouvez vous svp si c'est possible me donner une explication de ce problème merci

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Cela dépend peut-être du type d'interpolation que tu as mis ?
    (linear - spline - cubic)

  5. #5
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    La question à se poser est si la dépendance entre tes deux quantités est linéaire ?

    tu peux poster une figure de ce que tu veux interpoler ?

    ++
    AlloSchool, votre école sur internet.

  6. #6
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    un ajustement (fitting) au sens des moindres carrés
    Je ne pense pas que ce soit une bonne idée: par 2000 points, tu feras passer un polynôme de degré 1999; une telle manière de faire est fondamentalement instable et tu vas obtenir une courbe qui zigzague entre les points. Il est infiniment préférable de faire un spline.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    merci les amis pour vos réponses, mais juste une précision, je ne cherche pas à faire une interpolation de ma courbe, mais plutot un algorithme au sens des moindres carrés ou meme une autre méthode pas spécialment avec les moindres carrés, pour faire un AJUSTEMENT (Fitting) de ma courbe.

    Le problème je ne trouve pas la fonction "g(f)" à utilisée pour calculer l'EQM pour que à la fin déduire mes coéfficient.

    voila le critère que j'utilise : J=[(G*Teta)-PHI] le tout au carré.

    avec teta : vecteur des coéfficients

    G : Elle contient les valeurs des fonctions de base pour chaque point
    de mesure f avec " f " la frequence.

    PHI : vecteur des valeurs de ma phase.

    donc en dérivant " J " par rapport à teta on peut déduire les coéfficients, mais le problème c'est le choix de la fonction g(f)
    pour determiner la matrice " G "

    ce que je vous propose : je vais essayer de joindre ma courbe (phase en fonction de la fréquence) pour la prochaine fois, car là je ne suis pas sur mon PC.

    merci pour votre aide et à bientot

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    voila comme prévu ma courbe de phase en fonction de la frequence, donc c'est mon objectif de courbe, c-a-d il faut que mon algorithme soit le plus proche possible de cette courbe.

    ps : cette courbe n'est que le début de mon projet, en fait c'est la courbe de phase d'un filtre passe-tout, par la suite j'aurai des courbes bcp plus complexes que celle là, qui proviennent d'une mise en cascade ou en parallele de plusieurs filtres passes-tout.

    svp aidez moi j'ai vraiment besoin d'un résultat au moin pour cette courbe. merci
    Images attachées Images attachées  

  9. #9
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    tu peux peux être utiliser un fonction du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xx = logspace(0,5,200);
    yy = 1-tanh(log(xx/1e2));
    semilogx(xx,yy)
    Il te faut paramétrer ton modèle, puis faire tourner un algorithme d'optimisation dessus (Génétique par exemple)

    [EDIT]
    Exemple de modèle :
    f(x) = a*tanh(log(x)-c) + b
    avec a,b,c les paramètres à trouver


    ++
    AlloSchool, votre école sur internet.

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    merci pour la réponse, mais je me demande est ce possible d'utilisé la fonction que vous venez de me donner (f(x) = a*tanh(log(x)-c) + b) dans le contexte des moindres carrées.

    cad : EQM: J = [ somme i=1:n {(Y(i)-(a*tanh(x)-c+b)) au carré} ]

    il faut minimisé ce critère par dérivation par rapport à la matrice des coefficients pour à la fin determiner a,b,c, et là je trouve que c'est vraiment délicat !!!

    y a t'il svp quelqu'un qui a une idée comment faire sortir les coéfficients a,b,c en forme matricielle pour les utilisés avec la fonction f(x) ci-dessus (c-à-d : modélier la fonction f(x) sous forme matricielle) ? merci

  11. #11
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Le système n'est pas linéaire, donc il te fait utiliser un autre algorithme d'optimisation que les moindres carré normal.

    Mon idée était d'utiliser une optimisation avec une algorithme génétique.

    Tu diposes de la Genetic Algorithm and Direct Search Toolbox ?

    ++
    AlloSchool, votre école sur internet.

  12. #12
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    merci encore pour cette réponse rapide

    ok j'ai compris ce que vous voulez me dire, mais le toolbox en question n'est pas disponible, j'utilise une clé qui me permets pas d'avoir ce toolbox.

    et pour etre honnete avec vous, les algorithmes génitiques, je n'en ai aucune idée, si c'est ça la seule solution franchement je vais galérer et mon boss va etre très faché contre moi, vu que j'ai pas trop avancer.

    allez les amis un peu de courrage, j'ai vraiment besoin de votre aide. merci

  13. #13
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Tu peux voir - ici - pour une implémentation de l'algorithme génétique.

    Pour l'utiliser, il te faut changer fit_fun.m, pour mettre ta fonction du cout, qui devrai etre du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function Error = fit_fun (a,b,c)
     
     % Error = [ somme i=1:n {(Y(i)-(a*tanh(x)-c+b)) au carré} ]
     Error = sum(...);
    ++
    AlloSchool, votre école sur internet.

Discussions similaires

  1. [Débutant] Ajustement d'une courbe (fitting)
    Par amine-49 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/09/2013, 10h34
  2. Réponses: 3
    Dernier message: 30/06/2013, 18h04
  3. [Débutant] fitting d'une courbe sur curvefitting toolbox
    Par mounabs dans le forum MATLAB
    Réponses: 0
    Dernier message: 23/01/2010, 13h21
  4. Fitting d'une courbe
    Par astragoth dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 21/07/2009, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo