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 :

Calcul de longueur


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    77
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 77
    Par défaut Calcul de longueur
    Bonjour tout le monde
    J'ai réalisé des hélices sous matlab avec le code suivant :

    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
    % Modelisation helice
    clear all;
    X0=0:2:220%linspace(0,6.1544,6.1544/499);
    A=15;
    Y0=A*sin(X0/4)+20*sin(X0/8)+10*sin(X0)
    % Formule de la rotation de centre O et d'angle alpha
    alpha=42*pi/180;
    X=X0*cos(alpha)-Y0*sin(alpha);
    Y=Y0*cos(alpha)+X0*sin(alpha);
    P=[X',Y'];
    save fodil_p.txt P -ASCII
    R=50;
    teta=0;
    Xs(1)=R;
    Zs(1)=0;
    for i=1:(length(X)-1)
        teta=1/R*(X(i+1)-X(i))+teta;
        Xs(i+1)=R*cos(teta);
        Zs(i+1)=R*sin(teta);
    end;
    %plot(X,Y)
    plot3(Xs(1,:),Zs(1,:),Y)
    M=[Xs(1,:)',Zs(1,:)',Y']
    length (M)
    save fodil.txt M -ASCII
    grid on


    et en fait je souhaiterai déterminer la longueur, donc ce que je fais c'est le calcul d'une norme euclidienne mais je suis pas sur que ma modélisation sous matlab soit OK , pourrai-t-on me le confirmer s'il vous plait merci

    Norme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L=0
    for j=1:length(X0)-1
    L=L+sqrt((X0(j+1)-X0(j))^2+(Y0(j+1)-Y0(j))^2)
    end;

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut
    Ca m'a l'air d'être pas mal

  3. #3
    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
    Et sinon il y a la fonction NORM

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    77
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 77
    Par défaut
    Voici les résultats
    1) avec ma formule
    2) norm appliqué sur la matrice P
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    >> L
     
    L =
     
      1.2913e+003
     
    >> norm(P)
     
    ans =
     
      1.3413e+003

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    A vérifier qu'en faisant ceci :
    tu ne prives pas ton calcul de la dernière longueur..ce qui pourrait être à l'origine de la légère différence des deux valeurs.

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    77
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 77
    Par défaut
    Salut
    Ouais mais voila X0 est de taille 111 si j'enlève le -1 beh X0(112) ne sera pas définit

  7. #7
    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 sky-mars Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L=0
    for j=1:length(X0)-1
    L=L+sqrt((X0(j+1)-X0(j))^2+(Y0(j+1)-Y0(j))^2)
    end;
    Pas besoin de la boucle FOR-END :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L = sqrt(sum((X0(2:end)-X0(1:end-1)).^2+(Y0(2:end)-Y0(1:end-1)).^2))

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Citation Envoyé par sky-mars Voir le message
    Salut
    Ouais mais voila X0 est de taille 111 si j'enlève le -1 beh X0(112) ne sera pas définit
    Oui comme tu as un j+1 dans ta boucle, tu es obligé d'écrire celle-ci comme tu as fait. Cependant je ne comprends pas trop ta phrase. Je présumes que X0 est de taille 112, et qu'en faisant length(X0)-1 tu définis ton j jusqu'à 111 éléments. Il te manque bien le dernier alors non?

  9. #9
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    77
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 77
    Par défaut
    Regarde

    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
    >> whos
      Name         Size             Bytes  Class     Attributes
     
      A            1x1                  8  double              
      L            1x1                  8  double              
      M          111x3               2664  double              
      P          111x2               1776  double              
      R            1x1                  8  double              
      X            1x111              888  double              
      X0           1x111              888  double              
      Xs           1x111              888  double              
      Y            1x111              888  double              
      Y0           1x111              888  double              
      Zs           1x111              888  double              
      alpha        1x1                  8  double              
      ans          1x1                  8  double              
      i            1x1                  8  double              
      teta         1x1                  8  double

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Euh oui alors X0(112) n'existe pas..non?

  11. #11
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    77
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 77
    Par défaut
    Non il n'existe pas

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Oui tu as raison, autant pour moi. Et la méthode que Dut a fourni te donne quoi?

  13. #13
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    77
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 77
    Par défaut
    La méthode de Dut donne exactement le même résultat qu'avec la formule que j'ai utilisé avec la boucle for-end.

  14. #14
    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
    Attention, NORM ne donne pas la norme euclidienne pour une matrice... bien lire la documentation

    If p is...
    • 1 : norm returns the 1-norm, or largest column sum of A, max(sum(abs(A))).
    • 2 : norm returns the largest singular value (same as norm(A)).
    • inf : norm returns the infinity norm, or largest row sum of A, max(sum(abs(A'))).
    • 'fro' : norm returns the Frobenius-norm of matrix A, sqrt(sum(diag(A'*A))).
    Comme P est une matrice, si vous faites :
    p vaut donc 2 et cela revient à prendre la plus grande valeur retournée par

    Sinon, j'ai fait une petite erreur dans mon code. Il faut d'abord faire la racine carré avant de faire la somme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L = sum(sqrt((X(2:end)-X(1:end-1)).^2+(Y(2:end)-Y(1:end-1)).^2))

  15. #15
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    77
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 77
    Par défaut
    Je comprend pas trop la fonction svd même en ayant consulter la documentation.

    Par contre quand je fais
    L = sqrt(sum((X(2:end)-X(1:end-1)).^2+(Y(2:end)-Y(1:end-1)).^2))
    je trouve L=143.3778

    Résultat complétement différent de ce que j'avais au début ?

    A la base dans ma boucle for/end je voulais sommer des segments c'est pour ca que ma somme étant avant la racine.
    Images attachées Images attachées  

  16. #16
    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 sky-mars Voir le message
    Je comprend pas trop la fonction svd même en ayant consulter la documentation.
    Tu peux rapprocher les valeurs singulières des valeurs propres. En fait, les valeurs propres ne peuvent être calculées que pour des matrices carrées. Dans le cas de matrices rectangulaires (comme c'est le cas avec P ici) on peut déterminer des valeurs singulières.

    SVD signifie Singular Value Decomposition soit décomposition en valeurs singulières

    Citation Envoyé par sky-mars Voir le message
    Par contre quand je fais
    L = sqrt(sum((X(2:end)-X(1:end-1)).^2+(Y(2:end)-Y(1:end-1)).^2))
    je trouve L=143.3778

    Résultat complétement différent de ce que j'avais au début ?
    Relis bien la fin de mon dernier message... c'est exactement ce que je dis... j'ai fais une erreur dans ma première réponse car j'ai tapé le code sans MATLAB.

    Le calcul est correct avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L = sum(sqrt((X(2:end)-X(1:end-1)).^2+(Y(2:end)-Y(1:end-1)).^2))

  17. #17
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    77
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 77
    Par défaut
    okey ^^

    vamos pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    L = sum(sqrt((X(2:end)-X(1:end-1)).^2+(Y(2:end)-Y(1:end-1)).^2))
    Merci

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

Discussions similaires

  1. Calcul de longueur de brin
    Par lobotoFix dans le forum Hardware
    Réponses: 0
    Dernier message: 28/10/2013, 15h13
  2. Calcul de longueur
    Par sause dans le forum Mathématiques
    Réponses: 6
    Dernier message: 04/04/2012, 16h24
  3. Réponses: 3
    Dernier message: 04/10/2006, 16h15
  4. Réponses: 5
    Dernier message: 31/07/2006, 16h42
  5. Calculer la longueur d'une variable de type entier
    Par juliendeparis dans le forum C
    Réponses: 13
    Dernier message: 08/06/2006, 14h44

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