Mathematica Dispense 2011

150
Tecniche Informatiche per la Fisica A.A. 2011-2012 Testi di S. Berardi, M. Grangetto e M. Billo' Basato sulle dispense di Laboratorio di Calcolo I del 1998-2007 e di TIF del 2008 e 2009 Introduzione e motivazioni. Mathematica e' uno strumento per il calcolo simbolico e numerico, include la possibilita' di scrivere programmi, di visualizzare in molti modi funzioni, superfici, grafi, fittare dati sperimentali, ... Esempio 1 Risoluzione di un sistema lineare In[1]:= Solve16x 3y 2z 2, x 4y z 0, 7x 9z 1, x, y, z Out[1]= x 77 568 ,y 25 284 ,z 123 568 Esempio 2 Disegno di un ellisse e una retta date in forma parametrica per visualizzare le loro intersezioni In[2]:= ellisse ParametricPlot2Cost 1, Sint 1 2, t, 0, 2 Pi, AspectRatio Automatic Out[2]= 1 1 2 3 1.5 1.0 0.5 0.5

Transcript of Mathematica Dispense 2011

Page 1: Mathematica Dispense 2011

Tecniche Informatiche per la Fisica A.A. 2011-2012

Testi di S. Berardi, M. Grangetto e M. Billo'Basato sulle dispense di Laboratorio di Calcolo I del 1998-2007 e di TIF del 2008 e 2009

Introduzione e motivazioni.Mathematica e' uno strumento per il calcolo simbolico e numerico, include la possibilita' di scrivere programmi, divisualizzare in molti modi funzioni, superfici, grafi, fittare dati sperimentali, ...

Esempio 1 Risoluzione di un sistema lineare

In[1]:=Solve16 x 3 y 2 z 2,

x 4 y z 0,7 x 9 z 1, x, y, z

Out[1]= x 77

568, y

25

284, z

123

568

Esempio 2 Disegno di un ellisse e una retta date in forma parametrica per visualizzare le loro intersezioni

In[2]:= ellisse

ParametricPlot2 Cost 1, Sint 1 2, t, 0, 2 Pi, AspectRatio Automatic

Out[2]=

1 1 2 3

1.5

1.0

0.5

0.5

Page 2: Mathematica Dispense 2011

In[3]:=ellisse

ParametricPlot2 Cost 1, Sint 1 2, t, 0, 2 Pi, AspectRatio Automaticretta ParametricPlot1 t, t 2, t, 2, 2,

AspectRatio Automatic, PlotStyle RedShowellisse, retta

Out[3]=

1 1 2 3

1.5

1.0

0.5

0.5

Out[4]=1 1 2 3

1.0

0.5

0.5

1.0

Out[5]=

1 1 2 3

1.5

1.0

0.5

0.5

Esempio 3. “Fit” di un insieme di dati. Il “Fit” consiste nel cercare la formula che meglio approssima uninsieme di dati in un insieme di formule dato. In questo esempio cerchiamo di approssimare un insieme di datiattraverso una equazione di secondo grado.

In[6]:=data 2.`, 7.6, 1.75`, 6.1, 1.5`, 5.12,

1.25`, 4.2, 1., 3.18, 0.75`, 2.5, 0.5`, 2.1,0.25`, 1.49, 0.`, 1.27, 0.25`, 1.02, 0.5`, 1.1, 0.75`, 1.12,1.`, 1.24, 1.25`, 1.58, 1.5`, 1.92, 1.75`, 2.58, 2.`, 3.22;

In[7]:= data

Out[7]= 2., 7.6, 1.75, 6.1, 1.5, 5.12, 1.25, 4.2, 1., 3.18,0.75, 2.5, 0.5, 2.1, 0.25, 1.49, 0., 1.27, 0.25, 1.02, 0.5, 1.1,0.75, 1.12, 1., 1.24, 1.25, 1.58, 1.5, 1.92, 1.75, 2.58, 2., 3.22

2 Mathematica-Dispense-2011.nb

Page 3: Mathematica Dispense 2011

In[8]:=ListPlotdata, PlotRange 2, 2, 0, 8

Out[8]=

2 1 0 1 2

2

4

6

8

In[9]:=yfit Fitdata, 1, x, x^2, x

Out[9]= 1.24232 1.04265 x 1.02826 x2

In[10]:=fitted Tablex, yfit, x, 2, 2, 0.25;

In[11]:=ListPlotdata, fitted, PlotStyle Blue, Red,Joined False, True, PlotRange 1, 2, 0, 3

Out[11]=

1.0 0.5 0.0 0.5 1.0 1.5 2.0

0.5

1.0

1.5

2.0

2.5

3.0

Esempio 4 Le prime cento cifre decimali di

Mathematica-Dispense-2011.nb 3

Page 4: Mathematica Dispense 2011

In[12]:=NPi, 1000

Out[12]= 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420199

Vi sono molti programmi con caratteristiche di questo tipo (Maple, Maxima, ...), alcuni piu' rivolti alla manipo-lazione simbolica, altri piu' a qualla numerica, etc. La logica di base pero' non e' molto diversa.

In questo corso si usa Mathematica ma si potrebbe benissimo usare un altro programma. Cio' che conta e' cheimpariate la logica di base che permette di sfruttare strumenti di questo tipo.

Il punto fondamentale, secondo me, e' il seguente: se imparate a usare un po' Mathematica o programmi analoghi,cio' vi permettera'di concentrarvi maggiormente sull'aspetto concettuale dei problemi.

Esempio 5 Innumerevoli problemi che affronterete nella vostra futura vita da studenti di fisica e poi di fisici(non solo in Geometria e algebra lineare!) si esprimono molto efficacemente in termini di oggetti detti “matrici”,che studierete a fondo nel corso di Geometria Lineare. All'inizio, pero', spesso si tende a non sfruttare questapossibilita' perche'intimiditi dalla lunghezza dei calcoli richiesti per moltiplicare due matrici o invertire unamatrice. Se un'equazione puo' essere messa nella forma

(1)M X A

dove M e' una matrice nota, A un vettore noto, X un vettore di incognite, la soluzione generale e' immediata (sesiamo in grado di calcolare la matrice inversa M1di M e il prodotto di M1 e di A):

(2)X M1 A

Supponiamo pero' di avere 4 incognite, e che M sia dunque una matrice 4 x 4, ad esempio

M

2 5 0 7h 2 1 9 h3 2 6 0

3 h h 9 4

Calcolarsi l' inversa a mano e' decisamente un' impresa scoraggiante! Avendo pero' un programma di calcolosimbolico a disposizione, lui fara' questo passo puramente tecnico per noi. Ad esempio, in Mathematica,inseriamo i vettori e la matrice:

In[13]:=X x1, x2, x3, x4; vettore delle incognite A 1, h, 2, 3 h; vettore noto M 2, 5 , 0, 7, h, 2 , 1, 9 h, 3, 2, 6, 0, 3 h, h, 9, 4 ; matrice dei coeff

4 Mathematica-Dispense-2011.nb

Page 5: Mathematica Dispense 2011

Quindi calcoliamo la matrice inversa:

In[16]:=MatrixFormInverseM

Out[16]//MatrixForm=40162 h54 h2

2381074 h960 h2642 h

2381074 h960 h2106398 h

2381074 h960 h270270 h

2381074 h960 h2

12267 h162 h2

2381074 h960 h2141126 h

2381074 h960 h28246 h

2381074 h960 h221150 h

2381074 h960 h2

248 h81 h2

2381074 h960 h24463 h

2381074 h960 h21662 h160 h2

2381074 h960 h24285 h

2381074 h960 h2

549 h6 h2

2381074 h960 h299102 h

2381074 h960 h23662 h

2381074 h960 h23530 h

2381074 h960 h2

Infine moltiplichiamo la matrice inversa per A e semplifichiamo:

In[17]:= MatrixFormInverseM.AOut[17]//MatrixForm=

2 106398 h2381074 h960 h2

3 70270 h h

2381074 h960 h2

642 h h2381074 h960 h2

40162 h54 h2

2381074 h960 h2

141126 h h2381074 h960 h2

3 h 21150 h

2381074 h960 h2

2 8246 h2381074 h960 h2

12267 h162 h2

2381074 h960 h2

3 4285 h h2381074 h960 h2

4463 h h

2381074 h960 h2

2 1662 h160 h22381074 h960 h2

248 h81 h2

2381074 h960 h2

2 3662 h2381074 h960 h2

3 3530 h h

2381074 h960 h2

h 99102 h2381074 h960 h2

549 h6 h2

2381074 h960 h2

In[18]:=MatrixFormSimplifyInverseM.A

Out[18]//MatrixForm=

86215 h399 h2

119537 h480 h2

4429 h486 h2

2381074 h960 h2

8286 h557 h2

2381074 h960 h2

18337 h18 h2

2381074 h960 h2

Qundi, l' unica cosa di cui dobbiamo preoccuparci e' di come arrivare all' equazione (1) e di sapperla risolverein forma generale come in (2). Tutti questi non sono certo problemi da poco, ma la buona notizia e’ che possi-amo delegare la parte puramente meccanica della soluzione a un linguaggio di programmazione.

In questo breve corso si analizzeranno una minima parte delle capacita di Mathematica, quelle che saranno piu'immediatamente utili per il corso di Geometria e Algebra lineare 1 (di cui queste lezioni fanno parte) e per ilaboratori di Sperimentazione di fisica che seguirete piu' avanti, dove questo programma e' utilizzato per l'analisidei dati (per esempio, per calcolare un “Fit”).

1) Mathematica ci serve come ausilio per calcolare, visualizzare e capire meglio Geometria e l' analisi dei dati.2) Fare esercizi motivati da Geometria e analisi dati e' un mezzo per imparare la logica di Mathematica (e diprogrammi simili).

Lezione 1: Generalità, Calcolo numerico.

1. Prime operazioni. Scrivere e calcolare 2+2, 2*2, 2-2, 2/2, 2^2. Dovete scrivere questi calcoli uno alla volta,oppure separarli con un "a capo" (ENTER). Per valutare le operazione utilizzare SHIFT-ENTER. Le operazioniinserite, e separate da ENTER formano un "Cell" (cella), che costituisce l'unita' base di un foglio (o notebook)Mathematica. La cella e' contraddistinta da una parentesi quadra sul lato destro della finestra. La cella puo' esseremanipolata una volta selezionata la parentesi corrispondente (selezionare e cancellare con il tasto DELETE oppure

Mathematica-Dispense-2011.nb 5

Page 6: Mathematica Dispense 2011

operazioni pi' complesse disponibili dal menu Cell nella barra degli strumenti in alto).

In[19]:= 2 2222 22 22 ^2

Out[19]= 4

Out[20]= 4

Out[21]= 0

Out[22]= 1

Out[23]= 4

2. Precedenza degli operatori. Mathematica, come tutti i linguaggi di programmazione, applica le operazioni conregole fisse di precedenza. Per esempio e' chiaro che in un espressione algebrica la moltiplicazione/divisione hasempre precedenza rispetto alla somma. Per forzare l'ordine con cui svolgere le operazioni occorre usare solo esoltanto le parentesi tonde (). Non e' corretto usare { } oppure [ ] che assumono significati completamente diversicome vedremo nel seguito. Se due costanti o simboli non sono separati da alcuna operazione ma solo da spaziviene implicitamente assunta l'operazione di moltiplicazione. Le operazioni non devono necessariamente coinvol-gere solo costanti numeriche: si possono anche utilizzare simboli alfanumerici (escludendo i caratteri speciali comeparentesi, punti, virgola, +,*,-,/, _ ,ecc). Qualsiasi sequenza alfanumerica (cioe' di lettere e numeri), con il vincoloche il primo simbolo della sequenza sia una lettera e non sia un valore numerico), viene identificata come unavariabile: dunque a,c,d, ma anche c5a sono variabili. Le variabili compaiono scritte in un colore particolare.Eseguire i calcoli 5+2*6, (5+2)*6, 3*2^2, (3*2)^2, a+ 2 * c + d, (a+4)*c, 5c +8, c5a +8

In[24]:= 5 265 2632^232^2a 2 c da 4 c5 c 8c5a 8

Out[24]= 17

Out[25]= 42

Out[26]= 12

Out[27]= 36

Out[28]= a 2 c d

Out[29]= 4 a c

Out[30]= 8 5 c

Out[31]= 8 c5a

3. Come dare un comando. Un comando di Mathematica si scrive come segue: Command[e1, e2, ..., en]Un comando inizia sempre con la maiuscola e accetta una serie di parametri e1,e2,...,en racchiusi tra parentesiquadre [ ] e separati da virgole.

6 Mathematica-Dispense-2011.nb

Page 7: Mathematica Dispense 2011

e1, e2, ..., en sono espressioni, che possono a sua volta essere costruita con delle costanti, con le operazioni +,*,-,/,^ (dove x*y = x×y e x^y = xy), oppure con altri comandi. In presenza di uno spazio, ma mancanza di un segno di operazione, Mathematica sottointende un prodotto: 2 2 è2×2.

3 bis. Gli errori più comuni (a partire dai più frequenti)command[e1, e2, ..., en] (con la c minuscola)Command(e1, e2, ..., en) (con la parentesi tonda, se n=1 viene interpretato come: Command*e1)Command[e1 e2 ... en](senza virgole, viene intepretato un prodotto: Command[e1*e2*...*en])Command(e1, , e2, ..., en)(una virgola di troppo, viene capito: Command(e1,Null, e2, ..., en) dove Null è la costante = comando vuoto).

Provare i comandi piu' comuni. Radice quadrata: Sqrt[ ]Valore assoluto Abs[ ]Funzioni trigonometriche Sin[ ], Cos[ ], Tan[x], Sec[x]Per esecizio calcolare la radice quadrata di 4, il valore assoluto di 10.6, il seno di Pi/2 (Pi si usa per indicare ilvalore di pigreco), seno di 0, la tangente di Pi/4.

In[32]:= Sqrt4Abs10.6SinPi 2Sin0TanPi 4

Out[32]= 2

Out[33]= 10.6

Out[34]= 1

Out[35]= 0

Out[36]= 1

4. Applicazione di funzioni: l'errore più comune. L'applicazione di una funzione f ad un argomento x, in Mathemat-ica, si indica come un comando, dunque con f[x]. Provate a scrivere sia Log[2+3], sia Log(2+3). La prima espres-sione calcola il logaritmo (in base e) di 5, la seconda Log*5. La parentesi tonda si limita a raggruppare e far eseguire 2+3. Poi, in mancanza di segni di operazione tra Log e 5,Mathematica sottintende un prodotto.

In[37]:= Log2 3Log 2 3

Out[37]= Log5

Out[38]= 5 Log

5.Calcolo numerico e calcolo simbolico. Mathematica e' un potete strumento per la valutazione simbolica. Perquesto motivo ove possibile le espressioni simboliche non vengono semplificate quando questo comporta unaperdita di precisione. Si provi a valutare la radice quadrata di 4 e quindi la radice quadrata di 2. Il seno di Pi/2 e ilseno di Pi/3, la divisione 6/3 e 3/4.

Mathematica-Dispense-2011.nb 7

Page 8: Mathematica Dispense 2011

In[39]:= Sqrt4Sqrt2SinPi 2SinPi 36 33 4

Out[39]= 2

Out[40]= 2

Out[41]= 1

Out[42]=3

2

Out[43]= 2

Out[44]=3

4

6. Risultati interattivi. Mathematica puo' restituire una famiglia di risultati dipendenti da un parametro, insieme aun pulsante che ci consente di scegliere quale risultato vedere. Il comando si chiama Manipulate[.,.], e richiede dueargomenti: una espressione con un parametro, per esempio 2n, e un "range" per questo parametro, per esempio{n,1,300,1} ("n che varia tra 1 e 300, con passo 1").

Ogni volta che vedete un nuovo comando, come Manipulate, abituatevi a scrivere Manipulate? per richiedereinformazioni sul comando a Mathematica.

In[45]:= ? Manipulate

Manipulateexpr, u, umin, umax generates a versionof expr with controls added to allow interactive manipulation of the value of u.

Manipulateexpr, u, umin, umax, du allows the value of u to vary between umin and umax in steps du.Manipulateexpr, u, uinit, umin, umax, … takes the initial value of u to be uinit.Manipulateexpr, u, uinit, ulbl, … labels the controls for u with ulbl.Manipulateexpr, u, u1, u2, … allows u to take on discrete values u1, u2, ….Manipulateexpr, u, …, v, …, … provides controls to manipulate each of the u, v, ….Manipulateexpr, cu u, …, cv v, …, …

links the controls to the specified controllers on an external device. 

In[46]:= Manipulate2^n, n, 1, 300, 1

Out[46]=

n

2

7. Interrompere un calcolo. E' facile iniziare calcoli troppo lunghi o con risultato troppo lungo, per es., 2 allamilionesima, che per essere scritto richiede oltre 300 mila cifre. Se il risultato tarda a venire, dovete interrompere ilcalcolo usando l'opzione "Abort Evaluation" (Alt+.). In Mathematica 7 si trova nella colonna "Evaluation" delMenu'.Però non provateci adesso! Rischiereste di danneggiare la rete in cui vi trovate. Tenetelo solo presente comeultima risorsa.

8. Precisione. Calcolare una versione approssimata di 2^1000000, e una versione approssimata alle prime 20 cifre,utilizzando la funzione N[.,.].

8 Mathematica-Dispense-2011.nb

Page 9: Mathematica Dispense 2011

In[47]:= N2 ^1 000 000N2 ^1 000 000, 20

Out[47]= 9.90065622929590 10301029

Out[48]= 9.9006562292958982507 10301029

Attenti a non scrivere N (2^1000000), significa N * 2^1000000.

9. Calcolare una versione approssimata di sqrt[2], e una versione approssimata alle prime 20 cifre, utilizzando lafunzione N[.,.].

In[49]:= NSqrt2NSqrt2, 20

Out[49]= 1.41421

Out[50]= 1.4142135623730950488

Attenti a non scrivere N[Sqrt[2] 20], senza virgola viene capito un prodotto: N[Sqrt[2]*20].

10. Altre operazioni. Calcolare le prime 100 cifre di utilizzando la costante Pi e la funzione N[.,.].

In[51]:= NPi, 100Out[51]= 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998

628034825342117068

11. Costanti numeriche. Un altro modo di forzare mathematica a utizzare l'approsimazione numeriche e scrivereesplicitamente i valori approssimati (2.0, 2.4) nelle espressioni da valutare. Provare a valutare Sqrt[2] e Sqrt[2.0] enotare la differenza di comportamento.

In[52]:= Sqrt2Sqrt2.0

Out[52]= 2

Out[53]= 1.41421

12. Mathematica ha un enorme collezioni di comandi per svolgere operazioni complesse. Ad esempio calcolaimo ifattori primi del numero:111111111111111111111111111111111111(composto di 36 cifre "uno") usando FactorInteger[.]

In[54]:= FactorInteger111 111 111 111 111 111 111 111 111 111 111 111 Out[54]= 3, 2, 7, 1, 11, 1, 13, 1, 19, 1, 37, 1,

101, 1, 9901, 1, 52579, 1, 333667, 1, 999999000001, 1

13. Calcolare un risultato interattivo con cento milioni di numeri primi (l'ultimo supera i due miliardi) usando lafunzione Prime[.]. Chiedete informazioni sul comando Prime per cominciare.

In[55]:= ? Prime

Primen gives the nth prime number.  

In[56]:= ManipulatePrimei, i, 1, 100 000 000, 1

Out[56]=

i

2

14. Calcolare il fattoriale dei primi 1000 interi (1000! e' il numero 1*2*3*4* ... *999*1000).

Mathematica-Dispense-2011.nb 9

Page 10: Mathematica Dispense 2011

In[57]:= Manipulaten, n, 1, 1000, 1

Out[57]=

n

1

14. Definizioni statiche di variabili. Provate a scrivere x, poi x=2 e di nuovo x, poi x=3 e di nuovo x: la primavoltà si otterrà x (se non avete ancora definito un valore per x), la seconda 2, la terza 3. Insomma: ogni volta,ridefinendo x cancelliamo la definizione precedente.

In[58]:= xx 2;xx 3;x

Out[58]= x

Out[60]= 2

Out[62]= 3

E' facile scrivere una definizione x=3 e dimenticarsi di valutarla: in questo caso la definizione di x non e' avvenuta.Abituatevi a controllare che x sia davvero una variabile e sia definita correttamente. Basta scrivere ?x : il risultatoe' il messaggio "Global x" (x e' una variabile globale), seguito dalla definizione corrente di x.

In[63]:= ? x

Global`x

x 3

15. Nel risultato precedente, notiamo che di ogni definizione, tipo x=100, viene stampato il valore usato, 100 inquesto caso. Se non volete vederlo, scrivete un punto e virgola alla fine della definizione, scrivete cioè x=100;Il punto e virgola impedisce di vedere il risultato di una operazione (che viene, però, ugualmente eseguita).

In[64]:= x 100;x

Out[65]= 100

16. Provate ora a scrivere a=2, x=a, x, a=3, x. Scoprirete che il valore di x resta 2 (il valore che aveva a quandoabbiamo posto x=a), e non cambia seguendo il valore di a. Questo tipo di definizione di x (che usa il simbolo "=")viene, per questa ragione, detto statico.

In[66]:= a 2;x a;xa 3;x

Out[68]= 2

Out[70]= 2

17. E' buona norma, prima di iniziare un nuovo calcolo, ripulire tutte le variabili che si intendono usare dai con-tenuti precedenti. Questo perchè può capitare di studiare la funzione y=(x^2+1) senza ricordarsi di aver definitox=5. In questo caso, Mathematica studierà in realtà la funzione y=(5^2+1)=26: una retta orizzontale anzichè unaparabola.

10 Mathematica-Dispense-2011.nb

Page 11: Mathematica Dispense 2011

Il comando per ripulire le variabili è Clear[.]. Utilizzate Clear[.] per ripulire i valori di x e di a. Ricalcolate x e aper controllare che ora siano indefiniti.

In[71]:= Clearx, a

In[72]:= ? x? a

Global`x

Global`a

Attenti a non scrivere Clear[x, ,a], con una virgola di troppo. Mathematica intende Clear[x, Null, a], dove Null èla costante "comando vuoto", non capisce, e segnala errore.

18. Gli operatori = (assegnazione statica), := (assegnazione dinamica), == (test di eguaglianza)L'operazione x=expr assegna una valore numerico oppure simbolico alla variabile x. Attenzione: l'espressioneexpr viene valutata immediatamente e assegnata ad x. L'operazione x:=expr reppresenta invece una assegnazione dinamica. La variabile x viene definita come expr. Adifferenza del caso precendete l'espressione expr non viene valutata immediatamente ma solo solo ogni qual volta xviene utilizzata. L'operatore := viene in genere usato per la definizione di funzioni. L'operatore = per copiare ememorizzare dati numerci o un risultato simbolico.Infine l'operazione == (ripetuto due volte rappresenta) l'uguaglianza logica (o operatore di confronto) e restituisce ivalori vero (True) o falso (False). Si utilizza nelle espressioni logiche e nella definizione delle equazioni.

In[74]:= a 1x aa a 1axa x

Out[74]= 1

Out[75]= 1

Out[76]= 0

Out[77]= 0

Out[78]= 1

Out[79]= False

In[80]:= a 1x : aa a 1axa x

Out[80]= 1

Out[82]= 0

Out[83]= 0

Out[84]= 0

Out[85]= True

18. Definizione di funzioni tramite := (assegnazione dinamica).Possiamo definire noi stessi nuovi comandi, scrivendo una espressione ...x...., quindi ponendo f[x_]:=...x.... Ognivolta che scriveremo f[a] verra' eseguito il comando ...a... . Dopo aver definito f, controllate subito con ?f che la

Mathematica-Dispense-2011.nb 11

Page 12: Mathematica Dispense 2011

definizione sia avvenuta correttamente: questo e' essenziale, spesso dimentichiamo una definizione oppure non lascriviamo come vorremmo.

In[86]:= fx_ : x^2 a;

In[87]:= ? f

Global`f

fx_ : x2 a

In[88]:= f1f10f100

Out[88]= 1

Out[89]= 100

Out[90]= 10000

19. Ripulite tutte le variabili usate. Anzichè scrivere Clear[var1,var2, ...], si può dare il comando abbreviato:Clear["Global`*"].

In[91]:= Clear"Global`"

Lezione 2: Liste, vettori, matrici.1. Liste. Una lista è un gruppo di dati qualsiasi (di solito numeri, ma non sempre) disposti in un certo ordine. Unalista di elementi e_1,...,e_n si scrive disponendo gli elementi tra parentesi graffe e separati da virgole:{e_1,...,e_n}. Costruite la lista di elementi 1, 2, 3.

In[92]:= 1, 2, 3 Il valore di una lista e' la lista medesima Out[92]= 1, 2, 3

2. Costruzione di liste. Il comando Table[e_i,{i,1,n}] costruisce la lista {e_1,...,e_n}. Tutte le volte che conosci-amo una legge che consente di calcolare l'elemento i-esimo di una lista, e conosciamo il numero degli elementi diuna lista, possiamo costruire la lista usando il comando Table: questo comando è cruciale in molti usi di Mathemat-ica. Al posto di i può trovarsi una qualsiasi variabile. Una forma più generale del comando è: Table[e_i,{i,min,max,step}]Costruisce la lista {e_min, e_min+step, ..., e_max}. Costruire, utilizzando il Comando Table, una lista l1 di cento"uno", una lista l2 dei primi cento interi, una lista l3 lista dei quadrati dei primi cento interi.

In[93]:= ? Table

Tableexpr, imax generates a list of imax copies of expr.Tableexpr, i, imax generates a list of the values of expr when i runs from 1 to imax.Tableexpr, i, imin, imax starts with i imin.Tableexpr, i, imin, imax, di uses steps di.Tableexpr, i, i1, i2, … uses the successive values i1, i2, ….

Tableexpr, i, imin, imax, j, jmin, jmax, … gives a nested list. The list associated with i is outermost.  

In[94]:= l1 Table1, i, 1, 100;l2 Tablei, i, 1, 100;l3 Tablei^ 2, i, 1, 100;

12 Mathematica-Dispense-2011.nb

Page 13: Mathematica Dispense 2011

In[97]:= l1l2l3

Out[97]= 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

Out[98]= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100

Out[99]= 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400,441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225,1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304,2401, 2500, 2601, 2704, 2809, 2916, 3025, 3136, 3249, 3364, 3481, 3600, 3721,3844, 3969, 4096, 4225, 4356, 4489, 4624, 4761, 4900, 5041, 5184, 5329, 5476,5625, 5776, 5929, 6084, 6241, 6400, 6561, 6724, 6889, 7056, 7225, 7396, 7569,7744, 7921, 8100, 8281, 8464, 8649, 8836, 9025, 9216, 9409, 9604, 9801, 10000

3. Si può decidere di incrementare l'indice i, anzichè di un passo alla volta, di un numero qualunque di passi ogniogni volta. La forma del comando in tal caso è:

Table[e_i,{i,min,max,passo}]Esso costruisce {e_min, e_min+passo, e_min+2passo, ...}, per ogni valore di min+k*passo max. Costruire,utilizzando il comando dato, la lista dei multipli di 10 tra 0 e 100. Si costruisca una lista l4 valutando la funzioneLog[x], x a partire dal valore 0.1 a passi di 0.25 fino a x=2.

In[100]:= Tablei, i, 0, 100, 10TableLogi, i, 0.1, 2, 0.25

Out[100]= 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100

Out[101]= 2.30259, 1.04982, 0.510826, 0.162519, 0.0953102, 0.300105, 0.470004, 0.615186

23. Operazioni su liste. Calcolate le lunghezze delle liste l1, l2, l3 (comando Length), e controllate che sia 100 inogni caso.

In[102]:= ? Length

Lengthexpr gives the number of elements in expr.  

In[103]:= Lengthl1Lengthl2Lengthl3

Out[103]= 100

Out[104]= 100

Out[105]= 100

4. L'operatore list[[ j ]] con j intero compreso fra j=1 e j=Length[list] permette di prelevare l'elemento in posizionej della lista list. Calcolate alcuni elementi delle liste l1, l2 e l3, usando l'operazione l[[i]] per calcolare l'elementonumero i della lista l.

In[106]:= l113, l213, l313Out[106]= 1, 13, 169

5. Oltre a un singolo elemento e possibile isolare un insieme di elementi della lista sostituendo j con una lista diindici; ad esempio list[[listj]] dove listj={1,4,7} e' la lista delle posizioni che si vuole prelevare. Il risultato sara'una sottolista costituita dagli elementi selezionati secondo listj. Creare una sottolista di l2 costituita dai soli ele-

Mathematica-Dispense-2011.nb 13

Page 14: Mathematica Dispense 2011

menti si posizione dispari {1,3, ecc.}

In[107]:=

l2Tablej, j, 1, Lengthl2, 2Out[107]= 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,

33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65,67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99

6.Altri comandi sulle liste. Costruite una nuova lista aggiungendo l'elemento 0 all'inizio di l2, o l'elemento 101alla fine, utilizzando Prepend e Append. Trovate questi comandi per costruire nuove liste sia nelle Palettes (voceFile/Palettes/BasicCalculations/ListsAndMatrices del Menu qui sopra), sia alla voce ListsAndMatrices/ListsOpera-tions dell'Help (sempre nel Menu qui sopra). Il comando Join permette di unire piu' liste.Si noti che Prepend, Append costruiscono una nuova lista. Ricalcolate la lista l2 per verificare che non cambia.Concatenare le lista l2 e l1 con il comando Join.

In[108]:= ? Prepend? Append

Prependexpr, elem gives expr with elem prepended.  

Appendexpr, elem gives expr with elem appended.  

In[110]:= Prependl2, 0Out[110]= 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,

22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100

In[111]:= Appendl2, 101Joinl2, l1

Out[111]= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101

Out[112]= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

In[113]:= l2

Out[113]= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100

7. Ordinare una lista. Il comando Sort[list], oppure Sort[list, Less] ordina gli elementi della lista dal piu' piccoloal piu' grande. Per l'ordinamento decrescente occorre specificare come secondo parametro Greater. Sort[list,Greater]. Si oridini l2 in modo crescente e decrescente.

14 Mathematica-Dispense-2011.nb

Page 15: Mathematica Dispense 2011

In[114]:= ? Sort

Sortlist sorts the elements of list into canonical order.

Sortlist, p sorts using the ordering function p.  

In[115]:= Sortl2Sortl2, LessSortl2, Greater

Out[115]= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100

Out[116]= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100

Out[117]= 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82,81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63,62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43,42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23,22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1

8. Operazioni su liste. Tutte le operazioni elementari si possono applicare alle liste; le operazioni vengono eseguiteelemento per elemento. Le operazioni possono avvenire tra liste e costanti (scalari). Costruite nuove liste partendodalla lista {1,2,3}, ed eseguendo su ogni elemento di l2 le operazioni: +1, *2, ^2. E' sufficiente indicare l'operazione sull'intera lista: per esempio l2+1 crea una nuova lista aggiungendo1 ad ogni elemento di l2.

In[118]:= 1, 2, 3 11, 2, 321, 2, 3^2

Out[118]= 2, 3, 4

Out[119]= 2, 4, 6

Out[120]= 1, 4, 9

9. Tra liste con lo stesso numero di elementi e' possibile definire le operazioni tra gli elementi nella stessaposizione. Costruite nuove liste sommando, moltiplicando, ed elevando a potenza ogni elemento della lista {1,2,3}con il corrispondente elemento della lista {10,20,30}.

In[121]:= 1, 2, 3 10, 20, 301, 2, 310, 20, 301, 2, 3^ 10, 20, 30

Out[121]= 11, 22, 33

Out[122]= 10, 40, 90

Out[123]= 1, 1048576, 205891132094649

10. Matrici. Una Matrice è un gruppo di dati disposto in forma rettangolare, su n righe tutte di m elementi. In altreparole, é una tabella di n righe ed m colonne, che in ogni posizione (riga i, colonna j) contiene un dato. Diciamoche la matrice ha dimensione n x m. Una Matrice viene rappresentata da una lista di liste, ad esempio{{a,b},{c,d}}. Gli elementi {a,b} e {c,d} sono considerati le righe della matrice, e devono avere la stessalunghezza (la matrice dell'esempio ha dimensione 2x2). Definite M come la matrice 2x2 di elementi 1,2,3,4.Disegnate M in forma rettangolare usando MatrixForm[M]. Calcolate quindi la trasposta di M, l'inverso di M, ilprodotto di M per se stessa e per il suo inverso, il determinante di M (sono operazioni su matrici che vedrete più

Mathematica-Dispense-2011.nb 15

Page 16: Mathematica Dispense 2011

avanti nei corsi, e che trovate alla voce "Matrici" dell'Help).

In[124]:= M 1, 2, 3, 4MatrixFormMMatrixFormTransposeMM.MInverseMM.InverseMDetM

Out[124]= 1, 2, 3, 4Out[125]//MatrixForm=

1 23 4

Out[126]//MatrixForm=

1 32 4

Out[127]= 7, 10, 15, 22

Out[128]= 2, 1, 3

2,

1

2

Out[129]= 1, 0, 0, 1

Out[130]= 2

10 bis. Scrittura di matrici. Costruire una matrice 3x3 di nome M usando il comando della Palette "Basic MathAssistant" relativo a matrici (cercate "Basic Commands", poi premete il tasto con il simbolo di una matrice). Talecomando costruisce matrici 2x2: per aggiungere una terza riga, scrivere Control+Enter, per aggiungere una terzacolonna, Control+il tasto "virgola".

In[131]:=

1 2 34 5 67 8 9

Out[131]= 1, 2, 3, 4, 5, 6, 7, 8, 9

Matrici e Vettori sono distinti. Anche nel caso in cui una matrice abbia una sola riga (es. {{a,b}}) oppure una solacolonna (es. {{a},{b}}) va considerata distinta dal vettore {a,b} con gli stessi elementi. Bisogna tener conto diquesto fatto per non inserire un vettore in un problema in cui è richiesta una matrice, o viceversa, altrimentiMathematica non capisce.

11. Attenzione al tipo dei dati: una matrice e' diversa dal disegno che la rappresenta. Il comando MatrixFormbrevemente introdotto al punto 10 e' spesso fonte di errore. Tale comando infatti produce, a partire da una lista diliste, un oggetto grafico (un "disegno") con la rappresentazione della matrice come tabella. Essendo solo undisegno, fatto di pixels e non di numeri, il risultato di MatrixForm[.] non puo' essere utilizzato per calcoli succes-sivi. Si crei una matrice M 2x2 e si assegni il risultato di MatrixForm[M] alla variabile Mg. Si provi ora a faredelle semplici operazioni come ad esempio Mg.Mg: il risultato sara' solo disegnare Mg.Mg, non eseguirlo.

In[132]:= M 1, 1, 0, 1Mg MatrixFormMMg.Mg

Out[132]= 1, 1, 0, 1Out[133]//MatrixForm=

1 10 1

Out[134]= 1 10 1

. 1 10 1

12. Il comando Table[e_i,j, {i,1,n}, {j,1,m}], analogo al comando già visto per le liste, costruisce la matrice {{e_1,1,e_1,2,...,e_1,m}, {e_2,1,e_2,2,...,e_2,m}, ....,{e_n,1,e_1,2,...,e_n,m}}Costruire la matrice 10x10 contenenta la tavola pitagorica (cioè, nella riga 1, 2, 3,..., i primi dieci multipli di 1, 2,

16 Mathematica-Dispense-2011.nb

Page 17: Mathematica Dispense 2011

3, ...) .

In[135]:= MatrixFormtt Tablei j, i, 1, 10, j, 1, 10tt

Out[135]//MatrixForm=

1 2 3 4 5 6 7 8 9 102 4 6 8 10 12 14 16 18 203 6 9 12 15 18 21 24 27 304 8 12 16 20 24 28 32 36 405 10 15 20 25 30 35 40 45 506 12 18 24 30 36 42 48 54 607 14 21 28 35 42 49 56 63 708 16 24 32 40 48 56 64 72 809 18 27 36 45 54 63 72 81 9010 20 30 40 50 60 70 80 90 100

Out[136]= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20,3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40,5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60,7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80,9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100

12bis. Come nel caso delle liste si puo' usare l'operatore [[ i, j ]] per estrarre l'elemento in posizione i,j. Per estrarredelle sottoliste (ad esempio una colonna o una riga) si puo' usare l'operatore All per identificare tutte le righe o lecolonne. Ad esempio estrarre l'elemento 5,7 e la seconda colonna della precedente tabella:

In[137]:= tt5, 7 Stampa la casella che contiene 57 tt2, All Stampa la tabellina del 2: la riga che contiene i multipli di 2

Out[137]= 35

Out[138]= 2, 4, 6, 8, 10, 12, 14, 16, 18, 20

13. Se l1={e_1,...,e_n}, possiamo disegnare il grafico di{1,e_1},...,{n,e_n} usando ListPlot[l1].Disegnare, i graficidelle liste l1,l2,l3 (la lista di 100 uno, dei primi cento interi, dei quadrati dei primi 100 interi).

Mathematica-Dispense-2011.nb 17

Page 18: Mathematica Dispense 2011

In[139]:= ListPlotl1ListPlotl2ListPlotl3

Out[139]=

20 40 60 80 100

0.5

1.0

1.5

2.0

Out[140]=

20 40 60 80 100

20

40

60

80

100

Out[141]=

20 40 60 80 100

2000

4000

6000

8000

10 000

14. ListPlot. Il comando ListPlot produce un grafico dei dati di una lista in funzione della posizione di ogni ele-mento nella lista. In altre parole l'asse delle ascisse e' determinato dai valori 1,2,3,... In molti casi sperimentali e'necessario associare all'asse x un significato fisico e non semplicemente un insieme crescente di interi. ListPlot[{{x1,y1},{x2,y2}...}] disegna i punti di ascissa x1,x2,.. e ordinata y1,y2,.. I dati vengono inseriti in forma di matriceNx2, la prima colonna rappresenta N ascisse, la seconda colonna rappresenta i dati. Utilizzare i comandi Table eListPlot per disegnare la funzione y=x^3 tra -1 e 1 a passi di 0.1.

18 Mathematica-Dispense-2011.nb

Page 19: Mathematica Dispense 2011

In[142]:= lc Tablei^3, i, 1, 1, 0.1;lcx Tablei, i^3, i, 1, 1, 0.1;ListPlotlcListPlotlcx

Out[144]=5 10 15 20

1.0

0.5

0.5

1.0

Out[145]=1.0 0.5 0.5 1.0

1.0

0.5

0.5

1.0

15. Tutti gli oggetti grafici si possono personalizzare con moltissime opzioni: etichette degli assi, titolo, legenda,rapporto d'aspetto tra gli assi, ecc. Il comando Options[ListPlot] permette di ottenere una lista di tutte le possibiliopzioni. Ogni opzione e' accompagnata dal suo valore di default, elencato qui sotto.

In[146]:= OptionsListPlot

Out[146]= AlignmentPoint Center, AspectRatio 1

GoldenRatio, Axes True,

AxesLabel None, AxesOrigin Automatic, AxesStyle , Background None,BaselinePosition Automatic, BaseStyle , ClippingStyle None,ColorFunction Automatic, ColorFunctionScaling True, ColorOutput Automatic,ContentSelectable Automatic, CoordinatesToolOptions Automatic,DataRange Automatic, DisplayFunction $DisplayFunction, Epilog ,Filling None, FillingStyle Automatic, FormatType TraditionalForm, Frame False,FrameLabel None, FrameStyle , FrameTicks Automatic, FrameTicksStyle ,GridLines None, GridLinesStyle , ImageMargins 0., ImagePadding All,ImageSize Automatic, ImageSizeRaw Automatic, InterpolationOrder None,Joined False, LabelStyle , MaxPlotPoints , Mesh None,MeshFunctions 1 &, MeshShading None, MeshStyle Automatic, Method Automatic,PerformanceGoal $PerformanceGoal, PlotLabel None, PlotMarkers None,PlotRange Automatic, PlotRangeClipping True, PlotRangePadding Automatic,PlotRegion Automatic, PlotStyle Automatic, PreserveImageOptions Automatic,

Prolog , RotateLabel True, Ticks Automatic, TicksStyle

Mathematica-Dispense-2011.nb 19

Page 20: Mathematica Dispense 2011

14. La freccia "->" indica l'assegnazione temporanea. Un esempio: la variabile Axes vale True se disegnamogli assi, False se non li disegnamo. Se inseriamo Axes False tra gli argomenti di ListPlot, assegnamo temporanea-mente (per la sola durata del comando ListPlot) Axes a False, e gli assi scompaiono. Nel comando successivo Axesriprende il suo valore di default, True, e gli assi ricompaiono. Cambiare i grafici precedenti di l1,l2,l3 congiungendo i punti consecutivi con tratti di retta, assegnado all'opzionePlotJoined il valore temporaneo True con una assegnazione "->". Nota: lo stesso risultato si puo' ottenere anche con il comando ListLinePlot

In[147]:= ListPlotl2, Joined TrueListPlotl3, Joined True

Out[147]=

20 40 60 80 100

20

40

60

80

100

Out[148]=

20 40 60 80 100

2000

4000

6000

8000

10 000

In[149]:= ListLinePlotl3

Out[149]=

20 40 60 80 100

2000

4000

6000

8000

10 000

15. L'opzione Joined si puo' combinare con l'opzione PlotMarkers per sovrappore alla linea anche i punti (che inun esercizio di laboratorio rappresentano i valori sperimentali). PlotMarkers deve essere associato a un oggettografico per rappresentare i punti. Il modo piu' semplice e' utilizzare le scelte automatiche del software inserendol'opzione PlotMarkers->Automatic. Per esercizio si crei una lista contente i valori di Sin[x] con x tra 0 e 2 a passi

20 Mathematica-Dispense-2011.nb

Page 21: Mathematica Dispense 2011

di /6 e si produca un grafico usando l'opzione Joined->True e PlotMarkers->Automatic.

In[150]:= lcs TableSinx, x, 0, 2 Pi, Pi 6;ListPlotlcs, Joined True, PlotMarkers Automatic

Out[151]=

2 4 6 8 10 12

1.0

0.5

0.5

1.0

16. Ridisegnare il grafico di y=x^3 inserendo le etichette x, y degli assi e il titolo del grafico. Si utilizzino le opzioniAxesLabel e PlotLabel

In[152]:= ListPlotlcx, AxesLabel x, y, PlotLabel y x^3

Out[152]=

1.0 0.5 0.5 1.0x

1.0

0.5

0.5

1.0

yy x3

17. Ridisegnare il grafico di y=x^3 inserendo le etichette degli assi e il titolo del grafico. Si utilizzino le opzioniAxesLabel e PlotLabel

Mathematica-Dispense-2011.nb 21

Page 22: Mathematica Dispense 2011

In[153]:= ListPlotlcx, AxesLabel x, y, PlotLabel "La funzione yx^3"

Out[153]=

1.0 0.5 0.5 1.0x

1.0

0.5

0.5

1.0

yLa funzione yx^3

35. Inserimento di testo nei grafici. In Mathematica un testo viene scritto tra virgolette: "y = x3" e' il testo "yuguale a x al cubo" (una frase del nostro linguaggio) non l'assegnazione x3di a y (non dunque un comando diMathematica). Un testo puo' venir ritoccato con il comando StyleForm[testo, opz1-> valore1, ...], cambiando peresempio la dimensione e il colore. Un testo puo' venir assegnato a una variabile Title e poi venire riutilizzato.

In[154]:= "La funzione y x3"

Out[154]= La funzione y x3

In[155]:= Title StyleForm"La funzione y x3", FontSize 24, FontColor Blue, FontWeight BoldOut[155]//StyleForm=

La funzione y x3In[156]:= ? Title

Global`Title

Title StyleFormLa funzione y x3,FontSize 24, FontColor RGBColor0, 0, 1, FontWeight Bold

Un testo puo' venir inserito entro un grafico:

In[157]:= ListPlotlcx, AxesLabel x, y, PlotLabel Title

Out[157]=

1.0 0.5 0.5 1.0x

1.0

0.5

0.5

1.0

y

La funzione y x3

22 Mathematica-Dispense-2011.nb

Page 23: Mathematica Dispense 2011

35. Definizione di funzioni. Puo' essere difficile ricordarsi la successione esatta di comandi necessaria, peresempio, per creare un testo in grassetto di date dimensioni e colore. In questo caso occorre definire una funzioneche svolge tale compito. La funzione viene salvata in un Notebook e ricopiata ogni volta che ci serve quellaparticolare successione di comandi.

In[158]:= Grassettotext_, size_, color_ : StyleFormtext, FontSize size, FontColor color, FontWeight Bold

In[159]:= Grassetto"TESTO DI PROVA", 18, MagentaOut[159]//StyleForm=

TESTO DI PROVA18. Ripulite tutte le variabili usate.

In[160]:= Clear"Global`"

Lezione 3: Grafica 2DEsercizio. Scrivete una lista casuale di 1000 numeri naturali compresi tra 0 e 1000 (cercate la parola "Random"nell'Help) Estraete la sottolista dei soli elementi di indice pari. Generalizzate la soluzione a una funzione Par-i[L_]:= ..., che applicata a una lista L restituisca la sottolista dei soli elementi di indice pari.

1. Creare grafici di funzioni. Il comando Plot[f[x],{x,a,b}] disegna il grafico di f[x] tra x=a ed x=b. La forma piùgenerale del comando è Plot[f[x],{x,a,b}, opzione_1->valore_1, ..., opzione_n -> valore_n] Le "opzioni" sono scelte di modi con cui stampare un grafico. Ogni opzione ha diversi valori possibili, corrispon-denti a diverse scelte. Normalmente ogni opzione ha un valore di default, ma scrivendo opzione->valore entroPlot[...] possiamo assegnarle temporaneamente un valore diverso. Vedremo ora diversi esempi di opzioni, che ciconsentono di stampare un grafico con le caratteristiche desiderate. Come prima prova disegnare sin(x) per x tra 0 e 2.

In[161]:= OptionsPlot

Out[161]= AlignmentPoint Center, AspectRatio 1

GoldenRatio, Axes True,

AxesLabel None, AxesOrigin Automatic, AxesStyle , Background None,BaselinePosition Automatic, BaseStyle , ClippingStyle None,ColorFunction Automatic, ColorFunctionScaling True, ColorOutput Automatic,ContentSelectable Automatic, CoordinatesToolOptions Automatic,DisplayFunction $DisplayFunction, Epilog , Evaluated Automatic,EvaluationMonitor None, Exclusions Automatic, ExclusionsStyle None,Filling None, FillingStyle Automatic, FormatType TraditionalForm,Frame False, FrameLabel None, FrameStyle , FrameTicks Automatic,FrameTicksStyle , GridLines None, GridLinesStyle , ImageMargins 0.,ImagePadding All, ImageSize Automatic, ImageSizeRaw Automatic,LabelStyle , MaxRecursion Automatic, Mesh None, MeshFunctions 1 &,MeshShading None, MeshStyle Automatic, Method Automatic,PerformanceGoal $PerformanceGoal, PlotLabel None, PlotPoints Automatic,PlotRange Full, Automatic, PlotRangeClipping True, PlotRangePadding Automatic,PlotRegion Automatic, PlotStyle Automatic, PreserveImageOptions Automatic,Prolog , RegionFunction True &, RotateLabel True,

Ticks Automatic, TicksStyle , WorkingPrecision MachinePrecision

Mathematica-Dispense-2011.nb 23

Page 24: Mathematica Dispense 2011

In[162]:= PlotSinx, x, 0, 2 Pi

Out[162]=1 2 3 4 5 6

1.0

0.5

0.5

1.0

2. PlotRange. PlotRange->{c,d} fa disegnare i soli valori della y compresi tra c e d: dunque disegna solo la partedel grafico tra le due rette orizzontali y=c ed y=d. Ridisegnare sin(x) per x tra 0 e 2, e per y tra -0.5 e 0.5.

In[163]:= PlotSinx, x, 0, 2 , PlotRange 0.5, 0.5

Out[163]=1 2 3 4 5 6

0.4

0.2

0.2

0.4

3. AspectRatio->x. Rende l'altezza del disegno pari a x volte la base. Se x=1 il disegno diventa quadrato. Tuttavia,la scala sugli assi x e y può essere diversa: la forma quadrata o rettangolare del disegno non ha nulla a che vederecon la scala usata sui due assi.Ridisegnare sin(x) entro un quadrato e con la larghezza del grafico pari a tre volte l'altezza.

24 Mathematica-Dispense-2011.nb

Page 25: Mathematica Dispense 2011

In[164]:= PlotSinx, x, 0, 2 Pi, AspectRatio 1PlotSinx, x, 0, 2 Pi, AspectRatio 1 3

Out[164]=1 2 3 4 5 6

1.0

0.5

0.5

1.0

Out[165]=1 2 3 4 5 6

1.0

0.5

0.5

1.0

4. Stessa scala negli assi x e y. Per avere la stessa scala sui due assi occorre scegliere AspectRatio -> Automatic. Ridisegnare sin(x) in un rettangolo [-10,10]x[-5,5], usando la stessa scala per x e y .

In[166]:= PlotSinx,x, 10, 10,

AspectRatio Automatic, ImageSize 800 ImageSize determina il numero di pixels alla base del disegno

Out[166]=10 5 5

1.0

0.5

0.5

1.0

4bis. Stessa scala negli assi x e y. Per comprendere meglio cosa avviene a seconda se chiediamo oppure no lastessa scala sui due assi, disegnare la funzione Sqrt[1-x^2], per x nell'intervallo [-1,1], che rappresenta un arco dicircoferenza, prima senza specificare alcuna opzione, e poi specificando AspectRatio->Automatic

Mathematica-Dispense-2011.nb 25

Page 26: Mathematica Dispense 2011

In[167]:= PlotSqrt1 x^2, x, 1, 1PlotSqrt1 x^2, x, 1, 1, AspectRatio Automatic

Out[167]=

1.0 0.5 0.5 1.0

0.2

0.4

0.6

0.8

1.0

Out[168]=

1.0 0.5 0.5 1.0

0.2

0.4

0.6

0.8

1.0

5. Colori. L'opzione PlotStyle si puo' usare per assegnare un particolare colore alla curva. Mathematica ha unaserie di colori predefiniti: Red, Blue, Yellow, Green, ... (indicati dal loro nome con la prima lettera maiuscola).Provare a fare un grafico di una funzione con l'opzione PlotSytle->Green.

In[169]:= PlotSinx, x, 10, 10, PlotStyle Yellow

Out[169]=10 5 5 10

1.0

0.5

0.5

1.0

In[170]:=

5bis. Colori. Si possono creare colori personalizzati con la funzione RGBColor[r,g,b], che crea la mistura di r partidi red (rosso), g parti di green (verde), b parti di blue (blu). r,g,b sono valori tra 0 e 1. Altre funzioni disponibili sono CMYKColor[c,m,y,k], che fornisce una mistura dei colori primari definiti invece"per sottrazione" da uno sfondo bianco (cyan , magenta, yellow, black), GrayLevel[g], che fornisce una gradazionedi grigio. Provare a definire alcuni colori: red, green, blue, ... , mescolando i colori rosso, verde e blu in diverseproporzioni, e usando RGBColor.

26 Mathematica-Dispense-2011.nb

Page 27: Mathematica Dispense 2011

In[171]:= red RGBColor1, 0, 0;green RGBColor0, 1, 0;blue RGBColor0, 0, 1;cyan CMYKColor1, 0, 0, 0; "cyan" o "color cianuro" e' l'azzurro magenta CMYKColor0, 1, 0, 0;yellow CMYKColor0, 0, 1, 0;black CMYKColor0, 0, 0, 1;gray GrayLevel0.8;

6.Grafici di più funzioni. Per i grafici di più funzioni con dei colori voluti, è sufficiente fornire a Plot la lista difunzioni da disegnare. Disegnate il grafico di sin(x), cos(x), tan(x) in colori diversi (è sufficiente assegnare aPlotStyle la lista {col_1, ..., col_n} dei colori). Se non precisiamo qualii colori usare per ogni funzione, Mathemat-ica li sceglie al posto nostro.

In[179]:= red RGBColor1, 0, 0;green RGBColor0, 1, 0;blue RGBColor0, 0, 1;PlotSinx, Cosx, Tanx, x, 0, 2Pi, PlotStyle red, green, bluePlotSinx, Cosx, Tanx, x, 0, 2Pi

Out[182]=1 2 3 4 5 6

3

2

1

1

2

3

Out[183]=1 2 3 4 5 6

3

2

1

1

2

3

7.Come viene costruito il grafico?. Per disegnare un grafico il comando Plot valuta la funzione su nun numerolimitato di punti; il grafico prodotto e' frutto di interpolazione (ogni punto viene collegato al successivo da unopportuno arco di parabola), e non sempre permette di ottenere il risultato desiderato. L'opzione Mesh->Allpermette di mostrare i punti in cui la funzione viene valutata. L'opzione PlotPoints si puo' usare per fissare ilnumero di punti iniziali su cui valutare la funzione (tuttavia, Mathematica in seguito ne aggiunge altri per miglio-rare il disegno, a meno che chiediamo MaxRecursion->1). Provare a disegnare le funzioni Sin[x] e Sin[1/x] con leopzioni PlotPoints->100, Mesh->All, MaxRecursion->1. Nel caso Sin[1/x] provare anche con PlotPoints->10.

Mathematica-Dispense-2011.nb 27

Page 28: Mathematica Dispense 2011

In[184]:= PlotSinx, x, Pi, Pi, MeshAll, PlotPoints 10 ai 10 punti iniziali Mathematica ne aggiunge altri la' dove la precisione del disegno lo richiede PlotSin1 x, x, 2, 2, MeshAll, PlotPoints 100, MaxRecursion 1 i punti usati sono 100 e non se ne aggiungono altri. Di

conseguenza in alcuni punti la precisione del grafico lascia a desiderare.

Out[184]=3 2 1 1 2 3

1.0

0.5

0.5

1.0

Out[185]=2 1 1 2

1.0

0.5

0.5

1.0

In[186]:=

8. Origine degli assi: l'opzione AxesOrigin->{x,y} permette di fissare l'origine degli assi alle coordinate (x,y).Disegnare la funzione 2 (x - 4)^2 + 1 prima senza scegliere l'origine, e poi fissando l'origine in (0,0).

28 Mathematica-Dispense-2011.nb

Page 29: Mathematica Dispense 2011

In[187]:= Plot2 x 4^2 1, x, 3, 5Plot2 x 4^2 1, x, 3, 5, AxesOrigin 0, 0

Out[187]=

3.5 4.0 4.5 5.0

1.5

2.0

2.5

3.0

Out[188]=

1 2 3 4 5

0.5

1.0

1.5

2.0

2.5

3.0

In[189]:=

9. Griglia degli assi. Le opzioni GridLines e e GridLinesStyle si possono usare per aggingere una griglia quadret-tata al grafico.

Mathematica-Dispense-2011.nb 29

Page 30: Mathematica Dispense 2011

In[190]:= PlotSinx^2, x, 0, 2 Pi, GridLines Automatic, GridLinesStyle Dashed "Dashed" significa "tratteggiato" PlotSinx^2, x, 0, 2 Pi, GridLines 0, Pi2, Pi, 3 Pi 2 , 2 Pi, 0, 0.25, 0.5, 0.75, 1, GridLinesStyle Dashed

Out[190]=

1 2 3 4 5 6

0.2

0.4

0.6

0.8

1.0

Out[191]=

1 2 3 4 5 6

0.2

0.4

0.6

0.8

1.0

10. L'opzione Ticks (ovvero "tacche") si puo' usare per scegliere i punti in cui mostrare le tacche degli assi.

In[192]:= PlotSinx^2, x, 0, 2 Pi, Ticks 0, Pi , 2 Pi, 0, 0.5, 1 la prima lista di valori si riferisce alla x, la seconda alla y

Out[192]=

2

0.5

1

11. L'opzione AxesLabel->{stringa_x, stringa_y} aggiunge le etichette testuali agli assi.

30 Mathematica-Dispense-2011.nb

Page 31: Mathematica Dispense 2011

In[193]:= PlotSinx^2, x, 0, 2 Pi, AxesLabel x, Sinx^2

Out[193]=

1 2 3 4 5 6x

0.2

0.4

0.6

0.8

1.0

sin2x

12. Altre opzioni utili.

In[194]:= Needs"PlotLegends`" Carica il pacchetto PlotLegends con i relativi comandi,a meno che il pacchetto sia gia' stato caricato di default

In[195]:= PlotSinx, Cosx, x, 0, 2 Pi, Ticks Range0, 2 Pi, Pi2, Range0, 1, 0.25,PlotStyle DirectiveRed, Dashed, RGBColor0, 0.5, 0, AxesLabel x,, PlotLegend Sinx, Cosx

Out[195]=

2

3

22

x

0.25

0.5

0.75

1.

cosx

sinx

RGBColor[0, 0.5, 0] e' una media tra RGBColor[0, 0, 0] (il nero) e RGBColor[0, 1, 0] il verde. Corrispondequindi al verde scuro.

13. Eslusione di punti singolari (asintoti verticali) dal grafico della funzione con opzione Exclusions. ConExclusionsStyle-> ... possiamo scegliere un modo per disegnare la parte "esclusa" del grafico.

Mathematica-Dispense-2011.nb 31

Page 32: Mathematica Dispense 2011

In[196]:= Plot1 x 2x 5, x, 0, 7Plot1 x 2x 5, x, 0, 7, Exclusions x 2, x 5Plot1 x 2x 5, x, 0, 7, Exclusions x 2, x 5, ExclusionsStyleDashed

Out[196]= 1 2 3 4 5 6 7

2

1

1

2

Out[197]= 1 2 3 4 5 6 7

2

1

1

2

Out[198]= 1 2 3 4 5 6 7

2

1

1

2

Ci sono un gran numero di altre opzioni, basta leggere Options[Plot] e poi l'Help ...

32 Mathematica-Dispense-2011.nb

Page 33: Mathematica Dispense 2011

In[199]:= Plot2xSinx, x, 0, 15, Filling TopPlot2xSinx, x, 0, 15, Filling BottomPlot2xSinx, x, 0, 15, Filling Axis

Out[199]=

Out[200]=

Out[201]=

In[202]:=

Esercitazione 1: Liste e Grafica 2D

Lezione 4: Data fitting1. Approssimazione o Fitting lineare. Mathematica ha un comando, Fit[.] che, dato una serie di dati nella forma diuna lista V di lunghezza n, determina la "migliore" formula E, tra quelle che appartengono a un insieme dato e chegenerano V. In un certo senso, il Fit e' un comando opposto al comando V = Table[E, {i,1,n}], che data unaformula E nella variabile i, genera una lista V di lunghezza n il cui i-esimo elemento e' descritto dalla formula E.Fit, al contrario, prende V e ricostrusce la "migliore" formula E che genera V. Per formula "migliore" si intende

Mathematica-Dispense-2011.nb 33

Page 34: Mathematica Dispense 2011

quanto segue: la formula E, in realta', genera una lista V' di dati leggermente diversi da V. La "migliore" formula E,tra quelle in un insieme dato, e' quella che rende la distanza euclidea tra i vettori V' e V dello spazio Rn minima.L'insieme delle formule in cui cercare la formula migliore e' uno spazio vettoriale, ottenuto prendendo tutte lecombinazioni lineari di un numero finito di formule di partenza.

Fit lineare

1. L'help del comando restituisce la seguente descrizione di Fit:

In[203]:= ? Fit

Fitdata, funs, vars finds a least-squares fit to

a list of data as a linear combination of the functions funs of variables vars.  

I parametri di Fit[data,funs,vars] sono una lista V di dati numerici (data), una lista di funzioni {f_1[x,y,...], ...f_n[x,y,...]} (funs), e la lista delle variabili indipendenti x,y,... (vars). Fit determina, usando un metodo detto "deiminimi quadrati" e che vedrete nei corsi di teoria, la combinazione lineare f[x,y...] = a_1*f_1[x,y,...] + ... +a_n*f_n[x,y...] delle funzioni f_1, ..., f_n che meglio e' grado di approssimare i dati sperimentali. Uno studioteorico garantisce che, nel caso delle combinazioni lineari di funzioni, la soluzione migliore esiste ed e' unica.Ad esempio nel caso di una lista di dati V={r_1, ... r_n}, come funzione della variabile indipendente i possiamousare: Fit[V, {f[i], g[i], h[i],...}, i] per determinare la funzione f[i]=(a*f[i] + b*g[i] + c*h[i] + ...), in grado di ricostruire una lista V'={r'_1, ... r'_n} ilpiu' vicino possibile a V.Definire un vettore V, e, usando il comando Fit[.,.,.], cercare la funzione costante e1, la retta e2, e la parabola e3che meglio approssimano i dati contenuti in V.

In[204]:= V 0.71, 0.88, 0.95, 1.59, 1.99;E1 FitV, 1, x le combinazioni lineari della funzione 1 sono tutte e sole le funzioni costanti a E2 FitV, 1, x, x le combinazioni lineari delle funzioni 1,x sono tutte e sole le funzioni abx E3 FitV, 1, x, x^2, x le combinazioni lineari delle funzioni 1,x,x^2 sono tutte e sole le funzioni abxcx^2

Out[205]= 1.224

Out[206]= 0.243 0.327 x

Out[207]= 0.758 0.114429 x 0.0735714 x2

2. Utilizzando le formule E1, E2, E3 ottenute qui sopra, definite tre tabelle, V1, V2, V3, che contengano i cinquevalori di e1, e2, e3 per x=1, ..., 5. V1, V2, V3 contengono cinque valori che meglio approssimano i cinque valoridi V.

In[208]:= V1 TableE1, x, 1, 5V2 TableE2, x, 1, 5V3 TableE3, x, 1, 5

Out[208]= 1.224, 1.224, 1.224, 1.224, 1.224

Out[209]= 0.57, 0.897, 1.224, 1.551, 1.878

Out[210]= 0.717143, 0.823429, 1.07686, 1.47743, 2.02514

2bis. Confrontate il grafico di V con quello delle liste V1, V2, V3 ottenuto con le formule E1, E2, E3. UsateListPlot. Il risultato migliore si ottiene con la formula E3, che cerca di approssimare V usando una parabola; ilrisultato peggiore, con la formula E1, che cerca di approssimare V usando una retta costante.

In[211]:= Needs"PlotLegends`"

34 Mathematica-Dispense-2011.nb

Page 35: Mathematica Dispense 2011

In[212]:= ListPlotV, V1, V2, V3,PlotStyle Black, DirectiveDashed, Red, DirectiveDashed, Blue, DirectiveDashed, Yellow,

Joined False, True, True, True, PlotLegend L, "const", "retta", "parabola", AxesLabel i,

Out[212]=

1 2 3 4 5i

0.5

1.0

1.5

2.0

parabola

retta

const

L

3. Il fitting al punto precedente e' stato effettuato assumendo che la variabile indipendente i assumesse i valori1,2,3,...(vedi grafico). In molti casi questo non e' vero e occorre specificare in maniera esplicita i valori dellavariabile indipendente x. Si pensi a dati sperimentali in cui un certa grandezza viene acquisita nello spazio, neltempo, in frequenza, ecc., dove e' evidente il significato fisico della variabile indipendente x ai fini del fitting. Aquesto si puo' ovviare specificando i dati sperimentali con una matrice data anziche' una lista V. Come gia' visto alpunto 14 della lezione 2 nel caso di ListPlot, e' possibile descrivere una serie numerica con una particolare ascissacreando una matrice Nx2 dove la prima colonna rappresenta l'ascissa e la seconda i dati misurati. A tal propositoproviamo a ripetere l'eservizio precedente supponendo che i dati in V siano acquisiti per i valori della variabileindipendente x={-1,-0.5,0,0.5,1}.

In[213]:= xdata Tablex, x, 1, 1, 0.5data Tablexdatai, Vi, i, 1, 5MatrixFormV

Out[213]= 1., 0.5, 0., 0.5, 1.

Out[214]= 1., 0.71, 0.5, 0.88, 0., 0.95, 0.5, 1.59, 1., 1.99Out[215]//MatrixForm=

0.710.880.951.591.99

In[216]:=

In[217]:= E1n Fitdata, 1, xE2n Fitdata, 1, x, xE3n Fitdata, 1, x, x^2, x

Out[217]= 1.224

Out[218]= 1.224 0.654 x

Out[219]= 1.07686 0.654 x 0.294286 x2

Le formule ottenute sono diverse rispetto alle precendenti (ad eccezzione di E1n che costituisce un caso particolar-mente semplice) visto che ora e' cambiato il significato della variabile x (che non specifica piu' semplicementel'indice del valore nel vettore. Concludiamo ora l'esercizio disegnando i punti e tutte le curve ottenute avendo curadi rappresentare correttamente la variabile x.

Mathematica-Dispense-2011.nb 35

Page 36: Mathematica Dispense 2011

In[220]:= MatrixFormdata1 Tablex, E1n, x, 1, 1, 0.5MatrixFormdata2 Tablex, E2n, x, 1, 1, 0.5MatrixFormdata3 Tablex, E3n, x, 1, 1, 0.5

Out[220]//MatrixForm=

1. 1.2240.5 1.2240. 1.2240.5 1.2241. 1.224

Out[221]//MatrixForm=

1. 0.570.5 0.8970. 1.2240.5 1.5511. 1.878

Out[222]//MatrixForm=

1. 0.7171430.5 0.8234290. 1.076860.5 1.477431. 2.02514

In[223]:= ListPlotdata, data1, data2, data3,PlotStyle Black, DirectiveDashed, Red, DirectiveDashed, Blue, DirectiveDashed, Yellow,

Joined False, True, True, True, PlotLegend L, "const", "retta", "parabola", AxesLabel x,

Out[223]=

1.0 0.5 0.5 1.0x

0.5

1.0

1.5

2.0

parabola

retta

const

L

Fit non lineare

4. Approfondimento: Il comando di Fit funziona anche per dati con piu' di due dimensioni. Basta operare conmatrici di dati NxM dove M e' la dimensione del problema. Ad esempio nel caso di dati in 3 dimensioni si avra'data={{x1,y1,z1},{x2,y2,z2}...}. I primi M-1 dati rappresentano le variabili indipendenti del problema, l'ultimodato, nella colonna M, la variabile dipendente. L'obbiettivo del Fit in questo caso e' trovare una formula cheesprima la il valore della variabile dipendente a partire dai valori delle M-1 variabili indipendenti. Quando M=3,per la visualizzazione dei dati si puo' usare ListPlot3D.

Torneremo sull'argomento quando parleremo di grafica 3D (tridimensionale).

5. Fitting non lineare. Il comando Fit e' limitato ad approssimazioni costituite dalla combinazione lineare difunzioni. Dove la formula ricercata dipenda in modo non lineare dai parametri occorre usare il comando FindFit. Inquesto caso, l'unicita' della soluzione "migliore" non e' piu' garantita. Come esempio si voglia approssimare unaserie di dati sperimentali con un esponenziale x con parametro da ottimizzare, in modo da ottenere una listavalori il piu' vicino possibili a quelli sperimentali. Questa funzione non e' lineare nel parametro per cui non sipuo' usare il comando Fit.

36 Mathematica-Dispense-2011.nb

Page 37: Mathematica Dispense 2011

Per cominciare vediamo l'Help rapido del comando:

In[224]:= ? FindFit

FindFitdata, expr, pars, vars finds numerical values of the parameters pars that make expr give a bestfit to data as a function of vars. The data can have the form x1, y1, …, f1, x2, y2, …, f2, …,where the number of coordinates x, y, … is equal to the number of variables in the list vars. Thedata can also be of the form f1, f2, …, with a single coordinate assumed to take values 1, 2, ….

FindFitdata, expr, cons, pars, vars finds a best fit subject to the parameter constraints cons. 

In questo caso expr puo' essere un espressione qualsiasi funzione delle variabili nella lista vars e dei parametrinella lista pars. Proviamo a usare il comando per determinare il parametro della formula x.

In[225]:= sub4 FindFitdata, Expx, , xOut[225]= 0.67976

In[226]:= 0.6797600345399801`Out[226]= 0.67976

In[227]:= ? sub4

Global`sub4

sub4 0.67976

L'output sub4 di questo formato e' leggermente diverso rispetto al precedente. Esso fornisce una lista di valori dasostituire ai parametri nella formula expr (nel nostro caso Exp[a x]. L'operatore e' gia stato utilizzato perassegnare i valori alla proprieta' dei grafici. In Mathematica questo tipo di assegnamento, detto "temporaneo" siusa anche per specificare delle regole di sostituzione in combinazione con l'operatore di sostituzione (./.). Si vedaad esempio:

In[228]:= a b . a 1, b 2a b . c 10

Out[228]= 3

Out[229]= a b

Utilizziamo ora la sostituzione { 0.67976} per costruire una tabella dei dati secodo il Fitting non lineareottenuto e creiamo un grafico.

In[230]:= MatrixFormdata4 Tablex, Expx . sub4, x, 1, 1, 0.5 substitution 0.6797600345399801` Out[230]//MatrixForm=

1. 0.5067390.5 0.7118560. 1.0.5 1.404781. 1.9734

Mathematica-Dispense-2011.nb 37

Page 38: Mathematica Dispense 2011

In[231]:= ListPlotdata, data4,PlotStyle Black, DirectiveDashed, Red,

Joined False, True, PlotLegend "Original Data", Expx, AxesLabel x,

Out[231]=

1.0 0.5 0.5 1.0x

0.5

1.0

1.5

2.0

x

Original Data

5bis. Proviamo ora a determinare il fitting con un funzione non lineare di due parametri x.

In[232]:= sub5 FindFitdata, Expax m, a, m, x?sub5

Out[232]= a 0.56997, m 0.210934

Global`sub5

sub5 a 0.56997, m 0.210934

In[234]:= sub5 a0.5699695344036192`,m0.21093427960503208` data5 Tablex, Expa x m . sub5, x, 1, 1, 0.5ListPlotdata, data4, data5,

PlotStyle Black, DirectiveDashed, Red, DirectiveDashed, Blue,Joined False, True, True, PlotLegend "data", Expa x, Expa x m, AxesLabel x,

Out[234]= 1., 0.637792, 0.5, 0.848098, 0., 1.12775, 0.5, 1.49962, 1., 1.99411

Out[235]=

1.0 0.5 0.5 1.0x

0.5

1.0

1.5

2.0

a xm

a x

data

Import e Export da file

6. Lettura e scrittura di dati sperimentali (Import, Export). In molti casi i dati sperimentali possono esseregenerati da un software o da strumenti di misura, che possono scrivere i dati in vari formati (.xls, .dat, ...) . Vicev-ersa, puo' essere necessario esportare i dati numerici ottenuti con Mathematica in altri formati, perche' possanoessere utilizzati da altri programmi. A tal proposito si possono usare i comandi Import e Export che possonogestire la maggior parte dei formati dei dati (documenti, immagini, audio, file di testo, video, ecc).

38 Mathematica-Dispense-2011.nb

Page 39: Mathematica Dispense 2011

Scaricate dal sito del corso, lezione 4, i dati nella tabella Excel in dati4.xls. Per importare tali dati entro Mathemat-ica, utilizziamo il comando Import["indirizzo_file_da_importare"]. L'indirizzo del file puo' consistere del solonome del file da importare seguito dal tipo, per esempio Import["dati4.xls"], purche' il file si trovi nella stessacartella (o "directory") in cui lavora Mathematica. Per conoscere tale directory utilizzate il comando Directory[].Se il file da importare si trova in un'altra directory, di indirizzo "indirizzo_nuova_directory", potete spostare ladirectory di lavoro con il comando SetDirectory["indirizzo_nuova_directory"]. In alternativa, potete usare l'indi-rizzo completo del file da importare. Nel sistema operativo Window, per esempio, potremmo scrivere: Import["C:\-Documents and Settings\utente\Documenti\dati4.xls"] se il file si trova nella cartella Documenti di un certo utente.

I dati importati devono venire assegnati a una variabile, oppure ricopiati con copia e incolla, altrimenti vanno persi.

In[236]:= DirectoryOut[236]= C:\Documents and Settings\stefano\Documenti

In[237]:= Se la directory di lavoro e quella dove si trova il file da importare coincidono, basta scrivere il nome e il tipo del file MatrixFormdataxls Import"dati4.xls"

Out[237]//MatrixForm=

10.28.0316

9.826.2238

9.624.5325

9.422.9504

9.221.4702

9.20.0855

8.818.7902

8.617.5783

In[238]:= ? dataxls

Global`dataxls

dataxls

10., 28.0316, 9.8, 26.2238, 9.6, 24.5325, 9.4, 22.9504, 9.2, 21.4702,9., 20.0855, 8.8, 18.7902, 8.6, 17.5783, 8.4, 16.4446, 8.2, 15.3841,8., 14.3919, 7.8, 13.4637, 7.6, 12.5954, 7.4, 11.7831, 7.2, 11.0232,7., 10.3123, 6.8, 9.64719, 6.6, 9.02501, 6.4, 8.44296, 6.2, 7.89845,6., 7.38906, 5.8, 6.91251, 5.6, 6.4667, 5.4, 6.04965, 5.2, 5.65949,5., 5.29449, 4.8, 4.95303, 4.6, 4.6336, 4.4, 4.33476, 4.2, 4.0552,4., 3.79367, 3.8, 3.549, 3.6, 3.32012, 3.4, 3.10599, 3.2, 2.90568,3., 2.71828, 2.8, 2.54297, 2.6, 2.37897, 2.4, 2.22554, 2.2, 2.08201,2., 1.94773, 1.8, 1.82212, 1.6, 1.7046, 1.4, 1.59467, 1.2, 1.49182,1., 1.39561, 0.8, 1.30561, 0.6, 1.2214, 0.4, 1.14263, 0.2, 1.06894,0., 1., 0.2, 0.935507, 0.4, 0.875173, 0.6, 0.818731, 0.8, 0.765928,1., 0.716531, 1.2, 0.67032, 1.4, 0.627089, 1.6, 0.586646, 1.8, 0.548812,2., 0.513417, 2.2, 0.480305, 2.4, 0.449329, 2.6, 0.42035, 2.8, 0.393241,3., 0.367879, 3.2, 0.344154, 3.4, 0.321958, 3.6, 0.301194, 3.8, 0.281769,4., 0.263597, 4.2, 0.246597, 4.4, 0.230693, 4.6, 0.215815, 4.8, 0.201897,5., 0.188876, 5.2, 0.176694, 5.4, 0.165299, 5.6, 0.154638, 5.8, 0.144665,6., 0.135335, 6.2, 0.126607, 6.4, 0.118442, 6.6, 0.110803, 6.8, 0.103657,7., 0.096972, 7.2, 0.090718, 7.4, 0.0848673, 7.6, 0.0793939,7.8, 0.0742736, 8., 0.0694835, 8.2, 0.0650023, 8.4, 0.0608101,8.6, 0.0568882, 8.8, 0.0532193, 9., 0.0497871, 9.2, 0.0465762,9.4, 0.0435723, 9.6, 0.0407622, 9.8, 0.0381333, 10., 0.035674

7. Si nota che la tabella presente nel file xls e' costituita da due colonne. Tuttavia, Mathematica ha importato unalista che contiene come unico elemento quella matrice. Questo si vede dal fatto che datixls inizia con 3 parentesi:{{{ anziche' con 2: {{. Il motivo e' il seguente: nel caso generale un file xls e' costituito da piu' fogli, dunqueMathematica importa una lista, con primo elemento la matrice nel primo foglio, secondo elemento la matrice nelsecondo foglio, e cosi' via.

Proviamo a selezionare la matrice scelta, modificare la seconda colonna applicando il logaritmo a tutti i suoielementi. Qundi utilizziamo il comando Export["indirizzo_file_da_salvare"] per salvare la nuova matrice. Sevogliamo salvare in formato xls, il file deve terminare con ".xls".

Mathematica-Dispense-2011.nb 39

Page 40: Mathematica Dispense 2011

In[239]:= datatab dataxls1; questo comando seleziona il primo e unico elemento della lista dataxls. questo elemento a sua volta e' una matrice Print"Il prossimo comando stampa il VECCHIO valore della matrice datatab, senza bordi"GriddatatabIl prossimo comando stampa il VECCHIO valore della matrice datatab, senza bordi

Out[241]=

10. 28.03169.8 26.22389.6 24.53259.4 22.95049.2 21.47029. 20.08558.8 18.79028.6 17.57838.4 16.44468.2 15.38418. 14.39197.8 13.46377.6 12.59547.4 11.78317.2 11.02327. 10.31236.8 9.647196.6 9.025016.4 8.442966.2 7.898456. 7.389065.8 6.912515.6 6.46675.4 6.049655.2 5.659495. 5.294494.8 4.953034.6 4.63364.4 4.334764.2 4.05524. 3.793673.8 3.5493.6 3.320123.4 3.105993.2 2.905683. 2.718282.8 2.542972.6 2.378972.4 2.225542.2 2.082012. 1.947731.8 1.822121.6 1.70461.4 1.594671.2 1.491821. 1.395610.8 1.305610.6 1.22140.4 1.142630.2 1.068940. 1.0.2 0.9355070.4 0.8751730.6 0.818731

40 Mathematica-Dispense-2011.nb

Page 41: Mathematica Dispense 2011

0.8 0.7659281. 0.7165311.2 0.670321.4 0.6270891.6 0.5866461.8 0.5488122. 0.5134172.2 0.4803052.4 0.4493292.6 0.420352.8 0.3932413. 0.3678793.2 0.3441543.4 0.3219583.6 0.3011943.8 0.2817694. 0.2635974.2 0.2465974.4 0.2306934.6 0.2158154.8 0.2018975. 0.1888765.2 0.1766945.4 0.1652995.6 0.1546385.8 0.1446656. 0.1353356.2 0.1266076.4 0.1184426.6 0.1108036.8 0.1036577. 0.0969727.2 0.0907187.4 0.08486737.6 0.07939397.8 0.07427368. 0.06948358.2 0.06500238.4 0.06081018.6 0.05688828.8 0.05321939. 0.04978719.2 0.04657629.4 0.04357239.6 0.04076229.8 0.038133310. 0.035674

In[242]:= datatabAll, 2 LogdatatabAll, 2; riassegnamo a tutti gli elementi della colonna 2 il logaritmo dei loro valori originali Print"Il prossimo comando stampa il NUOVO valore della matrice datatab, senza bordi"Griddatatab Questo e' un indirizzo di un computer di un docente: per far funzionare questo comando nel vostro computer,dovete scegliere un indirizzo del vostro computer Export"C:\Documents and Settings\stefano\Documenti\prova.xls", datatabIl prossimo comando stampa il NUOVO valore della matrice datatab, senza bordi

10. 3.333339.8 3.266679.6 3.29.4 3.13333

Mathematica-Dispense-2011.nb 41

Page 42: Mathematica Dispense 2011

Out[244]=

9.2 3.066679. 3.8.8 2.933338.6 2.866678.4 2.88.2 2.733338. 2.666677.8 2.67.6 2.533337.4 2.466677.2 2.47. 2.333336.8 2.266676.6 2.26.4 2.133336.2 2.066676. 2.5.8 1.933335.6 1.866675.4 1.85.2 1.733335. 1.666674.8 1.64.6 1.533334.4 1.466674.2 1.44. 1.333333.8 1.266673.6 1.23.4 1.133333.2 1.066673. 1.2.8 0.9333332.6 0.8666672.4 0.82.2 0.7333332. 0.6666671.8 0.61.6 0.5333331.4 0.4666671.2 0.41. 0.3333330.8 0.2666670.6 0.20.4 0.1333330.2 0.06666670. 0.0.2 0.06666670.4 0.1333330.6 0.20.8 0.2666671. 0.3333331.2 0.41.4 0.4666671.6 0.5333331.8 0.62. 0.6666672.2 0.7333332.4 0.82.6 0.866667

42 Mathematica-Dispense-2011.nb

Page 43: Mathematica Dispense 2011

2.8 0.9333333. 1.3.2 1.066673.4 1.133333.6 1.23.8 1.266674. 1.333334.2 1.44.4 1.466674.6 1.533334.8 1.65. 1.666675.2 1.733335.4 1.85.6 1.866675.8 1.933336. 2.6.2 2.066676.4 2.133336.6 2.26.8 2.266677. 2.333337.2 2.47.4 2.466677.6 2.533337.8 2.68. 2.666678.2 2.733338.4 2.88.6 2.866678.8 2.933339. 3.9.2 3.066679.4 3.133339.6 3.29.8 3.2666710. 3.33333

Out[245]= C:\Documents and Settings\stefano\Documenti\prova.xls

8. Esportare la tabella ottenuta in formato "puro testo" o ASCII. Usare estensione .dat per ottenere una tabella informato ASCII. Individuare ed aprire il file ottenuto con un Editor di testo per verificare il risultato ottenuto

In[246]:= Export"C:\Documents and Settings\stefano\Documenti\prova.dat", datatabOut[246]= C:\Documents and Settings\stefano\Documenti\prova.dat

9. Per conoscere tutti i tipi di file supportati su una certa installazione di Mathematica utilizzare i seguenti comandi

Mathematica-Dispense-2011.nb 43

Page 44: Mathematica Dispense 2011

In[247]:= $ImportFormats

Out[247]= 3DS, ACO, Affymetrix, AIFF, ApacheLog, ArcGRID, AU, AVI, Base64, BDF, Binary, Bit,BMP, Byte, BYU, BZIP2, CDED, CDF, Character16, Character8, CIF, Complex128,Complex256, Complex64, CSV, CUR, DBF, DICOM, DIF, DIMACS, Directory, DOT, DXF,EDF, EPS, ExpressionML, FASTA, FITS, FLAC, GenBank, GeoTIFF, GIF, GPX, Graph6,Graphlet, GraphML, GRIB, GTOPO30, GXL, GZIP, HarwellBoeing, HDF, HDF5, HTML,ICO, ICS, Integer128, Integer16, Integer24, Integer32, Integer64, Integer8,JPEG, JPEG2000, JSON, JVX, KML, LaTeX, LEDA, List, LWO, MAT, MathML, MBOX,MDB, MGF, MMCIF, MOL, MOL2, MPS, MTP, MTX, MX, NASACDF, NB, NDK, NetCDF, NEXUS,NOFF, OBJ, ODS, OFF, Package, Pajek, PBM, PCX, PDB, PDF, PGM, PLY, PNG, PNM,PPM, PXR, QuickTime, RawBitmap, Real128, Real32, Real64, RIB, RSS, RTF, SCT,SDF, SDTS, SDTSDEM, SHP, SMILES, SND, SP3, Sparse6, STL, String, SurferGrid,SXC, Table, TAR, TerminatedString, Text, TGA, TGF, TIFF, TIGER, TLE, TSV,UnsignedInteger128, UnsignedInteger16, UnsignedInteger24, UnsignedInteger32,UnsignedInteger64, UnsignedInteger8, USGSDEM, UUE, VCF, VCS, VTK, WAV,Wave64, WDX, XBM, XHTML, XHTMLMathML, XLS, XLSX, XML, XPORT, XYZ, ZIP

In[248]:= $ExportFormats

Out[248]= 3DS, ACO, AIFF, AU, AVI, Base64, Binary, Bit, BMP, Byte, BYU, BZIP2, C, CDF, Character16,Character8, Complex128, Complex256, Complex64, CSV, DICOM, DIF, DIMACS, DOT, DXF,EMF, EPS, ExpressionML, FASTA, FITS, FLAC, FLV, GIF, Graph6, Graphlet, GraphML,GXL, GZIP, HarwellBoeing, HDF, HDF5, HTML, Integer128, Integer16, Integer24,Integer32, Integer64, Integer8, JPEG, JPEG2000, JSON, JVX, KML, LEDA, List, LWO,MAT, MathML, Maya, MGF, MIDI, MOL, MOL2, MTX, MX, NASACDF, NB, NetCDF, NEXUS, NOFF,OBJ, OFF, Package, Pajek, PBM, PCX, PDB, PDF, PGM, PLY, PNG, PNM, POV, PPM, PXR,QuickTime, RawBitmap, Real128, Real32, Real64, RIB, RTF, SCT, SDF, SND, Sparse6,STL, String, SurferGrid, SVG, SWF, Table, TAR, TerminatedString, TeX, Text,TGA, TGF, TIFF, TSV, UnsignedInteger128, UnsignedInteger16, UnsignedInteger24,UnsignedInteger32, UnsignedInteger64, UnsignedInteger8, UUE, VideoFrames, VRML, VTK,WAV, Wave64, WDX, WMF, X3D, XBM, XHTML, XHTMLMathML, XLS, XLSX, XML, XYZ, ZIP, ZPR

Lezione 5: Grafica 3D e Quadriche. Come disegnare funzioni z = f(x,y): il comando Plot3D

1. Plot3D e' un comando del tutto simile al comando Plot in grado di generare grafici in tre dimensioni. Questocomando si puo' usare per disegnare funzioni note in forma esplicita grafici che si possano ridurre alla forma z=f(x,y). Come esempio, disegnamo z=sin(x) nello spazio xyz (in questa equazione la variabile y manca):

44 Mathematica-Dispense-2011.nb

Page 45: Mathematica Dispense 2011

In[249]:= Plot3DSinx, x, 0, 10, y, 0, 5

Out[249]=

2. Esempio di grafica 3D con problemi di ottimizzazione. Disegnare di un'onda a cerchi concentrici:

z = sin( x2 y2 )usando il comando Plot3D senza particolari opzioni. Gli argomenti di Plot3D sono: Plot3D[espr, {x, xmin, xmax}, {y, ymin, ymax}]dove espr è una espressione in x, y. Al posto di x, y possiamo usare due variabili qualunque.

In[250]:= Plot3DSin x2 y2 ,

x, 20, 20, y, 20, 20

Out[250]=

3. Commento. La superficie viene disegnata congiungendo su una griglia di valori discreti per x e y un gran numerodi elementi di superficie in varie inclinazioni (in origine si usavano dei rettangoli). Mathematica 7 di solito rendebene la grafica 3D, ma in questo caso, in assenza di indicazioni ha scelto di usare una griglia costituita di pochirettangoli; il fatto che tale griglia sia stata lasciata visibile rende più difficile vedere la figura. Infine, Mathematicaha deformato notevolmente la figura, scegliendo unità di misura molto diverse sui vari assi. Questo puo' non essereil risultato desiderato. Per "forzare" Mathematica a generare un grafico migliore occorre configurare alcuneopzioni.

Mathematica-Dispense-2011.nb 45

Page 46: Mathematica Dispense 2011

In[251]:= ? Plot3D

Plot3D f , x, xmin, xmax, y, ymin, ymax generates a threedimensional plot of f as a function of x and y.

Plot3D f1, f2, …, x, xmin, xmax, y, ymin, ymax plots several functions.  

In[252]:= OptionsPlot3DOut[252]= AlignmentPoint Center, AspectRatio Automatic, AutomaticImageSize False,

Axes True, AxesEdge Automatic, AxesLabel None, AxesOrigin Automatic,AxesStyle , Background None, BaselinePosition Automatic, BaseStyle ,BoundaryStyle GrayLevel0, Boxed True, BoxRatios 1, 1, 0.4, BoxStyle ,ClippingStyle Automatic, ColorFunction Automatic, ColorFunctionScaling True,ColorOutput Automatic, ContentSelectable Automatic, ControllerLinking Automatic,ControllerMethod Automatic, ControllerPath Automatic,CoordinatesToolOptions Automatic, DisplayFunction $DisplayFunction,Epilog , Evaluated Automatic, EvaluationMonitor None, Exclusions Automatic,ExclusionsStyle None, FaceGrids None, FaceGridsStyle , Filling None,FillingStyle Opacity0.5, FormatType TraditionalForm, ImageMargins 0.,ImagePadding All, ImageSize Automatic, LabelStyle , Lighting Automatic,MaxRecursion Automatic, Mesh Automatic, MeshFunctions 1 &, 2 &,MeshShading None, MeshStyle Automatic, Method Automatic,NormalsFunction Automatic, PerformanceGoal $PerformanceGoal,PlotLabel None, PlotPoints Automatic, PlotRange Full, Full, Automatic,PlotRangePadding Automatic, PlotRegion Automatic, PlotStyle Automatic,PreserveImageOptions Automatic, Prolog , RegionFunction True &,RotationAction Fit, SphericalRegion False, TextureCoordinateFunction Automatic,TextureCoordinateScaling Automatic, Ticks Automatic, TicksStyle ,ViewAngle Automatic, ViewCenter Automatic, ViewMatrix Automatic,ViewPoint 1.3, 2.4, 2., ViewRange All, ViewVector Automatic,ViewVertical 0, 0, 1, WorkingPrecision MachinePrecision

4. Per ovviare alle scelte erronee fatte, useremo una versione con opzioni del comando Plot3D: Plot3D[e, {x, xm, xM}, {y, ym, yM}, opzione1->valore1, ...] Come esempio di opzioni, scegliamo: aumentare il numero di rettangoli a 100 x 100 (opzione PlotPoints->100);rendere invisibile la griglia sulla superficie (opzione Mesh); limitare l'asse verticale tra -20 e 20 (opzionePlotRange->{-20,20}); rendere uguale l'unita' di misura usata sui tre assi (opzione BoxRatios-> Automatic) (Siveda nell'Help come usare queste opzioni). La stessa superficie apparirà ora molto diversa (e più vicina al suo aspetto reale).

46 Mathematica-Dispense-2011.nb

Page 47: Mathematica Dispense 2011

In[253]:= Plot3DSin x2 y2 , x, 20, 20, y, 20, 20,PlotPoints 100,

BoxRatios Automatic,

PlotRange 20, 20, Mesh False

Out[253]=

Nota: su AspecRatio e BoxRatios. Il comando per rendere uguali le tre unita' di misura sugli assi non e' piu'AspectRatio->Automatic come nella grafica 2D. AspectRatio->Automatic rende uguali le due unita' di misura sugliassi nella grafica 2D, ma nella grafica 3D ha un effetto piu' blando, sceglie base e altezza del disegno in base alletre dimensioni della "scatola" immaginaria che contiene il disegno. Attenzione: se usiamo BoxRatios->Automatic,come risultato possiamo ottenere una scatola con tre dimensioni molto diverse, non effettivamente disegnabile.Il comando "BoxRatios" puo' essere usato per rendere le tre unita' di misura uguali, ma ha anche un uso opposto:scegliere il rapporto tra le tre dimensioni della "scatola" indipendentemente dal disegno, e deformare di con-seguenza le tre unita' di misura in modo che il disegno si iscriva nella scatola. Per esempio BoxRatios->{1,1,1}disegna sempre la figura in un cubo, anche a prezzo di deformarla notevolmente. Rivediamo come esempio laprima figura della sezione per accorgerci quanto cambia:

Mathematica-Dispense-2011.nb 47

Page 48: Mathematica Dispense 2011

In[254]:= Plot3DSinx, x, 0, 10, y, 0, 5, BoxRatios 1, 1, 1

Out[254]=

Infine, molte superfici non si possono scrivere nella forma z=f(x,y) e devono venire descritte in forma parametrica(x=f(t,u), y=g(t,u), z=h(t,u)) oppure implicita (P(x,y,z)=0). In questo caso il comando Plot3D non e' adatto adisegnarle. Nella prossima sezione spieghiamo come disegnare linee e superfici parametriche nello spazio.

Quadriche. Come disegnare linee e superfici parametriche nel piano e nello spazio.

Come complemento al corso di Geometria in questa lezione vedremo le diverse superfici nello spazio che possonovenire descritte da una equazione di secondo grado P(x,y,z)=0: paraboloide ellittico e a sella, cilindro, cono, ellisse,sfera, iperboloide a una e due falde. Oltre a spiegare come disegnare le quadriche, spieghiamo anche come diseg-nare superfici descritte in forma parametrica (x=f(t,u), y=g(t,u), z=h(t,u)).

Quadriche: il Paraboloide ellittico

5. Un paraboloide ellittico, di braccia a e b, e' una qualunque superficie che con rotazioni e traslazioni si puo'portare nella forma: z = x2 a2 y2/b2)Le sezioni orizzontali sono tutte ellissi di braccia a,b, e le sezioni verticali sono tutte parabole. La figura si puo'ruotare con l'uso del mouse. Potete disegnare da un opportuno punto di vista usando l'opzione ViewPoint ->{x,y,z}, dove {x,y,z} sono le coordinate dell'osservatore del disegno (leggete l'Help per saperne di più).

48 Mathematica-Dispense-2011.nb

Page 49: Mathematica Dispense 2011

In[255]:= a 2; b 3;ParaboloideEllittico Plot3Dx2 a2 y2 b2, x, 20, 20, y, 20, 20,

PlotRange 0, 20,AspectRatio 1, ViewPoint 0.062, 0.114, 3.381, PlotPoints 100, 100

Out[256]=

6. Notate che Mathematica riempe eventuali "buchi" presenti nella superficie, aggiungendo dei "rammendi" chenon fanno parte del disegno originale. Il valore dell'opzione ClippingStyle determina la modalita' con cui vengonodisegnate le parti "tagliate" della superficie. Se non volete riempire le parti tagliate dovete porre ClippingStyle->None. Ponendo ClippingStyle->Opacity[r], con un valore di r tra 0 e 1, si puo' rendere la parte tagliata semitraspar-ente. Nell'esempio che segue definiamo una lista di disegni di z=sin(xy) usando diversi valori per l'opzione Clip-pingStyle: None (nessun riempimento), Opacity[1/3] (riempimento trasparente al 33%), Opacity[2/3](riempimento trasparente al 33%), Automatic (riempimento pieno).

In[257]:= L TablePlot3DSinx y, x, 3, 3, y, 3, 3, PlotRange .7, .7, ImageSize 300, ClippingStyle cs,cs, None, Opacity1 3, Opacity2 3, Automatic;

In[258]:= ListAnimateL facciamo scorrere le immagini di L

Out[258]=

Mathematica-Dispense-2011.nb 49

Page 50: Mathematica Dispense 2011

6. Rivediamo ora il paraboloide ellittico senza riempire i "buchi" presenti nella superficie (ClippingStyle None).

In[259]:= Plot3Dx2 a2 y2 b2, x, 20, 20, y, 20, 20,PlotRange 0, 20,AspectRatio 1, ViewPoint 0.062, 0.114, 3.381, PlotPoints 100, 100, ClippingStyle None

Out[259]=

Un caso particolare di paraboloide e' il paraboloide circolare, quando a=b e le sezioni orizzontali sono circon-ferenze. Il paraboloide circolare puo' ottenere facendo ruotare una parabola intorno al proprio asse verticale.

In[260]:= a 3; b 3;Plot3Dx2 a2 y2 b2, x, 20, 20, y, 20, 20,

PlotRange 0, 20,AspectRatio 1, ViewPoint 0.062, 0.114, 3.381, PlotPoints 100, 100, ClippingStyle None

Out[261]=

50 Mathematica-Dispense-2011.nb

Page 51: Mathematica Dispense 2011

Quadriche: Paraboloide iperbolico (o a sella)

7. Un paraboloide iperbolico e' una qualunque superficie che con rotazioni e traslazioni si puo' portare nella forma: z = x2a2 y2/b2)Le sezioni orizzontali sono tutte iperboli mentre quelle verticali sono tutte parabole (alcune rivolte verso l'alto ealtre rivolte verso il basso). Disegnamolo usando tutte le opzioni viste in precedenza.

In[262]:= a 2; b 3; ParaboloideIperbolico Plot3D x2 a2 y2 b2, x, 20, 20, y, 20, 20,PlotRange 20, 20, ClippingStyle None, AspectRatio 1, PlotPoints 100, 100

Out[262]=

Una superficie e' detta rigata se e' l'unione di una famiglia di rette. Il paraboloide a sella e' una quadrica rigata. Sipuo' costruire intrecciando aste rigide, come vedremo nell'ultima sezione dedicata alle quadriche.

Linee parametriche nel piano: circonferenza e ellisse. Come disegnare linee parametriche nel piano.

Molte linee nel piano definite da un'equazione P(x,y)=0, incluse molte coniche (circonferenza, ellisse, iperbolenella forma 1 = x2 a2 y2/b2) ) non si possono porre nella forma y=f(x). In questo caso si cerca di trasformarlein un sistema equivalente di equazioni x=f(t), y=g(t), quindi si disegna l'insieme dei punti (x,y) che soddisfano leequazioni x=f(t), y=g(t) per qualche u. Il parametro t si interpreta come la coordinata di un punto sulla lineaP(x,y)=0. Il modello e' la descrizione della circonferenza 1 = x2 y2 mediante un parametro t che viene interpre-tato come l'angolo (in radianti) tra la retta congiungente l'origine e (x,y), e l'asse delle x. L'equazione parametricae': x = cos(t), y = sin(t). Una equazione parametrica nel piano viene disegnata tramite il comando ParametricPlot[.]

Mathematica-Dispense-2011.nb 51

Page 52: Mathematica Dispense 2011

In[263]:= Circonferenza ParametricPlotCost, Sint, t, 0, 2 Pi

Out[263]=1.0 0.5 0.5 1.0

1.0

0.5

0.5

1.0

Possiamo ottenere una equazione parametrica per l'ellisse 1 = x2 a2 y2/b2) dall'equazione parametrica dellacirconferenza, cambiando l'unita' di misura sull'asse x da 1 ad a, e l'unita' di misura sull'asse y da 1 a b. L'equazioneparametrica e': x = cos(t), y = sin(t).

In[264]:= a 2; b 3;ParametricPlotaCost, bSint, t, 0, 2 Pi

Out[265]=2 1 1 2

3

2

1

1

2

3

Quadriche parametriche: Cilindro, Doppio Cono. Come disegnare superfici parametriche nello spazio.

52 Mathematica-Dispense-2011.nb

Page 53: Mathematica Dispense 2011

Molte superfici definite da un'equazione P(x,y,z)=0, incluso molte quadriche (sfera, ellisse, cilindro, ...), non sipossono porre nella forma z=f(x,y). In questo caso si cerca di trasformarle in un sistema equivalente di equazionix=f(t,u), y=g(t,u), z=h(t,u), quindi si disegna l'insieme dei punti (x,y,z) che soddisfano le equazioni x=f(t,u),y=g(t,u), z=h(t,u), per qualche t,u nel dominio dei parametri. I parametri t,u si interpretano come una griglia tu dicoordinate (non necessariamente cartesiane, ne' ortogonali) sulla superficie P(x,y,z)=0. Ci si ispira alla descrizioneparametrica della superficie terrestre, che vedremo tra poco: in questo caso la griglia di coordinate tu e' la grigliadei meridiani e paralleli che descrivono ogni punto della terra con due numeri reali, la longitudine t e la latitudine u.

9. Quadriche parametriche: Cilindro. Un cilindro e' una qualunque conica che si possa porre, mediante rotazionie translazioni, nella forma

1 = x2 a2 y2/b2) (l'equazione e' nelle variabili x,y,z, ma la variabile z manca)Vogliamo disegnare la superficie 1 = x2 a2 y2/b2) nello spazio xyz. Riutilizziamo la soluzione di 1 =x2 a2 y2/b2) nel piano, aggiungendo un parametro u per descrivere z: x = a*cos(t), y = b*sin(t), z = u (t[0,2], uR) Le coordinate (x,y,z) di un punto del cilindro sono espresse in funzione dei parametri t,u. Se t e' fisso, ilparametro u descrive una retta verticale, se u e' fisso il parametro t descrive una circonferenza orizzontale. Rette ecirconferenze insieme descrivono una griglia di coordinate sul cilindro. Il comando ParametricPlot3D permette didisegnare curve espresse in forma parametrica. Gli argomenti di ParametricPlot3D[...] sono la lista delle 3equazioni per x,y,z, e i due domini di t e di u.

In[266]:= a 2; b 3;ParametricPlot3DaCost, bSint, u, t, 0, 2 Pi, u, 2, 2

Out[267]=

9. Superfici parametriche: quadriche. Doppio Cono. Un doppio cono e' una qualunque conica che si possa porre,mediante rotazioni e translazioni, nella forma

z2 = x2 a2 y2/b2) Vogliamo disegnare la superficie z2 = x2 a2 y2/b2) nello spazio xyz. Ispirandoci alla soluzione per il cilindro1 = x2 a2 y2/b2) , scriviamo: x = u * a* cos(t), y = u * b * sin(t), z = u (t[0,2], uR) La superficie e' espressa in funzione dei parametri t,u. La sezione per z=u e' una ellisse di braccia a*u, b*u. Se t e'fisso, il parametro u descrive una retta obliqua per il vertice del cono, se u e' fisso il parametro t descrive una

Mathematica-Dispense-2011.nb 53

Page 54: Mathematica Dispense 2011

ellisse orizzontale (una circonferenza se a=b). Rette e ellissi insieme descrivono una griglia di coordinate sulcilindro.

In[268]:= a 1; b 1;ParametricPlot3Dua Cost, ub Sint, u, t, 0, 2 Pi, u, 2, 2

Out[269]=

Quadriche parametriche: Ellissoide e Sfera.

10. Sfera. Una sfera e' una e' una qualunque conica che si possa porre, mediante rotazioni e translazioni, nellaforma

R2 = x2 y2 z2 Disegnare la sfera R2 = x2 y2 z2 come superficie parametrica, usando la coordinata t per la longitudine e lacoordinata u per la latitudine. Studiando le coordinate usate per la superficie terrestre, arriviamo alla conclusioneche il parallelo u e' una circonferenza di raggio R*cos(u) e altezza rispetto all'equatore R*sin(u). Da questaosservazione otteniamo la seguente equazione parametrica: x = R*cos(u)*cos(t), y = R*cos(u)*sin(t), z = R*sin(u) (t[0,2], u[-/2,/2])

54 Mathematica-Dispense-2011.nb

Page 55: Mathematica Dispense 2011

In[270]:= R 1;ParametricPlot3DRCosuCost, RCosuSint, RSinu, t, 0, 2 , u, 2, 2

Out[271]=

11. Ellissoide. Un ellissoide di braccia ab,c, e' una e' una qualunque conica che si possa porre, mediante rotazioni etranslazioni, nella forma

1 = x2 a2 y2/b2) z2/c2) Otteniamo l'equazione parametrica dell'ellissoide da quella della sfera di raggio 1, modificando le unita' di misurasu x,y,z da R ad a,b,c. x = R*cos(u)*cos(t), y = R*cos(u)*sin(t), z = R*sin(u) (t[0,2], u[-/2,/2])

Mathematica-Dispense-2011.nb 55

Page 56: Mathematica Dispense 2011

In[272]:= a 1; b 2; c 3;ParametricPlot3DaCosuCost, bCosuSint, cSinu,

t, 0, 2 , u, 2, 2, PlotPoints 50, 50, ViewPoint 4, 9, 1

Out[273]=

Superifici parametriche: Iperboloide a una falda.

12. Iperboloide a una falda. Un iperboloide a una falda e' una e' una qualunque conica che si possa porre, medi-ante rotazioni e translazioni, nella forma

1 = x2 a2 y2/b2) z2/c2) Supponiamo a=b=c=1 per semplicita', e disegnamo la superficie 1 = x2 y2 z2. Una sezione z=u dell'iperboloide

e' una circonferenza (1u2) = x2 y2 di raggio 1 u2 . Questo suggerisce di scrivere le equazioni parametriche

di una circonferenza di raggio 1 u2 :

x = cos(t) 1 u2 , y = sin(t) 1 u2 , z = u (t[0,2])

Cambiando le unita ' di misura sui tre assi da 1 ad a, b, c,otteniamo la forma generale dell ' equazione parametrica dell ' iperboloide a una falda.

x acos t 1 u2 , y bsin t 1 u2 , z cu t0, 2 , uR

56 Mathematica-Dispense-2011.nb

Page 57: Mathematica Dispense 2011

In[274]:= a 1; b 1; c 1;

ParametricPlot3DaCost 1 u2 , bSint 1 u2 , cu, t, 0, 2 , u, 3, 3, PlotPoints 50, 50

Out[275]=

Superfici parametriche: iperboloidi a due falde. Unione (Show[.]) di due o piu' grafici.

Iperboloide a due falde (come superficie parametrica). Un iperboloide a una falda e' una e' una qualunque conicache si possa porre, mediante rotazioni e translazioni, nella forma

1 = x2 a2 y2/b2) z2/c2) La sezione lungo x= a*u (un piano parallelo a yz) è 1 = u2 y2/b2) z2/c2), ovvero y2b2 z2/c2) = u2-1,ovvero: y2b2 z2/c2) = R2

dove R = x2a2 1 . Riscriviamo ancora l'equazione come y2 R2 b2 z2/R2 c2) = 1. Questa e' l'equazionedi una ellisse di braccia Rb, Rc. La sezione lungo un piano orizzontale ha quindi equazione parametrica: x = a*u

y = R*b*cos(t) = u2 1 * b * cos(t)

z = R*c*sin(t) = u2 1 * b * sin(t) con t[0,2] e u1 oppure u-1. Disegniamo separatamente i due casi, ottenendo le falde sinistra ip1 e destra ip2dell'iperbole, quindi uniamole (comando Show).

Mathematica-Dispense-2011.nb 57

Page 58: Mathematica Dispense 2011

In[276]:= a 3; b 2; c 1;

ip1 ParametricPlot3D

au, bCost u2 1 , c Sint u2 1 ,

t, 0, 2 , u, 1, 2,PlotPoints 50, 50, BoxRatios 1, 1, 1,ImageSize 300, PlotRangeAll

Out[277]=

In[278]:= ip2 ParametricPlot3D

au, bCost u2 1 , c Sint u2 1 ,

t, 0, 2 , u, 2, 1,PlotPoints 50, 50, BoxRatios 1, 1, 1,ImageSize 300, PlotRangeAll

Out[278]=

58 Mathematica-Dispense-2011.nb

Page 59: Mathematica Dispense 2011

In[279]:= Showip1, ip2, PlotRange All

Out[279]=

Lezione 6: Definizione di funzioni La sintassi f[x_]:= ... delle funzioni.

Partiamo dal concetto di funzione di una variabile y=f(x) e vediamo come e' possibile definirla usando la sintassidel software Mathematica. Vogliamo creare una funzione f(x)=x2+a che calcola il quadrato di x, piu' a. Innanzi-tutto vediamo un esempio di cose da non fare.

1. Non definite la funzione f scrivendo semplicemente f =x2+a. Ecco perche'.

In[280]:= Clearf, x, af x2 a;x 1f

Out[282]= 1

Out[283]= 1 a

Con il primo comando abbiamo creato il simbolo f che vale x2+a. Al variare del valore x cambia il valore di fcome desiderato e quindi abbiamo apparentemente ottenuto il nostro obiettivo.

In[284]:= x 3;f

Out[285]= 9 a

Tuttavia, per usare f dobbiamo ricordarci che il valore di ingresso di f va inserito in x. Se per sbaglio usiamo xcome una costante (per es. x=100), ogni volta che valutiamo f per esempio in x=3 perdiamo il valore x=100assegnato a x.

In[286]:= x 100;

In[287]:= x 3;fx

Out[288]= 9 a

Out[289]= 3

Mathematica-Dispense-2011.nb 59

Page 60: Mathematica Dispense 2011

1-bis. Non definite f scrivendo f(x)=x2 a, se usate le parentesi tonde moltiplicate f per x. Non definite fscrivendo semplicemente f[x] = x2+a, in questo caso la funzione trasforma x in x2 a, ma ignora cosa fare diqualunque altro valore:

In[290]:= Clearf, x, afx x2 a;fx, f3, fy

Out[292]= a x2, f3, fy

Vogliamo invece definire la funzione f(x) per un valore generico di x, senza che x sia una variabile globale a cuipossiamo assegnare un valore. Questo si ottiene facendo seguire la variabile indipendente x dal simbolo _ nelladefinizione di funzione: f[x_].

1-ter. Non definite f scrivendo f[x_]=x2 a, usando l'assegnazione statica =. In questo caso, la definizione vieneeseguita per il valore corrente del parametro a, se ne esiste uno. Se in seguito il valore di a cambia la funzione noncambia.

In[293]:= Clearf, x, a;a 7;fx_ x2 a;? ff 100a 13f 100 il risultato dovrebbe essere 10010013, invece e' 1001007

Global`f

fx_ 7 x2

Out[297]= 10007

Out[298]= 13

Out[299]= 10007

2. La definizione corretta. Vogliamo invece definire la funzione f(x) per un valore generico di x, senza che x siauna variabile globale a cui possiamo assegnare un valore. Questo risultato si ottiene usando l'operatore :=(definizione o assegnazione dinamica) e una particolare sintassi per specificare la variabile indipendente dellafunzione. La variabile indipendente x va seguita dal simbolo _ nella definizione di funzione: scriviamo

f[x_]:= espressione in x

In[300]:= Clearf, x;fx_ : x2;f3 applicato g a una lista g viene applicata ad ogni elemento della lista f2, 2fx x e' una variabile globale, se assegno la x globale non assegno il parametro x di fx 100;f100

Out[302]= 9

Out[303]= 4, 4

Out[304]= x2

Out[306]= 10000

In[307]:=

La funzione cosi' creata si puo' utilizzare nella maniera desiderata. La variabile x e' usata come variabile indipen-dente nella definizione e non entra in conflitto il valore x=100 della variabile globale x. Si noti inoltre che invo-

60 Mathematica-Dispense-2011.nb

Page 61: Mathematica Dispense 2011

cando f[.] e' possibile sostituire x con una qualsiasi espressione. L'applicazione della funzione va a buon fine sel'operazione di elevamento al quadrato e' definita per quell'espressione (come nel caso di un numero o di una lista).

3. Funzioni di piu' parametri. La sintassi vista al punto 2 puo' essere utilizzata anche per funzioni di piuparametri. Scriviamo ad esempio una funzione di-piu' parametri. Ad esempio definiamo la funzionehx, 1 x. Usiamo quindi la funzione appena definita per farne il grafico di h(.,) per x compresi tra 0 e 5 edue valori di =0.1 e =0.9, rispettivamente.

In[308]:= hx_, t_ : 1 Exptx;? hNeeds"PlotLegends`"Plothx, 0.1, hx, 0.9, x, 0, 5, PlotStyle DirectiveRed, Dotted, DirectiveBlue, Dashed,

PlotLegend "t0.1", "t0.9", AxesLabel x, PlotLabel hx, t

Global`h

hx_, t_ : 1 Expt x

Out[311]=

1 2 3 4 5100

0.2

0.4

0.6

0.8

1.01 100 t

t0.9

t0.1

Esempi di creazione di comandi personalizzati: punto3D, vettore3D.

4. Creazione di comandi personalizzati. Il concetto di funzione in Mathematica assume un significato del tuttogenerale. Le funzioni possono coinvolgere non solo l'insieme dei numeri reali, complessi, ecc ma possono operaresu qualisiasi tipo di argomento; possono quindi essere usate per creare nuovi comandi. In genere e' buona regolacreare un nuovo comando per funzioni che verrano utilizzate frequentemente, in modo da poter scrivere i nostricomandi in modo piu' breve e quindi piu' leggibile. Lo scopo non e' soltanto una maggiore chiarezza: piu' una listadi comandi e' chiara, piu' e' facile scoprire gli errori che abbiamo fatto.

Esempio di comandi di grafica: punti e frecce.

5. Funzioni grafiche. Introduciamo ora alcuni comandi grafici per disegnare punti e frecce corredate di etichette;in seguito vedremo come abbreviarli usando funzioni. Disegnamo nel piano un punto P di coordinate {x,y}={-1,1}e un freccia che va dal punto P al punto Q={1,2}.

Mathematica-Dispense-2011.nb 61

Page 62: Mathematica Dispense 2011

In[312]:= p 1, 1;q 1, 2;GraphicsPointpGraphicsArrowp, q

Out[314]=

Out[315]=

6. Per sovrappore piu' disegni e piu' comandi basta creare una lista di tali disegni e comandi da usare come argo-mento di Graphics. I comandi vengono eseguiti e i disegni vengono fatti nell'ordine con cui compaiono nella lista.

In[316]:= GraphicsRed, Arrowp, q, Blue, Pointp

Out[316]=

7. Con il comando Text[etichetta, {x,y} ] e Style e' possibile creare etichette di testo formattato nelle coordinate{x,y}.

62 Mathematica-Dispense-2011.nb

Page 63: Mathematica Dispense 2011

In[317]:= GraphicsText"A", 0, 0Style"ciao", Italic, 32GraphicsTextStyle"ciao", Bold, 24, 0, 0

Out[317]= A

Out[318]= ciao

Out[319]= ciao

8. Vediamo infine un esempio che coinvolge un gran numero di oggetti grafici e comandi. "Disk" disegna uncerchio dati centro e raggio, "Dashed" rende una linea tratteggiata, "Thick" la rende spessa. "Circle" disegna unacirconferenza (cioe' il bordo di un cerchio) dati centro e raggio.

Mathematica-Dispense-2011.nb 63

Page 64: Mathematica Dispense 2011

In[320]:= GraphicsGreen, Rectangle0, 1, 2, 1, Blue, Disk0, 0, 1, Red, Disk0, 0, 0.5,Dashed, Thick, Black, Circle1, 0, 1, TextStyle"Centro", White, Bold, 28, 1, 0

Out[320]= Centro

9. Lo stesso tipo di procedura si applica al caso a 3 dimensioni utilizzando il comando Graphics3D. "Arrow"disegna una freccia tra due punti p, q (dati attraverso le loro coordinate). PointSize[r] rende i punti di dimensioneuna percentuale r del disegno totale: r=0.01 gia' disegna punti grandi.

In[321]:= p 0, 0, 1q 1, 1, 1Graphics3D

Red, Arrowp, q, TextStyle"Q", 24, q 0.05, Blue, PointSize0.05, Pointp, TextStyle"P", 24, p 0.05Out[321]= 0, 0, 1

Out[322]= 1, 1, 1

Out[323]=

Q

P

Funzioni per disegnare punti e frecce.

10.Tutti gli esempi precedenti dimostrano come l'uso delle primitive grafiche per costruire oggetti piu' complessipossa portare a comandi complessi e lunghi da leggere e da controllare. Nell'arco di questo corso il disegno dipunti e vettori nello spazio sara' usato molto frequentemente. A questo proposito e' utile definire nuovi comandi persvolgere velocemente tali operazioni.

In[324]:= punto3Dp_, label_, colore_ :Graphics3DThickness0.01, PointSize0.01,colore, Pointp, TextStylelabel, Bold, 24, p 0.02;

vettore3Dp_, label_, colore_ :Graphics3DThickness0.01, PointSize0.01,colore, Arrow0, 0, 0, p, TextStylelabel, Bold, 24, p 0.02;

vettore3Dp1_, p2_, label_, colore_ : Graphics3DThickness0.01, PointSize0.01,colore, Arrowp1, p2, TextStylelabel, Bold, 24, p1 p2 2;

64 Mathematica-Dispense-2011.nb

Page 65: Mathematica Dispense 2011

In[327]:= Showpunto3Dp, "P", Red, vettore3Dq, "Q", Blue, vettore3Dp, q, "PQ", Green

Out[327]=

P

QPQ

Comandi composti (CompoundExpression, Module), variabili locali e cicli.

11. Funzioni con sequenze di comandi. E' possibile creare una funzione costituita da un sequenza di piu' comandiutilizzando CompoundExpression[ comando1; comando2; ... ]. Il valore restituito dal comando definito e'costituito dall'ultima espressione valutata. Creiamo ora il comando sommasqrt[a,b] che somma a e la radicequadrata di b solo se b>=0. In caso contrario restituisce il valore di a.

In[328]:=

sommasqrta_, b_ : CompoundExpression z Ifb 0, Sqrtb, 0;

a zIn[329]:= ? sommasqrt

Global`sommasqrt

sommasqrta_, b_ : CompoundExpressionz Ifb 0, b , 0; a z

In[330]:= sommasqrt1, 4sommasqrt1, 2

Out[330]= 3

Out[331]= 1

12. Variabili locali e variabili globali. Con il precedente comando abbiamo introdotto una variabile di appoggio z.Se utilizziamo il comando appena definito in nu notebook dove z e' gia definito il suo valore viene sovrascritto epuo' generare errori. Controlliamo infatti che valore a z dopo l'uso di sommasqrt

In[332]:= sommasqrt1, 5? z

Out[332]= 1 5

Mathematica-Dispense-2011.nb 65

Page 66: Mathematica Dispense 2011

Global`z

z 5

La variabile z "sopravvive" al di fuori del comando perche' si tratta di una variabile globale. Nella maggiorparte deicasi le variabili di appoggio definite all'interno di una funzione devono assumere valenza locale per evitare dientrare in conflitto con altre variabili globali. Per ottenere questo risultato occorre usare il costrutto Module.

In[334]:= ? Module

Modulex, y, …, expr specifies that occurrences of the symbols x, y, … in expr should be treated as local.

Modulex x0, …, expr defines initial values for x, ….  

Ridefiniamo il comando sommasqrtlocal[a,b] usando Module in modo che z sia trattata come variabile locale.

In[335]:= Clearz;sommasqrtlocala_, b_ : Module z,

z Ifb 0, Sqrtb, 0;a z

In[337]:= sommasqrtlocal1, 4? z

Out[337]= 3

Global`z

13. Abbiamo gia' visto l'operatore condizionale If . Altri costrutti tipici della programmazione sono i comandi percostruire algoritmi iterativi: Do, While, For

In[339]:= ? Do? While? For

Doexpr, imax evaluates expr imax times.Doexpr, i, imax evaluates expr with the variable i successively taking on the values 1 through imax in steps of 1.Doexpr, i, imin, imax starts with i imin.Doexpr, i, imin, imax, di uses steps di.Doexpr, i, i1, i2, … uses the successive values i1, i2, ….

Doexpr, i, imin, imax, j, jmin, jmax, … evaluates expr looping over different values of j, etc. for each i.  

Whiletest, body evaluates test, then body, repetitively, until test first fails to give True.  

Forstart, test, incr, body executes start, then repeatedly evaluates body and incr until test fails to give True.  

In[342]:= DoPrinti, i, 1, 10Fori 1, i 10, i i 1, Printii 1; Whilei 10, Printi; i i 1;

66 Mathematica-Dispense-2011.nb

Page 67: Mathematica Dispense 2011

1

2

3

4

5

6

7

8

9

10

1

2

3

4

5

6

7

8

9

10

1

2

3

4

5

6

7

8

9

10

Compito a casa sulle funzioni

Lezione 7: Complementi di grafica 3D. Questa sottosezione può venir omessa in prima lettura.

Nell'ultima sezione di questo capitolo prendiamo spunto da una collezione di modelli di superfici, in legno dipinto,che si puo' ammirare alla Biblioteca Peano (Dipartimento di Matematica dell'Universita' di Torino, via CarloAlberto 10, Torino). Di questi modelli è disponibile in rete una versione virtuale, gratuita, dovuta al dott. Todesco(con consulenza scientifica del Prof. Ferrarese), all'indirizzo:

"I Modelli del Dipartimento di Matematica" http://www.dm.unito.it/modelli/

Mathematica-Dispense-2011.nb 67

Page 68: Mathematica Dispense 2011

Molte superfici notevoli si possono ammirare curiosando per il Web. Citiamo come esempio:"Steiner Surfaces" http://www.ipfw.edu/math/Coffman/steinersur-

face.html

Maggiori dettagli si trovano nel libro della Biblioteca Peano: La collezione dei modelli di superfici del Dipartimento di Matematica dell'Università di Torino. A. Cavagnero, G. Ferrarese Dipartimento di Matematica, Università di Torino, Conferenze e Seminari 1997-1998,Ass. Subalpina Mathesis, 219-234

Superfici rigate.

Superfici rigate: il paraboloide a sella. Come disegnare linee parametriche nello spazio.

Mostriamo come il paraboloide a sella z = x2a2 y2/b2)possa essere ottenuto come una unione di una famiglia di rette. Definiamo due famiglie R1 e R2: l'unione di R1 e' ilparaboloide a sella, e cosi' l'unione di R2. Descriviamo le rette in forma parametrica. Una generica retta dellospazio xyz in forma parametrica e' una lista di 3 equazioni: x=f(t), y=g(t), z=h(t), dove f,g,h sono funzioni lineari int. Per esempio, la famiglia R1 di rette e' definita da: x=a*(t + p1) y=b*t z=(2*t + p1)*p1la famiglia R2 di rette e' definita da: x=a*(t + p1) y=-b*t z=(2*t + p1)*p1t e' il parametro di una singola retta (la coordinata di un punto sulla retta), mentre p1 e' il parametro della famigliadi rette R1, e p2 e' il parametro della famiglia di rette R2. Al variare di p1 otteniamo le diverse rette di R1, e alvariare di p2 le diverse rette di R2. Se sostituiamo l'equazione di una retta di R1 nell'equazione z =x2a2 y2/b2) otteniamo un'identita'. Ne segue che ogni retta di R1 e' inclusa nel paraboloide. Lo stesso vale perR2. Disegnamo ora insieme paraboloide a sella P, e le famiglie di rette R1 e R2. Il comando per disegnare unaunione di figure e' Show[P,R1,R2].

68 Mathematica-Dispense-2011.nb

Page 69: Mathematica Dispense 2011

In[345]:= a 2; b 3; P Plot3D x2 a2 y2 b2, x, 20, 20, y, 20, 20, PlotRange 20, 20,ClippingStyle None, AspectRatio 1, PlotPoints 100, 100, PlotStyle Opacity0.2

Out[345]=

In[346]:= Nrette 30;

In[347]:= R1 TableParametricPlot3Dat p1, b t, 2 t p1p1, t, 1, 1, PlotStyle Red, p1, 1, 1, 2 Nrette; R1 e' una lista di grafici,uno per retta

In[348]:= R2 TableParametricPlot3Dat p2, b t, 2 t p2p2, t, 1, 1, PlotStyle Blue,p2, 1, 1, 2 Nrette; R2 e' una lista di grafici, uno per retta

In[349]:= ShowR1, R2, PlotRangeAll

Out[349]=

4

2

0

2

4

2

0

21

0

1

2

3

Superfici rigate: l'iperboloide a una falda. Come disegnare linee parametriche nello spazio.

Ridisegnamo l'iperboloide ad una falda insieme a delle famiglie di rette in esso contenute. Spieghiamo comescomporre l'iperboloide ad una falda come unione di rette.

Definiamo un disegno "ip" contenente un iperboloide ad una falda di equazione x2a2 y2/b2) - z2c2 = 1

Mathematica-Dispense-2011.nb 69

Page 70: Mathematica Dispense 2011

per a=2, b=3, c=1, z[-3,3]. Riutilizziamo la definizione parametrica vista nelle sezioni precedenti:

x = a sin(t) 1 u c2

y = b cos(t) 1 u c2

z = u (t[0,2], u[-3,3]).

In[350]:= a 2; b 3; c 2;

ip ParametricPlot3Da Sint 1 uc2 , b Cost 1 uc2 , u, t, 0, 2 , u, 3, 3,BoxRatios 1, 1, 1,PlotRange 5, 5, 5, 5, 5, 5,PlotStyle Opacity0.2

Out[351]=

Ora risolviamo le equazioni in x, y, z di due famiglie di rette che coprono la superficie. Prendiamo tali equazionidai corsi di teoria:

(x/a-z/c) - lambda (1-y/b) = 0(1+y/b) - lambda (x/a+z/c) = 0

e (y/b-z/c) - lambda (1-x/a) = 0(1+x/a) - lambda (y/b+z/c) = 0

Utilizziamo tali soluzioni per scrivere una funzione retta[lambda_]:= ...nell'argomento lambda, che disegni in rosso e blu le due rette associate al parametro lambda.

Consigliamo di usare l'opzione DisplayFunction->Identity per impedire che la funzione faccia un disegno ognivolta che viene chiamata (questo ci servirà più avanti).

70 Mathematica-Dispense-2011.nb

Page 71: Mathematica Dispense 2011

In[352]:= Clearretta;red RGBColor1, 0, 0;blue RGBColor0, 0, 1;rettal_ :

ParametricPlot3D

4 l

1 l2

1 l2 z

1 l2,

3 1 l21 l2

3 l z

1 l2, z,

2 1 l2

1 l2

2 l z

1 l2,

6 l

1 l2

3 1 l2 z

2 1 l2, z,

z, 3, 3, PlotRange 5, 5, 5, 5, 5, 5,PlotStyle red, blue;

Creiamo, senza renderla visibile, una lista L1 di coppie di tali rette.

In[356]:= Nrette 70;L1 TablerettaTanalpha,

alpha,Pi2 Pi 2 Nrette, Pi2 Pi 2 Nrette,PiNrette;

Disegnamo inifine l'unione di tale lista L1 di rette con l'iperboide (comando Show[...]). Vediamo ciascuna delledue famiglie di rette copre l'iperboloide. Insieme, le due famiglie formano un intreccio di rette che disegna l'iper-boloide ip.

In[358]:= ShowL1

Out[358]=

5

0

5

5

0

5

5

0

5

Superfici di rotazione

12. Superfici di rotazione. Una superficie di rotazione e' ottenuta facendo ruotare intorno a un asse una linea delpiano oppure dello spazio. Il comando in Mathematica e' RevolutionPlot3D. Il primo argomento di Revolution-Plot3D e' la linea da far ruotare, espressa come funzione f(x) nel piano, oppure come linea parametrica {x(t),y(t)}nel piano, oppure come linea parametrica {x(t),y(t),z(t)} nello spazio. La rotazione avviene intorno all'asse z.Come esempio, disegnamo il cono, il cilindro, la sfera come superfici di rotazione.

Mathematica-Dispense-2011.nb 71

Page 72: Mathematica Dispense 2011

Per vedere come avviene la rotazione, nei disegni scegliamo una opacita' bassa (opzione nel PlotStyle->Opacity[r],con r tra 0 e 1), che ci consente di vedere in trasparenza anche le parti della figura poste sul retro. Scegliamo unaproporzione a:b:c per le unita' di misura dei 3 assi con BoxRatios->{a,b,c}.

Il cono. Disegnamo la diagonale principale z=x del piano xz

In[359]:= Plotx, x, 1, 1, AxesLabel x, z

Out[359]=

1.0 0.5 0.5 1.0100

1.0

0.5

0.5

1.0

z

In[360]:= ? BoxRatios

BoxRatios is an option for Graphics3D which gives

the ratios of side lengths for the bounding box of the three-dimensional picture.  

In[361]:= RevolutionPlot3Dx, x, 1, 1, PlotStyle Opacity0.2, BoxRatios 1, 1, 1, AxesLabel x, y, z BoxRatio 1,1,1 forza le 3 dimensioni della scatola ad essere

uguali: la scatola diventa un cubo. Non sempre le unita' di misura sui tre assi sono le stesse, ma in questo caso si'. notiamo l'asse x viene traslato nel piano yz per comodita' di disegno, e cosi' per y e z

Out[361]=

Il cilindro. Disegnamo, in forma parametrica, una retta verticale del piano xz che non passa per l'origine.

72 Mathematica-Dispense-2011.nb

Page 73: Mathematica Dispense 2011

In[362]:= ParametricPlot1, t, t, 1, 1

Out[362]=0.5 1.0 1.5 2.0

1.0

0.5

0.5

1.0

In[363]:= RevolutionPlot3D1, t, t, 1, 1, PlotStyle Opacity0.2, AxesLabel x, y, z

Out[363]=

La sfera. Disegnamo, in forma parametrica, una semicirconferenza verticale, poi la facciamo ruotare di 2Pi nellospazio xyz.

Mathematica-Dispense-2011.nb 73

Page 74: Mathematica Dispense 2011

In[364]:= ParametricPlotCost, Sint, t, Pi2, Pi2

Out[364]=0.2 0.4 0.6 0.8 1.0

1.0

0.5

0.5

1.0

In[365]:= RevolutionPlot3DCost, Sint, t, Pi2, Pi2, PlotStyle Opacity0.2

Out[365]=

Rotazioni di linee nello spazio: il cilindro ottenuto facendo ruotare una elicoide. Una elicoide e' una linea aforma di scala a chiocciola, o della filettatura di una vite. Si ottiene come somma di un moto circolare uniformeorizzontale e un moto rettilineo uniforme verticale. Usiamo "Thickness[r]" per decidere lo spessore dell'elicoide, e

74 Mathematica-Dispense-2011.nb

Page 75: Mathematica Dispense 2011

"Directive" per combinare la direttiva "spessore" con la direttiva "colora di rosso". r varia da 0 a 1, con 0.008 siottengono gia' linee spesse.

In[366]:= ? Thickness

Thicknessr is a graphics directive which specifies that lines which follow are to be

drawn with thickness r. The thickness r is given as a fraction of the horizontal plot range.  

In[367]:= ? Directive

Directiveg1, g2, … represents a single graphics directive composed of the directives g1, g2, …. 

In[368]:= ParametricPlot3DCost, Sint, t 4 Pi, t, 0, 4 Pi,BoxRatios 1, 1, 1, PlotStyle DirectiveThickness0.008, Red

Out[368]=

1.0

0.5

0.0

0.5

1.0

1.0

0.5

0.0

0.5

1.0

0.0

0.5

1.0

Definiamo una funzione che disegna una elicoide con il punto di partenza ruotato di un angolo a.

In[369]:= Elicoidea_ : ParametricPlot3DCost a, Sint a, t a, t, 0, 6 Pi, BoxRatios 1, 1, 1,PlotStyle DirectiveThickness0.008, Red, PlotRange 1, 1, 1, 1, 0, 8 Pi

Animiamo l'elicoide facendo variare l'angolo di rotazione a.

In[370]:= AnimateElicoidea, a, 0, 2 Pi

Out[370]=

a

Elicoide5.32107

Disegnamo l'unione di tutte le rotazioni dell'elicoide al variare dell'angolo di rotazione a da 0 a 2Pi.

Mathematica-Dispense-2011.nb 75

Page 76: Mathematica Dispense 2011

In[371]:= RevolutionPlot3DCost, Sint, t, t, 0, Pi, BoxRatios 1, 1, 1, PlotStyle Opacity0.2

Out[371]=

Grafici altimetrici e di densita'.

13. Grafici altimetrici e di densità. Riprendiamo l'equazione del Paraboloide ellittico: z = x24 y2/9) La disegneremo, usando ContourPlot e DensityPlot, come un grafico "altimetrico". Nei grafici "altimetrici", l'altezza della superfice, cioè il valore della z, viene rappresentata con una sfumatura dicolore. In ContourPlot, punti della stessa altezza vengono congiunti da linee; in DensityPlot, viene usata solo lasfumatura di colore.

76 Mathematica-Dispense-2011.nb

Page 77: Mathematica Dispense 2011

In[372]:= ContourPlotx2 4 y2 9, x, 10, 10, y, 10, 10DensityPlotx2 4 y2 9, x, 10, 10, y, 10, 10

Out[372]=

Out[373]=

Per maggiori esempi vi invitiamo a leggere l' Help di ContourPlot e di DensityPlot. Soprattutto usando DensityPlot,disegnando semplici funzioni e' possibile creare immagini di grande bellezza. Per scegliere i colori, cercatel'opzione ColorFunction-> ... .

In[374]:= ? ContourPlot? DensityPlot? ColorFunction

Mathematica-Dispense-2011.nb 77

Page 78: Mathematica Dispense 2011

ContourPlot f , x, xmin, xmax, y, ymin, ymax generates a contour plot of f as a function of x and y.ContourPlot f g, x, xmin, xmax, y, ymin, ymax plots contour lines for which f g.

ContourPlot f1 g1, f2 g2, …, x, xmin, xmax, y, ymin, ymax plots several contour lines.  

DensityPlot f , x, xmin, xmax, y, ymin, ymax makes a density plot of f as a function of x and y.  

ColorFunction is an option for graphics functions which specifies a function to apply to determine colors of elements.  

14. I comandi visti di grafica tridimensionale hanno analoghi per il disegno di matrici di punti: ListPlot3D,ListContourPlot, ListDensityPlot. Omettiamo i (facili) esempi.

15. Input e Output: salvataggio di grafici. Assegnare il grafico precedente a una variabile g, e salvarlo su un fileX.GIF (in formato grafico GIF), usando il comando: Display["X.GIF",g]

In[377]:= g ContourPlotx2 4 y29, x, 10, 10, y, 10, 10;

In[378]:= Export"X.GIF", gOut[378]= X.GIF

Superfici in forma implicita.

In questa sezione dprendiamo spunto dai modelli di superfici del dipartimento di matematica di Torino : "I Modelli del Dipartimento di Matematica" http : // www.dm.unito.it/modelli/

16. Superfici in forma implicita f(x,y,z)=0. E' anche possibile disegnare una funzioni espresse in forma implicita. Icomandi sono: ContourPlot3D (per disegnare superfici nello spazio), RegionPlot (per disegnare aree nel piano) eRegionPlot3D (per disegnare volumi nello spazio).Ad esempio possiamo disegnare la superficie di Clesbsch data in forma implicita usando ContourPlot3D. Il primoargomento di CountourPlot3D deve essere una equazione E[x,y,z] = = 0 che decida quali punti appartengono allasuperficie e quali no.

In[379]:= Clebschx_, y_, z_ : 16 x^3 16 y^3 31 z^ 3 24 x^2z 48 x^2y48 xy^2 24 y^2z 54Sqrt3z^2 72z; Equazione della superficie di Clebsch

78 Mathematica-Dispense-2011.nb

Page 79: Mathematica Dispense 2011

In[380]:= ContourPlot3DClebschx, y, z 0, x, 2.5, 2.5, y, 2.5, 2.5, z, 2.5, 2.5

Out[380]=

Possiamo disegnare il volume incluso nella superficie di Cayley data in forma implicita. La superficie di Cayley e'una cubica con quattro punti doppi conici (=con uno "spigolo" a forma di doppio cono). E' difficile rendere i punticonici: senza una griglia di coordinate molto fitta, tendiamo a non vederli, e la superficie ci appare composta diparti separate, mentre non e' cosi'.Usiamo RegionPlot3D. Il primo argomento di RegionPlot3D deve essere una disequazione (E[x, y, z] <= 0 oppureE[x, y, z] >= 0 oppure E[x, y, z] < 0 ...) che decida quali punti appartengono al volume da disegnare e quali no.

In[381]:= Cayleyx_, y_, z_ : 9 x^3 4 z^3 27 xy^2 3 x^2 y^2 z 36 x ^2 y^2 16 z^2

Mathematica-Dispense-2011.nb 79

Page 80: Mathematica Dispense 2011

In[382]:= RegionPlot3DCayleyx, y, z 0, x, 5, 5, y, 5, 5, z, 5, 5

Out[382]=

Superficie di Kummer. Concludiamo con un esempio di superficie difficile da disegnare con precisione: superficiedi Kummer. Si tratta di una Quartica (una superficie della forma P(x,y,z)=0, con P polinomio in x,y,z di grado 4).Ha ben 16 punti doppi conici (=a forma di doppio cono), che pero', se la griglia di coordinate non e' abbastanzafitta, ci appariranno come punti di sconnessione. La sua equazione e':x^4 + y^4 + z^4 - 4x^2 - 4y^2*z^2 - 4y^2 - 4z^2*x^2 - 4z^2 - 4x^2*y^2 + 12*Sqrt[3]*x*y*z + 1

In[383]:= Kummerx_, y_, z_ : x^4 y^ 4 z^4 4 x^ 2

4 y^2z^2 4 y^2 4 z^2x^2 4 z^2 4 x^2y^2 12Sqrt3xyz 1 ;

Disegnamo la superficie di Cayley in un'area scelta. Di nuovo, e' difficile rendere i punti conici: il comandoContourPlot3D tende a non vederli.

80 Mathematica-Dispense-2011.nb

Page 81: Mathematica Dispense 2011

In[384]:= ContourPlot3DKummerx, y, z 0, x, 4, 4, y, 4, 4, z, 4, 4

Out[384]=

Grafici interattivi e animazioni

1. Il comando Manipulate[espressione, {parametro, a, b}] permette di animare una famiglia di espressioni diMathematica dipendenti da un parametro, attraverso comandi simili a quelli di un videoregistratore. Se l'espres-sione dipende da un parametro x, dobbiamo dichiarare un dominio per x, per esempio {x, -2, 2}.

In[385]:= Manipulate"x", Nx, 10, "x^2", Nx^2, 10,x, 2, 2

Out[385]=

x

x, 2.000000000, x^2, 4.000000000

2. Combinando Manipulate e comandi grafici (Plot, ListPlot, ecc) e' possibile animare dei grafici con una sempliceinterfaccia che ne modifica i parametri di interesse. Nell'esempio sotto il parametro e' f, mentre la funzione disegnata Sin[...] e' nella variabile x. Il dominio di x vienedichiarato nel comando Plot[.] che disegna la funzione, mentre il parametro f viene dichiarato entro il comandoManipulate.

Mathematica-Dispense-2011.nb 81

Page 82: Mathematica Dispense 2011

In[386]:= ManipulatePlotSin2 Pi f t, t, 0, 2, AxesLabel x, Sin2 Pi f t,PlotRange 1, 1, ImageSize 500, f, 10, 40

Out[386]=

f

0.5 1.0 1.5 2.0x

1.0

0.5

0.5

1.00

In[387]:= ManipulatePlotx Sin1 x, x, 0, r, PlotPoints 50, r, .1, 2

Out[387]=

r

0.02 0.04 0.06 0.08 0.10

0.05

0.05

3. Al posto di una animazione possiamo creare un menu' contenente, per ogni parametro, una lista di possibilivalori: e' un modo alternativo, piu' statico ma anche piu' accurato, di rappresentare diversi valori di una espressioneo di un disegno. Per esempio, se scriviamo {{f, 20, "frequenza"}, {10, 20, 40, 80, 100, 1000}}, intendiamo che il Menu' si chiama"frequenza", il parametro f, il valore di default di f e' 20, mentre gli altri valori, quelli accessibili attraverso ilMenu', sono 10, 20, 40, 80, 100, 1000.

82 Mathematica-Dispense-2011.nb

Page 83: Mathematica Dispense 2011

In[388]:= ManipulatePlotSin2 Pi f t, t, 0, 2, AxesLabel x, Sin2 Pi f t,f, 20, "frequenza", 10, 20, 40, 80, 100, 1000

Out[388]=

frequenza 20

0.5 1.0 1.5 2.0x

1.0

0.5

0.5

1.0

0

Nel prossimo esempio vediamo un Menu' con due pulsanti, il primo corrispondente a un parametro mr (massimodella ricorsione usata nel disegno del grafico) e il secondo corrispondente alla scelta di indicare oppure no i punticampione del grafico.

Mathematica-Dispense-2011.nb 83

Page 84: Mathematica Dispense 2011

In[389]:= ManipulatePlotSin4 x, x, 2 Pi, 2 Pi,PlotPoints pp, MaxRecursion mr, Mesh m, pp, 16, "PlotPoints", 2, 4, 16, 32, 64, 128, mr, 1, "MaxRecursion", 0, 1, 2, 4, 8,

m, None, "Mesh", Full, All, None NOTA. "All" consente di vedere tutti i punti campione usati nel disegno,compresi quelli aggiunti da Mathematica. "Full", invece,salta i punti campione aggiunti da Mathematica. "None" li salta tutti.

Out[389]=

PlotPoints 16

MaxRecursion 0 1 2 4 8

Mesh Full All None

6 4 2 2 4 6

1.0

0.5

0.5

1.0

Ora un esempio in cui il parametro corrisponde alla posizione di un punto nel piano, e viene modificato conun'interfaccia bidimensionale, simile a quella di un videogioco.

84 Mathematica-Dispense-2011.nb

Page 85: Mathematica Dispense 2011

In[390]:= ManipulatePlotSinx x, x, 20, 20, AxesOrigin orig, PlotRange 1,orig, 0, 0, "Origine degl'assi" , 20, 1, 20, 1

Out[390]=

Origine degl'assi

20 10 10 20

1.0

0.5

0.5

1.0

Nell'ultimo sempio, una interfaccia che usa contemporaneamente tutti i metodi gia' visti: animazioni e Menu'.

Mathematica-Dispense-2011.nb 85

Page 86: Mathematica Dispense 2011

In[391]:= ManipulatePlota c x V1^2 V2, x, 10, 10, AxesOrigin 0, 0,PlotRange 10, 10, V, 0, 0, "Vertice" , 5, 5, 5, 5,

c, 1, "Concavita'", 1, 1, a, 0.1, 5

Out[391]=

Vertice

Concavita' 1 1

a

10 5 5 10

10

5

5

10

2. Animazioni. Il comando Animate permette di costruire delle semplici animazioni grafiche. La sintassi e' unasemplificazione di quella di Manipulate.

Come esempio, scrivere una funzione iper[k] che prenda un numero reale k, e restituisca il disegno dell'iperboleequilatera y=k/x. Per poter fornire come risultato un disegno, l'equazione di definizione di iper[k_] dovrà quindiessere della forma iper[k_] := Plot[...].

In[392]:=

In[393]:= iperk_ : Plotk x, x, 5, 5,PlotStyle Red,Background Gray,

PlotRange 5, 5,ImageSize 500,

PlotLabel "k" ToStringk;

86 Mathematica-Dispense-2011.nb

Page 87: Mathematica Dispense 2011

In[394]:= iper1

Out[394]=

4 2 2 4

4

2

2

4

k1

3.Usare il comando Animate per animare il disegno di iper[k] per valori di k da -2 a 2, a passi di 0.2In[395]:= Animateiperk, k, 2, 2, 0.2

Out[395]=

k

iper1.8

5. Animazione: un'onda. Scrivere una funzione Onda[t_], che prenda un valore t di una variabile "tempo", erestituisca il disegno di un'onda concentrica che viaggi con velocità costante. L'equazione di tale onda, scritta infunzione di t, è:

z = sin( x2 y2 t 2 10)

Ricordatevi tutti gli accorgimenti già visti per la grafica 3D! In particolare, il PlotRange delle diverse immaginideve essere lo stesso, altrimenti il sistema di riferimento cambia nel corso della animazione, creando un fastidiosoeffetto caotico.

In[396]:= Ondat_ :Plot3DSin Sqrtx2 y2 t 2 10, x, 10, 10, y, 10, 10, Mesh False,

PlotPoints 40, PlotRange 10, 10, ImageSize 300, ClippingStyle None;

6. Generare la tabella T dei valori di Onda[t], per t=0,1,2, ...,10. Animare (con ShowAnimation) la famiglia T dionde così ottenuta.

In[397]:= AnimateOndat, t, 0, 10

Out[397]=

t

Onda9.0625

Esercitazione 2: Fitting e Quadriche

Mathematica-Dispense-2011.nb 87

Page 88: Mathematica Dispense 2011

Lezione 8: Rette e Piani nello spazio. Prima di iniziare, eseguite le seguenti definizioni. Si tratta di funzioni punto3D, vettore3D che disegnano punti evettori, dato un punto o un vettore, e una etichetta e un colore. Attenzione: questi comandi richiedono una etichettae un colore per ogni punto o vettore, altrimenti non funzionano: non si puo' scrivere soltanto punto3D[{0,0,0}],bisogna scrivere punto3D[{0,0,0},Red,"Origine"].

In[398]:= offset 0.05; si dice offset la distanza tra una etichetta e l'oggetto a cui l'etichetta fa riferimento punto3DP_, label_, colore_ :Graphics3DThickness0.01, PointSize0.01,

colore, PointP, TextStylelabel, Bold, 24, P offset; Vettore V vettore3DV_, label_, colore_ :Graphics3DThickness0.01, PointSize0.01,

colore, Arrow0, 0, 0, V, TextStylelabel, Bold, 24, V offset; Vettore da P a Q vettore3DP_, Q_, label_, colore_ : Graphics3DThickness0.01, PointSize0.01,

colore, ArrowP, Q, TextStylelabel, Bold, 24, P Q 2 offset;

Punti e vettori non sono la stessa cosa: leggete attentamente quanto segue.

Punti e vettori nello spazio tridimensionale si rappresentano allo stesso modo, come terne di numeri reali, ma vichiediamo ugualmente di usare notazioni distinte per i punti e per i vettori, perché fa molta differenza inserire inuna formula le coordinate di un punto oppure quelle di un vettore.I vettori si possono sommare o moltiplicare per scalare. Non esistono invece somme o prodotto per scalare di puntinello spazio. Esistono invece due operazioni miste: 1. la somma di un punto e di un vettore (inteso come uno spostamento), che da' il punto risultato di questospostamento. Per esempio se P={1,2,3} e' un punto e V={1,1,1} e' un vettore, allora Q=P+V={2,3,4} e' un nuovopunto.2. La differenza di due punti Q e P, che da' il vettore (inteso come uno spostamento) Q-P che occorre applicarea P per raggiungere il punto Q. Per esempio, se se P={1,2,3} e Q={2,3,4}, allora V=Q-P={1,1,1} e' lo sposta-mento che occorre applicare a P per raggiungere il punto Q: in altre parole, Q=P+V. 3. Di solito non hanno senso, ripetiamo: la somma di due punti, di due rette, di una retta e di un punto oppure diun piano, il prodotto per scalare di punti, rette, piani, e cosi' via.

Notazioni per punti e vettori. Indichiamo i punti dello spazio con le lettere maiuscole da P ad U: P,Q,R,S,T,U.Indichiamo i vettori nello spazio con le lettere dell'alfabeto da V a Z: V,W,Z. Sia i punti che i vettori sono codifi-cati in Mathematica con terne {a,b,c} di numeri reali. Se P, Q sono punti, il vettore direzione da P a Q e' V=Q-P.Indichiamo con V.W il prodotto scalare e con Cross[V,W] il prodotto vettoriale.Indichiamo le rette con le lettere minuscole r,s, ... e i piani con le doppie lettere minuscole pp, qq, ... . Una rettaper due punti P, Q distinti si indica anche con PQ, e un piano per tre punti P,Q,R non allineati anche con PQR.

Nelle sezioni seguenti, quando un grafico e' composto di piu' parti, spesso terminiamo il comando con un ";" persaltare la stampa delle singole parti.

Punti, rette e vettori

Una retta r e' determinata dati due punti distinti P,Q, oppure dato un punto P e un vettore direzione V non nullo.Due vettori direzioni paralleli individuano la stessa retta. Due vettori V1, V2 sono ortogonali se V1.V2=0. Duevettori V1, V2 sono paralleli se Cross[V1,V2]={0,0,0} (se il loro prodotto vettoriale e' nullo).

Problema. Calcolare l'equazione parametrica di una retta r per due punti P,Q e disegnarla.

Soluzione. Supponiamo che P, Q siano distinti. Il vettore da P a Q e' (Q-P). La retta r=PQ di vettore direzioneV=(Q-P) si ottiene aggiungendo ad P tutti il possibili multipli di (Q-P), dunque ha la seguente equazione in t:

P+t*(Q-P)

Un esempio di retta PQ

88 Mathematica-Dispense-2011.nb

Page 89: Mathematica Dispense 2011

In[402]:= P 0, 0, 1Q 1, 1, 1Q Pretta PQ P Q P t

Out[402]= 0, 0, 1

Out[403]= 1, 1, 1

Out[404]= 1, 1, 0

Out[405]= t, t, 1

Controlliamo che P, Q siano distinti. Per decidere se due punti sono uguali, abbiamo la funzione booleana ==. Perdecidere se due punti sono diversi, neghiamo il risultato della funzione == (funzione Not[.]).

In[406]:= NotP QOut[406]= True

Disegnamo i punti P e Q e il vettore Q-P dall'origine.

In[407]:= G0 Showpunto3DP, "P", Red, punto3D Q, "Q", Blue, vettore3D Q P, "QP", Black, PlotRange All

Out[407]=

P

Q

QP

Disegnamola retta PQ.

Mathematica-Dispense-2011.nb 89

Page 90: Mathematica Dispense 2011

In[408]:= G1 ParametricPlot3DP tQ P, t, 2, 2

Out[408]=

2

1

0

1

22

1

0

1

2

0.0

0.5

1.0

1.5

2.0

Disegnamo complessivo. Notiamo che P, Q fanno parte di r.

In[409]:= ShowG0, G1, ImageSize 300

Out[409]=

P Q

QP

Problema. Calcolare l'equazione parametrica di una retta r per un punto P di vettore direzione V (nonnullo) e disegnarla.

Soluzione. Supponiamo che V non sia nullo. La retta r di vettore direzione V si ottiene aggiungendo ad P tutti ilpossibili multipli di V, dunque ha la seguente equazione in t:

P+t*V

Un esempio di retta r

In[410]:= P 0, 0, 1V 1, 1, 1

Out[410]= 0, 0, 1

Out[411]= 1, 1, 1

Controlliamo che V non sia nullo:

In[412]:= NotV 0, 0, 0Out[412]= True

Calcoliamo la retta da P di vettore direzione V:

90 Mathematica-Dispense-2011.nb

Page 91: Mathematica Dispense 2011

In[413]:= P V t

Out[413]= t, t, 1 t

Disegnamo il punto P e il vettore V. L'opzione PlotRangeAll puo' essere necessaria per evitare che P sia tagliatovia dal grafico.

In[414]:= G0 Showpunto3D P, "P", Red, vettore3D V, "V", Black, PlotRange All

Out[414]=

P

V

Disegnamola retta r.

Mathematica-Dispense-2011.nb 91

Page 92: Mathematica Dispense 2011

In[415]:= G1 ParametricPlot3DP tV, t, 2, 2

Out[415]=

2

1

0

1

2

2

1

0

1

2

1

0

1

2

3

Disegnamo complessivo. L'unione si indica con il comando Show[...]. Notiamo che V e' parallelo ad r.

In[416]:= ShowG0, G1

Out[416]=P V

Dato un punto P e un vettore direzione V non nullo, disegnare due rette r1, r2 ortogonali a V per P.Disegnare due rette s1, s2 ortogonali a V e tra di loro per P.

Soluzione. Due vettori V1, V2 ortogonali a V (ma non necessariamente tra di loro) si ottengono con il comandoNullSpace[{V}] (attenzione a scrivere {V} e non V: NullSpace richiede una lista di vettori (ovvero una matrice)

92 Mathematica-Dispense-2011.nb

Page 93: Mathematica Dispense 2011

NullSpace[{V}] (attenzione a scrivere {V} e non V: NullSpace richiede una lista di vettori (ovvero una matrice)in argomento). Il comando NullSpace[.] prende la base B={v_1,...,v_k} di un sottospazio vettoriale di Rn erestituisce una base B' = {v'_1,...,v'_(n-k)} dello spazio vettoriale ortogonale.Due vettori W1, W2 ortogonali V e ortogonali tra di loro si ottengono applicando a {V1,V2} il comando Orthogo-nalize[.].

Un esempio di punto P e vettore direzione V non nullo:

In[417]:= P 0, 0, 1V 1, 1, 1

Out[417]= 0, 0, 1

Out[418]= 1, 1, 1

Calcoliamo V1,V2,W1,W2:

In[419]:= ? NullSpace

NullSpacem gives a list of vectors that forms a basis for the null space of the matrix m.  

In[420]:= V1, V2 NullSpaceVW1, W2 OrthogonalizeV1, V2

Out[420]= 1, 0, 1, 1, 1, 0

Out[421]= 1

2, 0,

1

2,

1

6,

2

3,

1

6

Notiamo che V1, W1 sono paralleli. V1, V2 sono ortogonali a V ma non tra di loro. W1, W2 sono ortogonali a V etra di loro. Possiamo verificare tutto questo usando il prodotto vettoriale, il prodotto scalare, il test di eguaglianza==, e le operazioni logiche And, Not.

V1, W1 sono paralleli:

In[422]:= CrossV1, W1 0, 0, 0Out[422]= True

V1, V2 sono ortogonali a V ma non sono ortogonali tra di loro:

In[423]:= AndV1.V 0, V2.V 0, NotV1.V2 0Out[423]= True

W1, W2 sono ortogonali a V e tra di loro:

In[424]:= AndW1.V 0, W2.V 0, W1.W2 0Out[424]= True

Disegnamo il punto P, i vettori V, V1, V2, W1, W2. Notiamo che V1 e W1 sono paralleli. L'unione si indica con ilcomando Show[...].

Mathematica-Dispense-2011.nb 93

Page 94: Mathematica Dispense 2011

In[425]:= G0 Showpunto3D P, "P", Red, vettore3D V, "V", Orange, vettore3D V1, "V1", Magenta,vettore3D V2, "V2", Pink, vettore3D W1, "W1", Gray, vettore3D W2, "W2", Black, ImageSize 300

Out[425]=

PVV1

V2W1

W2

Disegnamo le rette r1,r2, s1, s2 rispettivamente per P e V1,V2,W1,W2. Poi disegnamo tutto. Notiamo che r1 e s2sono sovrapposte, perche' V1, W1 sono paralleli. Notiamo che ogni retta e' parallela al vettore che la genera.L'unione si indica con il comando Show[...].

In[426]:= r1 ParametricPlot3DP V1 t, t, 2, 2;r2 ParametricPlot3DP V2 t, t, 2, 2;s1 ParametricPlot3DP W1 t, t, 2, 2;s2 ParametricPlot3DP W2 t, t, 3, 3;ShowG0, r1, r2, s1, s2

Out[430]=P VV1V2W1

W2

Piani

Un piano e' determinato quando sono dati tre punti P, Q, R non allineati (tali che la matrice A={P,Q,R} abbiadeterminante non nullo), oppure due punti distinti P, Q e un vettore V non parallelo a Q-P, oppure, infine, un pianoP e due vettori V1, V2 non paralleli (tali che Cross[V1,V2] sia diverso dal vettore nullo {0,0,0}).

Dati tre punti P,Q,R non allineati, calcolare l'equazione parametrica del piano PQR.

94 Mathematica-Dispense-2011.nb

Page 95: Mathematica Dispense 2011

Soluzione. Per verificare che P,Q,R non sono allineati, calcoliamo il loro determinante e controlliamo che non sia0. Supponiamo che P,Q,R non siano allineati. la retta per P, Q ha vettore direzione (Q-P) ed equazione in t: P+t*(Q-P). Se aggiungiamo un terzo punto R, il vettore da P verso R e' R-P. Il piano che comprende sia la retta PQche il punto R si ottiene aggiungendo a P tutte le combinazioni lineari di (Q-P) e di (R-P), dunque ha equazione int, u:

P+ t*(Q-P) + u*(R-P)

Un esempio di PQR.

In[431]:= P 0, 0, 1Q 1, 1, 1R 1, 2, 3

Out[431]= 0, 0, 1

Out[432]= 1, 1, 1

Out[433]= 1, 2, 3

Controlliamo che P,Q,R non siano allineati controllando che i vettori Q-P, R-Q non siano paralleli. Questo equiv-ale a controllare che il prodotto vettoriale di Q-P e R-Q non sia nullo:

In[434]:= NotCrossQ P, R Q 0Out[434]= 2, 2, 1 0

Calcoliamo il vettore direzione V=(Q-P), la retta r=PQ, il piano PQR.

In[435]:= Q P retta PQ P Q P tR 0, 1, 0R P piano PQR P tQ P uR P

Out[435]= 1, 1, 0

Out[436]= t, t, 1

Out[437]= 0, 1, 0

Out[438]= 0, 1, 1

Out[439]= t, t u, 1 u

Disegnamo i punti P,Q,R, poi la retta PQ, il piano PQR, poi tutto insieme.

Mathematica-Dispense-2011.nb 95

Page 96: Mathematica Dispense 2011

In[440]:= G0 Showpunto3D P, "P", Red, punto3D Q, "Q", Blue, punto3D R, "R", Green;G1 ParametricPlot3DP Q P t, t, 2, 2;G2 ParametricPlot3DP tQ P uR P, t, 1, 1, u, 1, 1;ShowG0, G1, G2, ImageSize 300

Out[443]=

Dati due punti P, Q distinti e un vettore V non parallelo a PQ, calcolare l'equazione parametrica del pianopp per PQ parallelo a V.

Soluzione. Supponiamo che P,Q siano distinti e V non sia parallelo a Q-P. Il piano pp che contiene P ed e' paral-lelo a Q-P, V si ottiene aggiungendo a P tutte le combinazioni lineari di (Q-P) e di V, dunque ha equazione in t, u:

P+ t*(Q-P) + u*V

Un esempio di P, Q, V.

In[444]:= P 0, 0, 1Q 1, 1, 1V 1, 2, 3

Out[444]= 0, 0, 1

Out[445]= 1, 1, 1

Out[446]= 1, 2, 3

Controlliamo che P,Q siano distinti e che Q-P non sia parallelo a V. Usiamo il test di eguaglianza, il prodottovettoriale e le operazioni logiche And, Not:

In[447]:= AndNotP Q, NotCrossQ P, V 0, 0, 0Out[447]= True

Calcoliamo il vettore direzione V2=(Q-P) e il piano pp per P parallelo a V, V2:

In[448]:= Q P retta PQ P Q P t piano pp P tQ P uV

Out[448]= 1, 1, 0

Out[449]= t, t, 1

Out[450]= t u, t 2 u, 1 3 u

Disegnamo i punti P,Q, il vettore V, poi la retta PQ, il piano pp, poi tutto insieme. L'opzione PlotRange->All e'necessaria per evitare che restino tagliati via dei punti:

96 Mathematica-Dispense-2011.nb

Page 97: Mathematica Dispense 2011

In[451]:= G1 ParametricPlot3DP Q P t, t, 2, 2;G2 ParametricPlot3DP tQ P uV, t, 1, 1, u, 1, 1;Showpunto3D P, "P", Red, punto3D Q, "Q", Blue, vettore3D V, "V", Black, G1, G2, ImageSize 300

Out[453]=

Dato un punto e due vettori V1, V2 non paralleli tra di loro, calcolare l'equazione parametrica del pianopp per P parallelo a V1,V2.

Soluzione. Supponiamo che V1, V2 non siano paralleli. Il piano pp che contiene P ed e' parallelo a V1, V2 siottiene aggiungendo a P tutte le combinazioni lineari di V1 e di V2, dunque ha equazione in t, u:

P+ t*V1 + u*V2

Un esempio di P, V1,V2.

In[454]:= P 0, 0, 1V1 1, 1, 1V2 1, 2, 3

Out[454]= 0, 0, 1

Out[455]= 1, 1, 1

Out[456]= 1, 2, 3

Controlliamo che V1, V2 non siano paralleli. Usiamo il test di eguaglianza, il prodotto vettoriale e l'operazionelogica Not:

In[457]:= NotCrossV1, V2 0, 0, 0Out[457]= True

Calcoliamo il piano pp per P parallelo a V1, V2:

In[458]:= P tV1 uV2

Out[458]= t u, t 2 u, 1 t 3 u

Disegnamo il punto P, i vettori V1,V2, poi il piano pp, poi tutto insieme. L'opzione PlotRange->All e' necessariaper evitare che restino tagliati via dei punti:

Mathematica-Dispense-2011.nb 97

Page 98: Mathematica Dispense 2011

In[459]:= G0 Showpunto3D P, "P", Red, vettore3D V1, "V1", Magenta, vettore3D V, "V", Black, PlotRangeAll;G1 ParametricPlot3DP tV1 uV2, t, 1, 1, u, 1, 1;ShowG0, G1, ImageSize 300

Out[461]=

Due piani per la stessa retta.

Problema. Data una retta PQ, disegnare piu' piani per quella retta. La retta per P,Q ha equazione in t: P+ t*(Q-P).Se aggiungiamo dei punti R, S tali che Q-P, R-P, S-P non siano complanari. In tal caso, i piani che comprendonosia la retta PQ che il punto R, o sia la retta PQ che il punto S non sono identici. Essi hanno equazione in t, u:

P+ t*(Q-P) + u*(R-P) e P+ t*(Q-P) + u*(S-P)

Un esempio di P,Q,R,S.

In[462]:= P 0, 0, 1Q 1, 1, 1R 0, 1, 0S 3, 1, 3

Out[462]= 0, 0, 1

Out[463]= 1, 1, 1

Out[464]= 0, 1, 0

Out[465]= 3, 1, 3

Controlliamo che Q-P, R-P, S-P non siano complanari: il determinante della matrice M={Q-P,R-P,S-P} da essiformata non deve essere nullo:

In[466]:= NotDetQ P, R P, S P 0Out[466]= True

Calcoliamo la retta PQ e i piani PQR e PQS:

98 Mathematica-Dispense-2011.nb

Page 99: Mathematica Dispense 2011

In[467]:= retta PQ P Q P t piano PQR P tQ P uR P piano PQS P t Q P uS P

Out[467]= t, t, 1

Out[468]= t, t u, 1 u

Out[469]= t 3 u, t u, 1 4 u

Disegnamo P,Q,R,S, poi la retta PQ, poi il piano PQR, il piano PQS, poi tutto insieme.

In[470]:= G0 Showpunto3D P, "P", Red, punto3D Q, "Q", Blue,punto3D R, "R", Green, punto3D S, "S", Yellow, DisplayFunction Identity;

la retta PQ G1 ParametricPlot3DP Q P t, t, 2, 2, PlotStyle Thickness0.005; il piano PQR G2 ParametricPlot3DP tQ P uR P, t, 1, 1, u, 1, 1; il piano PQS G3 ParametricPlot3DP tQ P uS P , t, 1, 1, u, 1, 1;ShowG0, G1, G2, G3, ImageSize 300

Out[474]=

Due piani ortogonali per la stessa retta.

Problema. Data una retta PQ, disegnare due piani ortogonali tra di loro per quella retta. La retta per P,Q haequazione in t: P+ t*(Q-P). Soluzione. Due vettori ortogonali V1, V2 a (Q-P) si ottengono usando NullSpace[.].Applicando un procedimento di ortonormalizzazione otteniamo due vettori W1, W2 ortogonali a (Q-P) e tra diloro. Sia pp il piano per P parallelo a (Q-P), W1. Sia qq il piano per P parallelo a (Q-P) e a W2. Allora pp, qqsono ortogonali tra di loro e contengono la retta PQ.

P+ t*(Q-P) + u*W1 e P+ t*(Q-P) + u*W2

Un esempio di P,Q.

In[475]:= P 1, 2, 3Q 1, 1, 1

Out[475]= 1, 2, 3

Out[476]= 1, 1, 1

Mathematica-Dispense-2011.nb 99

Page 100: Mathematica Dispense 2011

Controlliamo che P, Q siano distinti:

In[477]:= NotP QOut[477]= True

Calcoliamo due vettori V1, V2 non paralleli e ortogonali a Q-P, e due vettori W1, W2 ortogonali a Q-P e tra diloro. Si riveda la sezione dedicata alle rette per una spiegazione del procedimento usato:

In[478]:= V1, V2 NullSpaceQ PW1, W2 OrthogonalizeV1, V2

Out[478]= 0, 2, 1, 1, 0, 0

Out[479]= 0, 2

5,

1

5, 1, 0, 0

Calcoliamo la retta PQ, il piano pp per PQ e per W1, il piano qq per PQ e per W2:

In[480]:= retta PQ P Q P t piano pp P tQ P uW1 piano qq P tQ P uW2

Out[480]= 1, 2 t, 3 2 t

Out[481]= 1, 2 t 2 u

5, 3 2 t

u

5

Out[482]= 1 u, 2 t, 3 2 t

Disegnamo P,Q,R,S, poi la retta PQ, poi il piano PQR, il piano PQS, poi tutto insieme.

100 Mathematica-Dispense-2011.nb

Page 101: Mathematica Dispense 2011

In[483]:= G0 Showpunto3D P, "P", Red, punto3D Q, "Q", Blue,vettore3D W1, "W1", Pink, vettore3D W2, "W2", Gray;

la retta PQ G1 ParametricPlot3DP Q P t, t, 2, 2; il piano pp G2 ParametricPlot3DP tQ P uW1, t, 1, 1, u, 1, 1; il piano qq G3 ParametricPlot3DP tQ P uW2, t, 1, 1, u, 1, 1;ShowG0, G1, G2, G3, ImageSize 300

Out[487]=

Piano tangente a una sfera

Disegnare una sfera di origine X e passante per un punto A. Disegnare il piano tangente alla sfera per A.

Soluzione. La sfera di raggio 1 e centro l'origine ha equazioni parametriche P(t,u) ={Cos[t]Cos[u],Sin[t]Cos[u],Sin[u]}, dove t e' la longitudine e u e' la latitudine. La sfera di centro X e raggio R haequazioni parametriche X + R*P(t,u). Il raggio R e' la norma di X-A. Il piano tangente passa per A ed e' ortogonalea A-X, dunque e' determinato dal punto A e da due vettori qualunque V1, V2 ortogonali a A-X. E' sufficientecercare due soluzioni V1, V2 linearmente indipendenti dell'equazione (A-X).V = 0, dove V=(v1,v2,v3) oppureusare il comando NullSpace[{A-X}] per avere una base di tale spazio. Il piano ottenuto sara':

Mathematica-Dispense-2011.nb 101

Page 102: Mathematica Dispense 2011

A + t*V1 + u*V2

Scegliamo X, A, e calcoliamo il raggio R

In[488]:= X 1, 3, 1A 0, 7, 1 calcolo del raggio come norma di XA R SqrtX A.X A

Out[488]= 1, 3, 1

Out[489]= 0, 7, 1

Out[490]= 17

Dobbiamo trovare una base per le soluzioni dell'equazione (A-X).V = 0, dove V={v1,v2,v3} e' una terna divariabili. Se definiamo una matrice-riga M={(A-X)}, allora dobbiamo trovare una base per le soluzioni di M.X=0.Questo puo' essere ottenuto con il comando NullSpace.

In[491]:= V1, V2 3OrthogonalizeNullSpaceA X scelgo due vettori ortogonali tra loro e di lunghezza 3: ma non sarebbe necessario

Out[491]= 0, 0, 3, 12

17,

3

17, 0

Disegnamo il piano determinato da A e dai due vettori V1, V2. Poi disegnamo la sfera, quindi la sfera e il pianoinsieme, per controllare che siano tangenti.

In[492]:= G1 ParametricPlot3DA V1 t V2u, t, 1, 1, u, 1, 1;G2 ParametricPlot3DX R Cost Cosu, Sint Cosu, Sinu, t, 0, 2 Pi, u, Pi2, Pi2 ;ShowG1, G2, vettore3D A, A V1, "AV1", Blue, vettore3D A, A V2, "AV2", Red,

PlotRangeAll, ViewPoint 0.038, 0.024, 3.383, ImageSize 300

Out[494]=

Disegnare una sfera di origine X e passante per un punto A. Disegnare due rette distinte tangenti alla sferain A.

Soluzione. La sfera di raggio 1 e centro l'origine ha equazioni parametriche P(t,u) ={Cos[t]Cos[u],Sin[t]Cos[u],Sin[u]}, dove t e' la longitudine e u e' la latitudine. La sfera di centro X e raggio R haequazioni parametriche X + R*P(t,u). Il raggio R e' la norma di X-A. Il piano tangente passa per A ed e' ortogonalea A-X, dunque e' determinato dal punto A e da due vettori qualunque V1, V2 ortogonali a A-X. E' sufficientecercare due soluzioni V1, V2 linearmente indipendenti dell'equazione (A-X).V = 0, dove V=(v1,v2,v3) oppureusare il comando NullSpace[{A-X}] per avere una base di tale spazio. Le rette per A e di vettore direzione,rispettivamente, V1 e V2 appartengono al piano tangente e sono quindi tangenti:

A + t*V1 A + t*V2

102 Mathematica-Dispense-2011.nb

Page 103: Mathematica Dispense 2011

Scegliamo X, A, e calcoliamo il raggio R

In[495]:= X 1, 3, 1A 0, 7, 1 calcolo del raggio come norma di XA R SqrtX A.X A

Out[495]= 1, 3, 1

Out[496]= 0, 7, 1

Out[497]= 17

Dobbiamo trovare una base per le soluzioni dell'equazione (A-X).V = 0, dove V={v1,v2,v3} e' una terna divariabili. Se definiamo una matrice-riga M={(A-X)}, allora dobbiamo trovare una base per le soluzioni di M.X=0.Questo puo' essere ottenuto con il comando NullSpace.

In[498]:= V1, V2 NullSpaceAXOut[498]= 0, 0, 1, 4, 1, 0

Disegnamo le rette determinato da A e dai due vettori V1, V2. Poi disegnamo la sfera, quindi la sfera e il pianoinsieme, per controllare che siano tangenti.

In[499]:= G0 punto3D A, "A", Green;G1 ParametricPlot3DA V1 t , t, 4, 4, PlotStyle Red, Thickness0.005;G2 ParametricPlot3DA V2 t , t, 2, 2, PlotStyle Blue, Thickness0.005;G3 ParametricPlot3DX R Cost Cosu, Sint Cosu, Sinu, t, 0, 2 Pi, u, Pi2, Pi 2;ShowG0, G1, G2, G3, PlotRange All, ViewPoint 1.497, 2.586, 0.506

Out[503]=

Lezione 9: Cilindri e Coni generalizzati. Intersezione Sfera-Piano. Prima di iniziare, eseguite le seguenti definizioni. Si tratta di funzioni punto3D, vettore3D che disegnano punti evettori, dato un punto o un vettore, e una etichetta e un colore. Attenzione: questi comandi richiedono una etichettae un colore per ogni punto o vettore, altrimenti non funzionano: non si puo' scrivere soltanto punto3D[{0,0,0}],bisogna scrivere punto3D[{0,0,0},Red,"Origine"].

In[504]:= offset 0.05; si dice offset la distanza tra una etichetta e l'oggetto a cui l'etichetta fa riferimento punto3DP_, label_, colore_ :Graphics3DThickness0.01, PointSize0.01,

colore, PointP, TextStylelabel, Bold, 24, P offset; Vettore V vettore3DV_, label_, colore_ :Graphics3DThickness0.01, PointSize0.01,

colore, Arrow0, 0, 0, V, TextStylelabel, Bold, 24, V offset; Vettore da P a Q vettore3DP_, Q_, label_, colore_ : Graphics3DThickness0.01, PointSize0.01,

colore, ArrowP, Q, TextStylelabel, Bold, 24, P Q 2 offset;

Mathematica-Dispense-2011.nb 103

Page 104: Mathematica Dispense 2011

Disegno di un Cilindro Generalizzato.

Problema. Disegnare un cilindro data la linea direttrice d e il vettore direzione comune V delle generatrici (nonnullo). Per cilindro, intendiamo l'unione di tutte le rette che passano da qualche punto della linea d e hanno vettoredirezione parallelo a (Q-P) (pag. 29 quaderno Abbena-Gianella). Queste rette sono dette generatrici.Soluzione. Consideriamo solo il caso in cui la direttrice d è descritta da una equazione d(t)=(x(t),y(t),z(t)) (pag. 31quaderno Abbena-Gianella). In questo caso ogni retta da d(t) di vettore direzione V ha equazione

d(t)+V*ucon parametro u. Al variare anche di t otteniamo tutte le rette possibili che passano per qualche punto di d e divettore direzione V. Dunque, per definizione, otteniamo il cilindro.

Scegliamo una qualsiasi linea d nello spazio come direttrice.

In[508]:= dt_ : Cost^2, Sint Cost, t 3 Sint;

In[509]:= ? d

Global`d

dt_ : Cost2, Sint Cost, t3 Sint

Disegnamo il grafico della direttrice d.

In[510]:= G1 ParametricPlot3Ddt, t, 0, 2 Pi, ImageSize 300, PlotStyle Blue, Thickness0.005

Out[510]=

0.0

0.5

1.0

1

0

1

0

1

2

Scegliamo un vettore direzione V non nullo, un numero reale r, e disegnamo come esempio la generatrice per d[r](cioe' la retta per d[r] di vettore direzione V).

104 Mathematica-Dispense-2011.nb

Page 105: Mathematica Dispense 2011

In[511]:= V 1, 1, 1Out[511]= 1, 1, 1

In[512]:= G2 ParametricPlot3DdPi Vu, u, 2, 2, ImageSize 300, PlotStyle Red, Thickness0.005;

Definiamo il cilindro di direttrice d e vettore direzione V, senza disegnarlo ancora.

In[513]:= G3 ParametricPlot3Ddt Vu, t, 0, 2 Pi, u, 2, 2, ImageSize 300, ViewPoint 2.778, 1.475, 1.247;

Disegnamo tutto insieme: la direttrice, una generatrice del cilindro, e il cilindro.

In[514]:= ShowG1, G2, G3, PlotRange All

Out[514]=

Disegno di un Cono Generalizzato.

Problema. Disegnare un cono data la retta direttrice d e il vertice P. Per cono, intendiamo l'unione di tutte le retteche uniscono P a qualche punto di d (pag. 8 quaderno Abbena-Gianella). Queste rette sono dette generatrici, epassano tutte per il punto V nel caso del cono.Soluzione. Consideriamo solo il caso in cui la direttrice d è descritta da una equazione d(t)=(x(t),y(t),z(t)) (pag. 12quaderno Abbena-Gianella). In questo caso ogni retta da P a d(t) ha equazione P+(d(t)-P)*u, con parametro u. Alvariare di t e di u otteniamo tutte le rette possibili che uniscono P a qualche punto di d. Dunque, per definizione,otteniamo il cono.

Fissiamo un vertice P.

In[515]:= P 0, 0, 1;

Fissiamo una direttrice d(t) qualunque.

In[516]:= dt_ : t, t t, 0;

In[517]:= ? d

Global`d

dt_ : t, t t, 0

Disegnamo d nello spazio.

Mathematica-Dispense-2011.nb 105

Page 106: Mathematica Dispense 2011

In[518]:= G1 ParametricPlot3Ddt, t, 1, 1, ImageSize 300, PlotPoints 1000, PlotStyle Blue, Thickness0.005

Out[518]=

1.00.5

0.00.5

1.00.0

0.5

1.0

1.0

0.5

0.0

0.5

1.0

Definiamo il cono come insieme di tutti i punti della forma P+(d(t)-P)*u, al variare dei parametri t e di u. Non lodisegnamo ancora.

In[519]:= P dt Pu

Out[519]= t u, t2 u, 1 u

In[520]:= G2 ParametricPlot3DP dt Pu, t, 1, 1, u, 1, 1, ImageSize 300,ViewPoint 2.778, 1.475, 1.247, PlotPoints 100, 50, DisplayFunction Identity

Out[520]=

Disegnamo tutto insieme: il vertice V, la direttrice d, e il cono.

106 Mathematica-Dispense-2011.nb

Page 107: Mathematica Dispense 2011

In[521]:= Showpunto3D P, "P", Red, G1, G2, ImageSize 500

Out[521]=

Intersezione Sfera-Piano.

Si consideri una sfera di raggio R e centro C={Ox,Oy,Oz} la cui equazione parametrica in coordinate sferiche e'

C + R*{Cos[t]*Cos[f],Sin[t]*Cos[f],Sin[f]}, con f[0,] latitudine t[0, 2]longitudine

Vogliamo calcolare l'equazione dell'intersezione fra la sfera e un piano che separi i poli Nord e Sud. Supponiamoche l'intersezione esista e non sia banale: in questo caso l'intersezione e' una circonferenza posta sulla superficiedella sfera, e ogni meridiano taglia la circonferenza intersezione in al piu' un punto, dunque possiamo descrivere lacirconferenza intersezione come una linea parametrica, nel parametro t (longitudine).

Se il piano non separa i poli Nord e Sud, risoveremo l'equazione rispetto alla longitudine, e avremmo bisogno didue equazioni per rappresentare la circonferenza intersezione nel parametro f (latitudine): ogni equazionerappresenta una semicirconferenza. Questo e' caso del piano x+y-1=0. Per semplicita', tuttavia, non scendiamoin dettagli riguardo a questo secondo caso, piu' difficile.

Come esempio utilizziamo il piano : x+y-z=0. Tuttavia, nei calcoli seguenti potremmo considerare qualsiasipiano a*x+b*y+c*z+d=0, purche' non contienga l'asse Nord-Sud (purche' non sia c=d=0). Le prossime righe calcolano l'equazione della circonferenza intersezione (o parte di essa) per ogni scelta dellafunzione Piano[.,.,.]=a*x+b*y+c*z+d tale che non sia purche' c=d=0.

Mathematica-Dispense-2011.nb 107

Page 108: Mathematica Dispense 2011

In[522]:= Cleara, b, c, d, Ox, Oy, Oz, R, x, y, z, f, t, X, Y, Piano, Sfera;

In[523]:= a, b, c, d 1, 1, 1, 2;Pianox_, y_, z_ : ax by cz d; xyz separa il polo Nord e il polo Sud. Provate anche con il piano x

y1 che invece non separa i due poli Nord e Sud In[525]:= Ox, Oy, Oz 0, 0, 0;

R 1;Sferaf, t : Ox, Oy, Oz R CostCosf, SintCosf, Sinf ;

Calcoliamo la distanza del piano dal centro della sfera, e decidiamo se l'intersezione Piano-Sfera e' vuota, e' unpunto, oppure e' una circonferenza.

In[528]:= dist AbsaOx bOy cOz d Sqrta^2 b ^2 c ^2

Out[528]=2

3

In[529]:= Ifdist R,"Piano e Sfera non si intersecano",Ifdist R,

"Il Piano e' tangente alla Sfera", altrimenti dist R"L'intersezione PianoSfera e' una circonferenza"

Out[529]= Piano e Sfera non si intersecano

Calcoliamo il grafico della sfera, del piano, e dei due poli.

In[530]:= GSfera ParametricPlot3DOx, Oy, Oz R CostCosf, SintCosf, Sinf,t, 0, 2Pi, f, Pi2, Pi2, PlotStyle Opacity0.5;

m Maxdist, R;GPiano ContourPlot3DPianox, y, z 0,

x, Ox m, Ox m, y, Oy m, Oy m, z, Oz m, Oz m;In[533]:= offset 0.05; si dice offset la distanza tra una etichetta e l'oggetto a cui l'etichetta fa riferimento

punto3DP_, label_, colore_ :Graphics3DThickness0.01, PointSize0.01,colore, PointP, TextStylelabel, Bold, 24, P offset;

In[535]:= Nord punto3D0, 0, 1, "N", Brown; Sud punto3D0, 0, 1, "S", Orange;

Supponiamo d'ora in poi che l'intersezione Piano-Sfera sia una circonferenza. Rappresentiamo graficamente lacirconferenza interserzione. Il nostro obbiettivo e' trovarne l'equazione parametrica {X[t],Y[t],Z[t]}.

108 Mathematica-Dispense-2011.nb

Page 109: Mathematica Dispense 2011

In[536]:= ShowGSfera, GPiano, Nord, Sud, PlotRange All

Out[536]=

In[537]:= IlPianoSeparaIPoli Piano0, 0, 1Piano0, 0, 1 0;

In[538]:= IfIlPianoSeparaIPoli, "Il Piano separa i poli", "Il Piano NON separa i poli"Out[538]= Il Piano NON separa i poli

Rappresentiamo l'intersezione sfera-piano con il sistema di equazioni {x, y, z} == Sfera[f, t], z == Piano[x,y].Risolviamo il sistema esprimendo la variabile t (longitudine) con il comando Solve. Abbiamo scelto di esprimerex,y,z rispetto alla longitudine perche' l'insersezione non e' un meridiano, e quindi ogni meridiano taglia la circon-ferenza intersezione in al piu' un punto. Ordiniamo le variabili in ordine alfabetico: f, x,y,z oppure: t,x,y,z.

In[539]:= sol IfIlPianoSeparaIPoli,Solvex, y, z Sferaf, t, Pianox, y, z 0, x, y, z, f, risolvo rispetto alla latitudine f Solvex, y, z Sferaf, t, Pianox, y, z 0, x, y, z, t risolvo rispetto alla longitudine t

;Solve::ifun : Inverse functions are being used by Solve,

so some solutions may not be found; use Reduce for complete solution information.

In[540]:= sol MapSort, sol ; Map applica la funzione Sort all'interno di ogni riga della matrice sol. Adesso in ogni riga le variabili sono in

ordine alfabetico, dunque nella forma: f...,x...,y...,z..., oppure nella forma: t... x...y... z...In[541]:= MatrixFormsol Sortsol

ordino le righe tra di loro, per essere certo che le diverse soluzioni siano presentate semprenello stesso ordine : in questo modo la soluzione da scegliere si trova sempre allo stesso posto.

Out[541]//MatrixForm=

t ArcCos 14

4 Secf 2 Secf2 7 Cosf2 3 Cosf2 Cos2 f 8 Cosf2 Sinf 2

t ArcCos 14

4 Secf 2 Secf2 7 Cosf2 3 Cosf2 Cos2 f 8 Cosf2 Sinf 2

t ArcCos 14

4 Secf 2 Secf2 7 Cosf2 3 Cosf2 Cos2 f 8 Cosf2 Sinf 2

t ArcCos 14

4 Secf 2 Secf2 7 Cosf2 3 Cosf2 Cos2 f 8 Cosf2 Sinf 2

Mathematica-Dispense-2011.nb 109

Page 110: Mathematica Dispense 2011

In[542]:= Contiamo quante soluzioni abbiamo trovato Lengthsol

Out[542]= 4

Se abbiamo risolto rispetto alla latitudine, le quattro soluzioni rappresentano la circonferenza intersezione, in modidiversi.

Se abbiamo risolto rispetto alla longitudine, le quattro soluzioni rappresentano quattro semi-circonferenze. Lasoluzione completa si ottiene come unione (per esempio) della prima e della terza soluzione.

Definiamo sol1 come la prima soluzione trovata. Nel caso abbiamo risolto rispetto alla longitudine, abbiamobisogno anche della terza soluzione: definiamo sol3 come terza soluzione trovata.

In[543]:= MatrixFormsol1 sol1MatrixFormsol3 sol3

Out[543]//MatrixForm=

t ArcCos 14

4 Secf 2 Secf2 7 Cosf2 3 Cosf2 Cos2 f 8 Cosf2 Sinf 2

x 14

4 2 Sinf 2 Secf Cosf2 7 3 Cos2 f 8 Sinf

y 14

4 2 Sinf 2 Secf Cosf2 7 3 Cos2 f 8 Sinf

z SinfOut[544]//MatrixForm=

t ArcCos 14

4 Secf 2 Secf2 7 Cosf2 3 Cosf2 Cos2 f 8 Cosf2 Sinf 2

x 14

4 2 Sinf 2 Secf Cosf2 7 3 Cos2 f 8 Sinf

y 14

4 2 Sinf 2 Secf Cosf2 7 3 Cos2 f 8 Sinf

z Sinf

Definiamo solX la soluzione in X (la seconda), solY la soluzione in Y (la terza), solZ la soluzione in Y (la quarta).Le soluzioni hanno la forma di sostituzioni temporanee: x->X[t], ... . Scegliendo la seconda componente di ognisostituzione possiamo definire X[t], ...

In[545]:= solX sol12solY sol13solZ sol14 nel caso risolviamo rispetto alla longitudine abbiamo bisogno

anche della terza soluzione per rappresentare la circonferenza intersezione solX3 sol32;solY3 sol33;solZ3 sol34;

Out[545]= x 1

44 2 Sinf 2 Secf Cosf2 7 3 Cos2 f 8 Sinf

Out[546]= y 1

44 2 Sinf 2 Secf Cosf2 7 3 Cos2 f 8 Sinf

Out[547]= z Sinf

In[551]:= IfIlPianoSeparaIPoli,Xt_ solX2,Xf_ solX2; X3f_ solX32 ;

usiamo la sostituzione statica per rimpiazzare solX con Xt o Xf una volta per tutte In[552]:= ? X

110 Mathematica-Dispense-2011.nb

Page 111: Mathematica Dispense 2011

Global`X

Xf_ 14

4 2 Sinf 2 Secf Cosf2 7 3 Cos2 f 8 Sinf

In[553]:= IfIlPianoSeparaIPoli,Yt_ solY2,Yf_ solY2; Y3f_ solY32;

usiamo la sostituzione statica per rimpiazzare solY con Yt o Yf una volta per tutte In[554]:= ? Y

Global`Y

Yf_ 14

4 2 Sinf 2 Secf Cosf2 7 3 Cos2 f 8 Sinf

In[555]:= IfIlPianoSeparaIPoli,Zt_ solZ2,Zf_ solZ2; Z3f_ solZ32;

usiamo la sostituzione statica per rimpiazzare solZ con Zt o Zf una volta per tutte ?Z

Global`Z

Zf_ Sinf

Ora che conosciamo X[t], Y[t], Z[t] possiamo rappresentare la circonferenza intersezione come linea parametricanello spazio.

In[557]:= GIntersezione IfIlPianoSeparaIPoli,ParametricPlot3DXt, Yt, Zt, t, 0, 2 Pi, PlotStyle Red, Thickness0.008,ParametricPlot3DXf, Yf, Zf, X3f, Y3f, Z3f, f, Pi2, Pi2,

PlotStyle DirectiveCyan, Thickness0.01, DirectiveBlue, Thickness0.008;

Mathematica-Dispense-2011.nb 111

Page 112: Mathematica Dispense 2011

In[558]:= ShowGSfera, GPiano, GIntersezione, Nord, Sud Se il piano separa i poli : disegnamo la circonferenza in rosso. Se il piano non separa i poli :

disegnamo la semicirconferenza generata dalla soluzione 1 in azzurro,disegnamo la semicirconferenza generata dalla soluzione 3 in blu

Out[558]=

Lezione 10: Geometria e Algebra Lineare I: discussione di sistemi lineari.E. Abbena, G.M. Gianella (testo)

S. Berardi, M.Grangetto (soluzioni svolte con Mathematica)

Prima di iniziare, eseguite le seguenti definizioni. Si tratta di funzioni punto3D, vettore3D che disegnano punti evettori, dato un punto o un vettore, e una etichetta e un colore. Attenzione: questi comandi richiedono una etichettae un colore per ogni punto o vettore, altrimenti non funzionano: non si puo' scrivere soltanto punto3D[{0,0,0}],bisogna scrivere punto3D[{0,0,0},Red,"Origine"].

In[559]:= offset 0.05; si dice offset la distanza tra una etichetta e l'oggetto a cui l'etichetta fa riferimento punto3DP_, label_, colore_ :Graphics3DThickness0.01, PointSize0.01,

colore, PointP, TextStylelabel, Bold, 24, P offset; Vettore V vettore3DV_, label_, colore_ :Graphics3DThickness0.01, PointSize0.01,

colore, Arrow0, 0, 0, V, TextStylelabel, Bold, 24, V offset; Vettore da P a Q vettore3DP_, Q_, label_, colore_ : Graphics3DThickness0.01, PointSize0.01,

colore, ArrowP, Q, TextStylelabel, Bold, 24, P Q 2 offset;

Capitolo 1. Sistemi lineari. In questo testo, i numeri degli esercizi fanno riferimento al testo: Esercizi di Geometria e Albegra Lineare Idi E. Abbena, G.M. Gianella.

Esercizio 1 del Capitolo 1 (Abbena-Gianella).

112 Mathematica-Dispense-2011.nb

Page 113: Mathematica Dispense 2011

Risolvere il sistema:x1 x2 x3 12 x1 2 x2 x3 0x1 x2 2 x3 1

Suggerimenti. Definire una matrice A dei coefficienti, due vettori X delle variabili e B dei coefficienti. Disegnareper controllo (usare MatrixForm) A, X, AX, B. Indicare il prodotto di matrici con "A.X"). Risolvete A.X=B conSolve[A.X == B, {x1,x2,x3}] (omettiamo i casi particolari) oppure con Reduce[A.X == B, {x1,x2,x3}] (dà lasoluzione completa). Per il sistema in esame, molto semplice, sia Solve che Reduce forniscono tutte le soluzioni. In generale, invece,Reduce è più completo: per esempio trova anche le soluzioni nei casi in cui un coefficiente dipendente da parametrisia zero.

Attenzione (1). Definite X, B o entrambe come i vettori {x1,x2,x3}, {b1,b2,b3} (in questo caso, A.X e B sonovettori), oppure entrambe come matrici ridotte a un'unica colonna:

X = x1x2 , B =

b1b2

Equivalentemente: X={{x1},{x2},{x3}}, B={{b1},{b2},{b3}} In questo caso, A.X e B sono matrici. Non potete invece scegliere X come vettore e B come matrice, o viceversa. In Mathematica non è possibileeguagliare un vettore ad una matrice-colonna, anche se della stessa dimensione.

Attenzione (2).Evitate inoltre definizioni del tipo A = MatrixForm[...] MatrixForm infatti produce il disegno di una matrice, non una matrice vera e propria. Non è possibile risolvereuna equazione A.X ==B quando A è un disegno.

In[563]:= A 1, 1, 1,2, 2, 1,1, 1, 2

;In[564]:= X x1, x2, x3; definiamo il vettore delle variabili

In[565]:= B 1, 0, 1; definiamo il vettore delle variabili

In[566]:= MatrixFormAMatrixFormXMatrixFormA.XMatrixFormB

Out[566]//MatrixForm=

1 1 12 2 11 1 2

Out[567]//MatrixForm=

x1x2x3

Out[568]//MatrixForm=

x1 x2 x32 x1 2 x2 x3x1 x2 2 x3

Out[569]//MatrixForm=

101

Per discutere la soluzione, calcolare Det[A]. Se Det[A] risulterà diverso da 0, la soluzione sarà unica.

Mathematica-Dispense-2011.nb 113

Page 114: Mathematica Dispense 2011

Se Det[A] risulterà uguale a 0, le soluzioni potranno essere un insieme vuoto, oppure uno spazio vettoriale didimensione 1 o più. La dimensione dello spazio delle soluzioni esprime il numero di parametri da cui la soluzionedipende. Si può calcolare calcolando la forma ridotta di A (comando RowReduce), e contando il numero dellerighe tutte uguali a 0 ottenute. Questo procedimento funziona solo con matrici quadrate.

In[570]:= DetAOut[570]= 0

In[571]:= MatrixFormRowReduceAOut[571]//MatrixForm=

1 1 00 0 10 0 0

Infine, risolvere l'equazione A.X=B. In questo caso, i comandi Solve e Reduce danno lo stesso insieme disoluzioni. Controllare che la dimensione dello spazio delle soluzioni ottenuto sia quella prevista.

In[572]:= SolveA.X B, XReduceA.X B, X

Solve::svars : Equations may not give solutions for all "solve" variables.

Out[572]= x2 1

3 x1, x3

2

3

Out[573]= x2 1

3 x1 && x3

2

3

Esercizio 7 del Capitolo 1 (Abbena-Gianella). Risolvere il sistema nel parametro a:a x1 x2 x3 2x1 a x2 x3 3 a2

x1 x2 a x3 a 1

Suggerimenti. Ripulire (col comando Clear) la variabile a. Quindi definire una matrice A dei coefficienti, duevettori (cioè due liste) X delle variabili e B dei coefficienti. Disegnare per controllo A, X, A.X, B (usare Matrix-Form).

In[574]:= Cleara

In[575]:= A a, 1, 1,1, a, 1,1, 1, a

;In[576]:= X x1, x2, x3;

In[577]:= B 2, 3 a^ 2, a 1;

114 Mathematica-Dispense-2011.nb

Page 115: Mathematica Dispense 2011

In[578]:= MatrixFormAMatrixFormXMatrixFormA.XMatrixFormB

Out[578]//MatrixForm=

a 1 11 a 11 1 a

Out[579]//MatrixForm=

x1x2x3

Out[580]//MatrixForm=

a x1 x2 x3x1 a x2 x3x1 x2 a x3

Out[581]//MatrixForm=

23 a2

1 a

Calcolare il determinante, e scoprire per quali valori di A risulta Det[A]=0. Per tali valori di a, le soluzionipotranno essere più di una.

In[582]:= DetA

Out[582]= 2 3 a a3

In[583]:= Solve2 3 a a3 0, aOut[583]= a 2, a 1, a 1

Infine, calcolare la soluzione di A.X=B in generale, e per i valori di a per cui Det[A]=0. Solve fornisce lasoluzione generale vale solo quando Det[A] è diverso da 0. Reduce fornisce anche le soluzioni per i particolarivalori di a che rendono il determinante nullo. Anzichè usare Reduce, si può risolvere l'equazione Det[A] == 0,quindi ricalcolare le soluzioni di AX=B e la forma ridotta di A, per stabilire, in questi casi, la dimensione dellospazio delle soluzioni.

In[584]:= SolveA.X B, XReduceA.X B, X

Out[584]= x1 1, x2 a, x3 2

Out[585]= a 1 && x3 2 x1 x2 a 2 && x2 1 x1 && x3 2 2 x1 x2 2 a a2 0 && x1 1 && x2 a && x3 2 a x2

Ripetere gli stessi calcoli per quei valori di a per cui Det[A]=0.

In[586]:= a 2;MatrixFormRowReduceASolveA.X B, X

Out[587]//MatrixForm=

1 0 10 1 10 0 0

Solve::svars : Equations may not give solutions for all "solve" variables.

Out[588]= x2 1 x1, x3 1 x1

Mathematica-Dispense-2011.nb 115

Page 116: Mathematica Dispense 2011

In[589]:= a 1;MatrixFormRowReduceASolveA.X B, X

Out[590]//MatrixForm=

1 1 10 0 00 0 0

Solve::svars : Equations may not give solutions for all "solve" variables.

Out[591]= x3 2 x1 x2

Capitolo 2. Matrici e Determinanti.Esercizio 4, Capitolo 2 (Abbena-Gianella). Data la matrice A nel parametro h:

1 3 1 2h 0 0 01 1 0 00 0 0 h

determinare per quali valori di h è invertibile, e in questi casi scrivere l'inverso di A.

Suggerimenti. Ripulire (col comando Clear) la variabile h. Definire una matrice A e disegnarla per controllo(usare MatrixForm). Risolvere l'equazione (in h) Det[A]=0.

In[592]:= Clearh

In[593]:= A 1, 3, 1, 2,h, 0, 0, 0,1, 1, 0, 0,0, 0, 0, h;

MatrixFormAOut[594]//MatrixForm=

1 3 1 2h 0 0 01 1 0 00 0 0 h

In[595]:= DetA

Out[595]= h2

In[596]:= SolveDetA 0, hOut[596]= h 0, h 0

La matrice risulta invertibile per i valori di h diversi da quelli trovati sopra. Usando il comando Inverse possiamocalcolare la formula per la matrice inversa (esistente, però, solo quando Det[A] è diverso da 0).

In[597]:= A' InverseA;MatrixFormA'

Out[598]//MatrixForm=

0 1h

0 0

0 1h

1 0

1 2h

3 2h

0 0 0 1h

Esercizio 15, Capitolo 2 (Abbena-Gianella). Data la matrice rettangolare e i vettori:

A = 2 3 2 14 6 1 26 9 1 1

, X =

x1x2x3x4

116 Mathematica-Dispense-2011.nb

Page 117: Mathematica Dispense 2011

B1 = 120

, B2 = 123

, B3 = 000

discutere e risolvere le equazioni AX=B1, AX=B2, AX=B3.

Suggerimenti. Ripulire x1, x2, x3, x4, e definire la matrice A e i vettori (liste) B, B1, B2, B3, controllando conMatrixForm i dati inseriti.

In[599]:= Clearx1, x2, x3, x4

In[600]:= A 2, 3, 2, 1,4, 6, 1, 2,6, 9, 1, 1

;X x1, x2, x3, x4;B1 1, 2, 0;B2 1, 2, 3;B3 0, 0, 0;MatrixFormAMatrixFormA.XMatrixFormXMatrixFormB1MatrixFormB2MatrixFormB3

Out[605]//MatrixForm=

2 3 2 14 6 1 26 9 1 1

Out[606]//MatrixForm=

2 x1 3 x2 2 x3 x44 x1 6 x2 x3 2 x46 x1 9 x2 x3 x4

Out[607]//MatrixForm=

x1x2x3x4

Out[608]//MatrixForm=

120

Out[609]//MatrixForm=

123

Out[610]//MatrixForm=

000

Lo spazio delle soluzioni (qualora non sia vuoto), per matrici rettangolari ha dimensione pari al numero dellevariabili (4, in questo caso) meno il rango (il numero di righe non tutte nulle) della forma ridotta di A. Calcol-iamolo usando il comando RowReduce, che ci dà la forma ridotta di una matrice:

Mathematica-Dispense-2011.nb 117

Page 118: Mathematica Dispense 2011

In[611]:= MatrixFormRowReduceAOut[611]//MatrixForm=

1 32

0 310

0 0 1 45

0 0 0 0

La dimensione dello spazio delle soluzioni (sempre qualora non sia vuoto) si può alternativamente calcolare comela lunghezza di una base dello spazio delle soluzioni di AX=0. Una tale base si può generare con il comandoNullSpace, applicato alla matrice A.

In[612]:= MatrixFormNullSpaceALengthNullSpaceA

Out[612]//MatrixForm=

3 0 8 103 2 0 0

Out[613]= 2

Risolviamo ora le equazioni AX = B1, B2, B3, e notiamo che lo spazio delle soluzioni (quando non è vuoto) hasempre la soluzione calcolata in precedenza. Non c'è differenza, in questo caso, tra le risposte ottenute con Solve eReduce, tranne che nella forma. Per esempio, AX=B1 non ha soluzioni. Quindi Solve ci risponderà {} (lista vuotadi condizioni), mentre Reduce ci risponderà False (la costante logica che definisce appunto l'insieme vuoto).

In[614]:= SolveA.X B1ReduceA.X B1

Out[614]=

Out[615]= False

In[616]:= SolveA.X B2ReduceA.X B2

Out[616]= x1 1

23 x2

23 x4

10, x3

4 x4

5

Out[617]= x3 4 x4

5&& x1

1

23 x2

23 x4

10

In[618]:= SolveA.X B3ReduceA.X B3

Out[618]= x1 3 x2

23 x4

10, x3

4 x4

5

Out[619]= x3 4 x4

5&& x1

3 x2

23 x4

10

Casalis Andre` - Anno 2004 - Corso A - Soluzione Esercizio 4, Capitolo 2.

Data la matrice A nel parametro h :

1 3 1 2h 0 0 01 1 0 00 0 0 h

determinare per quali valori di h è invertibile ,

e in questi casi scrivere l ' inverso di A.

A titolo precauzionale, per evitare che variabili precedentemente utilizzate inficino il calcolo, ripuliamo tutte levariabili fin`ora utilizzate.

In[620]:= Clear"Global`"

Definisco una matrice A e la disegno per verifica.

118 Mathematica-Dispense-2011.nb

Page 119: Mathematica Dispense 2011

In[621]:= A 1, 3, 1, 2,h, 0, 0, 0,1, 1, 0, 0,0, 0, 0, h

;MatrixFormA

Out[622]//MatrixForm=

1 3 1 2h 0 0 01 1 0 00 0 0 h

Calcolo il determinante di A...

In[623]:= DetA

Out[623]= h2

...e ne scopro i valori di h che lo redono nullo risolvendo (verificano cioe` l`equazione Det[A]=0).

In[624]:= SolveDetA 0, hOut[624]= h 0, h 0

Trovo dunque i valori per cui la matrice NON e` invertibile e definisco B l`inversa di A (esistente solo quandoDet[A] != 0 <==> h != 0) passando poi a disegnarla.

In[625]:= A' InverseA;MatrixFormA'

Out[626]//MatrixForm=

0 1h

0 0

0 1h

1 0

1 2h

3 2h

0 0 0 1h

Ho poi provato, giocando con le possibilia` messe a disposizione dal programma, a realizzare una funzione che inmodo automatico risolvesse questo tipo di esercizi.

Puliamo nuovamente tutte le matrici.

In[627]:= Clear"Global`"

Dichiariamo nuovamente la matrice A.

In[628]:= A

1 3 1 2h 0 0 01 1 0 00 0 0 h

;

Carichiamo la funzione DrawInverses[].

In[629]:= DrawInversesx_, y_, A_ :If DetA . y x 0,

Print"La matrice NON e` invertibile per il valore dato al parametro ", y, ".",Print"La matrice e` invertibile.";A' InverseA;MatrixFormA' . y x

;

Eseguiamo la funzione nella forma DrawInverses[scalare, parametro, matrice].La funzione verifica se per lo specifico valore assegnato al parametro la funzione e` invertibile e, in caso afferma-tivo, la inverte.

Mathematica-Dispense-2011.nb 119

Page 120: Mathematica Dispense 2011

In[630]:= DrawInverses2, h, ALa matrice e` invertibile.

Out[630]//MatrixForm=

0 12

0 0

0 12

1 0

1 1 3 1

0 0 0 12

Come funziona DrawInverses[]?

Scopo e sintassi.

DrawInverses[scalare, parametro, matrice] e` una semplice funzione di controllo dell'invertibilita` di una datamatrice. Il primo argomento della funzione e` il valore numerico da assegnare al parametro, il secondo e` ilparametro stesso ed il terzo e` la matrice. La funzione, nel caso in cui la matrice non sia invertibile per il valoreassegnato al parametro, restituisce un messaggio d'errore, in caso contrario provvede a disegnare l'inversa dellamatrice sostituendo al parametro il valore scelto.

Codice commentato.

DrawInverses[x_,y_,A_] := If [(Det[A]/. yx)==0, Print["La matrice NON e` invertibile per il valore dato al parametro ", y,"."], Print["La matrice e` invertibile."]; A'=Inverse[A]; MatrixForm[A' /. y x] ];

DrawInverses[x_,y_,A_] :=Il nome da assegnare alla "funzione" (da intendersi come blocco di codice che, fornito di determinati parametri,esegue alcune operazioni standard e restituisce un risultato) e` totalmente arbitrario: l'unico vincolo e` il nonutilizzo di un nome di funzione gia` esistente nel programma.Tra le parentesi quadre vi e` la lista delle variabili impiegate nella funzione: l'underscore che segue il nome dellavariabile indica il carattere generale della variabile stessa.

If[[...] ]; Questa istruzione, una volta sostituito il parametro con lo scalare, eguaglia il determinante della matrice a zero: sel'uguaglianza risulta vera (e la matrice _non_ e` invertibile), esegue il primo blocco di istruzioni, in caso contrario(e la matrice e` quindi invertibile) il secondo. NOTA: non e` possibile eguagliare il determinante senza sostituire al parametro un valore numerico; in questocaso, infatti, il determinante risulterebbe essere il parametro e Mathematica non e` in grado di determinare laveridicita` di un'uguaglianza tra un numeroed un parametro.

Print["La matrice NON e` invertibile per il valore dato al parametro ", y,"."]Questa istruzione viene eseguita se l'argomento dell'ugugaglianza e` vero e la matrice risulta quindi non invertibile:il messaggio d'errore viene stampato come testo e la variabile viene "tradotta" (ne viene cioe` visualizzato ilsignificato).

Print["La matrice e` invertibile."]A'=Inverse[A];MatrixForm[A' /. y x]Questo insieme di istruzioni viene eseguito nel caso in cui il determinante differisca da zero e quindi la matrice siainvertibile. In questo caso ci si limita a calcolare l'inversa della matrice e a disegnarla sostituendo al parametro loscalare.

120 Mathematica-Dispense-2011.nb

Page 121: Mathematica Dispense 2011

Capitolo 3: Calcolo vettoriale. Come definire un comando per disegnare Vettori nello spazio

Come gia` visto nelle precedenti lezioni avremo bisogno di definire comandi per disegnare vettori e punti nellospazio. Riportiamo qui la definizione di alcuni comandi che useremo molto spesso nel seguito.

In[631]:= punto3Dp_ :Graphics3DPointSize0.02, Pointp;punto3Dp_, label_ : Graphics3DPointSize0.02, Pointp, TextStylelabel, Bold, 24, p 0.1;punto3Dp_, label_, colore_ :

Graphics3DPointSize0.02, colore, Pointp, TextStylelabel, Bold, 24, p 0.1;vettore3Dp_, label_, colore_ :

Graphics3Dcolore, Arrow0, 0, 0, p, TextStylelabel, Bold, 24, p 2 0.1;vettore3Dp1_, p2_, label_, colore_ :

Graphics3Dcolore, Arrowp1, p2, TextStylelabel, Bold, 24, p1 p2 2 0.1;

Riportiamo ora alcuni esempi di uso.

Mathematica-Dispense-2011.nb 121

Page 122: Mathematica Dispense 2011

In[636]:= P 0, 1, 2;Q 1, 0.5, 1;Showvettore3DP, Q, "PQ", Blue, punto3DP, "P", RedShowvettore3DQ, "0Q", Green, punto3DP, "P", Red

Out[638]= PQ

P

Out[639]=

0Q

P

122 Mathematica-Dispense-2011.nb

Page 123: Mathematica Dispense 2011

Esercizi di calcolo vettorialeEsercizio 1, Capitolo 3 (Abbena-Gianella). Indichiamo con a×x, a.b, i prodotti vettoriali e scalari di a, b (vettoriin 3D). Dati i vettori a = (h,-1,3), b=(1,-h,1), c= (-2,0,k), trovare due valori reali per h,k e un vettore X =(x1,x2,x3) tale che: a×x + b×x = c

Suggerimenti. Ripulire (comando Clear) le variabili h,k. Definire a,b,c,X (come liste), e=(a×x+b×x). Il prodottovettoriale di a, b si indica con Cross[a,b], il prodotto scalare con a.b. Infine, risolvere il sistema (e = c) rispetto allevariabili: x1,x2,x3,k,h E' necessario introdurre i parametri k, h tra le variabili. Se si cerca una soluzione rispetto alle sole variabilix1,x2,x3, si cerca una soluzione valida per tutti i k, h, che non esiste (il problema è risolubile solo per particolari k,h).

In[640]:= Cleark, h

In[641]:= a h, 1, 3b 1, h, 1c 2, 0, kX x1, x2, x3

Out[641]= h, 1, 3

Out[642]= 1, h, 1

Out[643]= 2, 0, k

Out[644]= x1, x2, x3

In[645]:= e Crossa, X Crossb, X;MatrixFormSimplifye SImplify. semplifica una formula

Out[646]//MatrixForm=

4 x2 1 h x34 x1 1 h x31 h x1 x2

In[647]:= Solvee c, x1, x2, x3, h, kReducee c, x1, x2, x3, h, k

Solve::svars : Equations may not give solutions for all "solve" variables.

Out[647]= x1 1

41 h x3, x2

1

42 x3 h x3, k

1 h

2

Out[648]= x1 0 && x2 1

2&& x3 0 && k

1 h

2

x2 1

21 2 x1 && x3 0 && h

4 x1 x3

x3&& k

1 h

2

Esercizio 4. (i) I vettori a = (1,2,0) e b = (0,1,1) possono determinare i lati di un rettangolo? (ii) Determinare unvettore v che rappresenti l'altezza rispetto ad a del parallelogramma individuato da a, b.

In[649]:= a 1, 2, 0;b 0, 1, 1;a.b 0

Out[651]= False

Mathematica-Dispense-2011.nb 123

Page 124: Mathematica Dispense 2011

In[652]:= Showvettore3Da, "a", Red, vettore3Db, "b", Blue

Out[652]=

a

b

Osserviamo subito che a.b (=a scalare b) non è nullo. a,b non sono dunque ortogonali e quindi non possonoformare un rettangolo. Determinaimo ora l'altezza del parallelogramma.

Metodo 1. Definire un vettore incognita V = {v1,v2,v3}. Un sistema nelle variabili v1,v2,v3 la cui unica soluzioneè l'altezza, si può ottenere esprimendo certe condizioni di ortogonalità e parallelismo in termini di prodotto scalaree vettoriale. Le condizioni da usare sono: (1) a è ortogonale a V (Spiegazione: l'altezza V di a è ortogonale ad a); (2) (b×V) è ortogonale ad a (Spiegazione: (b×V) è ortogonale al piano di b e di V, quindi ad a, che si trova nellostesso piano). (3) (b-V) è parallelo ad a (Spiegazione: se percorriamo b, e poi dalla punta di b risaliamo all'indietro l'altezza Vrelativa ad a, arriviamo in un punto del vettore a).

In[653]:= Clearv1, v2, v3

In[654]:= V v1, v2, v3Out[654]= v1, v2, v3

In[655]:= Solvea.V 0, a ortog. V Crossb, V.a 0, bxV ortog. a Crossb V, a 0 bV parall. a ,v1, v2, v3

Out[655]= v1 2

5, v2

1

5, v3 1

In[656]:= h 2

5,

1

5, 1

Out[656]= 2

5,1

5, 1

Controlliamo il risultato disegnando tutti i vettori.

124 Mathematica-Dispense-2011.nb

Page 125: Mathematica Dispense 2011

In[657]:= Showvettore3Da, "a", Red,vettore3Db, "b", Blue,

vettore3Da, a b, "aab", Green,vettore3Db, a b, "bab", Cyan,

vettore3Dh, "h", Black

Out[657]=

ab

aabbab

h

Metodo 2. Riprendiamo il sistema precedente in v1,v2,v3, ma sostituiamo la condizione (3) con: V.V = norma dell'altezza di b rispetto ad a. Tale norma si ottiene con la formula: b.b a.b2 a.a

In[658]:= NormaAltezza b.b a.b2 a.a

Out[658]=6

5

Il sistema ottenuto aggiungendo la condizione: V.V=NormaAltezza è di secondo grado. Una soluzione è l'altezza h, l'altra è (-h) (infatti (-h) ha la stessa norma di h, e quindi soddisfaanch'essa le condizioni del sistema).

In[659]:= Solvea.V 0,Crossb, V.a 0,V.V NormaAltezza

,v1, v2, v3

Out[659]= v1 2

5, v2

1

5, v3 1, v1

2

5, v2

1

5, v3 1

Metodo 3. Dalla definizione di prodotto vettoriale possiamo dedurre che k = (a×b)×aè parallelo all'altezza (per convincersene, è utile disegnare a×b e k).

Mathematica-Dispense-2011.nb 125

Page 126: Mathematica Dispense 2011

In[660]:=

Showvettore3Da, "a", Red,vettore3Db, "b", Blue,vettore3Da, a b, "ab", Cyan,vettore3Db, a b, "ab", Black,vettore3DCrossa, b, "axb", Green,vettore3DCrossCrossa, b, a, "axbxa", Magenta,Axes True,PlotRange 1, 5

Out[660]=

ababab

axb

axbxa

21

01

2

1

0

1

2

3

0

2

4

Basta calcolare ora il versore (vettore di lunghezza 1) associato a k (vettore di lunghezza qualunque), quindimoltiplicare tale versore per la lunghezza del vettore-altezza. Quest'ultima è uguale alla radice quadrata dellanorma dell'altezza, già calcolata.

In[661]:= LunghezzaAltezza SqrtNormaAltezza

Out[661]=6

5

In[662]:= k CrossCrossa, b, aOut[662]= 2, 1, 5

In[663]:= VersoreAltezza k Sqrtk.k

Out[663]= 2

15,

1

30,

5

6

126 Mathematica-Dispense-2011.nb

Page 127: Mathematica Dispense 2011

In[664]:= h VersoreAltezzaLunghezzaAltezza

Out[664]= 2

5,1

5, 1

Capitolo 4: Sottospazi vettoriali. Un programma che applica il metodo degli scarti.

Esercizi sui sottospazi. Esercizio 2, Cap.4 (Abbena-Gianella). Siano dati i vettori:

u1 = (1,-1,0,1)u2 = (2,1,1,0)u3 = (3,0,1,1)u4 = (0,1,-1,0)

Trovare una base del sottospazio S da essi generato. Verificato che u1,u2,u4 sono linearmente indipendenti,determinare per quali valori di un parametro t il vettore v=(1,-1,2t-8,t+1) appartiene ad S.

Suggerimenti. Non dimenticate di ripulire la variabile t, e di definire i vettori come liste.

In[665]:= Cleart, l1, l2, l3

In[666]:= u1 1, 1, 0, 1u2 2, 1, 1, 0u3 3, 0, 1, 1u4 0, 1, 1, 0v 1, 1, 2 t 8, t 1

Out[666]= 1, 1, 0, 1

Out[667]= 2, 1, 1, 0

Out[668]= 3, 0, 1, 1

Out[669]= 0, 1, 1, 0

Out[670]= 1, 1, 8 2 t, 1 t

Verifichiamo (calcolando la forma ridotta) che {u1,u2,u3,u4} sono linearmente dipendenti, mentre {u1,u2,u4} no.

In[671]:= RowReduceu1, u2, u3, u4 MatrixForm

Out[671]//MatrixForm=

1 0 0 12

0 1 0 12

0 0 1 12

0 0 0 0

In[672]:= RowReduceu1, u2, u4 MatrixForm

Out[672]//MatrixForm=

1 0 0 12

0 1 0 12

0 0 1 12

Troviamo un valore di t per cui v = l1*u1+l2*u2+l3*u4 per qualche l1,l2,l3.

In[673]:= Solvev l1u1 l2u2 l3u4Out[673]= l1 3, l2 1, l3 3, t 2

Casalis Andre` - Anno 2004 - Corso A- Soluzione Esercizio 2, Capitolo 4. Aggiornata nel 2009.In[674]:= Clearu1, u2, u3, u4, v, t

Siano dati i vettori: u1=(1,-1,0,1)

Mathematica-Dispense-2011.nb 127

Page 128: Mathematica Dispense 2011

u2=(2,1,1,0)u3=(3,0,1,1)u4=(0,1,-1,0)1) Trovare una base del sottospazio S da essi generato.2) Verificato che u1,u2,u4 sono linearmente indipendenti,determinare per quali valori di un parametro t il vettorev=(1,-1,2t-8,t+1) appartiene ad S.

Puliamo, per precauzione, tutte le variabili utilizzate.

Dichiaro i vettori che utilizzero` nei calcoli.

In[675]:= u1 1, 1, 0, 1;u2 2, 1, 1, 0;u3 3, 0, 1, 1;u4 0, 1, 1, 0;v 1, 1, 2 t 8, t 1;

Con il comando Orthogonalize[{v1,v2,v3 ...}] si determinata una base ortonormale del sottospazio generato.

In[680]:= baseort Orthogonalizeu1, u2, u3, u4

Out[680]= 1

3,

1

3, 0,

1

3,

5

51,

4

51,

3

17,

1

51,

0, 0, 0, 0, 2

119,

5

119,

9

119,

3

119

Osserviamo che la base e' composta da 3 vettori non nulli. Questo significa che la dimensione del sottospazio e 3 equindi uno dei 4 vettori e' una combinazione lineare dei precedenti. Definiamo una funzione che decide se una listanon e' tutta nulla, poi usiamo il comando Select per selezionare i vettori di baseort diversi dal vettore nullo.

In[681]:= AbsL e' la lista dei valori assoluti di L. TotalAbsL e' la somma dei valoriassoluti di L. Una lista non e' tutta nulla se e solo se la somma dei suoi valori assoluti e' 0

NonNullVectorL_ : TotalAbsL 0 ; Il comando SelectL,proprieta costruisce la lista degli elementi di L che soddisfano "proprieta". Se proprieta

NonNullVector, Select costruisce la lista degli elementi di L diversi dal vettore nullo baseort Select baseort, NonNullVector

Out[682]= 1

3,

1

3, 0,

1

3,

5

51,

4

51,

3

17,

1

51,

2

119,

5

119,

9

119,

3

119

Verifichiamo che si tratta di vettori ortonormali: la matrice di tutti i possibili prodotti scalari degli elementi dibaseort e' fatta di zeri, tranne quando moltiplichiamo un elemento per se stesso e otteniamo 1.

In[683]:= n Lengthbaseort;MatrixFormTablebaseorti.baseortj, i, 1, n, j, 1, n

Out[684]//MatrixForm=

1 0 00 1 00 0 1

Possiamo determinare una base del sottospazio anche con RowReduce (in questo caso non sara ortonormale)

In[685]:= baseS RowReduceu1, u2, u3, u4

Out[685]= 1, 0, 0,1

2, 0, 1, 0,

1

2, 0, 0, 1,

1

2, 0, 0, 0, 0

128 Mathematica-Dispense-2011.nb

Page 129: Mathematica Dispense 2011

In[686]:= Select baseS, NonNullVector

Out[686]= 1, 0, 0,1

2, 0, 1, 0,

1

2, 0, 0, 1,

1

2

Verifichiamo come richiesto che u1,u2,u4 sono linearmente indipendenti (e quindi anche questi vettori formanouna base del sottospazio)

In[687]:= RowReduceu1, u2, u4

Out[687]= 1, 0, 0,1

2, 0, 1, 0,

1

2, 0, 0, 1,

1

2

Trovata la base del sottospazio S, passo ad esaminare per quali valori del parametro t il vettore v = (1,-1,2t-8,t+1)appartiene ad S.Cerco quindi i valori di t per cui v sia combinazione lineare dei vettori della base per qualche coeff. l1, l2 ed l3;memorizzato il risultato in una lista CC, utilizzo una funzione Parse per stampare il risultato in un formato piu'simile a quello a cui siamo abituati.

In[688]:= v l1u1 l2u2 l3u4

Out[688]= 1, 1, 8 2 t, 1 t l1 2 l2, l1 l2 l3, l2 l3, l1

In[689]:= CC SortSolvev l1u1 l2u2 l3u4 ordino le soluzioni in ordine alfabetico: esse formano una matrice di 1 riga

Out[689]= l1 3, l2 1, l3 3, t 2

In[690]:= Parsed_ :CompoundExpression

Print"Valori dei coefficienti:"; stampo ogni liai nella forma liai riga d1; riga e' l'unica riga della matrice dcol Lengthriga; col e' il numero di colonne della matrice Fori 1,

i col,i,Printrigai1, " ", rigai2 ; rigai e' liai, dunque rigai1 e' li, rigai2 e' ai

Print"Parametro:"; stampo l'ultimo parametro ta nella forma ta

Printrigacol1, " ", rigacol2;

In[691]:= ParseCCValori dei coefficienti:

l1 3

l2 1

l3 3

Parametro:

t 2

Come funziona ParseResult[]? Scopo e sintassi.

La funzione ParseResult[Base, Lista_di_Vettori] e` una semplicissima funzione di: per ogni vettore della Baseopera un confronto con ognuno dei vettori della Lista_di_Vettori evidenziando in modo esplicito le corrispondenzatrovate.La sintassi, molto intuitiva, prevede come primo argomento la Base su cui operare il confronto e la Lista_di_Vet-tori da cui prendere gli elementi di confronto.NOTA: la funzione confronta due liste di vettori e non effettua alcun controllo sull'effettiva natura di base del primoargomento.

Mathematica-Dispense-2011.nb 129

Page 130: Mathematica Dispense 2011

Come funziona ParseResult[]? Il codice commentato.

ParseResult[B_,L_]:= For[ i=1, i<=Length[B], i++, For[ c=1, c<=Length[L], c++, If[ B[[i]]== L[[c]], Print["u",c," = ", B[[i]]] ] ] ];

ParseResult[B_,L_]:=Il nome da assegnare alla "funzione" (da intendersi come blocco di codice che, fornito di determinati parametri,esegue alcune operazioni standard e restituisce un risultato) e` totalmente arbitrario: l'unico vincolo e` il nonutilizzo di un nome di funzione gia` esistente nel programma.Tra le parentesi quadre vi e` la lista delle variabili impiegate nella funzione: l'underscore che segue il nome dellavariabile indica il carattere generale della variabile stessa.

For[ i=1, i<=Length[B], i++, [..] ]; Questa istruzione istituisce un ciclo: dato ad una variabile un valore iniziale (in questo caso, assegnato il valore 1alla variabile i), stabilito un controllo (in questo caso, che il valore di i sia minore o uguale alla lunghezza dellalista) e stabilito un tasso di incremento (in questo caso, i++ causa l'aumento di un'unita` ed e` del tutto equivalentea i+1), l'istruzione eseguira` il blocco di codice inserito come quarto argomento (che sara` esaminato piu` avanti)fino a quando il controllo dara` esito positivo. Adoperiamo questa funzione perche` ci consente, grazie al valore della variabile, di prendere in esame, di volta involta, i vari elementi di una lista. NOTA: per maggiori specifiche tecniche riguardo all'uso ed alla sintassi dei cicli di For[], rimando alla documen-tazione di Mathematica.

For[ c=1, c<=Length[L], c++, [..] ];Analogamente al caso precedente, istituiamo un secondo ciclo di For, questa volta basato sulla lunghezza dellaLista_di_Vettori.Perche`?Un secondo ciclo di For nidificato nel primo ci consente di prendere in esame tutti i vettori della seconda lista. Inparole semplici, il primo ciclo ci fornisce un puntatore sulla prima lista: per ogni valore del puntatore (e quindiper ogni elemento della lista di vettori che costituisce la base) effettuiamo un confronto con ogni elemento dellaseconda lista (a questo scopo ecco spiegata la necessita` di un secondo puntatore, focalizzato questo sulla seconda

130 Mathematica-Dispense-2011.nb

Page 131: Mathematica Dispense 2011

lista). NOTA: per maggiori specifiche tecniche riguardo all'uso ed alla sintassi dei cicli di For[], rimando alladocumentazione di Mathematica.

If[ B[[i]]== L[[c]], [...]]Questa istruzione, se l'uguaglianza risulta verificata, esegue un blocco di codice specificato dall'utente. Con questometodo possiamo verificare, di volta in volta l'i-esimo elemento della prima lista (la Base) con il c-esimo elementodella seconda lista (la Lista_di_Vettori)

Print["u",c," = ", B[[i]]]Questa istruzione genera l'out-put visibile all'utente. Viene eseguita solo se l'uguaglianza precedente e` verificata estampa a video il nome del vettore della Lista_di_Vettori ed il suo corrispondente nella Base. Le variabili inseritevengono "tradotte" (viene cioe` visualizzato il loro valore) ed il risultato finale e`:u(+ valore del puntatore della prima lista) = (componenti del vettore della Base che verifica l'uguaglianza)

Come funziona Parse[]? Scopo e sintassi.

Parse[Lista] e` una funzione di puro parsing di una lista, che costituisce l'argomento stesso della funzione. Lafunzione scompone la lista che costituisce il risultato indicando in modo esplicito i valori dei coefficienti e delparametro in modo indipendente dalla lettera scelta per rappresentarli.

Come funziona Parse[]? Il codice commentato.

Parse[d_]:= CompoundExpression[ Print["Valori dei coefficienti:"]; For[z=1, z<Length[d[[1]]], z++, Print[d[[1]][[z]][[1]]," = ",d[[1]][[z]][[2]] ]; ]; Print["Parametro:"]; Print[d[[1]][[Length[d[[1]]]]][[1]]," = ", d[[1]][[Length[d[[1]]]]][[2]]]; ];

Parse[d_]:=Il nome da assegnare alla "funzione" (da intendersi come blocco di codice che, fornito di determinati parametri,esegue alcune operazioni standard e restituisce un risultato) e` totalmente arbitrario: l'unico vincolo e` il nonutilizzo di un nome di funzione gia` esistente nel programma.Tra le parentesi quadre vi e` la lista delle variabili impiegate nella funzione: l'underscore che segue il nome dellavariabile indica il carattere generale della variabile stessa.

CompoundExpression[ [...] ]; Questa istruzione identifica un blocco di operazioni che Mathematica eseguira` in sequenza per poi restituire soloil risultato finale. NOTA: in questo utilizziamo questa istruzione perche` abbiamo piu` di un'istruzione da elaborare; nei casiprecedenti tutto si riduceva, infatti, ad una singola macro-istruzione (un ciclo di For).NOTA 2: per ulteriori informazioni e specifiche tecniche su questa istruzione, rimando alla documentazione diMathematica.

Print["Valori dei coefficienti:"];Scrivo che cosa sto per ottenere. Inserisco questa istruzione fuori dal ciclo di For per evitare che sia processata adogni ripetizione del ciclo.

Mathematica-Dispense-2011.nb 131

Page 132: Mathematica Dispense 2011

For[z=1, z<Length[d[[1]]], z++, [..] ];Analogamente ai cicli di For gia` visti, utilizzo questo strumento come puntatore per esaminare di volta in volta ivari elementi della lista.Si noti che:a) Il controllo avverra` fino a quando la variabile z sara` minore della lunghezza della lista e non minore o uguale,in questo modo l'ultimo elemento (esaminato per z = alla lunghezza della lista) non viene trattato.Perche`?L'ultimo elemento della lista non e` un coefficiente, ma il parametro e desidero quindi porlo in evidenza.b) Tecnicamente, prendo in esame non la lista nella sua interezza, ma il primo elemento di essa: questo perche` lalista con i risultati e` a sua volta una lista nidificata nella lista principale.

Print[d[[1]][[z]][[1]]," = ",d[[1]][[z]][[2]] ];Questa istruzione, eseguita ad ogni ripetizione del ciclo, utilizza il puntatore per esaminare ogni soluzione. Lesoluzioni sono a loro volta una lista dove il primo elemento e` il nome del coefficiente, il secondo e` il suo valore.

Print["Parametro:"];Analogamente a quanto fatto prima, stampo a video cio` che sto per ottenere e metto in evidenza il valore delparametro.

Print[d[[1]][[Length[d[[1]]]]][[1]]," = ", d[[1]][[Length[d[[1]]]]][[2]]];Stampo a video il parametro: prendo quindi il primo elemento della lista generale (la lista delle soluzioni) per poiselezionarne l'ultimo valore (che esprimo come la lunghezza stessa della lista delle soluzioni). Il primo elemento diquesta sotto-sotto-lista e` il parametro, il secondo e` il valore del parametro.

Esercizio 3, Cap.4 (Abbena-Gianella). Siano dati i vettori:u = (1,3,2)v = (-2,1,1)

Trovare una base del sottospazio S da essi generato. Verificato che u, v sono linearmente indipendenti, determinareper quali valori di un parametro t il vettore w=(t,0,-1) appartiene ad S. Disegnate u, v, w ed il sottospazio S.

Suggerimenti. Non dimenticate di ripulire la variabile t, e di definire i vettori come liste.

In[692]:= Cleart, l1, l2

In[693]:= u 1, 3, 2v 2, 1, 1w t, 0, 1

Out[693]= 1, 3, 2

Out[694]= 2, 1, 1

Out[695]= t, 0, 1

Verifichiamo (calcolando la forma ridotta) che {u,v} sono linearmente indipendenti.

In[696]:= RowReduceu, v MatrixForm

Out[696]//MatrixForm=

1 0 17

0 1 57

Troviamo un valore di t per cui w = l1*u+l2*v per qualche l1,l2.

In[697]:= Solvew l1u l2vOut[697]= l1 1, l2 3, t 7

132 Mathematica-Dispense-2011.nb

Page 133: Mathematica Dispense 2011

In[698]:= t 7;w

Out[699]= 7, 0, 1

In[700]:=

Disegnamo ora u,v, w con un grafico (di nome g).

In[701]:=

g Showvettore3Du, "u", Black,vettore3Dv, "v", Red,vettore3Dw, "w", Blue,ImageSize 300

Out[701]=

uv

w

Disegnamo S, lo spazio vettoriale generato da u, v. Per definizione, S = {l1*v+l2*u|l,mR}. E' quindi sufficientedisegnare S come grafico 3D parametrico di (l1*v+l2*u), dipendente dai parametri l1, l2 (comando Parametric-Plot3D[...]). Ripulite prima l1,l2. Date ad l1, l2 un intervallo di valori che comprenda sia 0, 1, sia le soluzioni di w = l1*u +l2*v viste in precedenza.

In[702]:= Clearl1, l2

In[703]:= g ' ParametricPlot3Dl1u l2v, l1, 0, 1, l2, 3, 1, PlotStyle Opacity0.6

Out[703]=

Mathematica-Dispense-2011.nb 133

Page 134: Mathematica Dispense 2011

Sovrapponiamo ora il disegno g di u,v,w con il disegno g' di S (comando Show[g,g']).

In[704]:= Showg, g '

Out[704]=

Estrazione di una base da una lista di vettori usando il metodo degli scarti(lezione Prof. Elsa Abbena). Costruiamo ora un programma Base[L], che prende una lista L={b1,...,bn} di vettori di ugual dimensione, e neestrae un sottoinsieme linearmente indipendente che li generi tutti, stampando ogni passo intermedio di calcolo.

Non è richiesto compredere il funzionamento di questo programma, ma solo di saperlo usare. Per curiosità, quisotto, ma non nel file di testo, solo in quello delle soluzioni, includiamo il testo del programma. Per comprenderlo,è necessario sapere che: - If[test,a,b] esegue il test, nel caso che il test sia vero esegue a, altrimenti esegue b. If[test,a] esegue il test, nelcaso che il test sia vero esegue a, altrimenti non fa nulla. - Do[body[i],{i,n}] esegue nell'ordine i comandi body[1], body[2], ..., body[n].

134 Mathematica-Dispense-2011.nb

Page 135: Mathematica Dispense 2011

In[705]:= BaseL_ :

controlliamo che L sia una lista di vettori di dimensione uguale: in altre parole, una matrice rettangolare

IfNotMatrixQL,Print"L'argomento non è una lista di vettori di uguale dimensione",

costruiamo una base per L: all'inizio è vuota

base ;l, dim DimensionsL;zeros Table0, dim;Print"Vett.Base";

per un numero di passi pari al numero di vettori di L,aggiungiamo un nuovo vettore alla base, ma confermiamo l'aggiunta solo se non produce

dipendenze lineari se la forma ridotta della nuova base non ha tutti zeri nell'ultimissima riga

Do nuovabase Appendbase, Li,IfLastRowReducenuovabase zeros,

base nuovabase,Printi, " ", base

,i, l;

Stampiamo il risultato ad ogni passo ed alla fine

Print"Risultato";base

Sperimentiamo ora il programma Base[...] su alcuni esempi, presi in uno spazio 3D. L'argomento deve essere unalista L = {b1,...,bn} di vettori di ugual lunghezza. Come esempio, scegliamo: b1 = {1,1,0}; b2 = 2*b1; b3 = {3,-1,1}; b4 = b1+b3; b5 = {3,0,2}; L = {b1,b2,b3,b4,b5};

In[706]:= B Base1, 2, 3L'argomento non è una lista di vettori di uguale dimensione

In[707]:= b1 1, 1, 0;b2 2b1;b3 3, 1, 1;b4 b1 b3;b5 3, 0, 2;L b1, b2, b3, b4, b5;

In[713]:= B BaseLVett.Base

1 1, 1, 0

2 1, 1, 0

3 1, 1, 0, 3, 1, 1

4 1, 1, 0, 3, 1, 1

5 1, 1, 0, 3, 1, 1, 3, 0, 2

Risultato

Out[713]= 1, 1, 0, 3, 1, 1, 3, 0, 2

Mathematica-Dispense-2011.nb 135

Page 136: Mathematica Dispense 2011

Il risultato consiste dei vettori non scartati, ed è stato immagazzinato in B:

In[714]:= B

Out[714]= 1, 1, 0, 3, 1, 1, 3, 0, 2

In[715]:=

In[716]:=

Disegnamo ora b1, b3, b5.

In[717]:= a vettore3DB1, "b1", Black;b vettore3DB2, "b3", Red;c vettore3DB3, "b5", Blue;Showa, b, c, ImageSize 300

Out[720]= b1b3

b5

Sottraiamo ora gli elementi di B da L (comando Complement[L,B]), ottenendo i vettori "scartati" nellacostruzione della base, e disegnamo un grafico g che contenga anch'essi.

In[721]:= L2 ComplementL, BOut[721]= 2, 2, 0, 4, 0, 1

In[722]:= d vettore3DL21, "2b1 scartato", Green;e vettore3DL22, "b1b3scartato", Cyan;g Showa, b, c , d, e, ImageSize 300

Out[724]= b1b3

b52b1 scartatob1b3scartato

Alcuni dei vettori scartati di L appartengono al piano S generato da primi due vettori di B, siano essi b1, b3.Verifichiamolo disegnando tale piano come un grafico di nome g'.

136 Mathematica-Dispense-2011.nb

Page 137: Mathematica Dispense 2011

Per definizione, S = {l1*b1+l2*b3|l,mR}. E' quindi sufficiente disegnare S come grafico 3D parametrico di(l1*b1+l2*b3), dipendente dai parametri l1, l2 (comando ParametricPlot3D[...]).

Suggerimenti. Ripulite prima l1,l2. Date ad l1, l2 un intervallo di valori che comprenda sia 0, 1, sia le soluzioni dib2 = l1*b1 + l2*b3 e di b4 = l1*b1 + l2*b3 (altrimenti questi vettori spariranno dal grafico).

In[725]:= Clearl1, l2Solveb2 l1b1 l2b3, l1, l2Solveb4 l1b1 l2b3, l1, l2

Out[726]= l1 2, l2 0

Out[727]= l1 1, l2 1

In[728]:= g ' ParametricPlot3Dl1b1 l2b3, l1, 0, 2, l2, 0, 1, Boxed False

Out[728]=

Per disegnarei vettori ed il piano insieme, basterà infine sovrapporre il grafico g' di S al grafico g dei vettori b1,b2, b3, b4, b5 (il comando è Show[g,g']).

In[729]:= Showg, g ',Boxed False, ImageSize 300

Out[729]=

Capitolo 5: esercizi su vettori ortogonali.Generazione di una base ortonormale (Gram-Schmidt).

Esercizio 5 del Novembre 2003.

Dato il sottospazio H generato dal vettore 1, 1, 3, 1 dello spazio R4,trovare una base ortonormale per il sottospazio ortogonale ad H.

In[730]:= u 1, 1, 3, 1;

Definiamo una applicazione lineare A = {u}, tale che AX=0 se e solo se X è ortogonale a u.

Mathematica-Dispense-2011.nb 137

Page 138: Mathematica Dispense 2011

In[731]:= A u MatrixForm

Out[731]//MatrixForm=

1 1 3 1

Una base dello spazio delle soluzioni di AX=0 si può calcolare con il comando NullSpace, ed è anche una basedello spazio dei vettori ortogonali a u.

In[732]:= u1, u2, u3 NullSpaceuOut[732]= 1, 0, 0, 1, 3, 0, 1, 0, 1, 1, 0, 0

La base trovata ha dimensione 3, e consiste di certi vettori u1, u2, u3. Verifichiamo che u1, u2, u3 sono ortogonaliad u.

In[733]:= u1.u, u2.u, u3.uOut[733]= 0, 0, 0

Estraiamo, attraverso proiezioni e sottrazioni successive, una base ortonormale dalla base u1, u2, u3.

Esercizio 7 del Novembre 2001.

Siano datiu = (1,-h,0)v = (h,-1,0)w = (h,2,-h)

(1) Trovare un h per cui u, v, w sono nello stesso piano S.(2) Trovare un h per cui u, v sono paralleli.(3) Trovare un h per cui il parallelogramma u, v ha area 6.(4) Trovare un h per cui il tetraedro u, v, w ha volume 2.

Definisco i vettori u,v,w, e carico il pacchetto MathMacro.txt. Ricordatevi di ripulire h.

In[734]:= Clearh;u 1, h, 0;v h, 1, 0;w h, 2, h;

(1) Trovare un h per cui u, v, w sono nello stesso piano S.Se i tre vettori formano un piano uno dei tre puo' essere espresso come combinazione lineare degli altri due. Questacondzione si puo' esprimere dicendo che il determinante della matrice {u,v,w} e' nullo.

In[738]:= s SolveDetu, v, w 0Out[738]= h 1, h 0, h 1

In[739]:= TableShowvettore3D u . sn, "u", Red,vettore3Dv . sn, "v", Blue,vettore3Dw . sn, "w", Green, n, 1, Lengths

Out[739]= uv

w, uv

w, uv

w

138 Mathematica-Dispense-2011.nb

Page 139: Mathematica Dispense 2011

In[740]:=

(1 )Soluzione alternativaRisolviamo l'equazione av+bu+cw=0 nelle incognite a,b,c,h, scartando la soluzione a=b=c=0. Ricordatevi diripulire le variabili a,b,c.

In[741]:= Cleara, b, c

In[742]:= Solvea u b v c w 0, a, b, c, hReducea u b v c w 0, a, b, c, h

Solve::svars : Equations may not give solutions for all "solve" variables.

Out[742]= a 0, b 0, c 0, b a, c 0, h 1, a 0, c b

2, h 0, b a, c 0, h 1

Out[743]= a 0 && b 0 && c 0 a 0 && c b

2&& h 0

b a b a && c 0 && a 0 && h b

a

La soluzione è quindi h=0. Disegnamo u, v, w ed il piano S = {a u + b v| a, b in R}in questo caso. S è una curva parametrica (usare il comando ParametricPlot3D).

In[744]:= h 0;

In[745]:= Showvettore3Du, "u", Red,vettore3Dv, "v", Blue,vettore3Dw, "w", Black,ParametricPlot3Da u b v,

a, 0, 1, b, 2, 1, DisplayFunction Identity,ImageSize 300, Axes True

Out[745]=

(2) Trovare un h per cui u, v sono paralleli. Risolviamo l'equazione u x v = (0,0,0) (u vettoriale v = (0,0,0)). Ilprodotto vettoriale si indica con Cross. Ricordatevi di ripulire la variabile h.

In[746]:= Clearh

In[747]:= SolveCrossu, v 0, 0, 0, hOut[747]= h 1, h 1

Le due soluzioni trovate corrispondono a u=v ed a u = -v.

Mathematica-Dispense-2011.nb 139

Page 140: Mathematica Dispense 2011

In[748]:= h 1;Show

vettore3Du, "u", Red,vettore3Dv, "v", Blue,vettore3Dw, "w", Black,

ImageSize 300,Axes True

Out[749]=

uv

w

1.00.5

0.0

0.5

1.01

0

1

2

0.0

0.5

1.0

In[750]:= h 1;Show

vettore3Du, "u", Red,vettore3Dv, "v", Blue,vettore3Dw, "w", Black,

ImageSize 300,Axes True

Out[751]= uv

w

0.0

0.5

1.0

1

0

1

2

1.0

0.5

0.0

(3) Trovare un h per cui il parallelogramma u, v ha area 6. L'area del parallelogrammo è pari al prodotto vettori-ale di u, v. Impostiamo quindi l'equazione: norma di uxv = 6*6

In[752]:= Clearh

140 Mathematica-Dispense-2011.nb

Page 141: Mathematica Dispense 2011

In[753]:= SolveCrossu, v.Crossu, v 66, h

Out[753]= h 5 , h 5 , h 7 , h 7

In[754]:= h 7 ;

u, v

Out[755]= 1, 7 , 0, 7 , 1, 0

In[756]:=

In[757]:= Showvettore3Du, "u", Black,vettore3Dv, "v", Black,vettore3Du v, "uv", Red,vettore3Du, u v, "uuv", Blue,vettore3Dv, u v, "v,uv", Green,

ImageSize 300,Axes True

Out[757]=

u v

uv

uuvv,uv0

1

2

3

3

2

1

0

0.000.050.10

(4) Trovare un h per cui il tetraedro u, v, w ha volume 2.

Soluzione 1. Utilizziamo la formula: (1/6)Det[{u,v,w}] = volume tetraedro compreso tra u, v w

In[758]:= Clearh;NReduce1 6 Detu, v, w 2

Out[759]= h 2.43484 h 1.21742 1.85643 h 1.21742 1.85643

Soluzione 2. Anzichè utilizzare una formula già data, proviamo a ottenere il volume del tetraedro con un ragiona-mento, quindi ad imporre che valga 2.

In[760]:= Clearh;

In[761]:= Nel caso che il comando ?Norm risponda che Norm non e' definito, definire esplicitamente Normx_: x.xNelle versioni dalla 5 in poi non e' necessario

Calcoliamo il prodotto vettoriale di u, v.

In[762]:= uxv Crossu, v

Out[762]= 0, 0, 1 h2

Tale prodotto è pari all'area del parallelogrammo di lati u, v, dunque pari al doppio dell'area del triangolo di lati u,v.

In[763]:= baseuv Normuxv 2

Out[763]=1

2Abs1 h2

u x v è ortogonale al piano di u, v. Dunque il versore versuxv associato ad uxv e' il versore ortogonale al piano diu, v. Calcoliamolo:

Mathematica-Dispense-2011.nb 141

Page 142: Mathematica Dispense 2011

In[764]:= versuxv uxvNormuxv

Out[764]= 0, 0,1 h2

Abs1 h2

L'altezza del tetraedro di lati u, v, w rispetto alla base u, v è pari alla lunghezza della proiezione di w sul versoreversuxv ortogonale al piano di u, v. Dunque si calcola con un prodotto scalare dei due vettori:

In[765]:= altezzauv w.versuxvproiezuv versuxvaltezzauv

Out[765]= h 1 h2Abs1 h2

Out[766]= 0, 0, h 1 h22

Abs1 h22

Infine, il volume del tetraedro è pari all'area di base per l'altezza diviso 3:

In[767]:= Volume baseuvaltezzauv 3

Out[767]= 1

6h 1 h2

Risolviamo ora numericamente l'equazione Volume = 2.

In[768]:= NSolveVolume 2, hOut[768]= h 2.43484, h 1.21742 1.85643 , h 1.21742 1.85643

Una sola delle soluzioni trovate è un numero reale, quindi accettabile:

In[769]:= h 2.434841368216901`;

Disegnamo ora, per il valore di h che abbiamo trovato, tutti i vettori utilizzati: u, v, il piano di u, v, il prodotto uxv,il suo versore, e la proiezione di w su tale versore (l'altezza del tetraedro).

142 Mathematica-Dispense-2011.nb

Page 143: Mathematica Dispense 2011

In[770]:= Showvettore3Du, "u", Black,vettore3Dv, "v", Black,vettore3Duxv, "uxv", Red,vettore3Dversuxv, "versuxv", Green,vettore3Dproiezuv, "proiezuv", Cyan,vettore3Dw, "w", Black,ParametricPlot3Da u b v, a, 0, 1, b, 0, 1, DisplayFunction Identity,ImageSize 300,Axes True,per una visione frontaleViewPoint Front

Out[770]=

Esercizio 8 del Novembre 2003.

Dato il sottospazio W degli (x,y,z) di R3 tali che x-2y+z=0, 2x-y-z=0, trovare una base di W e dello spazioortogonale a W.

Soluzione. Definiamo una applicazione lineare A tale che A.X=0 se e solo se X e' in W.

In[771]:= A 1, 2, 1, 2, 1, 1Out[771]= 1, 2, 1, 2, 1, 1

Il Kernel o NullSpace di A è W. Una base del Kernel di A, ottenibile con il comando NullSpace[], è quindi unabase di W. Tale base è un insieme {u}, che consiste di un solo vettore u:

In[772]:= u NullSpaceAOut[772]= 1, 1, 1

Definiamo una applicazione lineare B che si annulla sui vettori ortogonali a u. Il Kernel o NullSpace di B èl'ortogonale di W. Una base {u1,u2} del Kernel di B, ottenibile con il comando NullSpace[], è quindi una basedell'ortogonale di W.

Mathematica-Dispense-2011.nb 143

Page 144: Mathematica Dispense 2011

In[773]:= B uu1, u2 NullSpaceB

Out[773]= 1, 1, 1

Out[774]= 1, 0, 1, 1, 1, 0

Esercizio 11 del Novembre 2003.

Determinare una base ortonormale del piano ortogonale al vettore i+j-k.

Gram-Schmidt: un metodo per generare una base ortonormale data una lista di vettori.

Il metodo Gram-Schmidt consente di prendere un qualunque insieme L di vettori linearmente indipendenti,e di generare una base ortonormale equivalente ad L. Il comando in Mathematica è Orthogonalize, gia' visto in unodei precedenti esercizi.

Qui potete trovare la definizione di un comando BaseOrt[ListaVettori], che prende una lista L di vettoriqualunque, e genera una base ortonormale dello spazio vettoriale generato da L usando Gram-Schmidt, e stam-pando i calcoli svolti ad ogni passo. A differenza di quanto fa il comando Orthogonalize di Mathematica, quivettori linearmente dipendenti dai vettori precedenti vengono scartati.

In[775]:= L 0, 1, 1, 2, 3, 5, 0, 1, 0DimensionsL

Out[775]= 0, 1, 1, 2, 3, 5, 0, 1, 0

Out[776]= 3, 3

In[777]:= OrthogonalizeL

Out[777]= 0,1

2,

1

2,

2

3,

1

6,

1

6,

1

3,

1

3,

1

3

Se la lista L è linearmente dipende il comando Orthogonalize restituisce dei vettori nulli.

In[778]:= L 0, 1, 1, 2, 3, 5, 0, 1, 0, 7, 3, 4, 0, 1, 2DimensionsLOrthogonalizeL

Out[778]= 0, 1, 1, 2, 3, 5, 0, 1, 0, 7, 3, 4, 0, 1, 2

Out[779]= 5, 3

Out[780]= 0,1

2,

1

2,

2

3,

1

6,

1

6,

1

3,

1

3,

1

3, 0, 0, 0, 0, 0, 0

BaseOrt. Per scaricare BaseOrt, usate SetDirectory["path"] per dare l'indirizzo del file MacroMath.txt dimacro del corso. Quindi scrivere MathMacro.txt.

In[781]:= Un comando che mette in grassetto un testo BoldFaces_ : StyleForms, FontWeight "Bold";

144 Mathematica-Dispense-2011.nb

Page 145: Mathematica Dispense 2011

In[782]:= BaseOrtL_ : Block

Lista variabili temporanee di BaseOrtn, m, zero, base, dim, i, v, w,

Blocchiamo l'esecuzione se i vettori non hanno la stessa lunghezza

IfMatrixQL False, Print"L'argomento non è una lista di vettori di uguale lunghezza"; Abort;

Sia n il numero dei vettori, m la loro dimensione n, m DimensionsL;zero Table0, m;

A ogni passo sottraiamo al vettore Li le sue proiezioni su gli elementibase1, ..., basedim

della base ortonormale in costruzione. Se ciò che resta è zero,lo normalizziamo e lo aggiungiamo alla base ortonormale. Altrimenti scartiamo Li.

Forbase ; dim 0; i 1, Inizio FOR

i n, Test di uscita FOR

i, Incremento FOR

Corpo FOR Print"Passo n." BoldFace, i, ":";

v Li j1

dim

basej.Libasej ;

v FullSimplifyv; v proiezione di Li su base. FullSimplify semplifica il piu' possibile la notazione di v

Ifv zero,

Se vzero, normalizziamo v e lo aggiungiamo a base w v v.v ; w ha norma 1 w FullSimplifyw;base Appendbase, w; Aggiorniamo il contatore degli elementi di base dim;Print"Vettore L", i, " ", Li, " trasformato in: \n", w,

Se vzero, scartiamo v Print"Vettore L", i, " ", Li, " scartato";

Print"Risultato:" BoldFace, "si è ottenuta la base ortonormale";base

Sperimentiamo BaseOrt su una lista di vettori L linearmente dipendenti.

Mathematica-Dispense-2011.nb 145

Page 146: Mathematica Dispense 2011

In[783]:= L 0, 1, 1, 2, 3, 5, 0, 1, 0, 7, 3, 4, 0, 1, 2DimensionsL

Out[783]= 0, 1, 1, 2, 3, 5, 0, 1, 0, 7, 3, 4, 0, 1, 2

Out[784]= 5, 3

In[785]:= BaseOrtLPasso n.1:

Vettore L1 0, 1, 1 trasformato in:

0,1

2,

1

2

Passo n.2:

Vettore L2 2, 3, 5 trasformato in:

2

3,

1

6,

1

6

Passo n.3:

Vettore L3 0, 1, 0 trasformato in:

1

3,

1

3,

1

3

Passo n.4:

Vettore L4 7, 3, 4 scartato

Passo n.5:

Vettore L5 0, 1, 2 scartato

Risultato:si è ottenuta la base ortonormale

Out[785]= 0,1

2,

1

2,

2

3,

1

6,

1

6,

1

3,

1

3,

1

3

Appendice 1. Autovalori e autovettoriI comandi Eigenvalues e Eigenvectors valutano autovalori e autovettori di una matrice quandrata. Vediamo alcuniesempi.

In[786]:= m 2.3, 4.5, 1.0 , 2.7, 3.1 , 4.5 , 1.4, 2.6, 1.1lambda Eigenvaluesmav Eigenvectorsm

Out[786]= 2.3, 4.5, 1., 2.7, 3.1, 4.5, 1.4, 2.6, 1.1

Out[787]= 6.71366, 3.38661, 3.17295

Out[788]= 0.687405, 0.709103, 0.156992,0.579717, 0.613393, 0.536357, 0.856699, 0.0521516, 0.513174

In[789]:= m.av1lambda1av1

Out[789]= 4.615, 4.76068, 1.05399

Out[790]= 4.615, 4.76068, 1.05399

146 Mathematica-Dispense-2011.nb

Page 147: Mathematica Dispense 2011

In[791]:= Cleara, bm a, 2b, a, bEigenvaluesm

Out[792]= a, 2 b, a, b

Out[793]= 1

2a b a2 10 a b b2 ,

1

2a b a2 10 a b b2

Appendice 2. Un programma che applica il Teorema di Cramer (a sistemi di 3equazioni in 3 incognite). Da un'idea dello studente del primo anno di FisicaTommaso Demarie - Torino, 23 Ottobre 2003Questa appendice contiene un esempio di programma svolto da studenti del primo anno.

Il comando Cramer[]. Prima versione.

Supponiamo dato un sistema di 3 equazioni in 3 incognite, come segue: ax+by+cz = b1 dx+ey+fz = b2 gx+hy+iz = b3 Scriveremo un programma Cramer[], per risolvere il sistema dato usando il metodo di Cramer.

Funzionamento di Cramer[]. Dopo aver scritto il comando "Cramer[]" e aver dato l'invio, il computer cichiederà di scrivere, in una apposita finestra, ogni valore della matrice

A = a b cd e fg h i

dei coefficenti e della matrice B

B = b1b2b3

dei termini noti del sistema. Fatto ciò, il comando provvederà a fornirci i valori delle tre incognite x,y,z, nellaforma:

X = xyz

Confronto tra Cramer[] e Reduce[]. Il comando "Reduce" ci permette di ottenere gli stessi risultati. Lo svantag-gio di "Reduce,", tuttavia, è che manca di spiegazioni: lo utilizziamo come se fosse una "scatola nera". Può quindiessere interessante scrivere noi stessi un comando, e capirne il funzionamento grazie al Teorema di Cramer. Nota. Il comando Cramer[], proprio perchè basato sul Teorema di Cramer, non può essere applicato a matrici condeterminante uguale a zero.

Note sui comandi utilizzati. 1. Il comando a = Input[messaggio]. Questo comando apre una finestra di dialogo, scrive un messaggio dispiegazione, e aspetta che noi inseriamo un v valore nella finestra. Quando noi chiudiamo la finestra, il valore vviene assegnato alla variabile a. Un messaggio viene detto "stringa" in Informatica. Si scrive tra virgolette. Un "a capo" si indica con "\n". 2. Uso di Variabili Locali. L'uso dell'istruzione Block[ {lista_variabili_locali} comando1; ...; comando_n] rendetemporanee le assegnazioni fatte dal programma Cramer[] alle variabili a, b, c, ..., x, y, z. Terminata l'esecuzionedel programma, queste variabili riprendono il valore che avevano prima dell'esecuzione. Quest'uso delle variabili e'detto locale al comando, dato che non ha effetto sul valore della variabile al di fuori del comando. Ha il vantaggiodi non modificare precedenti assegnazioni ad a, b, c, ..., x, y, z, che possono ancora servirci. 3. La variabile detA. Si noti anche l'uso della variabile "detA", per evitare di calcolare piu' volte il determinante diA. E' buona norma evitare di calcolare piu' volte la stessa espressione, per ridurre i tempi di calcolo. In questocaso, tuttavia, dobbiamo aggiungere che il tempo guadagnato e' del tutto irrilevante.

Mathematica-Dispense-2011.nb 147

Page 148: Mathematica Dispense 2011

Definizione di Cramer[].

In[794]:= Cramer : Block Lista delle variabili usate localmente al comando Cramer

a, b, c, d, e, f, g, h, i, A, b1, b2, b3, B, x, y, z, detA,

Lettura dei 12 dati a Input"Primo coefficente del vettore 1";

b Input"Secondo coefficente del vettore 1";c Input"Terzo coefficente del vettore 1";d Input"Primo coefficente del vettore 2";e Input"Secondo coefficente del vettore 2";f Input"Terzo coefficente del vettore 2";g Input"Primo coefficente del vettore 3";h Input"Secondo coefficente del vettore 3";i Input"terzo coefficente del vettore 3";

Aa b cd e fg h i

;

Print"A", MatrixFormA;detA DetA;Print"DetA", detA;

b1 Input"Termine noto della prima equazione";b2 Input"Termine noto della seconda equazione";b3 Input"Termine noto della terza equazione";B b1, b2, b3;

Print"B", MatrixFormB;

Calcolo delle soluzioni se detA 0 IfdetA 0,

Caso DetA0

x

Detb1 b cb2 e fb3 h i

detA; y

Deta b1 cd b2 fg b3 i

detA; z

Deta b b1d e b2g h b3

detA;

X x, y, z; Print"\n Le soluzioni del sistema sono \n X ", MatrixFormX ,

Caso DetA0

Print"\n Essendo il determinante uguale a zero,il teorema di Cramer non può essere applicato";

Esempio di uso del comando Cramer[].

Valutare la sezione precedente per insegnare a Mathematica il comando Cramer[]. Quindi valutare Cramer[] eseguire le istruzioni che si presentano.

In[795]:= Cramer

Il Comando Cramer[]. Seconda Versione.

E' possibile ridurre il tempo di immissione dati inserendoli sotto forma di lista anziche' di elementi singoli. Dobbi-amo solo scrivere un messaggio avvisando che i dati devono essere introdotti sotto forma di una lista di 12 ele-menti. Dato che il messaggio e' lungo, scriveremo più messaggi msg1, msg2, ... e dopo li concateneremo scrivendomsg1 <> msg2 <> ... . Dobbiamo anche introdurre degli IF per bloccare l'esecuzione quando il dato non è una lista, oppure è una lista ma

148 Mathematica-Dispense-2011.nb

Page 149: Mathematica Dispense 2011

non di 12 elementi. L'esecuzione si blocca con il comando Abort[].

Definizione di Cramer2[].

In[796]:= Cramer2 : Block Lista delle variabili usate localmente al comando Cramer

forma1, forma2, messaggio, dati, l, a, b, c, d, e, f, g, h, i, A, b1, b2, b3, B, x, y, z, detA,

Chiediamo i 12 dati sotto forma di una lista di 12 elementi forma1 "\n ax by cz b1 \n dx ey fz b2 \n gx hy iz b3 \n";

forma2 "\n a,b,c,b1, d,e,f,b2, g,h,i,b3 \n";

messaggio "Introdurre il sistema" forma1 "nella forma di una lista di 12 elementi: " forma2;dati Inputmessaggio;

Se il dato non e' una lista o non ha 12 elementici fermiamo IfNotListQdati, Print"I dati non sono stati inseriti sotto forma di lista: \n", dati; Abort;l Lengthdati;If l 12, Print"Inseriti n. ", l, " dati anziche' 12 come richiesto: \n", dati; Abort;

Se il dato è una lista di 12 elementi proseguiamo a, b, c, b1, d, e, f, b2, g, h, i, b3 dati;

Aa b cd e fg h i

;

Print"A", MatrixFormA;

detA DetA;Print"DetA", detA;

B b1, b2, b3;Print"B", MatrixFormB;

Stampa dei risultati IfdetA 0,

Caso DetA0

x

Detb1 b cb2 e fb3 h i

detA; y

Deta b1 cd b2 fg b3 i

detA; z

Deta b b1d e b2g h b3

detA;

X x, y, z; Print"\n Le soluzioni del sistema sono \n X ", MatrixFormX ,

Caso DetA0

Print"\n Essendo il determinante uguale a zero,il teorema di Cramer non può essere applicato";

Esempio di uso del comando Cramer2[].

Valutare la sezione precedente per insegnare a Mathematica il comando Cramer2[]. Quindi valutare Cramer2[] eseguire le istruzioni che si presentano.

In[797]:= Cramer

Mathematica-Dispense-2011.nb 149

Page 150: Mathematica Dispense 2011

Esercitazione 3A: Rette, Piani, Sfere, Coni, Cilindri e Coniche

Esercitazione 3B: Rette e Piani, Algebra Lineare

Appendice: Algebra, Analisi e soluzioni di equazioni e sistemi (non fa parte del corso)

Matematica curiosa e divertente (con esempi di utilizzo di Mathematica)

Non fa parte del corso

150 Mathematica-Dispense-2011.nb