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 :

Comment effectuer une régression linéaire en espace 3D ?


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Comment effectuer une régression linéaire en espace 3D ?
    Bonjour à tous,

    Je vous écris car j'ai un problème assez pressant à résoudre. Je suis en train de réaliser un programme qui nécessite, à un certain moment, d'avoir l'équation et de tracer la droite qui approxime au mieux une droite passant par 3 points de mon espace.

    Je détaille: j'ai un espace à 3 dimensions où j'ai 3 points qui sont presque alignés. J'aimerais arriver à effectuer une régression linéaire de ces 3 points afin d'aobtenir la droite qui passe au mieux par ces 3 points (par exemple, au sens des moindres carrés).

    Il existe une fonction qui réalise presque ce que je veux, c'est polyfit. Mais cette fonction ne marche pas en 3D, seulement dans le plan.

    Je possède bien entendu les coordonnées 3D de chacun de mes 3 points.

    Si vous avez une solution, aidez moi svp car là, je bloque totalement.

    Merci bcp d'avance

  2. #2
    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 polyfit en 3D
    Bonjour,

    J'ai cherché s'il y a une fonction Matlab déjà prête qui réalise le fit en 3D, mais je ne l'ai pas trouvé, donc j'ai essayé de la programer mais seulement pour 3 points. et enfin je pense que j'ai réussi. donc voila comment ca marche :
    soient a,b,c 3 vecteurs ligne de taille 1*3 representent les 3 coordonnées en 3D, et soit don un vecteur ligne contient les abcisses (x) pour tracer la droite. en tapant : v=fit3(a,b,c,don); la fonction retourne une matrice de 3 lignes, chaque ligne représente un coordonnée de plusieurs points dont les abcisse sont le contenu de don.voila le 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    function v=fit3(A,B,C,donnee)
    % par exemple :
    %A=[1 3 5];B=[1 7 0];C=[2 6 1];donnee=0:10;
     
    p=[A;B;C]; 
    ab=sqrt((p(2,:)-p(1,:))*(p(2,:)-p(1,:))');
    M=zeros(3,3);
    M(:,1)=(p(2,:)-p(1,:))'/ab;
    x3=(p(3,:)-p(1,:))*M(:,1);
    ac2=(p(3,:)-p(1,:))*(p(3,:)-p(1,:))';
    y3=sqrt(ac2-x3^2);
    M(:,2)=((p(3,:)-p(1,:))-x3*M(:,1)')/y3;
    M(1,3)=M(2,1)*M(3,2)-M(3,1)*M(2,2);
    M(2,3)=M(1,2)*M(3,1)-M(1,1)*M(3,2);
    M(3,3)=M(1,1)*M(2,2)-M(2,1)*M(1,2);
     
    Xe=[0 ab x3];
    Ye=[0 0 y3];
    P=polyfit(Xe,Ye,1);
    syms X x
    V=[X; P(1)*X+P(2); 0];
    v=M*V+p(1,:)';
    X=solve(v(1)-x,X);
    x=donnee;
    X=eval(X);
    v=eval(v);
    plot3(v(1,:),v(2,:),v(3,:));hold on
    plot3(p(:,1),p(:,2),p(:,3),'*k')
    grid
    xlabel('X');ylabel('Y');zlabel('Z');
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Waouhhh merci bcp
    Waouuhhhhhh ça marche trop bien!!! Je suis impressionné!!!

    Ca donne exactement ce que j'attendais!

    Je te remercie vraiment beaucoup!!!

    A charge de revanche

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

Discussions similaires

  1. Comment effectuer une recherche dans une listBox?
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 19/05/2006, 16h15
  2. Réponses: 2
    Dernier message: 09/02/2006, 07h53
  3. [C#][ MSI] Comment effectuer une mise à jour d'application ?
    Par th3r1ddl3r dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/12/2005, 10h09
  4. Réponses: 6
    Dernier message: 24/03/2005, 14h29

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