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 :

Problème d'axe à pas non constant


Sujet :

MATLAB

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut Problème d'axe à pas non constant
    Bonjour,
    je voudrai créer un système d'axe non linéaire, par exemple, 6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100 de telle sorte qu'entre chaque nombre il y ait la même distance ; est-ce possible avec Matlab ?
    Merci
    A+

  2. #2
    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
    Salut

    J'ai pensé à ça mais ça marche pas terrible...
    A revoir ou attendre autres idées..

    close all
    figure;
    A = [6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100]
    set(gca,'XTickLabel',A,'xlim',[A(1),A(end)])

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour.
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(gca,'xtick',[6:2:100])

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut
    Bonjour Newenda,
    j'ai essayé, ça marche mais l'axe s'arrête à 50 et j'sais nin pourquoi

  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
    Citation Envoyé par ChtiGG Voir le message
    Bonjour Newenda,
    j'ai essayé, ça marche mais l'axe s'arrête à 50 et j'sais nin pourquoi
    oui surtout avec le XLIM... étonnant..

  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 316
    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 316
    Par défaut
    La bonne solution consiste à faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A = [6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100]
     
    figure
    set(gca,'xtick',1:numel(A),'xticklabel',num2str(A(:)),'xlim',[0 numel(A)+1])
    Maintenant, le problème va être de positionnner correctement le tracé dans ce nouveau repère.

    En fait, il s'agit d'(appliquer la transformée entre l'espace equi-réparti linéaire x (1 2 3 4...) et l'espace défini par A (6 8 10 12 ...) :

    • 1 ->2 => 6 -> 8
    • 2 -> 3 => 8 -> 10
    • 3 -> 4 => 10 -> 12
    • ...

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut
    bon, même si j'ai pas la fin pour le moment, c'est pas trop grave mais le pire c'est que ça ne fait pas du tout ce que je souhaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    close all;
    b=[8,10,14,18,24,31,41,55,71,92,122,160];
    d=b;
    a=pi*d/1000;
    figure
    plot(d,a*80,d,a*106,d,a*140);
    set(gca,'Xticklabel',b,'Xlim',[b(1),b(end)]);
    set(gca,'Yticklabel',b,'Ylim',[b(1),b(end)]);
    grid
    les droites qui apparaissent sur la figure devraient être parallèles !!!
    Images attachées Images attachées  

  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
    Hum raffraichis la page...y'a eu une réponse pas mal de Dut juste avant ...

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut
    Merci Newenda, effectivement la réponse de Dut est très intéressante ; voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    A = [6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100]
    d=A
    c=pi*d/1000
    plot(d,c*63,d,c*80,d,c*100,d,c*126);
    set(gca,'xtick',1:numel(A),'xticklabel',num2str(A(:)),'xlim',[0 numel(A)+1]);
    set(gca,'ytick',1:numel(A),'yticklabel',num2str(A(:)),'ylim',[0 numel(A)+1]);
    grid;
    et ça donne...mais ce n'est pas ce qu'il faut...je vais réfléchir à la suite à faire
    Images attachées Images attachées  

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    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 316
    Par défaut
    Il suffit de faire une interpolation linéaire de chaque valeur entre chaque intervalle.

    Voici une petite fonction vite faite et non optimisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function newX = lin2dis(X,A)
     
    for n = 1:numel(X)
     
        idx = find(X(n)>=A,1,'last');
     
        if idx < numel(A)
            newX(n) = idx+(X(n)-A(idx))/(A(idx+1)-A(idx));
        else
            newX(n) = numel(A);
        end
     
    end
    A utiliser comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    A = [6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100];
    X = round(rand(1,25)*94)+6;
     
    newX = lin2dis(X,A);
     
    figure
     
    newY = rand(1,numel(newX));
    plot(newX,newY,'r*');
    text(newX,newY,num2str(X(:)))
     
    set(gca,'xtick',1:numel(A),'xticklabel',num2str(A(:)),'xlim',[0 numel(A)+1])
    La valeur à coté de chaque point correspond à la valeur en abscisse.

    L'idée est très simple et le code ci-dessus peut être grandement optimisé pour plus de flexibilité

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut
    merci Dut de ta réponse ; je vais étudier le truc...
    Il est grandement temps que je me présente un peu et tu comprendras mieux ce que je veux faire.
    Je ne suis pas un grand informaticien devant l'éternel, loin s'en faut donc je ne suis pas trop familiarisé avec les lignes de codes ; si j'ai posé une question ici, c'est que je pense être sur le bon forum et vos réponses le prouvent ; bon, j'en viens au problème complet.
    En usinage sur tour ou sur fraiseuse on utilise des conditions de coupe qui sont fonction d'une vitesse de coupe - appelé Vc - qui est une donnée de matériau, c'est à dire que ça dépend si c'est de l'acier ou de l'aluminium, par exemple. Et on a une relation très simple qui lie la vitesse de rotation du tour au diamètre à usiner en fonction de cette vitesse de coupe :
    Vc=pi*diamètre*Nt/1000 (le facteur 1000 vient simplement du fait que la Vc s'exprime en m/mn et le diamètre D en méca plutôt en mm) Nt, c'est le nombre de tour par minute sur lequel on doit se régler (en général, ces valeurs sont discrètes sur une machine conventionnelle et dépendent du nombre de vitesses de la boite 12 ou 15, par exemple). On peut alors tracer Vc fonction de D pour une valeur de Nt donnée, c'est évidemment une droite toute bête ; si on le fait pour n valeurs, on a n droites de pente Nt, donc non parallèles ; or dans tous les bouquins de méca on trouve des abaques où les droites sont parallèles parce qu'on prend des axes gradués comme la variation des vitesses disponibles sur la machine. Ce que je souhaite faire, c'est pouvoir tracer cet abaque à partir d'un programme dans lequel on rentrerait juste les valeurs disponibles de vitesse de machine. Si je réussis, je pense que je mettrai ça à disposition des copains mécanos...voilà, voilà.
    A+
    et merci pour votre aide

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/04/2014, 12h23
  2. [PHP 5.3] Problème n'arrive pas à vérifié si une URL est valide ou non
    Par kopax dans le forum Langage
    Réponses: 9
    Dernier message: 09/09/2011, 14h16
  3. dérivée seconde avec pas non constant
    Par ginafort dans le forum Mathématiques
    Réponses: 7
    Dernier message: 07/03/2011, 09h06
  4. [fft] Pas de temps non constant
    Par TocTocKiéLà? dans le forum MATLAB
    Réponses: 2
    Dernier message: 07/05/2008, 12h17
  5. case non constant
    Par jul54 dans le forum MFC
    Réponses: 4
    Dernier message: 04/02/2004, 15h08

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