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 :

Régression non linéaire


Sujet :

MATLAB

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Par défaut Régression non linéaire
    Bonjour,

    j'aimerais trouver l'exponentielle qui suit le mieux une courbe. En gros je veux trouver A,B,C tq Y=A.exp(B.X)+C. Bon je sais je pourais le programmer...
    Du coup j'ai deux questions :
    1) Est-ce que matlab ne fait que des régressions polynomiales ou je suis passé à côté?
    2) Est-ce qu'il existe des bibliothèques des fonctions libres pour matlab ?
    merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Par défaut
    Bonjour.
    J'utiliserais la fonction lsqcurvefit dans ton cas.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Par défaut inconnue au bataillon
    J'utilise la version 7.5

  4. #4
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

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

    Ton code devrait être du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    % A.exp(B.X)+C
    % Param = [A B C]
    Fun = @(Param,X)(Param(1)*exp(Param(2)*X) + Param(3)); 
     
    % Init Param
    P0 = [1 1 0];
     
    % Optimisation
    Poptim = lsqcurvefit(Fun,P0,xdata,ydata)
    ++ bonne chance

  5. #5
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    La fonction LSQCURVEFIT fait partie de la Optimization Toolbox.
    Donc s'il ne l'a pas comme il l'a signalé il faudrait trouver une autre solution

  6. #6
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut
    Euuh,

    j'ai la version 7.0 et je dispose de la fonction lsqcurvefit dans l'Optimization Toolbox...

    Sinon, tu dispose de la Genetic Algorithm and Direct Search Toolbox ?


    ++

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Par défaut
    Je maintiens : je ne trouve pas cette fonction. Soit je l'ai pas, soit je ne la trouve pas.
    D'où la question bonus : comment puis-je trouver la liste des packages (ou toolbox) qui sont installés...ou pas ?
    Dans la même idée : je fais comment pour réccupérer l'"optimization toolbox" ?

  8. #8
    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 loique Voir le message
    D'où la question bonus : comment puis-je trouver la liste des packages (ou toolbox) qui sont installés...ou pas ?
    : Comment connaitre la liste des Toolbox installées sur un ordinateur ?
    Citation Envoyé par loique Voir le message
    Dans la même idée : je fais comment pour réccupérer l'"optimization toolbox" ?
    => Optimization Toolbox

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Par défaut plus de question votre honneur
    merci à vous, j'ai tout ce qu'il me faut.

  10. #10
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Ecris sur papier ton équation :

    Tu cherches a,b et c minimisant ||D|| tel que D[i] = y[i]-(a*exp(b*x[i])+c).
    Avec X=(x[1],...x[N]) les abscisses de tes points, Y = (y[1],...y[N]) les ordonnées.

    Dans la pratique, on cherchera plutôt à minimiser ||D||² avec ||.|| la norme euclidienne :

    ||D||² = ||Y||² + N*c + a² sum(exp(2*b*x[i])) -2 c sum(y[i]) - 2 a sum(y[i] exp(b*x[i])) + 2 a c sum(exp(2*b*x[i]))

    Ensuite tu cherches a minimiser cette quantité donc à annuler la dérivée :

    d/da (||D||²) = 0 ..... tu obtiens une expression de "a" en fonction de "b" et "c"

    Tu remplaces dans ||D||² "a" par l'expression trouvé dans l'étape précédente.

    d/dc (||D||²) = 0 .... tu obtiens une expression de "c" en fonction de "b"

    Tu remplaces dans ||D||² "a" par l'expression trouvé dans l'étape précédente.

    d/db (||D||²) = 0 .... tu obtiens une expression de "b" en fonction de constantes.

    tu as "b", donc tu as "c" et donc tu a "a".

    J'avoue que c'est fastidieux à faire mais au pire y a des outils tel que "Maple"
    qui peuvent t'aider.

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

Discussions similaires

  1. Régression non-linéaire
    Par GroRelou dans le forum MATLAB
    Réponses: 5
    Dernier message: 04/03/2013, 09h03
  2. Régression non linéaire
    Par wolfenstein51 dans le forum Méthodes prédictives
    Réponses: 2
    Dernier message: 22/03/2012, 09h38
  3. Réponses: 1
    Dernier message: 30/06/2010, 08h47
  4. Régression non linéaire
    Par valentin.guilhem dans le forum R
    Réponses: 6
    Dernier message: 01/04/2010, 15h19
  5. Régression non linéaire
    Par iamsebfont dans le forum MATLAB
    Réponses: 0
    Dernier message: 13/02/2010, 12h31

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