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 :

problème de fit non linéaire


Sujet :

MATLAB

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12
    Par défaut problème de fit non linéaire
    Bonjour,
    je cherche a créer un programme fit non-linéaire de forme sigmoïdale.

    Après avoir trouvé une toolbox gratuite (ezyfit) http://www.fast.u-psud.fr/ezyfit/ qui ne me donnait pas entière satisfaction (je sais pas si beaucoup ont des retours sur cette toolbox mais certains fits étaient très fantaisistes),comme j'ai un certain nombre de fits à faire, je ne peux pas me permettre de chercher des paramètres manuellement afin de les corriger, mais j'utilise certainement mal ses capacités.

    je n'ai pas non plus l'accès à la statistic toolbox

    Donc j'ai décidé de me lancer dans le codage d'un petit programme de fit à l'aide de ce tutoriel trouvé sur internet http://nte.mines-albi.fr/MATLAB/co/uc_NonLineaire.html

    une fois le tutoriel appliqué à mes données j'obtiens
    ce programme en 3 parties:
    partie 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %%%%%%%%%%%%%%%%%%
    %  fit perso  1  %
    %%%%%%%%%%%%%%%%%%
    %forme de la fonction à fitter
     
    function y = fit (a, x)
    y = a(1)/(a(2)+(exp(a(3)-(a(4)*x))))
    partie 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %%%%%%%%%%%%%%%%%
    %  fit perso 2  %
    %%%%%%%%%%%%%%%%%
    function out = F(a)
    	 global xi yi
    	out = sum ((yi - fit(a,xi)).^2);
    partie 3
    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
     
    %%%%%%%%%%%%%%%%%
    %  fit perso 3  %
    %%%%%%%%%%%%%%%%%
    % Pour passer les points expérimentaux à F
    	global xi yi
    % Définition des points expérimentaux
    % (en général chargés depuis un fichier              
    	xi = mxttdetectc(1,:) % correspond au vecteur ligne: 0 50 70 90 110 130 150 200 250 300 350
    	yi = mxttdetectc(2,:) % correspond au vecteur ligne: 0.1111 0 0 0.3750 0.4444 0.8000 0.8889 1.0000 1.0000 1.0000
    %
    a0 = [1 1 1 1] % paramètres initiaux 
    % Appel de l'optimiseur. Attention aux '' autour de F
    	asol = fminsearch ( 'F', a0);
     
    % Faire une courbe qui présente les points expérimentaux et le fit
    plot (xi, yi, '*', xi, fit(asol, xi))
    et (hélas) ce message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ??? Error using ==> mrdivide
    Matrix dimensions must agree.
     
    Error in ==> fit at 5
    y = a(1)/(a(2)+(exp(a(3)-(a(4)*x))))
    Error in ==> F at 6
    	out = sum ( (yi - fit(a,xi)).^2 );
    Error in ==> fminsearch at 175
    fv(:,1) = funfcn(x,varargin{:});
    Merci a ceux qui prendront la peine de lire cet immonde pavé
    (si ça se trouve c'est juste une petit erreur)
    (sinon même si c'est hors sujet,si quelqu'un a une solution pour faire le fit sous R,je prends aussi)

  2. #2
    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
    Par défaut
    Bonjour,

    première remarque : les variables globales c'est mal!! Bon tu as juste suivi le tutorial et l'usage des variables globales était peut-être justifié à l'époque à laquelle a été écris ce tutorial, mais dans les versions pas trop vieille de matlab, fmincon accepte les fonctions avec paramètres.

    Pour l'erreur que tu montres, c'est un problème d'opérateur : dans l'opération a(1)/(a(2)+(exp(a(3)-(a(4)*x)))) "/" est la division matricielle et comme x est un vecteur, ça pose un problème de dimension (les a(i) étant des scalaires). Il faut utiliser l'opérateur ./ qui effectue la division terme à terme.

    Donc quelques corrections :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %%%%%%%%%%%%%%%%%%
    %  fit perso  1  %
    %%%%%%%%%%%%%%%%%%
    %forme de la fonction à fitter
    
    function y = fit (a, x)
    y = a(1)./(a(2)+(exp(a(3)-(a(4)*x))))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    %%%%%%%%%%%%%%%%%
    %  fit perso 2  %
    %%%%%%%%%%%%%%%%%
    function out = F(a,xi,yi)
    	out = sum ((yi - fit(a,xi)).^2);
    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
    %%%%%%%%%%%%%%%%%
    %  fit perso 3  %
    %%%%%%%%%%%%%%%%%
    % Pour passer les points expérimentaux à F
    
    % Définition des points expérimentaux
    % (en général chargés depuis un fichier              
    	xi = mxttdetectc(1,:) % correspond au vecteur ligne: 0 50 70 90 110 130 150 200 250 300 350
    	yi = mxttdetectc(2,:) % correspond au vecteur ligne: 0.1111 0 0 0.3750 0.4444 0.8000 0.8889 1.0000 1.0000 1.0000
    %
    a0 = [1 1 1 1] % paramètres initiaux 
    % Appel de l'optimiseur. Attention aux '' autour de F
    	asol = fminsearch ( @(a) F(a,xi,yi), a0);
    	                                 
    % Faire une courbe qui présente les points expérimentaux et le fit
    plot (xi, yi, '*', xi, fit(asol, xi))
    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.

  3. #3
    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 valentin.guilhem Voir le message
    (sinon même si c'est hors sujet,si quelqu'un a une solution pour faire le fit sous R,je prends aussi)
    Tu peux poser ta question sur le forum R

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12
    Par défaut
    Merci beaucoup pour ces conseils (je suis désolé d'avoir utilisé des variables globales, je ne recommencerais pas ).
    En tout cas le fit marche pour un sujet, je vais tenter de l'améliorer pour qu'il me traite les sujets à la suite.
    Donc encore merci

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12
    Par défaut
    Bonjour je remonte un peu ce topic pour savoir si quelqu'un avait une idée pour rajouter un correcteur a ce petit programme de fit.
    Ou éventuellement y implanter un modèle de régression suivant un algorithme de "maximum likelyhood" à la place du minimum square
    Merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/05/2015, 14h26
  2. Fit non linéaire
    Par cad78 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 05/05/2011, 06h15
  3. [Débutant] problème inverse non linéaire
    Par autocadNUL dans le forum MATLAB
    Réponses: 2
    Dernier message: 30/04/2011, 14h22
  4. Instabilité dans un programme de fit non linéaire
    Par Dam2227 dans le forum Mathématiques
    Réponses: 11
    Dernier message: 24/04/2010, 14h17
  5. Problème de convergence, moindres carrés non-linéaire
    Par matxl dans le forum Mathématiques
    Réponses: 7
    Dernier message: 11/08/2008, 15h47

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