Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ricerca personalizzata

[MATLAB] grafico in coordinate cartesiane

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

Moderatore: Foto Utenteg.schgor

0
voti

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

Messaggioda Foto Utenteedomar » 2 dic 2017, 12:42

ok, sono riuscito in modo un po' barbaro a memorizzare tutte le coppie di punti che devo congiungere nel grafico scatter. Come posso procedere all'unione di tali punti?
Avatar utente
Foto Utenteedomar
45 5
Frequentatore
Frequentatore
 
Messaggi: 108
Iscritto il: 9 lug 2013, 16:12

2
voti

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

Messaggioda Foto Utentewruggeri » 2 dic 2017, 13:12

Non te la prendere, Foto Utenteedomar, ma devo dirti una cosa: non sei assolutamente in grado di scrivere del codice. Hai scritto una roba incomprensibile e non l'hai neanche commentata, dato nomi idioti alle variabili, formattato le espressioni in modo orrendo, definito strutture dati inutili, organizzato malissimo tutti i dati che hai usato (una cosa tra tutte: UNA MATRICE NON É UN CONTENITORE UNIVERSALE DOVE METTI TUTTO CIÒ CHE TI PASSA PER LA TESTA)... non è così che si fa.

Ho riscritto per intero il codice - o almeno, ho cercato di interpretare quella roba assurda che hai scritto e trarne indicazioni per scrivere qualcosa di sensato - e l'ho commentato per te: ricopialo su Matlab e leggilo attentamente. :ok:
Codice: Seleziona tutto
clear all
clc

A = [0,1];
B = [-1,0,1];
C = [0,1];
gamma = 1;
matr_col = 0;

%Creazione dei vettori:
%anzitutto, creiamo la matrice contenente i vettori composti a partire da
%A, B e C, e poi creiamo componente per componente la matrice composta dai
%vettori traformati.
for i = 1 : 2
    for j = 1 : 3
        for k = 1 : 2
            matr_col = matr_col + 1;
             
            M_vet(:, matr_col)=[A(i); B(j); C(k)];
           
            M_vet_trasf(1, matr_col)=1/(3*(1 + gamma)) * (3 + gamma + 2 * gamma * M_vet(1, matr_col) - M_vet(2, matr_col) - gamma * M_vet(3, matr_col));
            M_vet_trasf(2, matr_col)=1/(3 * (1 + gamma)) * (gamma - gamma * M_vet(1, matr_col) + 2 * M_vet(2, matr_col) - gamma * M_vet(3, matr_col));
            M_vet_trasf(3, matr_col)=1/(3 * (1 + gamma)) * (-3 - 2 * gamma - gamma * M_vet(1, matr_col) - M_vet(2, matr_col) + 2 * gamma * M_vet(3, matr_col));
        end
    end
end

%Calcolo dei punti da rappresentare
M_points = 2/3 * [1, -1/2, -1/2; 0, sqrt(3)/2, -sqrt(3)/2] * M_vet_trasf;

%Calcolo dei punti da unire e costruzione dei grafici:
%per ogni punto di partenza, tracciamo l'intero grafico scatter e coloriamo
%quel punto di verde; dopo, procediamo alla ricerca dei punti da
%connettergli, e ogni volta che ne troviamo uno tracciamo il segmento.
for i = 1 : 12
    figure();
    scatter(M_points(1, :),M_points(2, :));
    hold on;
    plot(M_points(1, i), M_points(2, i), 'og');
    hold on;
    for j = (i + 1) : 12
        if (M_vet(1, i) == M_vet(1, j) && M_vet(2, i) == M_vet(2, j) && abs(M_vet(3, i) - M_vet(3, j)) == 1)
            plot([M_points(1, i), M_points(1, j)], [M_points(2, i), M_points(2, j)], '-b');
            hold on;
        elseif (M_vet(2, i) == M_vet(2, j) && M_vet(3, i) == M_vet(3, j) && abs(M_vet(1, i) - M_vet(1, j)) == 1)
            plot([M_points(1, i), M_points(1, j)], [M_points(2, i), M_points(2, j)], '-b');
            hold on;
        elseif (M_vet(1, i) == M_vet(1, j) && M_vet(3, i) == M_vet(3, j) && abs(M_vet(2, i) - M_vet(2, j)) == 1)
            plot([M_points(1, i), M_points(1, j)], [M_points(2, i), M_points(2, j)], '-b');
            hold on;
        end;
    end;
end;
Si, nei limiti delle mie capacità ti rispondo... ma per favore, impara l'italiano!
Se non conosci un argomento, non parlarne.
Gli unici fatti scientifici sono quelli accertati dagli studi. Il resto è opinione.
Avatar utente
Foto Utentewruggeri
2.602 1 6 13
Expert EY
Expert EY
 
Messaggi: 509
Iscritto il: 25 nov 2016, 17:46

1
voti

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

Messaggioda Foto Utenteedomar » 2 dic 2017, 16:27

Ciao, grazie della puntualità della risposta. Ho letto e capito il tuo script che è decisamente più ordinato del mio.
Hai detto bene, non sono un programmatore, sto imparando ma faccio tutto da autodidatta.
Avatar utente
Foto Utenteedomar
45 5
Frequentatore
Frequentatore
 
Messaggi: 108
Iscritto il: 9 lug 2013, 16:12

2
voti

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

Messaggioda Foto Utentewruggeri » 2 dic 2017, 17:30

edomar ha scritto:Hai detto bene, non sono un programmatore, sto imparando ma faccio tutto da autodidatta.


Capisco... e onestamente, in parte questa tua risposta mi conforta: rendersi conto degli errori è il primo passo per migliorare ;-)

A questo punto, mi permetto di consigliarti alcuni accorgimenti che potrebbero rendere migliore il codice che scriverai d'ora in poi:

1 - Commenta tutto, ma proprio tutto: prima di ogni blocco di codice, spiega cosa vuoi fare; prima di istruzioni particolarmente oscure, appunta il loro scopo; all'inizio di ciascun file sorgente, inserisci una breve spiegazione del suo contenuto. Si perde un sacco di tempo, ma almeno nelle prime fasi dell'apprendimento darsi in qualche modo un ordine ed una sistematicità aiuta... si può fare anche in altri modi (io, per esempio, appuntavo e tuttora appunto i miei algoritmi su carta, così durante la scrittura del codice avevo un riferimento costante), ma i commenti vanno messi comunque, quindi tanto vale scriverne un po' di più :mrgreen:

2 - Progetta ciò che ti serve: la creazione di un programma o di uno script non si limita alla redazione del suo codice, che anzi è solo l'ultimo, quasi meccanico passo: occorre sempre progettare i propri elaborati con cura, scegliendo anzitutto le strutture dati da usare (e il ruolo di ciascuna di esse!!!) e poi elaborando (o ri-elaborando: non ha senso inventare la ruota ogni volta, e comunque esistono già tantissimi algoritmi di comprovata efficacia in quasi ogni ambito della computazione) gli algoritmi da utilizzare.

3 - Dai nomi significativi alle strutture dati che usi: essi ti aiutano a rendere leggibile e facilmente modificabile il codice. Addirittura, potresti dare nomi significativi anche agli indici che usi solo per lo scorrimento di vettori e matrici... molte volte non viene fatto, ma in certi casi potrebbe aiutare a capire meglio il codice.

4 - È fondamentale formattare il codice in modo comprensibile: le spaziature, l'indentazione, la lunghezza delle righe sono tutti elementi che possono fare la differenza, soprattutto quando il codice comprende espressioni non banali.

5 - Impara il linguaggio prima di usarlo: Matlab è molto potente nel suo ambito, e permette di fare tante cose interessanti... ma occorre - come con qualsiasi linguaggio - capirne la logica, prima di poterlo usare, così da poter scrivere del codice scorrevole, corretto e possibilmente efficiente.
Si, nei limiti delle mie capacità ti rispondo... ma per favore, impara l'italiano!
Se non conosci un argomento, non parlarne.
Gli unici fatti scientifici sono quelli accertati dagli studi. Il resto è opinione.
Avatar utente
Foto Utentewruggeri
2.602 1 6 13
Expert EY
Expert EY
 
Messaggi: 509
Iscritto il: 25 nov 2016, 17:46

1
voti

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

Messaggioda Foto Utenteedomar » 2 dic 2017, 18:56

Grazie dei consigli, li seguirò di certo. Anche questa è stata un'opportunità per imparare qualcosa! :ok:
Avatar utente
Foto Utenteedomar
45 5
Frequentatore
Frequentatore
 
Messaggi: 108
Iscritto il: 9 lug 2013, 16:12

1
voti

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

Messaggioda Foto Utentewruggeri » 2 dic 2017, 20:56

Si può sempre imparare qualcosa, o comunque sfruttare ciò che capita a fini culturali: io, per esempio, ho approfittato delle tue richieste per ripassare un po' le basi di Matlab, che per il momento non ho occasione di utilizzare spesso :ok:

A proposito: visto che stai studiando Matlab, ritengo tu possa trovare estremamente interessante l'estesissima documentazione ufficiale della Mathworks ;-)
Inoltre, se vuoi vedere alcune semplici applicazioni di Matlab, puoi dare uno sguardo all'articolo che pubblicai mesi fa proprio qui su ElectroYou, oppure dare uno sguardo alla biblioteca informatica che curo personalmente, che contiene dei testi interessanti su Matlab e non solo ;-)
Si, nei limiti delle mie capacità ti rispondo... ma per favore, impara l'italiano!
Se non conosci un argomento, non parlarne.
Gli unici fatti scientifici sono quelli accertati dagli studi. Il resto è opinione.
Avatar utente
Foto Utentewruggeri
2.602 1 6 13
Expert EY
Expert EY
 
Messaggi: 509
Iscritto il: 25 nov 2016, 17:46

Precedente

Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti