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 :

Tracer un contour plot


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 18
    Points : 6
    Points
    6
    Par défaut Tracer un contour plot
    Bonjour,

    J'essaie de faire un contour plot pour avoir un diagramme comme ceci :

    Nom : rendement-du-moteur-thermique-4.jpg
Affichages : 2889
Taille : 37,1 Ko

    J'ai mes données sous un fichier Excel que j'ai réussi à exporter sans trop de souci.

    Donc voila le code que j'ai écrit :

    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
    clear all;
    close all;
    clc;
     
    EngineSpeed=xlsread('Data.xls','a2:a219');
    Torque=xlsread('Data.xls','c2:c219');
    be=xlsread('Data.xls','al2:al219');
     
     
    figure
    contour(EngineSpeed,Torque,be)
    xlabel('Regime moteur [1/min]');
    ylabel('Couple [Nm]');
     
    shading interp
    colorbar
    Lorsque j’exécute le code il me met cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> contour at 73
    Z must be size 2x2 or greater.
     
    Error in ==> CartoMoteur at 13
    contour(EngineSpeed,Torque,be)
    Que faut-il que je modifie dans mon code ?

    Je ne comprends pas l'erreur car j'ai le même nombre de variable dans mes colonnes excel.

    Je précise, cette fois ci je suis bien sous matlab

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par Documentation de la fonction contour
    contour(X,Y,Z), contour(X,Y,Z,n), and contour(X,Y,Z,v) draw contour plots of Z using X and Y to determine the x and y values.
    • If X and Y are vectors, then length(X) must equal size(Z,2) and length(Y) must equal size(Z,1). The vectors must be strictly increasing or strictly decreasing and cannot contain any repeated values.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 922
    Points
    52 922
    Par défaut
    Les données importées sont sous forme de vecteurs alors qu'il faut des tableaux comme ceux générés par la fonction meshgrid (par exemple)

    Pourrais-tu nous fournir un fichier xls ?

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Je t'ai mis le fichier un pièces-jointes. Celui-ci est différent, car l'original est trop lourd. Donc j'ai également ré-ecrit quelques détails dans le programme notamment pour l'ouverture :

    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
    clear all;
    close all;
    clc;
     
    EngineSpeed=xlsread('Data.xlsx','a2:a219');
    Torque=xlsread('Data.xlsx','b2:b219');
    be=xlsread('Data.xlsx','c2:c219');
     
     
    figure
    contour(EngineSpeed,Torque,be)
    xlabel('Regime moteur [1/min]');
    ylabel('Couple [Nm]');
     
    shading interp
    colorbar
    L'erreur est la même sauf le nom du fichier que j'ai changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> contour at 73
    Z must be size 2x2 or greater.
     
    Error in ==> Essais at 11
    contour(EngineSpeed,Torque,be)
    Donc d'après ce que je comprends il faut que j'utilise des données sous forme de tableaux avec contour et non sous forme de vecteur ?
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 922
    Points
    52 922
    Par défaut
    Le problème est que le domaine est irrégulier.

    Essaie avec cette contribution : Tricontf by Rich Pawlowicz

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tri = delaunay(EngineSpeed, Torque);
     
    figure
    subplot(211)
    scatter(EngineSpeed, Torque, 36, be, 'fill')
    title('scatter')
    subplot(212)
    tricontf(EngineSpeed, Torque, tri, be, 5);
    title('tricontf')
    Images attachées Images attachées  

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Qu'est ce que sa veut dire domaine irrégulier ? Je suis comprends plus rien...

    J'ai téléchargé le fichier tricontf et j'ai 3 fichier en .mat. Dans quel dossier de matlab dois-je les placer ?

  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 318
    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 318
    Points : 52 922
    Points
    52 922
    Par défaut
    Citation Envoyé par amelianna Voir le message
    Qu'est ce que sa veut dire domaine irrégulier ?
    Les points de mesure ne sont pas répartis régulièrement selon l'axe des ordonnées et les bords du domaine ne forme par un rectangle.

    Citation Envoyé par amelianna Voir le message
    J'ai téléchargé le fichier tricontf et j'ai 3 fichier en .mat. Dans quel dossier de matlab dois-je les placer ?
    Ce sont des fichier .m, pas des fichiers .mat. Place-les dans le même dossier que celui qui contient le code que tu as écrit.

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Peux tu m'expliquer le code que tu as écrit ?

    a quoi sert ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tricontf(EngineSpeed, Torque, tri, be, 5);
    est la fonction comme contour.

    A quoi correspondent les paramètres tri et 5 ?

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 922
    Points
    52 922
    Par défaut
    Citation Envoyé par amelianna Voir le message
    a quoi sert ?
    Je te renvoi vers la documentation :

    J'ai simplement ajouté le graphique du haut pour te montrer que le domaine n'est pas une grille rectangulaire.

    Citation Envoyé par amelianna Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tricontf(EngineSpeed, Torque, tri, be, 5);
    est la fonction comme contour.
    Oui, sauf qu'elle a besoin d'un maillage triangulaire généré à partir des données initiales (EngineSpeed et Torque)

    Citation Envoyé par amelianna Voir le message
    A quoi correspondent les paramètres tri et 5 ?
    La variable tri contient les indices de la triangulation générée avec la fonction delaunay :
    Tu peux visualiser ce maillage en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    figure
    trimesh(tri, EngineSpeed, Torque);
    Le dernier argument de tricont fonctionne comme celui de la fonction contour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    help tricont
    doc contour

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Je comprends mieux le premier graphique maintenant

    Comment puis-je interpoler les valeurs non existante avec matlab ? (je vais chercher un peu )

    Le dernier argument de tricont sert juste à la précision ? J'ai changé plusieurs fois de valeurs et selon la valeur, il y a plus ou moins de courbes sur le graphique du bas.

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 922
    Points
    52 922
    Par défaut
    Citation Envoyé par amelianna Voir le message
    Comment puis-je interpoler les valeurs non existante avec matlab ? (je vais chercher un peu )
    Fais une recherche avec "griddata" sur ce forum, tu trouveras des discussions en rapport avec ce que tu cherches à faire.

    Citation Envoyé par amelianna Voir le message
    Le dernier argument de tricont sert juste à la précision ? J'ai changé plusieurs fois de valeurs et selon la valeur, il y a plus ou moins de courbes sur le graphique du bas.
    Si le dernier argument est un scalaire, alors il donne le nombre de contour à tracer.

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    J'ai essayer avec griddata. J'ai trouvé sa sur le forum.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [xg,yg] = meshgrid(x,y);
    zg = griddata(x,y,z,xg,yg,'cubic');
    figure(3);
    mesh(xg,yg,zg); hold on;
    plot3(x,y,z);
    avec
    x=EngineSpeed
    y=Torque
    Z=be

    Sauf que quand j'affiche le domaine pour voir s'il est rectangulaire cela me met la même chose que précédemment. Donc je crois que la fonction ne fait rien.

    J'ai mis un tableau en lien. (ce sont les mêmes valeurs que le excel précédent, c'est juste plus lisible et plus facile à comprendre )

    En fait ce que je voudrais c'est faire une interpolation des valeurs que je n'ai pas dans le tableau. Faut-il que j'utilise griddata ?
    Fichiers attachés Fichiers attachés

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 922
    Points
    52 922
    Par défaut
    Voici comment générer la grille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    xi = linspace(min(EngineSpeed(:)), max(EngineSpeed(:)), 18);
    yi = linspace(min(Torque(:)), max(Torque(:)), 10);
    [xi, yi] = meshgrid(xi, yi);
     
    figure
    subplot(211)
    scatter(EngineSpeed, Torque, 36, be, 'fill')
    subplot(212)
    plot(xi, yi, 'r*')

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Sa marche bien sa rempli tout le domaine d’après ce que je vois.

    D'après ce que j'ai compris, matlab aurait interpoler toutes les valeurs que je n'ai pas dans le tableau excel ? (case vide c'est a dire le be, je ne cherche pas a extrapoler EngineSpeed et Torque mais seulement be sur les différents points de fonctionnement que je n'ai pas)

    Pour la suite j'utilise :
    x=EngineSpeed
    y=Torque
    z=be

    Voila l'erreur qu'il me met quand je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> plot3
    Vectors must be the same lengths.
     
    Error in ==> Essais at 58
    plot3(xi,yi,z)
    Et quand j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tricontf(xi, yi, tri2, z, 8);
    J'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ??? Index exceeds matrix dimensions.
     
    Error in ==> tricont at 93
    xx=[ Xp(M(:,[1 2 3 1])')];
     
    Error in ==> tricontf at 81
    [Xp,Yp,M,Zp,nv,CS,xx,yy,zz]=tricont(args{1:nin});
     
    Error in ==> Essais at 40
    tricontf(xi, yi, tri2, z, 8);

    Je ne comprends pas pourquoi il y a des erreurs. Si on vient d'interpoler les valeurs manquantes de be, le domaine devrait être rectangulaire et cela ne devrait pas poser de problème non ?

  15. #15
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 922
    Points
    52 922
    Par défaut
    Citation Envoyé par amelianna Voir le message
    Comment puis-je interpoler les valeurs non existante avec matlab ?
    Pour éviter tout malentendu, pourrais-tu préciser ce que tu entends exactement par "valeurs manquantes" ? Où devraient-elles être situées ?

  16. #16
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Dans le tableau en pièce jointe, ce sont les cases en rouges dont je n'ai pas les valeurs que je voudrais interpoler.

    Est-ce possible ? Si oui avec l'aide de quelle fonction ?
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. tracer les contours
    Par Paolo. dans le forum Images
    Réponses: 5
    Dernier message: 07/11/2012, 12h48
  2. [.NET] Contour plot
    Par lorenzofox dans le forum EDI/Outils
    Réponses: 0
    Dernier message: 01/07/2010, 04h30
  3. Tracer des fonctions de contour
    Par Chipounette dans le forum MATLAB
    Réponses: 1
    Dernier message: 24/11/2009, 15h52
  4. Contour plot
    Par k.khaled dans le forum MATLAB
    Réponses: 1
    Dernier message: 09/03/2009, 12h31
  5. [Google Map] Tracer contour d'une région
    Par bressan dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 29/01/2008, 15h36

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