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

MATLAB Discussion :

[lsqcurvefit] fit d'un signal avec deux équations différentes


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [lsqcurvefit] fit d'un signal avec deux équations différentes
    Bonjour,

    Je suis en train d’utiliser la fonction lsqcurvefit sur Matlab et je rencontre le problème suivant :

    J’ai une courbe de données (courbe bleu sur pièce jointe) dont la forme peut être divisée par deux tendances : dans un premier temps la courbe monte puis elle redescend. Je souhaite faire un fit de ces données et déterminer 4 paramètres qui contrôlent mes équations de fit. Là est mon problème : je veux appliquer une première équation pour le fit à la première partie de mon signal et une autre équation à la deuxième partie. Ces deux équations sont paramétrées par les 4 mêmes paramètres que je cherche à connaître.

    Est-ce que quelqu’un d’entre vous à déjà fait un fit d’un signal avec deux équations différentes et déterminé des paramètres communs aux deux équations ? Et est-ce que cela est possible ?

    En espérant que mon explication est assez claire.

    Merci par avance,

    Raw
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    il faut que tu définisses ta fonction comme ceci (dans un fichier à part)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function f(x,x0,coeffs)
    % coeffs est un vecteurs contenant tes 4 coefficients
    if x<=x0
    ... % definition de la première partie
    else
    ... % definition de la seconde partie
    end
    puis tu appeles lsqcurvefit comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mesCoeffs = lsqcurvefit(@(coeffs,xdata) f(xdata,x0,coeffs),coeff0,Xdata,Ydata...);
    ou Xdata et Ydata sont tes points et coeff0 tes coefficients initiaux pour l'optimisation

    là j'ai mis le point de rupture x0 en paramètre au cas ou il soit variable en fonction de tes échantillons de points et qu'il soit connu (auquel cas il faut le renseigner avant l'appel de lsqcurvefit)
    sinon tu peux le mettre en dur dans ta fonction s'il est constant et connu ...
    ou alors l’intégrer dans ton vecteur de coefficients pour qu'il soit recherché par l'optimisation si inconnu

  3. #3
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Salut le fab,

    Merci pour ta réponse, j'utilise déjà une fonction annexe où je donne les deux équations que je souhaite faire fiter sur mes données. J'ai suivi ton conseil et au lieu de faire une boucle if j'ai fait quelque chose de ce style :

    function [] = fonction_fit(paramètres_initiaux, temps)
    ....
    F (1 : x0) = équation première partie
    F(x0 + 1 : length(signal) = équation deuxième partie
    ...

    Ensuite j'appelle la fonction dans mon code principal par :
    ...
    [paramètres_cherchés] = lsqcurvefit(@fonction_fit, paramètres_initiaux, temps... );
    ...

    x0 étant mon point de changement de tendance.

    Cela semble fonctionne maintenant, le problème étant désormais que j'ai une discontinuité dans mon signal fité à l'endroit de x0 soit au changement d'équation, je pense que c'est normal, mais si tu as une idée là dessus, je veux bien la connaître !

    Encore merci de ton aide,

    Raw
    Images attachées Images attachées   

  4. #4
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    tu peux utiliser fmincon au lieu de lsqcurvefit, ce qui te permettra de rajouter des contraintes supplémentaire pour éviter cette discontinuité

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/10/2007, 14h35
  2. Etat avec deux sources différentes
    Par Pigwi dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/06/2007, 09h43
  3. Datagrid et combobox avec deux datasource différents
    Par RaelRiaK dans le forum VB.NET
    Réponses: 9
    Dernier message: 07/02/2007, 09h20
  4. Ecrire dans une CEdit avec deux Couleurs Différentes
    Par yoyothebest dans le forum MFC
    Réponses: 1
    Dernier message: 25/03/2006, 19h09
  5. Réponses: 8
    Dernier message: 13/03/2006, 17h37

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