Disegnamo curve parametriche con Scilab

Grafici con Scilab

Scilab è un programma per il calcolo numerico open source e gratuito. Tra le varie funzionalità una molto utile come ausilio all’elaborazione scientifica è la visualizzazione in forma grafica dei legami fra grandezze (ad esempio le variabili che descrivono lo stato dei sistemi dinamici).

In questo post, aiutato da alcuni esempi significativi, mostrerò i comandi di base per la visualizzazione di grafici e curve.

Tipicamente siamo abituati a pensare ai grafici di funzione in cui ad ogni valore della variabile indipendente corrisponde al più un valore della variabile indipendente, mentre esistono figure geometriche o, più in generale, legami tra grandezze che non sono esprimibili mediante una funzione. Considerando che i punti di una qualunque curva nel piano possono essere rappresentati come coppie di coordinate in un piano cartesiano, Scilab (come gli altri programmi di calcolo numerico nati per l’elaborazione di matrici e vettori) consente di disegnare i grafici semplicemente come coppie di punti in un piano cartesiano, salvo poi unirli per dare l’idea di una curva.

Prima di introdurre gli esempi aggiungo che nel caso in cui in cui non sia esplicitato il vettore contenente la variabile indipendente, il grafico sarà semplicemente la sequenza ordinata dei valori del vettore da riportare nel grafico.

Convinto che gli esempi valgano più di molte parole, iniziamo a disegnare un’ellisse: una figura geometrica che può essere espressa mediante note formule matematiche ma non è rappresentabile mediante una funzione.
Ricordiamo che l’ellisse è il luogo dei punti che soddisfano l’equazione

(\frac{x}{a})^2+(\frac{y}{b})^2=1

ed è evidente che non si può esprimere (analiticamente) come una funzione y=f(x). Per poterla riportare su un piano cartesiano possiamo utilizzare una rappresentazione parametrica in cui le due coordinate sono espresse in funzione di una variabile di appoggio. In questo caso la soluzione è fornita dall’espressione in coordinate polari. Definite le variabili x ed y in funzione dell’angolo non occorrono calcoli aggiuntivi per arrivare all’equazione citata perché Scilab consente di ottenere la curva semplicemente visualizzando le coppie di coordinate omologhe (ovvero riferite allo stesso valore del parametro).

Descriviamo il codice:

t=0:0.01:10;
ecc=10; //eccentricità dell'ellisse
A=5;
B=A*ecc;
x=A*cos(t);
y=B*sin(t)
plot(x,y)

Alla prima riga si definisce il vettore t, semplicemente indicando il valore iniziale, l’incremento ed il valore finale. Si definiscono poi le costanti utili a rappresentare la figura e quindi le due funzioni parametriche delle coordinate.
Alla fine il comando plot genera il grafico dato dalle coppie di punti in x e y, mostrato nella figura seguente. Da questa definizione si capisce perché i due vettori debbano avere la stessa dimensione!

ellisse

Ad essere precisi plot, da solo, non genera una finestra con un grafico ma aggiunge un grafico all’ultima finestra utilizzata. La crea solo se è la prima! Se questo fosse un problema (magari non vogliamo sovrapporre il grafico appena creato a quelli precedenti) si potrebbe creare una nuova finestra con il comando
scf();

Se, invece, vogliamo chiudere la finestra corrente è sufficiente il comando  close

Come possiamo notare gli assi si adattano alle dimensioni della finestra, e le unità di misura sono diverse per i due assi (se poniamo le costanti A e B uguali per avere una circonferenza otteniamo comunque una visualizzazione fuorviante con grafico che sembra un’ellisse). Per avere gli assi nelle giuste proporzioni (e quindi visualizzare correttamente una circonferenza, ovvero l’ellisse definita prima)  occorre impostare la visalizzazione in modalità isometrica.

Si può fare in due modi: o manualmente, andando con il mouse sul menù “EDIT/Axes Properties” e spuntanto la casella “isoview” nel tab “Aspect”, come mostrato nelle seguenti figure

menu axes properties

 

spunta su isoview

oppure mediante i comandi:

a=gca();
a.isoview='on';

se si vogliono automatizzare le operazioni. Con l’istruzione alla prima riga si acquisiscono (ed assegnano ad una variabile) le proprietà dell’oggetto “assi correnti” (ovvero il grafico attivo) e con la seconda si imposta la proprietà “isoview”.

Nel caso dell’ellisse definita prima si ottiene la seguente figura, in cui è possibile apprezzarne l’eccentricità:

grafico isometrico ellise

Le due coordinate possono anche essere considerate come funzioni del parametro t ed essere quindi visualizzate indipendentemente (potrebbero rappresentare, ad esempio, l’evoluzione degli stati di un sistema dinamico con “t” che è proprio il tempo) sullo stesso grafico:

plot(t,x,t,y)

Avremmo anche potuto eseguire due plot in sequenza ricordando che il nuovo grafico non cancella il precedente, ma avremmo dovuto impostare esplicitamente nel comando il colore delle curve per renderle distinguibili.

sinusoidi

Siccome l’appetito vien mangiando, possiamo complicare un po’ le cose disegnando le due curve in funzione di un altro parametro che a sua volta è funzione di t, in modo da “scalare” l’asse dei tempi:

z=t.^2;
plot(z,x,z,y)

sinusoidi con tempi scalati

Lavorando con le funzioni parametriche è possibile disegnare qualsiasi tipo di curva, anche se contenente punti angolosi o loop chiusi. Per disegnare la curva in figura le equazioni sono le seguenti:

x=t-2*sin(t);
y=2-2*cos(t);
scf()
plot(x,y)
a=gca();
a.isoview='on';

Curva con nodo

In conclusione, in questo post abbiamo visto come visualizzare grafici di funzione e curve parametriche con Scilab, chiudere una finestra grafica, aprirne una nuova ed ho mostrato anche alcuni cenni a come manipolare l’aspetto dei grafici.
Se ci sono aspetti poco chiari chiedi pure nei commenti. Magari c’è qualcosa su cui scrivere un nuovo post.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Pin It on Pinterest