Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[MATLAB] grafico in coordinate cartesiane

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

0
voti

[1] [MATLAB] grafico in coordinate cartesiane

Messaggioda Foto Utenteedomar » 1 dic 2017, 14:25

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...)
Avatar utente
Foto Utenteedomar
50 1 5
Frequentatore
Frequentatore
 
Messaggi: 140
Iscritto il: 9 lug 2013, 17:12

0
voti

[2] Re: [MATLAB] grafico in coordinate cartesiane

Messaggioda Foto UtenteDanteCpp » 1 dic 2017, 14:52

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.
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

0
voti

[3] Re: [MATLAB] grafico in coordinate cartesiane

Messaggioda Foto Utenteedomar » 1 dic 2017, 23:35

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 8271 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
Avatar utente
Foto Utenteedomar
50 1 5
Frequentatore
Frequentatore
 
Messaggi: 140
Iscritto il: 9 lug 2013, 17:12

1
voti

[4] Re: [MATLAB] grafico in coordinate cartesiane

Messaggioda Foto Utentexyz » 2 dic 2017, 0:04

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).
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[5] Re: [MATLAB] grafico in coordinate cartesiane

Messaggioda Foto Utenteedomar » 2 dic 2017, 2:38

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?
Avatar utente
Foto Utenteedomar
50 1 5
Frequentatore
Frequentatore
 
Messaggi: 140
Iscritto il: 9 lug 2013, 17:12

0
voti

[6] Re: [MATLAB] grafico in coordinate cartesiane

Messaggioda Foto Utenterugweri » 2 dic 2017, 10:19

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.
Avatar utente
Foto Utenterugweri
5.948 2 8 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 1366
Iscritto il: 25 nov 2016, 18:46

0
voti

[7] Re: [MATLAB] grafico in coordinate cartesiane

Messaggioda Foto UtenteMarcoD » 2 dic 2017, 10:42

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_/
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

1
voti

[8] Re: [MATLAB] grafico in coordinate cartesiane

Messaggioda Foto Utentewall87 » 2 dic 2017, 10:58

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_/
Il futuro appartiene a coloro che credono nella bellezza dei propri sogni.

Formule LaTeX

Uso di LaTeX sul forum

ƎlectroYou
Avatar utente
Foto Utentewall87
6.025 5 10 13
Master
Master
 
Messaggi: 1467
Iscritto il: 27 nov 2014, 15:28
Località: Padova

0
voti

[9] Re: [MATLAB] grafico in coordinate cartesiane

Messaggioda Foto Utenteedomar » 2 dic 2017, 12:01

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..
Avatar utente
Foto Utenteedomar
50 1 5
Frequentatore
Frequentatore
 
Messaggi: 140
Iscritto il: 9 lug 2013, 17:12

0
voti

[10] Re: [MATLAB] grafico in coordinate cartesiane

Messaggioda Foto Utenteedomar » 2 dic 2017, 12:18

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.
Avatar utente
Foto Utenteedomar
50 1 5
Frequentatore
Frequentatore
 
Messaggi: 140
Iscritto il: 9 lug 2013, 17:12

Prossimo

Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti