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 :

Code pour curve fitting avec un modèle connu [Débutant]


Sujet :

Signal

  1. #41
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut

    Tu as recommencé à reprendre la deuxième colonne pour y alors qu'on était parti sur la colonne 4

    Donc ça marche avec la 4, ça devrait aussi marcher pour la 2, si tu veux je pourrais regarder mais on poourrais peut-être rester concentré sur la 4, non?

    EDIT :
    Non, d'ailleurs, pour la 2, ça doit pas être la même équation?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  2. #42
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 29
    Points : 2
    Points
    2
    Par défaut
    Pour répondre à ton édit: si, je vais utiliser la même équation pour modeler les trois dernières colonnes du tableaux. Ce sont des composantes qui sont liées et suivent "à peu près" le même modèle. . . On m'a confirmé l'utilisation de ce modèle pour les 3 composantes.(3 dernières colonnes, la première étant le temps).

    Oui oui désolé, mais le dataset ne change en rien le comportement du code . . .

    Donc j'ai ça, avec la 4 :


    Pas de grande différence . . .
    Il y'a forcément une incohérence dans mon code quelque part, je n'arrive pas à trouver ce qui pèche, damn !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    filename = 'WRHS.xls';
    file= xlsread (filename);
    x= file (:,1);
    y= file (:,4);
     
    %lb = [ -1 -1 -1 -1 -1 -1]; %define the lower bound
    %ub =[1 1 1 1 1 1]; %define the upper bound
    options = optimset('lsqcurvefit');
    options = optimset(options,'LevenbergMarquardt' ,'on');
    options.MaxFunEvals = 5000;
    options.MaxIter = 600;
    [newParameters,error] = lsqcurvefit(@myFunction, [1 1 1 1 1 1],(x-mean(x))/std(x),y,[],[], options);
     
    figure
    scatter(x,y,'.') %plot the scatter plot
    hold %hold the figure
     
    %use new parameters to get new output values
    y2 = myFunction(newParameters,x); 
     
    %plot the new data using the color red
    plot(x,y2,'r')
    Est-ce qu'à chaque fois que j'utilises x de dois remplacer par (x-mean(x))/std(x) ?

    Pour les plots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    figure
    scatter(x,y,'.') %plot the scatter plot
    hold %hold the figure
     
    %use new parameters to get new output values
    y2 = myFunction(newParameters,x);
    est correct ?

    Je viens de relancer Matlab, et à l'éxecution il me demande d'augmenter MaxFunEvals et MaxIter, j'en suis là déjà, ça commence à faire beaucoup . . . MaxFunEvals est censé faire 600 dans mon cas !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    options.MaxFunEvals = 10000;
    options.MaxIter = 5000;
    Toujours le même graph !

  3. #43
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Pour calculer le nouveau y, il faut recentre x mais pour l'afficher, il faut utiliser x... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    y2 = myModel(newParameters,(x-mean(x))/std(x));
    plot(x,y2,'r')
    Mais ton problème vient du fait que lsqcurvefit ne prends pas en compte le LevenbergMarquardt, sur quelle version de matlab es-tu? (Apparemment si Algorithm n'est pas reconnu, il devrait accepter 'LevenbergMarquardt' ,'on'...
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  4. #44
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 29
    Points : 2
    Points
    2
    Par défaut
    Sur J'ai une version mac aussi, mais xlsread ne marche pas bien dessus.
    Je pourrais essayer passer mes xls en .mat, et de tester sous la 7.6.0.324 (R2008a) Mac . . .

    Comment je lis mes colonnes du coup ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    load WRHS.mat 
    x = ?
    y = ?

  5. #45
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par Ayvik Voir le message
    Sur J'ai une version mac aussi, mais xlsread ne marche pas bien dessus.
    Je pourrais essayer passer mes xls en .mat, et de tester sous la 7.6.0.324 (R2008a) Mac . . .

    Comment je lis mes colonnes du coup ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    load WRHS.mat 
    x = ?
    y = ?
    pareil :
    x = file(:,1)
    y = file(:,2)
    Mais ça risque de servir à rien, apparemment ce changement a eu lieu à partir de la r2008b : http://www.mathworks.com/access/help...bro3heq-1.html
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #46
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    En fouillant sur le net, dans un fichier d'aide de lsqcurvefit ancienne version :

    Medium-Scale Optimization. lsqcurvefit, with the LargeScale parameter set to 'off' with optimset, uses the Levenberg-Marquardt method with line-search
    Donc essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    options = optimset('LargeScale','off');
    Et tu ne change rien d'autre (ni MaxFunEvals ni MaxIter).
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #47
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 29
    Points : 2
    Points
    2
    Par défaut
    J'essaie ça mais c'est pas bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    load WRHS.mat
     
    x= WRHS(:,1);
    y= WRHS(:,4);
    C'est fou même pour un truc basique comme ça, je viens de faire 30 pages web: rien, pas un exemple ! (J'entends pour assigner les colonnes)
    Il n'y a besoin de rien d'équivalent à xlsread ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    filename = 'WRHS.xls';
    file= xlsread (filename);
    x= file (:,1);
    y= file (:,4);
    Et donc, ça va mal, c'est dommage . . .
    Tu es sur une version postérieure à la R2008b toi ?
    Et ce code fonctionne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    ...
    ...
    ...
    options = optimset('lsqcurvefit');
    %options = optimset(options,'LevenbergMarquardt' ,'on');
    options = optimset('Algorithm','levenberg-marquardt');
    options.MaxFunEvals = 5000;
    options.MaxIter = 600;
    [newParameters,error] = lsqcurvefit(@myFunction, [1 1 1 1 1 1],(x-mean(x))/std(x),y,[],[], options);
     
    figure
    scatter(x,y,'.') %plot the scatter plot
    hold %hold the figure
     
    %use new parameters to get new output values
    y2 = myFunction(newParameters,(x-mean(x))/std(x)); 
     
    %plot the new data using the color red
    plot(x,y2,'r')
    Il faut que je trouve une R2008b alors

  8. #48
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 29
    Points : 2
    Points
    2
    Par défaut
    Avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    filename = 'WRHS.xls';
    file= xlsread (filename);
    x= file (:,1);
    y= file (:,4);
     
    options = optimset('lsqcurvefit');
    options = optimset(options,'LevenbergMarquardt' ,'on');
    options = optimset('LargeScale','off');
    %options.MaxFunEvals = 10000;
    %options.MaxIter = 5000;
    [newParameters,error] = lsqcurvefit(@myFunction, [0 0 0 0 0 0],(x-mean(x))/std(x),y,[],[], options);
     
    y2 = myFunction(newParameters,(x-mean(x))/std(x)); 
     
    figure;
    scatter(x,y,'.') ;
    hold;
    plot(x,y2,'r');
    J'obtiens ça :


    Donc ça fonctionne ! ! !
    Plus qu'à mettre ça en forme et c'est bon !
    Me semble t'il . . .

    Mon cher Magelan, tu es le forumeur le plus tenace qui m'ait jamais aidé !


    Mille merci !
    Pour ta patience aussi . . .

    Il en faut plus des gens comme ça !

  9. #49
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    As-tu lu mon dernier message? juste au dessus du tien sur cette page?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  10. #50
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    COOOOLLLLL!!!

    En même temps, aujourd'hui j'étais bloqué devant mon pc, en t'aidant ça a un peu ralenti ce que je faisais mais le principal c'est que maintenant ça marche!!
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  11. #51
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 29
    Points : 2
    Points
    2
    Par défaut
    Voir l'update du post précédent

    Super ! Je teste un peu tous mes fichiers, ça à l'air de réagir plutôt pas mal, même qd il y'a des trous dans les données . . .

    C'est super cool.

    Pour la mise en forme, je trouverais facilement dans la documentation je pense ? La date en format habituel par exemple ?

    En tout cas, un grand merci, vraiment.
    J'aurais galéré pendant 10 ans sans ton aide, et j'ai du coup appris plein de choses

    Merci de ton temps !

    EDIT:

    Du coup, je me répète !
    Merci de ton temps !
    Tu m'as l'air d`être un peu calé sur le sujet quand même -> MP

  12. #52
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par Ayvik Voir le message

    Pour la mise en forme, je trouverais facilement dans la documentation je pense ? La date en format habituel par exemple ?
    Je ne suis pas sûr que tu parles de ça mais va faire un tour du coté de datestr / datenum
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  13. #53
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 29
    Points : 2
    Points
    2
    Par défaut
    Si si, c'est ça apparement !
    Parfait
    Merci !

    Est-ce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    No improvement in search direction: Terminating.
    C'est normal ?

    Mon graph ressemble exactement à celui de la Toolbox, mais il me marque ça tout de même.

  14. #54
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Vu la phrase, ça veut dire (à prendre avec des pincettes) que l'algorithme n'a pas forcément trouvé une solution qui satisfait ces critères d'arrêt habituel, mais comme apparemment il ne trouve pas mieux, au bout d'un certain nombre d'itération, il s'arrête. Ca peut arriver si tes données sont un peu trops disperser par exemple.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  15. #55
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 29
    Points : 2
    Points
    2
    Par défaut
    Ah ok, c'est donc bien ce qu'il me semblait . . .
    Je vais chercher un peu sur la question, le tout étant de savoir si la solution idéale qu'il trouverait serait vraiment signicativement différente de celle qu'il produit en s'arrêtant avant !


  16. #56
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    C'est là ou il faudrait peut-être faire varier les paramètres, comme l'initialisation, les tolérances sur les calculs de fonction, le nombre d'itérations...
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  17. #57
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 29
    Points : 2
    Points
    2
    Par défaut
    J'y jetterai un oeil demain . . . trop crevé ce soir
    Mais je garde les idées sous la main, optimset va m'être utile je crois !

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Code pour iframe incompatible avec IE.
    Par defacta dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/06/2009, 17h28
  2. Probleme avec code pour fond musical
    Par Yanout dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 05/09/2007, 17h12
  3. [Tableaux] probleme avec mon code pour faire un parseur !
    Par Joe-La-Boule dans le forum Langage
    Réponses: 10
    Dernier message: 11/10/2006, 15h35
  4. [VB]code pour sendkeys avec Alt + F
    Par Nicko29 dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 20/01/2006, 08h23

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