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 :

valeur max et min de contour


Sujet :

MATLAB

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Par défaut valeur max et min de contour
    Bonjour,

    en ce moment, je travaille avec la fonction contour pour sortir des lignes de niveaux sur des altitudes (topographie).

    J'ai remarqué dans l'aide que les valeurs max et min des lignes de niveaux de contour étaient choisie automatiquement. Ca ne pose pas de problème, au contraire.

    Voici mon problème. J'ai une matrice z avec une valeur min de 50 et une valeur max de 1500 par exemple.

    J'aimerais tracer cette matrice avec contour mais uniquement les valeurs inférieur à 500 tout en gardant les valeurs min et max de la matrice z.

    Est-ce que c'est possible?

    voici mon code de départ (si vous possédez gtopo30s et le fichier w020n90)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    lat=[47.3 50];
    lon=[6 10];
    gtopo30s(lat, lon);
    [Z,refvec]=gtopo30('w020n90',1,lat,lon);
     
    x=linspace(6,10,480);
    y=linspace(47.3,50,325);
     
    [xi,yi]=meshgrid(x,y);
    contour(xi,yi,Z);
    et voici ce que j'ai testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    figure;contour(xi,yi,Z<500) % pas d'erreur mais valeur fausses
    Z(find(Z>500)=NaN
    figure;contour(xi,yi,Z) % Marche mais change les valeurs min max
    Si vous avez une idée...

  2. #2
    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
    Si je comprends bien ton exemple : tu veux enlever toutes les valeurs de Z supérieures à 500 mais en gardant quand même les valeurs minimum et maximum ?
    Essayes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %Remplace les valeurs de Z > 500 et différentes du minimum et du maximum par NaN
    Z(Z>500 && Z~=min(Z) && Z~=max(Z))=Nan;
    Note : pas sure à 100% pour le &&, si ça ne fonctionne pas remplace-le par un simple &

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Par défaut
    Merci ! Je n'avais pas pensé à cette idée la.

    Malheureusement, ca ne fonctionne pas. Ni avec un seul & ni avec 2 &&

    la première erreur (&&) est operands the the || and && operators etc...

    La deuxième erreur (&) est Matrix dimensions must agree...

  4. #4
    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
    Il doit pourtant y avoir une solution de ce style.
    En attendant une autre possibilité plus compliquée (voire tordue ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [Zmin,idxMin]=min(Z);
    [Zmax,idxMax]=max(Z);
    idx=find(Z>500);
    %on enleve du vecteur idx les valeurs qui sont dans idxMin et idxMax :
    idxFinaux=setdiff(idx,union(idxMax,idxMin));
    Z(idxFinaux)=NaN;
    Y'a plus qu'à tester...

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Par défaut
    Oui, c'est ce que je pensais au début. Un truc à coder en une ligne avec toutes les conditions....

    En attendant, je te remiercie encore une fois pour ce bout de code. Mais malheureusement, ca ne marche pas.

    Il n'y a pas d'erreur mais matlab trace les lignes de niveaux en changeant les valeurs min et max de la matrice Z. Par contre, il enlève bien toutes les valeurs supérieur à 500 dans le graphe

    Je continue à chercher de mon côté en tout cas.

  6. #6
    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
    matlab trace les lignes de niveaux en changeant les valeurs min et max de la matrice Z.
    La modif de caro95470 marche bien comme tu le dis.
    Pour conserver Z tu peux prendre une matrice relais Z1.

    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
    lat=[47.3 50];lon=[6 10];
    gtopo30s(lat, lon);
    [Z,refvec]=gtopo30('w020n90',1,lat,lon);
    x=linspace(6,10,480);
    y=linspace(47.3,50,325);
    [xi,yi]=meshgrid(x,y);
    contour(xi,yi,Z(1:325,1:480));
    [Zmin,idxMin]=min(Z);
    [Zmax,idxMax]=max(Z);
    idx=find(Z>500);
    %on enleve du vecteur idx les valeurs qui sont dans idxMin et idxMax :
    idxFinaux=setdiff(idx,union(idxMax,idxMin));
    Z1=Z;
    Z1(idxFinaux)=NaN;
    figure(2)
    contour(xi,yi,Z1(1:325,1:480));

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Par défaut
    oui, je suis bien d'accord mais ca ne change rien à mon problème. Les valeurs plus grande que 500 sont bien supprimés du graphe...

    Mais par contre, j'ai des lignes de niveaux qui apparaissent pour les altitudes inférieures à 500... Je ne souhaite pas spécialement garder la matrice Z.

    Je souhaiterais juste tracer le graphe de Z en entier et supprimer les lignes de niveau qui sont plus grande que 500.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Par défaut
    C'est bon, j'ai trouvé !

    une petite pensé à DUT en voyant la réponse
    Comme quoi, c'est toujours la dedans qu'il faut cherche...

    En fait, il suffit de passer par le handel.
    En gros ca donne ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [A,h]=contour(Z)
    get(h,'levellist');
    % Récupérer ensuite les valeurs de 'levellist' inférieur à 500 dans un vecteur x
    set(h,'levellist',x)

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

Discussions similaires

  1. Récupérer la valeur max ou min d'une sous requête
    Par GhostSpirit dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/02/2015, 20h16
  2. Permuter la valeur max et min d'un vecteur
    Par mcken dans le forum Langage
    Réponses: 3
    Dernier message: 31/10/2014, 14h55
  3. [Slider] Problème pour fixer les valeurs max et min
    Par al2000 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 31/10/2013, 15h04
  4. Pulse generator entre une valeur min et valeur max
    Par lecteur1001 dans le forum Simulink
    Réponses: 4
    Dernier message: 15/02/2011, 18h20
  5. Position de la valeur max et min dans un tableau
    Par www.rubis dans le forum Langage
    Réponses: 4
    Dernier message: 09/02/2011, 16h48

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