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 :

Détermination d'un plan des moindres carrés


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 62
    Points
    62
    Par défaut Détermination d'un plan des moindres carrés
    Bonjour,

    J'ai un certain nombre de points de coordonnées X Y Z et j'aimerai bien ajuster ces points par un plan via les moindres carrés.

    Existe-t-il une fonction Matlab qui permet de retirer les paramètres a, b, c du plan d'ajustement lorsqu'on lui donne les coordonnées des points ?

    Je vous remercie pour l'aide que vous pourrez m'apporter !

  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 302
    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 302
    Points : 53 160
    Points
    53 160
    Par défaut
    Il n'y a pas de fonction pour les moindres carrés dans Matlab. Mais, il doit exister des outils dans certaines toolbox (Statistic etc...)

    Sinon, cette méthode est facilement programmable lorsque l'on a l'algorithme... et comme sur developpez.net, il existe un excellent forum algorithme :
    https://www.developpez.net/forums/showthread.php?t=309084
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 62
    Points
    62
    Par défaut
    Un grand merci pour l'info !

    Je vais implémenter ça alors

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Points : 29
    Points
    29
    Par défaut
    Excusez moi de mettre mon grain de sel, mais il existe sous matlab la fonction "lsqcurvefit" qui fonctionne par la méthode des moindres carrés et qui pourrait te permettre de trouver les paramétres a,b,c.

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    J'ai regardé le help de cette fonction mais j'ai pas l'impression qu'on sait faire ça pour des données X Y Z. De plus je ne comprends pas très bien les paramètres de cette fonction..;

    Quelqu'un saurait-il m'aider ?

  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 302
    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 302
    Points : 53 160
    Points
    53 160
    Par défaut
    C'est exact, mais comme je le précisais, ce genre de fonction se trouve dans les toolbox, pas dans les fonctions de base de Matlab.

    lsqcurvefit fait partie de l'Optimization Toolbox.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 62
    Points
    62
    Par défaut
    Ok. Merci pour le renseignement !

    NB :

    J'ai trouvé comme solution la suivante (en piece jointe)

    Et voici le code Matlab :


    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
     
    % Construction de la matrice M
    sxx = sum (power(PointsSegment(:,1),2))
    sxy = sum (PointsSegment(:,1).*PointsSegment(:,2))
    sx = sum (PointsSegment(:,1))
    syy = sum (power(PointsSegment(:,2),2))
    sy = sum (PointsSegment(:,2))
    n = PO
    MatriceM = [sxx sxy sx; sxy syy sy; sx sy n]
     
    % Construction de la matrice V
    sxz = sum (PointsSegment(:,1).*PointsSegment(:,3))
    syz = sum (PointsSegment(:,2).*PointsSegment(:,3))
    sz = sum (PointsSegment(:,3))
    MatriceV = [sxz; syz; sz]
     
    % Recherche de la matrice X (a b c)
    MatriceX = inv(MatriceM) * MatriceV
    Je ne suis vraiment pas sur de cette technique car quand j'exécute , j'obtiens une valeur de c fort grande par rapport à celle de a et b !

    Y aurait-il une erreur qui m'aurait échapée ?

    Merci...
    Images attachées Images attachées  

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Points : 29
    Points
    29
    Par défaut
    Au temps pour moi, je croyais que c'était une fonction vu que je l'appelais directement dans mon prog.
    Ca m'apprendra

  9. #9
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Bonjour,

    La solution donnée en piece jointe est juste, mais j'ai pas verifié le code que t'as donné en Matlab.

    le systeme d'équation (28) donné dans le document, on peut le résoudre facilement en Matlab:
    si on a : A*c=B donc:
    Bon voilà un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    x=[1 3 4 5 2];
    y=[2 3 4 5 2];
    z=[8 6 1 8 0];
    A=[x; y; ones(1,5)]*[x; y; ones(1,5)]';
    B=[x; y; ones(1,5)]*z';
    c=A\B;
    [X,Y]=meshgrid(0:6);
    Z=c(1)*X+c(2)*Y+c(3);
    plot3(x,y,z,'r*')
    grid on
    hold on
    mesh(X,Y,Z)
    et si tu remarque que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A=[x; y; ones(1,5)]*[x; y; ones(1,5)]';
    B=[x; y; ones(1,5)]*z';
    la matrice en rouge est répetée dans les deux membres, tu peux l'enlever et ça sera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A=[x; y; ones(1,5)];
    c=z/A;
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

Discussions similaires

  1. Détermination des paramètres d'une gaussienne au sens des moindres carrés
    Par DJEcalcul dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 18/03/2015, 17h43
  2. Algorithme des moindre carrés alternatifs
    Par antoinerochette dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 16/10/2008, 17h09
  3. Réponses: 2
    Dernier message: 24/05/2008, 22h27
  4. méthode des moindres carrés
    Par sinna dans le forum Mathématiques
    Réponses: 4
    Dernier message: 05/04/2008, 22h41
  5. Methode des moindres carrées
    Par 77Camille dans le forum Mathématiques
    Réponses: 2
    Dernier message: 11/06/2007, 19h40

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