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

Mathématiques Discussion :

Axe d'inertie et ellipse pour un nuage de points en 2D


Sujet :

Mathématiques

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 27
    Points
    27
    Par défaut Axe d'inertie et ellipse pour un nuage de points en 2D
    Bonjour à tous

    Mon problème est soi-disant hyper-simple, mais je n'y arrive pas.
    Je programme en VBA dans EXCEL pour tracer une ellipse autour d'un groupe de points dans un graphique. Je dois (je suppose) calculer l'axe et la forme de l'ellipse d'inertie, puis ensuite faire varier la grandeur pour englober plus ou moins les points sélectionnés
    J'ai choisi la méthode suivante:
    - calcul du centre, des variances et covariance, et donc de la matrice à diagonaliser... pas de problème
    - diagonalisation (2x2): c' est là que ça commence à tilter!

    1) première question: dites moi si je me trompe, s'il vous plait
    je pense qu'il faut calculer les racines du polynôme caractéristique (degré 2)
    £² - (Vx+Vy)£ + Vx*Vy-CV²
    £ (je ne sais pas écrire un Lambda)
    Vx, Vy : variances des x et des y
    CV: covariance (x,y ou y,x) c'est pareil

    j'obtiens VP1 et VP2 avec les racines "[-b ± Sqr(b²-4ac)] / 2a"

    ... et je ne trouve pas exactement la même chose que ce que j'ai vu dans des exemples...

    2) deuxième question : comment obtenir l'équation du premier axe
    Comme il passe déjà par le centre je n'ai besoin que d'un point caractéristique
    J'ai choisi l'extrémité, dont il me semble que l'abscisse, projetée sur l'axe, est égale à VP1*x, et également égale à la racine carrée de la valeur propre

    X² * VP1²= VP1
    puis l'ordonnée, liée à X² par X² + Y²= VP1 (toujours la longueur du demi grand axe)

    et là je tombe sur un carré négatif (1- 1/VP1)

    Je m'arrête là.. .désolé d'être si long, mais il faut bien expliquer (à mon niveau je n'ai pas de vocabulaire synthétique)

    Merci d'avance pour vos lumières.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Tu m'a l'air de vouloir faire une analyse en composante principale (ACP).

    Un exemple de code ici (java), qui devrait te permettre de confirmer ton approche.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 27
    Points
    27
    Par défaut Oui, mais dans R2, c'est normalement basique
    Ca ressemble effectivement à l' ACP, dans le principe... mais en fait je ne cherche qu'à récupérer la technique... la puissance de l'ACP n'est pas destinée aux problèmes de (x,y)...

    Je vais regarder le code que tu me donnes, mais je ne pratique pas Java.
    En revanche, pour la seconde question, il m'a semblé que je devais plutôt simplement chercher un vecteur propre....

    En observant le système U A = £U, j'ai cru comprendre que la direction de l'axe (la pente) correspond à quelque chose comme (£ -Vx)/CV... (£ étant la valeur propre concernée, Vx la variance des x, et CV la covariance)

    Je vais vérifier dans mon programme ce que ça donne. La question serait résolue, même si j'aimerais bien savoir ce qui cloche dans ma première approche... mais, bon...;

    En tout cas ... merci

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 27
    Points
    27
    Par défaut C'est bon!
    Re-merci, 'pseudocode'...

    Je viens de regarder le code java que tu as indiqué... pas de pb, je comprends.
    (un vieux dinosaure comme moi - 40 ans de programmation - voit que finalement presque tous les langages se ressemblent... sauf peut-être le matriciel!)

    Juste un coup d'oeil pour vérifier qu'il s'agit exactement de la même démarche, sauf qu'il utilise une autre formule pour la détermination des vecteurs propres.

    Ca va me faire bouger les méninges encore plus pour comprendre, mais dans tous les cas je suis sur d'avoir une solution

    (j'attends un peu avant de clore la discussion, au cas où quelqu'un d'autre s'y intéresserait)

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par orpheu Voir le message
    Juste un coup d'oeil pour vérifier qu'il s'agit exactement de la même démarche, sauf qu'il utilise une autre formule pour la détermination des vecteurs propres.

    Ca va me faire bouger les méninges encore plus pour comprendre, mais dans tous les cas je suis sur d'avoir une solution
    Par définition des vecteurs propres : A.v = L.v

    C'est à dire, en dissociant les coordonnées x et y du vecteur v, ainsi que la matrice A:
    a.vx + b.vy = L.vx
    c.vx + d.vy = L.vy

    en additionnant les 2 équations:

    (a+c-L).vx = -(b+d-L).vy

    d'où une solution évidente:
    vy=(a+c-L) et vx=-(b+d-L)

    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 27
    Points
    27
    Par défaut finalement je continue
    désolé, je croyais en être sorti mais...

    faut abandonner l'idée de formules issues de la définition bifocale.

    Rappel: pour programmer, on n'a que des +, des -, des * et des /... il faut décrypter le langage matriciel

    Alors je me suis décidé à créer les points à partir de l'équation centrée réduite y²/a²+x²/b²=1, puis d'effectuer les transformations de changement de repère pour le dessin

    Mes premiers essais me donnent bien l'ellipse, mais elle n'est pas orientée comme il faut. Je me trompe dans les formules permettant de passer de x',y' aux x,y à afficher.

    J'ai bien le vecteur propre... en bref la pente de la droite est Cv/(VP1-Vx)
    Direction de l'axe principal: Vecteur propre sur VP1 (Xp,Yp)
    Xp*a + Yp*b = VP1*Xp
    Xp*c + Yp*d = VP1*Yp
    a,b,c,d étant la matrice de départ (variances covariance)
    Yp = Xp( VP1-a)/b on se contente de la pente: b/(VP1-a)
    P1 = Cv / (VP1 - VX)

    Mais j'ai cru comprendre que pour passer des x' aux x il fallait utiliser:
    x'=X * VP1 où:
    x' est l'abscisse dans le repère factoriel
    X est l'abscisse centrée dans le repère d'origine( celui dans lequel je dessine)
    VP1 est la première valeur propre

    Manifestement c'est faux, donc:

    Peut-on me donner la formule permettant de passer de la coordonnée calculée par l'équation centrée réduite au repère initial, pour laquelle le vecteur propre est défini ci-dessus ?

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Alors peut-être que le code (Fortran) que j'avais posté dans la rubrique Contribuez t'aidera :

    ellipse fitting algorithm

    C'est tout bêtement un moindre-carrés généralisé permettant, étant donné un ensemble de points 2D (x,y), de trouver la meilleure ellipse les décrivant (centre, angle, petit axe et grand axe)

    (fait simplement en développant l'équation x2/a2+y2/b2 = 1)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Mais j'ai cru comprendre que pour passer des x' aux x il fallait utiliser:
    x'=X * VP1 où:
    x' est l'abscisse dans le repère factoriel
    X est l'abscisse centrée dans le repère d'origine( celui dans lequel je dessine)
    VP1 est la première valeur propre

    Manifestement c'est faux
    Non, c'est vrai. Le produit scalaire donne la mesure de la projection d'un vecteur sur un autre.



    Ca permet donc d'avoir la projection des points sur chacun des deux axes du nouveau repère, celui dans lequel l'ellipse est centrée/alignée => ca permet d'obtenir les 2 rayons de l'ellipse.

    Soit P (p.x,p.y) un point dans le repère d'origine, C (c.x,c.y) le centre de masse (= centre du nouveau repère), V1 et V2 les 2 vecteurs propres (de préférence normés), et P' les coordonnées de P dans le nouveau repère, alors on a : CP' = ( CP.V1, CP.V2 )

    C'est à dire

    P'.x = (P.x-C.x)*V1.x + (P.y-C.y)*V1.y
    P'.y = (P.x-C.x)*V2.x + (P.y-C.y)*V2.y

    dans le repère (C,V1,V2).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 27
    Points
    27
    Par défaut OK, vu
    Tout d'abord, merci Souviron34, mais pour le dessin de l'ellipse, c'est OK: elle est bien jolie, mais dans son repère, bien couchée à l'horizontale

    Mon pb c'est pour revenir au repère d'origine.. non pas pour la translation mais pour la rotation.

    Ta réponse, pseudocode, me fait simplement penser que j'ai du confondre produit scalaire et simple multiplication... en fait la transformation du x' fait bien intervenir le y', et inversement, alors que moi je n'avais qu'une homothétie.

    je vais tester dans le programme...

    @+

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 24
    Points : 27
    Points
    27
    Par défaut Ouf... enfin!
    Ca y est, enfin, je l'ai....


    Alors un grand merci à vous, surtout pseudocode...

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

Discussions similaires

  1. Changement de forme pour graphe nuage de point
    Par kris12 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/06/2012, 18h04
  2. Réponses: 0
    Dernier message: 19/07/2010, 18h20
  3. Best fit nuage de points par ellipse
    Par walks dans le forum MATLAB
    Réponses: 4
    Dernier message: 13/07/2010, 10h46
  4. Réponses: 10
    Dernier message: 05/03/2010, 14h37
  5. [VBA-E] : Axe des X des Chart / Nuage de point
    Par airbeone dans le forum Access
    Réponses: 3
    Dernier message: 01/09/2006, 19h14

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