Yorick

Studio di funzioni

Yorick è un linguaggio interpretato creato al Lawrence Livermore National Laboratory nel 1994 per essere utilizzato nello studio e rappresentazione grafica di funzioni.

La struttura sintattica di Yorick è simile a quella del C, ma senza la necessità di dichiarare le variabili. I tipi di dato sono numeri interi, reali e complessi, caratteri, puntatori e strutture composte di dati elementari. Yorick è fornito con un vasto corredo di esempi-funzioni, sia per algoritmi di integrazione, derivazione, interpolazione, che per la realizzazione di grafica in 3D ed animazione.

Il linguaggio si avvale di istruzioni per generare e trattare vettori ed array, questi possono essere inizializzati con un certo valore (array(valore,dimensioni)), con valori ad incremento costante o logaritmico (span(minimo,massimo,numero_punti), indgen() e spanl()) o con valori casuali (random()).

> a=indgen(13:97:4)   // da 13 a 97 con passo 4

> a

[13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97]

> a(3:13:4)

[21,37,53]

> a(11:)

[53,57,61,65,69,73,77,81,85,89,93,97]

> a(where(a % 5 == 0)) // where fornisce una lista di indici

[25,45,65,85]

Le funzioni primitive di disegno permettono di ottenere, dai vettori contenenti le coordinate dei punti, il grafico di una funzione in modo efficace ed intuitivo: se la funzione è y=f(x), ed il vettore x contiene le coordinate (in ordine) di un dato intervallo, il grafico si ottiene con il comando plg, f(x),x; se invece la curva è in forma parametrica, x=g(p) e y=h(p), e si ha a disposizione un vettore dei valori del parametro, il comando è  plg, h(p),g(p). L’esempio sottostante mostra le istruzioni per generare un cerchio tramite la funzione analitica e quella parametrica.

p=span(0,2*pi,200)       // fra 0 e 2 pigreco

plg, 2*sin(p),2*cos(p)   // cerchio di raggio 2

x = span(-2,2,200);      // fra -2 e 2

plg, sqrt(4-x^2),x       // semicerchio superiore

plg, -sqrt(4-x^2),x      // semicerchio inferiore

Si possono realizzare grafici di funzioni tridimensionali (superfici) e, tramite l’utilizzo di librerie peraltro con qualche problema di robustezza, si possono ottenere grafici colorati, a filo di ferro e con l’effetto di uno o più sorgenti luminose. Sempre tramite librerie si ottengono grafici in movimento.

La presentazione del grafico è controllabile tramite degli script di stile; in dotazione ce ne sono una decina e se ne possono costruire per particolari esigenze; ad esempio “axes.gs” fornisce un sistema di assi cartesiani. La documentazione è discreta ed accessibile anche dall’ambiente dell’interprete, grazie ad un opportuno utilizzo dei commenti. Sono presenti funzioni per leggere e scrivere alcuni formati grafici e per produrre grafici in formato PostScript.

Il programma che segue disegna alcune funzioni.

// Copyright (c) 1996.  The Regents of the University of California.

// Yorick 1.5.12

func ellisse(a,b,cx,cy,ang,colore=)

/* DOCUMENT ellisse(a,b,cx,cy,ang,colore=)

    disegna un'ellisse centrata in cx,cy,

    con assi a,b, ruotati di ang radianti

*/

{lim = a*b*10.0; // 10.0 forza lim reale

 if (colore == nil) colore = "black";

 vect = array(0.0,int(lim*2*pi),2);

 for (i=0; i < int(lim*2*pi);i++)

   {vect(i,1) = a*cos(i/lim);

    vect(i,2) = b*sin(i/lim);

   }

 plg, cy+vect(,1)*sin(ang)+vect(,2)*cos(ang),

      cx+vect(,1)*cos(ang)-vect(,2)*sin(ang),color=colore;

}

require, "graph.i"

window, style="axes.gs"

hcp_file, "graf2D.ps"

limits, -10.0,10.0,-10.0,10.0;    // ampiezza finestra grafica

pldefault, color = "green"

theta = span(0, 2*pi, 100)

plg,2*cos(theta)-3,2*sin(theta)+4,legend="A: Circolo raggio 3, centro (4,-3)"

vect = span(-10,10,100)

pldefault, color = "red"

// funzione somma di quadrica e trigonometrica

plg, 0.1*vect^2-2*sin(vect),vect,legend="B: Somma di funzioni"

plt, "Prova grafici", -8.5,9.3,tosys=1,font="courier",height=14,color = "blue";

ellisse(4,2,-2,6,pi/6,colore = "magenta");  // ellissi inclinata di 30 gradi

hcp;

hcp_finish;

Copyright (c) 1996.  The Regents of the University of California.

 All rights reserved.  Yorick 1.5.12 ready.  For help type 'help'

> include,"graf2D.i"

[]

> help, ellisse

 /* DOCUMENT ellisse(a,b,cx,cy,ang,colore=)

     disegna un'ellisse centrata in cx,cy,

     con assi a,b, ruotati di ang radianti

 */

 defined at:  LINE: 3  FILE: C:/YORICK-1.5-12/i/graf2D.i

> 

 

Figura 1