Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
<div>
Scarica il
</div>Daniele Lupo Appunti di Mathematica
Grafica e suoni
ü Introduzione
Abbiamo visto, fino ad adesso, come si possono elaborare funzioni, risolvere equazioni e così via.
Tuttavia, molte volte è necessario trovare il modo di poter visualizzare tramite grafici ed immagini i
risultati così ottenuti. Per esempio, se si crea un filtro per un'immagine, viene naturale, invece di
andare a guardare liste interminabili di numeri di cui non capite niente, fare direttamente un
confronto fra l'immagine iniziale e quella finale, oppure rappresentare graficamente l'andamento di
una funzione, o visualizzare un campo vettoriale.
Mathematica in questo campo ha numerose funzioni, che permettono di visualizzare praticamente
ogni cosa voi vogliate. Ci sono comandi specifici per grafici a due e tre dimensioni, ed anche per la
tipologia di grafico.
Come ultima nota, vedrete che questo capitolo sarà uno dei più lunghi (se non il più lungo). Non
spaventatevi di ciò, e dal numero di pagine, perchè il loro elevato numero è dovuto al fatto che
saranno infarcite di numerose immagini. Con ciò, naturalmente, non voglio dire che starete per
leggere un fumetto... Di carne al fuoco ce n'è tanta...
ü Grafica
Funzioni ad una variabile
Il comando principale con cui si disegnano le funzioni (fra cui quasi tutte quelle che avete visto
finora) è Plot: x x disegna f nella variabile x da x a x
Plot[f, {x, , }]
min max min max
f f … disegna assieme più funzioni
Plot[{ , , }, {x,
1 2
x x
, }]
min max
Il comando ha moltissime opzioni che permettono di personalizzare il grafico, ma per ora ci basta
sapere questo. Vediamo subito un esempio di come si disegna una funzione:
122
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
8x,
Plot@BesselJ@0, xD, 0, 10<D;
In[1]:= 1
0.8
0.6
0.4
0.2 2 4 6 8 10
-0.2
-0.4
Vediamo come il grafico sia automaticamente scalato nell'asse y.
Possiamo anche visualizzare più funzioni nello stesso grafico: 8x,
Plot@8BesselJ@0, xD, BesselJ@1, xD, BesselJ@2, xD<, 0, 10<D;
In[2]:= 1
0.8
0.6
0.4
0.2 2 4 6 8 10
-0.2
-0.4
Vediamo come le funzioni appaiano sovrapposte fra di loro. Naturalmente, in questo caso, dobbiamo
specificare lo stesso dominio per ciascuna funzione, e quindi avremo bisogno di una sola variabile x
per tutte e tre le funizioni. 123
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
Nel caso si voglia realizzare il grafico di una lista di funzioni definita con Table, le cose cambiano
leggermente: supponiamo, infatti, di avere: 8n,
=
lista Table@ChebyshevT@n, xD, 8<D;
In[3]:= 8x, −1,
Plot@lista, 1<D
In[4]:= − = − More…
— Plot::plnr : lista is not a machine size real number at x 1..
− = − More…
— Plot::plnr : lista is not a machine size real number at x 0.918866.
− = − More…
— Plot::plnr : lista is not a machine size real number at x 0.830382.
— General::stop : More…
Further output of Plot::plnr will be suppressed during this calculation.
1
0.8
0.6
0.4
0.2 0.2 0.4 0.6 0.8 1
Graphics
Out[4]=
In questo caso possiamo vedere che non possiamo visualizzare le funzioni, restituendo degli errori
ed un grafico vuoto. Questo perchè, in questa notazione, prima vengono valutati i valori della x per
generare il grafico, e dopo viene sostituita alle funzioni: in questo caso, invece è necessario prima
valutare la tavola di valori, e poi andare a sostituire i valori di x. Questo si fa con il comando
Evaluate: 124
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
x x prima specifica precisi valori di x, dopo valuta f per
Plot[f, {x, , }]
min max ogni valore di x
prima valuta f, sceglie specifici valori numerici x
Plot[Evaluate[f], {x,
x x
, }]
min max genera una lista di funzioni, e poi li disegna
Plot[Evaluate[Table[f,
… x x
]], {x, , }]
min max plotta un'equazione differenziale numerica
Plot[Evaluate[y[x] ottenuta tramite
solution], x NDSolve
/. {x, ,
min
Riproviamo ad effettuare, adesso, il plottaggio precedente, ma stavolta con Evaluate:
8x, −1,
Plot@Evaluate@listaD, 1<D
In[5]:= 1
0.5
-1 -0.5 0.5 1
-0.5
-1
Graphics
Out[5]=
Vediamo come adesso, avendo valutato prima la tavola di funzioni, questa adesso sia correttamente
riconosciuta, permettendoci di disegnare i grafici di tutte le funzioni definite. Nel primo caso si
mantiene la valutazione simbolica di lista, quindi Table non veniva sviluppata, e di conseguenza
Mathematica non riconosceva le funzioni, impedendo di poter disegnare i grafici.
Quello che dovete ricordare, quindi, è che quando create una serie di funzioni con Table, dovete
usare il comando Evaluate. Supponiamo di trovarci la soluzione numerica di un'equazione
differenziale:
= +
eq y ''@xD Sin@y '@xDD y@xD x y@xD;
In[6]:= 125
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
8x,
NDSolve@8eq, y@0D 1, y '@0D 3<, y, 0, 4<D
In[7]:= 88y → <>D<<
InterpolatingFunction@880., 4.<<,
Out[7]=
Abbiamo visto che la soluzione viene data in forma di funzione pura, quindi, per quello che serve a
noi, bisogna prima valutare la funzione sostituita, e poi andare a graficarla:
ê. 8x,
Plot@Evaluate@y@xD %D, 0, 3<D
In[8]:= 50
40
30
20
10 0.5 1 1.5 2 2.5 3
Graphics
Out[8]=
In realtà, avremmo ottenuto lo stesso risultato anche senza Evaluate, ma il tempo impiegato sarebbe
diverso; ê
=
eq2 y '@xD Sqrt@y@xDD Sin@x ^ 2D;
In[9]:= 8x,
NDSolve@8eq2, y@0D 3<, y, 0, 50<D
In[10]:= 88y → <>D<<
InterpolatingFunction@880., 50.<<,
Out[10]= 126
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
ê. 8x,
Timing@Plot@Evaluate@y@xD %D, 0, 50<DD
In[11]:= 4.3
4.25
4.2
4.15 10 20 30 40 50
4.05
80.016 <
Second, Graphics
Out[11]= ê. 8x,
Timing@Plot@y@xD %%, 0, 50<DD
In[12]:= 4.3
4.25
4.2
4.15 10 20 30 40 50
4.05
80.015 <
Second, Graphics
Out[12]=
Come potete vedere, il risultato grafico è lo stesso. Tuttavia il tempo impiegato per eseguire la
funzione è diverso; con Timing, infatti, si calcola il tempo macchina per effettuare l'operazione che
ha come argomento, e nel secondo caso abbiamo impiegato un tempo maggiore (sempre poco,
effettivamente). 127
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
La differenza, in questo caso, sta in questo: nel primo grafico, usando Evaluate, prima abbiamo
valutato la funzione, e quindi abbiamo ottenuto la funzione interpolata, e dopo siamo andati a
sostituire i valori di x alla funzione, andando a trovare i valori e quindi a graficarli. Nel secondo
caso, invece, prima andiamo a calcolarci il valore di x in cui valutare la funzione, e poi andiamo a
valutare la funzione in quel punto; allora, dato che nella funzione c'è una regola di sostituzione,
invece di applicarla solamente una volta, come nel primo caso, la applichiamo per ogni punto x che
calcoliamo. andando ad eseguire quindi un tot numero di sostituzioni identiche, una per ogni punto
che Mathematica usa per creare il grafico. Per funzioni complicate e con molti punti, questo può
rallentare notevolmente il processo, specialmente su computer lenti.
Opzioni di disegno
Abbiamo visto come disegnare le funzioni. Tuttavia, a volte è utile poter personalizzare le opzioni di
visualizzazione dei grafici, per modificarne lo stile, oppure per evidenziarne alcune caratteristiche
particolari. Se andiamo a vedere le opzioni disponibili per il comandio Plot, vediamo che ce ne sono
parecchie:
Options@PlotD
In[13]:= 9AspectRatio 1
→ → →
, Axes Automatic, AxesLabel None,
Out[13]= GoldenRatio
→ → →
AxesOrigin Automatic, AxesStyle Automatic, Background Automatic,
→ → →
ColorOutput Automatic, Compiled True, DefaultColor Automatic,
8<,
DefaultFont $DefaultFont, DisplayFunction $DisplayFunction,
→ → →
Epilog FormatType $FormatType, Frame False, FrameLabel None,
→ → →
FrameStyle Automatic, FrameTicks Automatic, GridLines None,
→ → →
ImageSize Automatic, MaxBend 10., PlotDivision 30.,
8<,
→ → →
PlotLabel None, PlotPoints 25, PlotRange Automatic,
→ → →
PlotRegion Automatic, PlotStyle Automatic, Prolog
→ →
RotateLabel True, TextStyle $TextStyle, Ticks Automatic=
Alcune sono utili, altre invece non verranno usate quasi mai: vediamo il loro significato:
ø Axes: definisce se dobbiamo disegnare o no gli assi dei grafici. Se lo impostiamo su False gli assi
non verranno disegnati.
ø AxesLabel: imposta il titolo delle etichette da imporre agli assi cartesiani, in modo da visualizzarli
sul grafico; si usa principalmente per evidenziare la grandezza che corrisponde all'ascissa o
all'ordinata.
ø AspectRatio: rappresenta il rapporto fra larghezza ed altezza del grafico: possiamo imporre un
valore numerico
ø AxesOrigin: definisce il centro in cui verranno rappresentati gli assi cartesiani. Di default è
impostato su Automatic, che definisce quindi il centro degli assi (0,0), se questo è visibile nel
128
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
grafico, altrimeni viene impostato in modo che gli assi si trovino nei margini del grafico. Possiamo
comunque impostarlo manualmente per avere l'origine, per esempio, nel massimo di una funzione,
conoscendo il punto.
ø AxesStyle: con questa opzione possiamo imporre lo stile degli assi, per esempio modificandone il
colore, oppure lo spessore delle linee.
ø Background: imposta il tipo di sfondo del grafico, impostando il colore, oppure, mediante scrittura
più avanzata, magari un'immagine oppure un gradiente (anche se non ci sono mai riuscito a fare uno
sfondo che non sia uniforme, ancora...).
ø ColorOutput: questa opzione specifica il tipo di output di colore che viene utilizzato per una
funzione. Permette, per esempio, di disegnare un gradico in scals di grigi invece che a colori, oppure
in colori RGB.
ø Compiled: specifica se una funzione deve essere compilata dal motore interno di Mathematica
prima di poter calcolare i valori della funzione per il plottaggio: di solito si imposta di default su
True, ma può essere impostato su False per alcuni tipi di grafico, se per esempio è necessaria un'alta
precisione numerica, il che a volte con le funzioni compilate possono dare problemi. Credo sia
l'opzione che ho usato di meno fra tutte...
ø DefaultColor: possiamo definire, con questa opzione, il colore standard per disegnare tutto quanto il
grafico, nella sua totalità, e non, per esempio, solo il colore della funzione.
ø DefaultFont: definisce il tipo di font che deve essere usato per visualizzare l'eventuale testo presente
nel grafico.
ø DisplayFunction: non è che abbia mai capito cosa faccia esattamente questa opzione: permette di
definire come visualizzare il grafico. Se settato su Identity non è visualizzato... Mah!!!
ø Epilog: definisce una lista do oggetti grafici (quali punti e cerchi, per esempio), che devono essere
aggiunti al grafico dopo che è stata disegnata la funzione principale. Si può usare, per esempio, per
visualizzare ed evidenziale punti e zone del grafico.
ø FormatType: permette di definire lo stile della cella. Per esempio, se scriviamo una formula come
titolo del grafico, possiamo, mediante questa opzione, visualizzarla in notazione standard, invece che
come la visualizza Mathematica sotto forma di testo.
ø Frame: questa opzione, se settata su True, disegna una cornice intorno al grafico. Mediante le
seguenti, opzioni, dopo, possiamo definire lo stile della cornice.
ø FrameLabel: definisce le etichette da applicare alla cornice. se la impostiamo come {titolo1,
titolo2}, appariranno rispettivamente sotto ed a sinistra, mentre se lo impostiamo a {titolo1, titolo2,
titolo3, titolo4}, compariranno a partire dal basso, in senso orario.
129
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
ø FrameStyle: personalizza lo stile con cui viene disegnata la cornice, definendo colore, stile e
spessore delle linee che compongono il frame: ogni lato può avere la sua
personalizzazione{{personalizzax},{personalizzay}}.
ø FrameTicks: definisce in questo senso se devono comparire oppure no i marker degli assi nella
cornice, definendo anche quali valori devono essere segnati.
ø GridLines: specifica se e come visualizzare la griglia nel grafico. Impostato su Automatic permette
a Mathematica di creare la griglia automaticamente, altrimenti si possono definire separatamente il
tipo di griglia per i due assi, definendo una lista del tipo {{valori x},{valori y}}, in cui compaiono i
valori dell'asse x e dell'asse y in cui vogliamo che compaiano le linee della griglia. una di queste iste
può essere sostituita da Automatic, se ci interessa solamente un asse e vogliamo che l'altro sia
definito automaticamente.
ø ImageSize: specifica le dimensioni in cui sono deve essere visualizzata l'immagine. Si può
specificare la larghezza, oppure larghezza ed altezza.
ø MaxBend: definise il massimo angolo di piegatura dell'angolo fra due segmenti. Questo perchè il
comando usa un algoritmo adattivo per poter disegnare il grafico, che avvicina i punti a seconda di
quest'angolo, in modo da avere una curva risultante smussata e non con punti spigolosi, entro i limiti
di PlotDivision. Aumentarlo a volte può servire per visualizzare per intero delle funzioni che
Mathematica, senza impostare i limiti degli assi, non visualizza interamente all'interno del grafico.
ø PlotDivision: specifica l'ammontare massino di divisione che devono essere impiegate per
visualizzare una curva. più alto sarà questo valore, più smussata risulterà la curva, anche se
aumenterà il tempo di calcolo. Da aumentare se si vede che la curva è formata da 'spezzate', che
indica una divisione non sufficiente.
ø PlotLabel: aggiunge il titolo specificato al grafico, mettendolo sopra il disegno della funzione.
ø PlotPoints: definisce il numero di punti iniziali da usare per disegnare la funzione. E' solo iniziale,
perchè l'algoritmo è adattivo, andando a modificarlo in funzione della curvatura della funzione.
Come vedremo più avanti, invece, per il grafici a due variabili sarà più importante.
ø PlotRange: definisce l'area di visualizzazione del grafico: settato su All include tutti i punti calcolati,
su Automatic aggiusta eliminando i punti troppo estremi, oppure può essere una lista pari a {minimo,
massimo} se si vuole limitare solo l'asse y, oppure {{minimox, massimox},{minimoy, massimoy}}
se si vuole specificare interamente l'area.
ø PlotRegion: specifica quale area dell'immagine generata dalla funzione plot deve essere riempita
con il grafico, lasciando vuoto il resto. 130
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
ø PlotStyle: definisce lo stile con cui disegnare il grafico. Se si disegna una sola funzione, è possibile
definire l'unico stile, mentre, se si disegnano più funzioni, è possibile decidere se definire lo stile per
tutte le funzioni, oppure gestirle separatamente, tramite le liste.
ø Prolog: come Epilog, con la differenza che le forme descritte in Prolog vengono disegnate prima
della funzione, e quindi appariranno sotto, invece che sopra.
ø RotateLabel: definisce se l'etichetta dell'asse y deve essere ruotata in modo da essere parallela
all'asse, con True, oppure, con False, se deve essere mantenuta orizzontale.
ø TextStyle: specifica lo stile e le opzioni del font del testo che verrà visualizzato.
ø Ticks: definisce i marker che devono essere visualizzati negli assi della funzione, se quello usati di
default non ci vanno bene. O si definisce la lista solo per l'asse x, oppure si definisce la doppia lista
se ci interessa definire entrambi gli assi.
Vediamo, adesso, alcuni esempi su come possiamo utilizzare queste opzioni: supponiamo di definire
la seguente funzione: +
f@x_D := Sin@xD ^ 2 Sqrt@xD
In[14]:=
Adesso, disegnamola tramite il comando Plot:
8x,
Plot@f@xD, 0, 10<D
In[15]:= 3
2
1 2 4 6 8 10
Graphics
Out[15]=
Proviamo ad aggiungere un frame: 131
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
8x, →
Plot@f@xD, 0, 10<, Frame TrueD
In[16]:= 3
2
1
0 0 2 4 6 8 10
Graphics
Out[16]= p:
Visualizziamo, adesso, la griglia, tarata in multipli di
8x, →<