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 :

[polyfit] Approximation de droite par : soucis de performance.


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Clotho
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2011
    Messages
    1 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 522
    Par défaut [polyfit] Approximation de droite par : soucis de performance.
    Salut la compagnie!

    Il y a longtemps que je ne vous ai plus cassé les pieds ici (principalement parce que mes questions ont des réponses déjà fournies en cherchant un peu...) mais là je ne sais pas trop par quel côté aborder mon problème.

    Pour faire simple, j'ai un signal très bruité que je dois décomposer en deux parties, et ces deux parties subissent ensuite une approximation pour me fournir dans le cas idéal 2 équations de droites quand c'est possible, sinon une équation de droite, ou quand c'est calme rien. (Cf pièce jointe, des courbes extraites sous Excel ...)

    On voit que le premier signal ne fournit qu'une droite, et le second est un cas "bien mais pas top".

    Je n'ai pas/plus vraiment de soucis sur la syntaxe et le fonctionnement de mon code matlab (pour une fois ) mais un soucis de performances.

    Pour faire ces approximations linéaires, j'ai une équation du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coefficients_droite = polyfit((1:fin_droite1,signal_entree(1:fin_droite1),1)
    (c'est bien sûr pas fonctionnel comme ça)

    La procédure est donc (très) simple, et me donne les bons coefficients a et b de l'équation y=ax+b.

    Mon soucis, on y arrive, est qu'utiliser polyfit me semble revenir à chasser des moustiques avec un lance-flamme. Au profiler pour traiter 25000 itérations il me faut une quarantaine de secondes, mais presque la moitié du temps est nécessaire pour une vérification de la fonction polyfit, à savoir la condition:

    polyfit>warnIfLargeConditionNumber
    , et le calcul qui y est attenant, passant par un condest.

    On touche à mes limites, parce que:
    -j'ai beau pratiquer Matlab, je connais un dixième des fonctions en étant très optimiste.
    -j'ai beau faire un peu de traitement de données/signal, je suis chimiste (j'aime raconter ma vie) donc je ne sais pas vraiment comment faire pour traiter un signal aussi dégueulasse en entrée et arriver à extraire une équation de droite.

    Donc on va enfin arriver à ma question:

    Mon code marche, c'est la fête, mais c'est trop lent. Pour une approximation linéaire, est-ce que vous avez quelque chose en magasin de plus efficace que polyfit, et qui marcherait sur un signal affreux (donc pas de moyenne glissante ou de calcul de droite niveau collège, j'ai essayé...)?

    J'ai un peu regardé interp1, qui me semble rapide pour trouver l'ordonnée à l'origine (mais poins précis que polyfit...) mais je ne vois pas comment l'utiliser pour le coefficient directeur, avec un signal bruité.
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    L'opérateur backslash \ devrait être plus efficace que polyfit

    => Ajustement aux moindres carrés de courbes et de surfaces

  3. #3
    Membre Expert
    Avatar de Clotho
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2011
    Messages
    1 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 522
    Par défaut
    Ok parrain.

    Mais vu que je suis en vacances je chercherai à mettre en oeuvre à la "rentrée" ! Et si j'y arrive pas je continuerai ce thread. Si j'y arrive je donnerai un ordre de grandeur du gain de performance.

    Et comme le dit le premier post dans le lien que tu as donné, effectivement, on est trois à pratiquer Matlab au boulot (bon, c'est moi le meilleur, c'est dire si les autres sont mauvais... ) et personne ne connaissait...

    To be continued...

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    Citation Envoyé par Clotho Voir le message
    Mais vu que je suis en vacances je chercherai à mettre en oeuvre à la "rentrée" ! Et si j'y arrive pas je continuerai ce thread. Si j'y arrive je donnerai un ordre de grandeur du gain de performance.
    salut

    j'avais fait un algo de "dérivée glissante", cad des régressions linéaires sur fenêtres de n points glissantes
    pour un échantillon de 300 000 points (et fenêtre sur 5 points), j'avais les performance suivantes :
    - polyfit : 155 s
    - régression linéaire (*) : 14 s
    - opérateur \ : 3.5 s

    y a pas à dire, c'est que qui va le mieux

    sinon j'ai pas testé, mais le pire doit être lsqcurvefit

    fab

    (*) : développement à la main de pente = covariance/variance

  5. #5
    Membre Expert
    Avatar de Clotho
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2011
    Messages
    1 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 522
    Par défaut
    Des nouvelles!

    J'ai donc appliqué la division à gauche (ou \, ou mldivide...) en lieu et place de mon polyfit.

    Le premier point: ça fonctionne et fournit rigoureusement les mêmes résultats. Ce qui est le plus important.

    Ensuite de passer par \ me permet d'exécuter 20497 calculs en 19.33s tandis que polyfit réclame 39.20s. La vitesse d'exécution est donc doublée!
    Ca correspond au meilleur pronostic possible, la fonction polyfit réclamant 20s d'exécution et \ quasiment rien...

    Le gain est appréciable, je me retrouve limité par le temps de lecture dans Excel. Ce qui me fait supposer qu'à part quelques petites améliorations sur des fonctions garde-fou j'ai à peu près atteint le niveau de performance maximal.

    Merci de m'avoir aiguillé vers cet opérateur, quand j'aurais un peu plus de temps je chercherai à mieux me familiariser avec pour saisir un peu plus l'étendue de ses capacités!

    Une fois encore merci, et le sujet passe en résolu!

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par Clotho Voir le message
    je me retrouve limité par le temps de lecture dans Excel.
    Tu pourrais nous en dire plus ?
    Que fais-tu exactement ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [chmod] Remettre les droits par défaut
    Par Haze. dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 06/09/2017, 20h33
  2. Réponses: 5
    Dernier message: 02/01/2008, 16h58
  3. Réponses: 3
    Dernier message: 23/11/2007, 12h50
  4. approximation de courbe par des segments
    Par dseguret dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 27/02/2007, 21h03
  5. [Installation] Gestion des droits par dossier ?
    Par Glob dans le forum CVS
    Réponses: 3
    Dernier message: 13/03/2006, 15h04

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