Probleme pour générer un graph sur Matlab
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Probleme pour générer un graph sur Matlab



  1. #1
    invitee0cc8045

    Probleme pour générer un graph sur Matlab


    ------

    Bonjour,

    Je tente de générer un graphique sur matlab, le but est de montrer l'instabilité des prix via une fonction:

    j'en arrive à écrire ça:

    Code:
    X=[0, 2.5];
    P(:,1)=0.1;
    N=length(X);
    
    for n=1:N
        for t=1:10
        P(n,t+1)=X(n)*P(n,t)*[1-P(n,t)];
        end
    end
    plot(t,P)
    La machine me répond quant à elle ceci :

    Code:
    ??? Attempted to access P(2,1); index out of bounds because
    size(P)=[1,101].
    
    Error in ==> test at 7
        P(n,t+1)=X(n)*P(n,t)*[1-P(n,t)];
    Ce que biensur je ne saisis pas, à la fin j'aimerais tendre vers ça lien image: http://hpics.li/57b346a

    Si vous avez des conseils je vous en remercierai !

    Thomas

    -----

  2. #2
    invite15928b85

    Re : Probleme pour générer un graph sur Matlab

    Bonjour.

    Déclarez les dimensions de vos matrices complètement avant emploi. Cela se passera mieux.

    Exemple : P = zeros[2,101]; // avant les boucles for

    Matlab peut redimensionner dynamiquement mais il y a des limites.

  3. #3
    invitee0cc8045

    Re : Probleme pour générer un graph sur Matlab

    Bonsoir,

    Merci pour cette réponse,

    Finalement, j'ai en effet compris mon erreur, j'ai procédé comme ceci :

    Code:
    X=[1.5, 3.1];
    P = 0.5 * ones(N,101);
    N=length(X);
    
    for n=1:N
        for t=1:100
        P(n,t+1)=X(n)*P(n,t)*[1-P(n,t)];
        end
    end
    plot(1:101,P);
    Merci en tout cas, j'espère que d'autres pourront apprendre de mes erreurs.

    A tout hasard, auriez vous une idée de comment manipuler le Subplot ?

    Cordialement.

    Thomas
    Dernière modification par JPL ; 12/12/2011 à 00h55. Motif: Ajout de la balise Code

  4. #4
    invitea29b3af3

    Re : Probleme pour générer un graph sur Matlab

    Salut

    Dans ton code la déclaration de N doit bien évidemment venir avant celle de P
    A noter que l'usage des [ ] au lieu des ( ) dans ta boucle for ne génère pas d'erreur (en réalité du crées une matrice de taille 1x1... donc un scalaire), mais des parenthèses suffisent. Et si tu veux pouvoir un jour réutiliser ce code mais avec un signal P plus long, ce serait bien que tu n'aies qu'à changer le 101 dans sa déclaration, et pas devoir ajuster partout. Donc tu peux utiliser size(P,2) à la place. C'est juste des petites remarques, fais-en ce que tu veux
    Code:
    X=[1.5, 3.1];
    N=length(X);
    P = 0.5 * ones(N,101);
    
    for n=1:N
        for t=1:size(P,2)-1
            P(n,t+1)=X(n)*P(n,t)*(1-P(n,t));
        end
    end
    plot(1:size(P,2),P);
    Pour subplot, j'imagine que tu veux séparer les 2 courbes ?
    Par exemple si tu voulais afficher 6 graphes, 3 par ligne (donc 2 "colonnes de graphes") dans une fenêtre, genre ça:
    Code:
    1 graphe là            1 graphe là            1 graphe là
    1 graphe là            1 graphe là            1 graphe là
    tu utilises: subplot(NOMBRES_DE_LIGNES, NOMBRE_DE_COLONNES, NUMERO_DU_GRAPHE). Dans ce cas tu veux NOMBRES_DE_LIGNES = 2, NOMBRES_DE_COLONNES = 3, et NUMERO_DU_GRAPHE va de 1 à 6, puisque tu as 6 graphes. Donc :
    Code:
    figure
    subplot(2,3,1), plot(signal_1)
    subplot(2,3,2), plot(signal_2)
    subplot(2,3,3), plot(signal_3)
    subplot(2,3,4), plot(signal_4)
    subplot(2,3,5), plot(signal_5)
    subplot(2,3,6), plot(signal_6)
    L'ordre des graphes se fait par ligne, donc 1 à 3 sur la 1ère ligne et 4 à 6 sur la 2ème ligne dans cet exemple.

    Dans ton cas, disons qu'on veut 2 lignes et 1 colonne.
    Code:
    figure
    subplot(2,1,1), plot(P(1,:)), axis tight
    subplot(2,1,2), plot(P(2,:)), axis tight
    Le "figure" sert juste à ce qu'il t'ouvre une nouvelle figure pour faire ce plot, au cas où t'avais déjà un autre graphe d'affiché.
    axis tight sert à resserré les axes sur 1:101. Enfin... essaie de l'enlever et tu verras ce que je veux dire
    A noter que tu peux omettre la base de temps 1:size(P,2) dans "plot" quand l'incrément est 1 (puisque c'est la valeur par défaut)

  5. A voir en vidéo sur Futura

Discussions similaires

  1. [matlab] programmation : peut-on générer un arbre des fonctions d'un code Matlab ?
    Par inviteafe1cd13 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 09/07/2015, 11h12
  2. Génèrer un signal PWM avec une toolbox Matlab pour un dsPIC 30F4013
    Par invite55caac64 dans le forum Électronique
    Réponses: 2
    Dernier message: 02/02/2011, 22h19
  3. Graph sous matlab
    Par invite6844fe5f dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 19/11/2010, 21h55
  4. Matlab graph 3D position axes
    Par invitebe557040 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 26/03/2010, 13h57
  5. générer bruit blanc sous matlab
    Par invite9b8a9ef4 dans le forum Physique
    Réponses: 2
    Dernier message: 19/02/2010, 14h32