Grafico asse x

di il
9 risposte

Grafico asse x



 for i=1:length(edges)
           
           for j=1:length(edges)
           
           if edges(i,j)==1
               
              
               for i2=1:vertices(1).n_vertices

               
               if vertices.value(i2)==i
                   
                   conta_source=conta_source+1;
                   
                   vettore_source(conta_source)=i;
                   
                   vettore_destination(conta_source)=j;
                   
                   
               end
                   
               end
           end
       end
       end
       
       
       display(vettore_source);
       display(vettore_destination);
                    v_indici_sorgenti = vettore_source;
                   
                v_indici_destinazioni=vettore_destination;
              
        
        for k2=1:length(nodi_adiacenti)
            
            %preallocazione

            tempo_medio=zeros(1,lunghezza_percorso);
            tempo_minimo=zeros(1,lunghezza_percorso);
            tempo_massimo=zeros(1,lunghezza_percorso);
            x=zeros(vertices(1).n_vertices,lunghezza_percorso);
                        x2=zeros(vertices(1).n_vertices,lunghezza_percorso);
            x3=zeros(vertices(1).n_vertices,lunghezza_percorso);

            
            y=zeros(vertices(1).n_vertices,lunghezza_percorso);
            y2=zeros(vertices(1).n_vertices,lunghezza_percorso);
            y3=zeros(vertices(1).n_vertices,lunghezza_percorso);

            
             tempo_esecuzione=zeros(length(nodi_adiacenti),100);
             
        %Rimuovo dalla lista il vetice attuali (no cappi)
            for i = 1:vertices(1).n_vertices
                j = 1;
               
            
            
                vettore_destinazioni=[];
                vettore_destinazioni=[];%rimuovo tutti i valori del vettore
                conta_dest=0;%contatore destinazione inizializzato a zero
                

                                   
                                   
                                   
                
              
              
                  l = round((length(v_indici_sorgenti)-1) * rand()+1);

               
                  for k3=1:length(vettore_source)
                      
                      while vettore_source(k3)~=v_indici_sorgenti(l)
                                    
                      l = round((length(v_indici_sorgenti)-1) * rand()+1);

                      
                      end
                      
                      if vettore_source(k3)==v_indici_sorgenti(l)
                          
                          
                k=ver.vertexDegree(vertices, v_indici_sorgenti(l));
                
                      end
                      
                  end
                  
                display(k);
                while j <= k
                    % estraggo un indice a caso nel vettore dei vertici
                    % delle sorgenti e delle destinazioni

                    
                    l2 = round((length(v_indici_destinazioni)-1) * rand()+1);

                        
                    display('j2');
                            display(j);
                            display(k);
                          
                    if vertices.value(i)~=0
                        
                        if v_indici_sorgenti(l)~=v_indici_destinazioni(l2) 

                            
                            
                            
                            for j2=1:length(vettore_source)
                                
                                  
                                  
                                    
                                    if vettore_source(j2)==v_indici_sorgenti(l)

                                        display(vettore_source(j2));
                                        
                                                        
                                          
                                       
                                        
                                        
                                    if    vettore_destination(j2)==v_indici_destinazioni(l2)
                                        
                                           
                                            
                                        
                                        
                                        
                                      display('destinaizone trovata');
                                        
                                        
                                            
                                            
                                               j = j + 1;
 display(j);
                           
                                             
       
         for k4=1:lunghezza_percorso
             
              for k3=1:n_iterations
                                
   
      [paths,lunghezza_percorso,nodi_adiacenti2,tempo] = visita.Visita(edges,va,vb,vertices);
             
      
      %salvo in un vettore tutti i tempi as ogni passo
         tempo_esecuzione(k2,k3)=tempo(k2,k4);
         
         
              
              
              
             
              
             
         if k3==100
             
             display('k3');
             display(tempo_esecuzione);

             
             
                 tempo_medio(1,k4)=sum(tempo_esecuzione(k2,:))/100;
                 tempo_minimo(1,k4)=min(tempo_esecuzione(k2,:));
                 tempo_massimo(1,k4)=max(tempo_esecuzione(k2,:));
                
                 
               x(i,k4)=tempo_medio(1,k4);

               x2(i,k4)=tempo_massimo(1,k4);
               
               x3(i,k4)=tempo_minimo(1,k4);
                 
               
              y(i,k4)=vertices.value(i);
              y2(i,k4)=vertices.value(i);
              y3(i,k4)=vertices.value(i);
              
              
              display(tempo_medio);
             
                end
              end 
                
                

         end
         
          end
          
                        end
                    end
                end
            end


                        end
                        
                        %rimuovo l'indice della sorgente e destinazione per
                        %evitare sorgenti e destinazioni uguali
                    
                    
                    display('k2');
                    
                    display(k2);
                    
                    
                end
                  v_indici_sorgenti(l)=[];
                                               
                                               v_indici_destinazioni(l2)=[];
        display(tempo_medio);
            
        display(x);
        display(x2);
        
        display(x3);
        display(y);
        display(y2);
        display(y3);
        if nodi_adiacenti2(k2)~=0
            
plot (x(1,:),y(1,:),x2(1,:),y2(1,:),x3(1,:),y3(1,:));
                             
hold on

    
    
              for i=2:vertices(1).n_vertices
                  
                  
                                                 plot(x(i,:),y(i,:),x2(i,:),y2(i,:),x3(i,:),y3(i,:));

                                                 legend('tempo medio','tempo massimo','tempo minimo');
                                                 
                                                 
                                                 
              
              

              

            
            
                 
              end
                    
        end     
              
         
              hold off
                    
                    
                    
                   



                                
                                
                    
        
        
        
        
end


        
        
    end
    
    end

end




Salve, durante la creazione dello script con k=2 mi funziona e mi da nn so il motivo questo grafico,

poi con k=3 mi itera tante volte e poi non mi crea il grafico cosa sbaglio, non capisco, la mia idea sarebbe quella di creare un grafico k2 volte quanti sono i nodi trovati nel percorso
Allegati:
17147_a38d072a888d61a84a17a4778e5541eb.png
17147_a38d072a888d61a84a17a4778e5541eb.png

9 Risposte

  • Re: Grafico asse x

    Senza avere a disposizione i dati di input è difficile capire dove sia il problema.

    I dati di input vengono calcolati da qualche altro script?

    Puoi pubblicarli?

    Hai provato a seguire l'esecuzione dello script con il debugger? In questo modo dovresti riuscire a trovare l'eventuale errore.

    Dando una rapida occhiata al codice ho notato un paio di cose:

    [*] all'inizio del ciclo for

    for i = 1:vertices(1).n_vertices

    cancelli il contenuto del vettore "vettore_destinazioni" (due volte)
    vettore_destinazioni=[];
    vettore_destinazioni=[];%rimuovo tutti i valori del vettore
    tuttavia questo vettore non viene mai usato in tutto lo script

    [*] gli ultimi tre "end" con in quali termina lo script non hanno corrispondenti istruzioni ("for", "while", "if", ecc.).

    hai inserito nella domanda lo script completo?
  • Re: Grafico asse x

    ask_raf ha scritto:


    Senza avere a disposizione i dati di input è difficile capire dove sia il problema.

    I dati di input vengono calcolati da qualche altro script?

    Puoi pubblicarli?

    Hai provato a seguire l'esecuzione dello script con il debugger? In questo modo dovresti riuscire a trovare l'eventuale errore.

    Dando una rapida occhiata al codice ho notato un paio di cose:

    [*] all'inizio del ciclo for

    for i = 1:vertices(1).n_vertices

    cancelli il contenuto del vettore "vettore_destinazioni" (due volte)
    vettore_destinazioni=[];
    vettore_destinazioni=[];%rimuovo tutti i valori del vettore
    tuttavia questo vettore non viene mai usato in tutto lo script

    [*] gli ultimi tre "end" con in quali termina lo script non hanno corrispondenti istruzioni ("for", "while", "if", ecc.).

    hai inserito nella domanda lo script completo?
    [paths,lunghezza_percorso,nodi_adiacenti2,tempo] = visita.Visita(edges,va,vb,vertices);

    dici questo?

    come si fa il debuger?
  • Re: Grafico asse x

    Non capisco a cosa si riferisca
    [paths,lunghezza_percorso,nodi_adiacenti2,tempo] = visita.Visita(edges,va,vb,vertices);
    Quello di cui c'è necessità, per provare a capire dove sia il problema nel tuo script, sono i dati di input: servono i valori di "edges", "vertices" ecc.

    Servono per poter eseguire il programma e ... vedere cosa succede.

    Per quanto riguarda il debug:

    http://uk.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html

    Hope this helps.

    P. S.: non posso credere che tu abbia cercato di scrivere un programma in tutto questo tempo senza mai usare il debug
  • Re: Grafico asse x

    ask_raf ha scritto:


    Non capisco a cosa si riferisca
    [paths,lunghezza_percorso,nodi_adiacenti2,tempo] = visita.Visita(edges,va,vb,vertices);
    Quello di cui c'è necessità, per provare a capire dove sia il problema nel tuo script, sono i dati di input: servono i valori di "edges", "vertices" ecc.

    Servono per poter eseguire il programma e ... vedere cosa succede.

    Per quanto riguarda il debug:

    http://uk.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html

    Hope this helps.

    P. S.: non posso credere che tu abbia cercato di scrivere un programma in tutto questo tempo senza mai usare il debug

    edges sarabbe una matrice con valori 1 e 0 vertices una struttura da cui passare i valori nome_vertice, conta_vertici,ecc., va il valore sorgente, vb il valore destnazione.

    Già provato ed eseguito ed e funzionante. il metodo
  • Re: Grafico asse x

    ask_raf ha scritto:


    Non capisco a cosa si riferisca
    [paths,lunghezza_percorso,nodi_adiacenti2,tempo] = visita.Visita(edges,va,vb,vertices);
    Quello di cui c'è necessità, per provare a capire dove sia il problema nel tuo script, sono i dati di input: servono i valori di "edges", "vertices" ecc.

    Servono per poter eseguire il programma e ... vedere cosa succede.

    Per quanto riguarda il debug:

    http://uk.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html

    Hope this helps.

    P. S.: non posso credere che tu abbia cercato di scrivere un programma in tutto questo tempo senza mai usare il debug
    x =

    1.0e-03 *

    0.6345 0.1239
    0.8817 0.0972
    0.7176 0.0814
    0.8884 0.0695


    x2 =

    0.0014 0.0018
    0.0022 0.0009
    0.0025 0.0002
    0.0019 0.0001


    x3 =

    1.0e-03 *

    0.5100 0.0549
    0.5101 0.0556
    0.5100 0.0559
    0.5019 0.0566


    y =

    1 1
    2 2
    3 3
    4 4


    y2 =

    1 1
    2 2
    3 3
    4 4


    y3 =

    1 1
    2 2
    3 3
    4 4

    Mi da questo grafico e normale?

    cosa sbaglio?

    Sembra funzionare ma il grafico nn mi convince

    Poi io vorrei che ogni k2 venga aperto un grafico e invece viene aperto solo uno forse quello finale
    Allegati:
    17147_a47efb4e323f9f4d18ee00ed94a7a033.png
    17147_a47efb4e323f9f4d18ee00ed94a7a033.png
  • Re: Grafico asse x

    Dati i valori di X e Y e l'istruzione per la generazione del grafico che hai inserito
    plot(x(i,:),y(i,:),x2(i,:),y2(i,:),x3(i,:),y3(i,:))
    il grafico è corretto.

    La vera domanda è: dati i valori di X e Y che hai calcolato, che tipo di grafico vuoi generare?

    Considerando un a"versione ridotta della funzione per il plotaggio (il concetto si applica anche alla versione completa):

    plot(x(i,:),y(i,:))

    plotta, ad ogni iterazione una linea che unisce i due punti che hanno come coordinate, rispettivamente, il numero nella prima colonna e quello nella seconda.

    E' questo il grafico che vuoi generare?

    Se hai problemi a capire il funzionamento della funzione "plot", prova a copiare i dati in un foglio Excel ed a generare il grafico che vuoi con Excel e confrontalo con quello generato con Matalb.

    Se risultano "diversi" potresti pubblicare un'immagine del grafico in Excel.

    Hope this helps.
  • Re: Grafico asse x

    Devo solo unire creare un grafico con Asse X tempi e asse y n nodi quindi penso sia corretto o no ?
  • Re: Grafico asse x

    ask_raf ha scritto:


    Dati i valori di X e Y e l'istruzione per la generazione del grafico che hai inserito
    plot(x(i,:),y(i,:),x2(i,:),y2(i,:),x3(i,:),y3(i,:))
    il grafico è corretto.

    La vera domanda è: dati i valori di X e Y che hai calcolato, che tipo di grafico vuoi generare?

    Considerando un a"versione ridotta della funzione per il plotaggio (il concetto si applica anche alla versione completa):

    plot(x(i,:),y(i,:))

    plotta, ad ogni iterazione una linea che unisce i due punti che hanno come coordinate, rispettivamente, il numero nella prima colonna e quello nella seconda.

    E' questo il grafico che vuoi generare?

    Se hai problemi a capire il funzionamento della funzione "plot", prova a copiare i dati in un foglio Excel ed a generare il grafico che vuoi con Excel e confrontalo con quello generato con Matalb.

    Se risultano "diversi" potresti pubblicare un'immagine del grafico in Excel.

    Hope this helps.
    ho pensato io vorrei creare un grafico ad ogni iterazione di k2 si può fare ? Perché io avevo intenzione di fare questo e poi quello che ho scritto dovrebbe fare questo o sbaglio ?
  • Re: Grafico asse x

    Se con "creare un grafico ad ogni iterazione di k2" intendi un grafico in "una nuova finestra", devi inserire l'istruzione
    figure
    prima delle istruzioni per la creazione del grafico (plot(...)).

    Per come è strutturato adesso il tuo script, viene creata una sola "finestra" e tutti i grafici generati con le istruzioni "plot" vengono aggiunti nello stesso sistema di assi cartesiani dal momento che hai specificato "hold on".

    In alternativa, se i grafici (finestre) che vuoi creare non sono troppi (es. 3 o 4) puoi usare la "subplot" che crea più assi cartesiani all'interno di una sola "finestra".

    Nell'esempio che segue, viene generata una matrice di 6 righe (e 63 colonne), ogni riga contiene i valori delle funzioni sin(x), cos(x), sin(2*x), cos(2*x), sin(3*x) e cos(3*x) calcolati nell'intervallo (0:2*pi).

    Nel primo caso le curve vengono plottate a gruppi di 2 in tre "finestre" diverse.

    Nel secondo caso le curve vengono plottate, sempre a gruppi di 2 in tre assi cartesiani all'interno di un'unica finestra.
    % Definizione dei valori delle ascisse
    x=0:.1:2*pi;
    % Definizione della matrice delle ordinate
    m=[sin(x);
       cos(x);
       sin(2*x);
       cos(2*x);
       sin(3*x);
       cos(3*x)];
    % Calcolo del numero di righe e colonne della matrice
    [righe,colonne]=size(m);
    % Loop per il plottggio di di due curve per ogni "finestra"
    for i=1:2:righe
       % Apertura di una nuova finestra
       figure
       % Plot del grafici
       plot(x,m(i,:),x,m(i+1,:))
       grid on
    end
    
    % Uso della funzione "subplot"
    % Apertura di una nuova finestra
    figure
    % Inizializzazione del contatore dei sistemi di assi cartesiani
    cnt=1;
    % Loop per il plottaggio
    for i=1:2:righe
       % Creazine dello i-esimo sistema di assi cartesiani nella finestra
       subplot(3,1,cnt)
       % Plot delle curce
       plot(x,m(i,:),x,m(i+1,:))
       grid on
       % INcremento del contatore dei sistemi di assi cartesiani nella finestra
       cnt=cnt+1
    end
    
    Per rispondere alla tua precedente domanda ("Devo solo unire creare un grafico con Asse X tempi e asse y n nodi quindi penso sia corretto o no ?"): non mi è chiaro cosa tu voglia rappresentare.

    Ogni matrice X (X, X2 e X3), è formata da 4 righe e due colonne: cosa rappresentano i due valori di ogni riga? I tempi di fine / inizio di "qualcosa"?

    Quando scrivi l'istruzione
    plot (x(1,:),y(1,:),x2(1,:),y2(1,:),x3(1,:),y3(1,:));
    ed altre simili (sostituendo "1" con "i") hai i due valori di X della i-esima riga ed i corrispondenti di y,
    Dal momento che, in base ai dati che hai pubblicato, i valori di y di ogni riga sono uguali, otterrai sempre un segmento parallelo all'asse x i cui limiti sono definiti dai valori corrispondenti di x.

    Ho notato che, tra tutti i valori delle matrici X, la coppia nella prima riga della matrice X2 è l'unica nella quale il valore nella prima colonna è inferiore a quello nella seconda colonna.
    E' giusto che sia così?

    Considerando che, a parte questo unico caso, in tutti gli altri il valore nella prima colonna è inferiore a quello nella seconda, questo fatto mi sembra rilevante nel contesto della analisi (ma forse mi sbaglio).
    Se è importante, questa informazione viene persa, nel grafico.

    Cerco di spiegarmi meglio, se
    x=[10 20]
    y=[1 1]
    
    e
    x1=[20 10]
    y1=[1 1]
    i grafici che ottieni con
    figure
    plot(x,y)
    figure
    plot(x1,y1)
    
    sono identici e no si "vede" il fatto che, nel primo caso le acisse sono definite in ordine crescente e, nel secondo caso, in ordine decrescente (addirittura si sovrappongono nel caso in cui li plotti in unico grafico).

    Se l'ordine è importante, forse è il caso che consideri un modo diverso di generare i grafici.

    Hope this helps.
Devi accedere o registrarti per scrivere nel forum
9 risposte