(* Per lanciare un comando posizionare il cursore sul testo e premere Shift+Return .
 
Ad esempio: posizionare il cursore sulla riga qui sotto, cliccare una volta e poi 
premere insieme i tasti di “maiuscolo”(Shift) ed “invio”(Return) . Il numero 2 dovrebbe apparire in una nuova riga come risultato.  *)

1+1

(* Per visualizzare la definizione e la sintassi di un comando utilizzare il punto interrogativo.
ad esempio: *)

?Circle

(* Come nel caso di Circle, ogni comando o funzione in Mathematica è in inglese ed inizia con la lettera maiuscola ! *)

(* Inoltre l’argomento di una funzione o gli input di un comando sono tra parentesi quadrate e separati da virgole ! *)

(* Le parentesi graffe indicano una lista di elementi: nel caso del comando Circle la scrittura {x,y} indica una coppia di numeri che rappresenta le coordinate del centro. Attenzione: per indicare una lista si possono usare SOLO le parentesi graffe, mentre per gli argomenti di una funzione o di un comando si possono usare SOLO le parentesi quadrate! Le usuali parentesi per indicare l’ordine di esecuzione delle operazioni elementari sono SOLO le parentesi tonde.*)

(* Per approfondimenti consultare il manuale cliccando sul segno >> *)

(* oppure il tasto Help nel menu in alto selezionando Documentation Center e consultare
il manuale per argomenti o ricerca di parole *)

(* il manuale è pieno di esempi per ogni voce: cominciate dall'istruzione Circle e passate 
a Line e Point *)

?Point

?Line

(* Queste istruzioni sono solo grafiche  ma possono essere combinate con delle equazioni o mediante i comandi Table, Manipulate: per ciascuna riga (per tutto il resto del file) posizionare il cursore, cliccare una volta sul testo e premere Shift+Return *)

Graphics[Circle[{0,0},1]]

Graphics[{Circle[{0,0},1],Circle[{0,0},0.1]}]

(* Ci sono istruzioni per il grafico di una funzione: ad esempio il comando Plot *)

?Plot

(* La funzione f(x)=x viene graficata per -1<x<1 : attenzione alle diverse parentesi!  *)

Plot[x,{x,-1,1}]

(* Ad ogni comando si possono aggiungere una o più opzioni: il simbolo “->”  si ottiene digitando “-” seguito da “>”. I due comandi seguenti sono identici *)

Plot[x,{x,-1,1},ImageSize->400]

Plot[x,{x,-1,1},ImageSize->400]

(* Le opzioni di ogni comando, con i relativi valori di default, si possono ottenere usando il comando Options[ ] *)

Options[Plot]

(* L’elevamento a potenza si ottiene utilizzando il carattere “^” : *)

Plot[x^2,{x,-1,1},ImageSize->400]

Plot[x^2,{x,-2,2},ImageSize->400,AspectRatio->Automatic]

Plot[x^2,{x,-2,2},ImageSize->400,AspectRatio->Automatic,PlotRange->{{-1,1},{0,1/2}}]

(* Le funzioni possono essere definite in Mathematica con la seguente sintassi   f[ x_ ]:= x+Sin[x] 
Il punto e virgola separa differenti comandi sulla stessa riga *)

f[x_]:= x+Sin[x];Plot[f[x],{x,0,8Pi}]

(* Mathematica riconosce alcuni nomi come il valore simbolico di qualche numero: 
ad esempio “Pi” per π   oppure “E” per il numero di Nepero e  oppure “GoldenRatio” per la sezione aurea (1+(Sqrt[5]))/2 *)

{Pi,E,GoldenRatio}

(*  Il comando N indica il valore numerico di una espressione: *)

?N

N[Pi]

(*Lo stesso comando può essere usato con l’aggiunta del numero di cifre decimali che si desiderano*)

N[Pi,1000]

N[GoldenRatio,200]

(* La funzione (Sqrt[x]) si indica con Sqrt[x]  *)

(Sqrt[5]+1)/2

N[(Sqrt[5]+1)/2,200]

N[1/GoldenRatio,200]

GoldenRatio-1/GoldenRatio

N[GoldenRatio,200]-N[1/GoldenRatio,200]

?Sin

Plot[Sin[x],{x,0,2Pi}]

Plot[Sin[x],{x,0,2Pi},AspectRatio->Automatic]

(* Torniamo al comando Graphics: le possibili opzioni si ottengono come prima con il comando Options *)

Options[Graphics]

Graphics[{Red,PointSize[0.03],Point[{0,0.3}]},Axes->True,PlotRange->{{-2,2},{-2,2}}]

Graphics[{
{Red,PointSize[0.03],Point[{0,0.3}]},
{Blue,Thickness[0.01],Line[{{0,0.3},{2,0.3}}]}
},Axes->True,PlotRange->{{-2,2},{-2,2}}]

(* Si possono combinare istruzioni grafiche diverse: ad esempio il comando Graphics può essere utilizzato per una lista di oggetti: il comando Table genera liste *)

?Table

Table[k,{k,1,10}]

Table[k^2,{k,1,10}]

(* Si può aggiungere il “passo” o “step” per ottenere una lista al variare di k tra 1 e 10 con passo 2*)

Table[k,{k,1,10,2}]

Table[Circle[{0,0},k],{k,0,1,.1}]

(* Alcuni esempi di grafici ripetuti al variare di un parametro: il raggio oppure la posizione del centro *)

Graphics[Table[Circle[{0,0},k],{k,0,1,.1}],PlotRange->{{-2,2},{-2,2}}]

Graphics[Table[Circle[{k,0},0.05],{k,-2,2,.1}],PlotRange->{{-2,2},{-1,1}}]

(* I golori possono essere cambiati in vari modi tramite i comandi RGBColor o Hue *)

?RGBColor

?Hue

Graphics[Table[{Hue[k/4+0.5],Circle[{k,0},0.05]},{k,-2,2,.1}],PlotRange->{{-2,2},{-1,1}}]

(* I grafici possono essere manipolati al variare di parametri con il comando Manipulate: lo stesso comando per disegnare un pentagono regolare e poi un poligono regolare di n lati con n variabile tra 3 e 30 con passo 1 *)

Graphics[{{Red,Circle[{0,0},1]},Line[Table[{Cos[k*2Pi/5],Sin[k*2Pi/5]},{k,0,5,1}]]},ImageSize->150]

Manipulate[Graphics[{{Red,Circle[{0,0},1]},Line[Table[{Cos[k*2Pi/n],Sin[k*2Pi/n]},{k,0,n,1}]]},ImageSize->150],{n,3,30,1}]

Manipulate[Graphics[Table[Circle[{h*k,k},0.2],{k,-1,1,.4}],PlotRange->{{-2,2},{-2,2}}],{h,-2,2}]

(* Otteniamo un cerchio che trasla su una retta: *)

Manipulate[Graphics[{Circle[{h,1},1],Line[{{-10,0},{10,0}}]},PlotRange->{{-10,10},{-10,10}}],{h,-9,9}]

(* Aggiungiamo un raggio la cui posizione angolare varia con lo stesso parametro h: l’effetto visivo, se muoviamo il grafico con il cursore o facciamo patire l’animazione cliccando sul simbolo + in un quadratino in alto al centro e poi il triangolo nero di “Play”) è quello di un cerchio che rotola SENZA strisciare *)

Manipulate[Graphics[{
Circle[{h,1},1],
Line[{{-10,0},{10,0}}],
Line[{{h,1},{h,1}+{Cos[-h],Sin[-h]}}]
},PlotRange->{{-10,10},{-10,10}}],{h,-9,9}]

(* Il punto della circonferenza individuato da tale raggio descrive una curva detta cicloide: di conseguenza le coordinate cartesiano di un generico punto (x,y) di tale curva variano al variare del parametro t in modo che
  (x(t),y(t)) = (t - sin t , 1 - cos t )  che rappresenta l’equazione parametrica della cicloide descritta con il comando ParametricPlot *)

?ParametricPlot

Manipulate[Show[{Graphics[{Circle[{h,1},1],Line[{{-10,0},{10,0}}],Line[{{h,1},{h,1}+{Cos[-h],Sin[-h]}}]},PlotRange->{{-10,10},{-10,10}}],ParametricPlot[{t,1}+{Cos[-t],Sin[-t]},{t,-10+0.001,h}]}],{h,-9,9}]

(* alcune definizioni di curve parametriche: circonferenza di dato centro e raggio, ellisse di dato centro e semiassi. La definizione di tali funzioni va fatta prima di usarle, con il solito comando Shift+Return *)

circle[x0_,y0_][r_][t_]:={x0+r*Cos[t],y0+r*Sin[t]}
ellisse[x0_,y0_][a_,b_][t_]:={x0+a*Cos[t],y0+b*Sin[t]}

ParametricPlot[circle[0,0][1][t],{t,0,2Pi},PlotRange->{{-3,3},{-3,3}}]

ParametricPlot[circle[1,2][0.5][t],{t,0,2Pi},PlotRange->{{-3,3},{-3,3}}]

ParametricPlot[{Sin[t],Sin[2t]},{t,0,2Pi},PlotRange->{{-1.2,1.2},{-1.2,1.2}}]

(* Le figure di Lissajous *)

Manipulate[ParametricPlot[{Sin[k*t],Sin[h*t]},{t,0,2Pi},PlotRange->{{-1.2,1.2},{-1.2,1.2}}],{k,1,10,1},{h,1,10,1}]

(* Prova a definire altre curve parametriche cambiando le funzioni in gioco riempiendo gli spazi lasciati in bianco. In alcuni casi dovrai anche cambiare il range del parametro t ed il PlotRange  *)

ParametricPlot[{        ,       },{t,0,2Pi},PlotRange->{{-1.2,1.2},{-1.2,1.2}}]

(* Altre cicloidi: *)

cicloide[a_][h_][t_]:={a*t-h*Sin[t],a-h*Cos[t]};
ipocicloide[a_,b_][t_]:={(a-b)*Cos[t]+b*Cos[(a-b)/b*t],(a-b)*Sin[t]-b*Sin[(a-b)/b*t]};
epicicloide[a_,b_][t_]:={(a+b)*Cos[t]-b*Cos[(a+b)/b*t],(a+b)*Sin[t]-b*Sin[(a+b)/b*t]};

Manipulate[ParametricPlot[cicloide[1][1][t],{t,0,k},PlotRange->{{0,6Pi},{0,2}},Epilog->{Circle[{k,1},1],Point[cicloide[1][1][k]],Line[{{k,1},cicloide[1][1][k]}]}],{{k,1},0.0001,6Pi}]

Manipulate[ParametricPlot[ipocicloide[3,1][t],{t,0,k},PlotRange->{{-3,3},{-3,3}},ImageSize->200,Epilog->{Circle[{0,0},3],Circle[{2Cos[k],2Sin[k]},1],Point[ipocicloide[3,1][k]],Line[{{2Cos[k],2Sin[k]},ipocicloide[3,1][k]}]}],{k,0.0001,2Pi}]

Manipulate[ParametricPlot[ipocicloide[a,b][t],{t,0,k},PlotRange->{{-a,a},{-a,a}},ImageSize->150,Epilog->{Circle[{0,0},a],Circle[{(a-b)Cos[k],(a-b)Sin[k]},b],Point[ipocicloide[a,b][k]],Line[{{(a-b)Cos[k],(a-b)Sin[k]},ipocicloide[a,b][k]}]}],{{a,3},1,7},{{b,1},0.01,5},{k,0.0001,100Pi}]

Manipulate[ParametricPlot[epicicloide[a,b][t],{t,0,k},PlotRange->{{-a-2b,a+2b},{-a-2b,a+2b}},ImageSize->150,Epilog->{Circle[{0,0},a],Circle[{(a+b)Cos[k],(a+b)Sin[k]},b],Point[epicicloide[a,b][k]],Line[{{(a+b)Cos[k],(a+b)Sin[k]},epicicloide[a,b][k]}]}],{{a,3},1,10},{{b,1},0.01,10},{k,0.0001,100Pi}]