Pagina 1 di 2

[MATLAB] grafico in coordinate cartesiane

MessaggioInviato: 1 dic 2017, 14:25
da edomar
Salve a tutti ragazzi, ho una domanda veloce per voi.
Ho un grafico realizzato con la funzione scatter (cioè un grafico a punti).
Come posso tracciare dei segmenti che uniscono alcuni di questi punti? (ovviamente non in modo manuale, mi servirebbe l'implementazione...)

Re: [MATLAB] grafico in coordinate cartesiane

MessaggioInviato: 1 dic 2017, 14:52
da DanteCpp
Se vuoi unire solo alcuni punti penso che la soluzione migliore sia sovrapporci un altro grafico sopra.
Cioè plotare il grafico con i segmenti nella stessa figura dello scatter.

Re: [MATLAB] grafico in coordinate cartesiane

MessaggioInviato: 1 dic 2017, 23:35
da edomar
Ciao, grazie della risposta. Nel tentativo di ricavare i punti che effettivamente mi servono per procedere come mi hai suggerito è sorto un nuovo problema che, forse banale, non riesco a superare. Riporto qui lo script:

Schermata 2017-12-01 alle 22.27.57.png


Schermata 2017-12-01 alle 22.28.29.png
Schermata 2017-12-01 alle 22.28.29.png (25.27 KiB) Osservato 8280 volte


Ho 12 vettori P1....P12. Per ciascuno di questi vettori devo eseguire una serie di operazioni al termine delle quali il vettore viene trasformato in una matrice. La dimensione delle matrici così ottenute non è tuttavia la stessa per ciascun vettore.
Il mio dubbio è come riuscire a sovrascrivere Pk al termine del corrispondente ciclo su k.
Ho pensato di utilizzare ancora una volta le stringhe assegnando al valore della stringa la matrice g (che è quella che devo portare fuori ad ogni ciclo di indice k) secondo la sintassi:

eval(strcat('P',int2str(k)))=g;

ma mi dà errore.
avete qualche suggerimento?
Ps. spero di essermi spiegato bene

Re: [MATLAB] grafico in coordinate cartesiane

MessaggioInviato: 2 dic 2017, 0:04
da xyz
Gli script si allegano in formato testo (ASCII). Le bitmap sono praticamente inutili, o uno ricopia tutto a mano (troppo noioso e lungo) o deve usare un OCR (troppo macchinoso).

Re: [MATLAB] grafico in coordinate cartesiane

MessaggioInviato: 2 dic 2017, 2:38
da edomar
Purtroppo sono ancora un profano nell'argomento, non ho ben capito quello che mi hai suggerito. Non c'è niente da fare a parte impostare 12 ( ?% ) cicli for?

Re: [MATLAB] grafico in coordinate cartesiane

MessaggioInviato: 2 dic 2017, 10:19
da rugweri
Caro Foto Utenteedomar, Foto Utentexyz ti stava dicendo che GLI SCRIPT VANNO INVIATI COME FILE DI TESTO: nessuno si metterà a ricopiare il codice dalle immagini per cercare di aiutarti.

Re: [MATLAB] grafico in coordinate cartesiane

MessaggioInviato: 2 dic 2017, 10:42
da MarcoD
La mia è una esternazione priva di utilità :-) , ma:
Nel testo del progamma, non c'è neppure un commento per aiutare il lettore.
Una volta,,,,programmazione in FORTRAN, consigliavano una riga di commento ogni 5 o 10 di istruzioni.. O_/

Re: [MATLAB] grafico in coordinate cartesiane

MessaggioInviato: 2 dic 2017, 10:58
da wall87
Avevo un po di tempo così ho ricopiato tutto, sperando di aver copiato giusto:

Codice: Seleziona tutto
P1([1:3],1)=MM([1:3],1);
P1([1:3],1)=MM([1:3],2);
P1([1:3],1)=MM([1:3],3);
P1([1:3],1)=MM([1:3],4);
P1([1:3],1)=MM([1:3],5);
P1([1:3],1)=MM([1:3],6);
P1([1:3],1)=MM([1:3],7);
P1([1:3],1)=MM([1:3],8);
P1([1:3],1)=MM([1:3],9);
P1([1:3],1)=MM([1:3],10);
P1([1:3],1)=MM([1:3],11);
P1([1:3],1)=MM([1:3],12);
for k=1:12
   v=strcat('P',int2str(k));
   g=eval(v);
for j=1:12
   if MM(1,k)==MM(1,j)
   if MM(2,k)==MM(2,j)
      if abs (MM(3,k)-MM(3,j))==1
         K=MM([1:3],j);
         g=[g,K];
      end
   else
      if MM(3,k)==MM(3,j)
         if abs (MM(2,k)-MM(2,j))==1
            K=MM([1:3],j);
            g=[g,k];
         end
      end
   end
end
if abs(MM(1,k)-MM(1,j))==1
   if MM(2,k)==MM(2,j)
      if MM(3,k)==MM(3,j)
         K=MM([1:3],j);
         g=[g,k]
      end
   end
end
end
end


Gli ultimi punti interrogativi che si vedono nell'immagine 2 non li ho ricopiati, sono ignorante in materia ma penso non servino a nulla.

PS. per la prossima volta quello che ti voleva dire Foto Utentexyz è che per inserire il docice basta che lo selezioni tutto nell'editor con cui lo hai scritto, poi lo copi, vieni qui, pigi il tasto Code, e ti escono i tag, questi per intenderci:
Codice: Seleziona tutto
[code][/code]


e in mezzo ai 2 tag incolli tutto quello che hai copiato nel tuo editor, e il risultato è quello che si vede come l'ho fatto io sopra.
O_/

Re: [MATLAB] grafico in coordinate cartesiane

MessaggioInviato: 2 dic 2017, 12:01
da edomar
Sono decisamente stupido, non dovevi perdere tempo a ricopiarlo.. sei stato gentilissimo...
Vi inserisco tutto lo script:
Codice: Seleziona tutto
clear all
clc

A=[0,1];
B=[-1,0,1];
C=[0,1];
gamma=1;
x=1;
for i=1:2
    V(1)=A(i);
    for j=1:3
        V(2)=B(j);
        for k=1:2
            V(3)=C(k);
            M1(:,x)=[V(1);V(2);V(3)];
            M(:,x)=1/(3*(1+gamma))*[3+gamma+2*gamma*V(1)-V(2)-gamma*V(3);gamma-gamma*V(1)+2*V(2)-gamma*V(3);-3-2*gamma-gamma*V(1)-V(2)+2*gamma*V(3)];
            x=x+1;
        end
    end
end

TB=2/3*[1 -1/2 -1/2; 0 sqrt(3)/2 -sqrt(3)/2];
for i=1:12
    N(:,i)=TB*M(:,i);
    X(1,i)=N(1,i);
    Y(1,i)=N(2,i);
end

scatter(X,Y)
MM=[M1;M;N];

P1([1:3],1)=MM([1:3],1);
P2([1:3],1)=MM([1:3],2);
P3([1:3],1)=MM([1:3],3);
P4([1:3],1)=MM([1:3],4);
P5([1:3],1)=MM([1:3],5);
P6([1:3],1)=MM([1:3],6);
P7([1:3],1)=MM([1:3],7);
P8([1:3],1)=MM([1:3],8);
P9([1:3],1)=MM([1:3],9);
P10([1:3],1)=MM([1:3],10);
P11([1:3],1)=MM([1:3],11);
P12([1:3],1)=MM([1:3],12);
for k=1:12
    v=strcat('P',int2str(k));
    g=eval(v);
for j=1:12
    if MM(1,k)==MM(1,j)
    if MM(2,k)==MM(2,j)
        if abs(MM(3,k)-MM(3,j))==1
            K=MM([1:3],j);
            g=[g,K];
        end
    else
       if MM(3,k)==MM(3,j)
           if abs(MM(2,k)-MM(2,j))==1
               K=MM([1:3],j);
               g=[g,K];
           end
       end
    end
end
if abs(MM(1,k)-MM(1,j))==1
    if MM(2,k)==MM(2,j)
        if MM(3,k)==MM(3,j)
            K=MM([1:3],j);
            g=[g,K];
        end
    end
end
end
???
end

il mio problema è proprio alla fine... su ogni ciclo di k io ottengo una matrice che deve essere sovrascritta al vettore corrispondente Pk.. e non so proprio come fare... vorrei evitare di scrivere 12 for separati..

Re: [MATLAB] grafico in coordinate cartesiane

MessaggioInviato: 2 dic 2017, 12:18
da edomar
Cerco pure di spiegarvi quello che ho fatto.
Ho tre variabili A,B,C che possono assumere i seguenti valori:
A->0,1
B->-1,0,1
C->0,1
Trovo tutti i possibili vettori colonna [A,B,C]' e li salvo nelle prime 3 righe della matrice MM.
Attraverso una data espressione matriciale (in cui compare la dipendenza da A,B,C) calcolo 12 nuovi vettori che salvo nelle righe 4-6 della stessa matrice MM.
Infine applico una trasformata trifase-bifase e ottengo 12 vettori a 2 componenti che salvo nelle righe 7-8 di MM e che plotto col comando scatter.

Di tutti i punti ottenuti, devo collegare con un segmento i punti i cui vettori corrispondenti nelle righe 1-3 hanno 2 componenti uguali e la differenza della componente "diversa" pari a 1 in valore assoluto.
Io vorrei ottenere così 12 matrici P1,...,P12 che presentino nella prima colonna il vettore che sto considerando e nelle altre tutti quelli da collegare.
Ho implementato la regola di collegamento dei punti e funziona se considero un solo vettore. Scrivendo un for più esterno non riesco però a fare sì che ciascuna matrice di interesse venga soprascritta al Pk corrispondente al termine di ciascun ciclo k.