Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
<div>
Scarica il
</div>Daniele Lupo Appunti di Mathematica
Programmazione
ü Introduzione
Come potete vedere e avete visto finora, Mathematica dispone di potentissimi comandi che
permettono di eseguire operazioni e calcoli che richiederebbero un tempo notevole per poter essere
eseguiti in qualsiasi altro modo (a me conosciuto). Soprattutto i comandi per il calcolo simbolico
sono molto potenti, e permettono di poter effettuare cose che per esempio, in Fortran non si possono
neanche pensare.
Sembra naturale ed ovvio, quindi, disporre di strumenti per poter mettere assieme questi comandi, in
modo da poter eseguire una serie di operazioni in maniera automatizzata, esattaemente come si tratta
per i programmi veri e propri; anzi, Mathematica consiste proprio di in un linguaggi di
programmazione ad alto livello con comandi molto potenti, come avete anche visto con i vostri occhi
e le vostre agili dita sulla tastiera.
Vedremo adesso i concetti base di programmazione in Mathematica, anche se probabilmente sarà
una lettura molto veloce per molti di voi, dato che i principi base sono gli stessi per qualsiasi
linguaggio di programmazione.
Quello che permette Mathematica, invece, è un controllo più avanzato per quanto riguarda le
interfacce visuali, usando entrambi i sistemi Java e .NET. Tuttavia io non so ancora programmare ad
oggetti, per cui le interfacce grafiche in Mathematica, come in C++, mi sono oscure. Tuttavia
cercherò almeno di introdurvi nel discorso, in modo da poter cercare da soli la vostra strada per
raggiungere la meta (miiii, che poetaaaa!!!! da leggere alla Aldo...).
ü Comandi base
Cominciamo direttamente con un esempio...
Inizio
Print@"Ciao bello!"D
In[1]:= Ciao bello!
Quello che abbiamo ottenuto è l'equivalente in Mathematica del famoso programma "Hello World"
che qualsiasi professore di qualsiasi corso di qualsiasi università vi fa il primo giorno... Solo che qua
le cose sono decisamente più semplici, dato che non esistono main ed altre cavolatine varie
(qualcuno ha detto Basic?). 200
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
Il comando Print, effettivamente, non fa altro che rappresentare il suo argomento sullo schermo; in
questo caso, una stringa. Ebbene sì, miei cari allievi pendenti dalle mie labbra: Mathematica
permette anche di gestire le stringhe, fra l'altro con la stessa potenza (quasi, va') del calcolo.
D'altronde, essendo un programma di calcolo simbolico, che difficoltà ha nel gestire stringhe che
altro non sono se una serie di simboli?
Abbiamo anche visto che le funzioni che possiamo definire in Mathematica possono fare ben più che
dare come risultato un mero numero: in effetti, possiamo anche pensarle come le funzioni dei
linguaggi di programmazione, che riescono a fare un compito assegnato qualsiasi, ammesso che si
riesca a programmarlo... Ma questa è un altra storia. Consideriamo, per esempio, la seguente
funzione: 8t,
esprod@x_, y_, t_, n_IntegerD := FullSimplify@Series@x y, 0, n<DD
In[2]:= +
esprod@x ^ 2 Sqrt@xD, Gamma@xD, x, 3D
In[3]:= è!!! H6 L
è!!!
1 1 + π −
+ +
− 2 2 3ê2
EulerGamma x
x x
EulerGamma
Out[3]= 12
x H−2
1
+ − π − +
3
2 2 5ê2
EulerGamma x EulerGamma EulerGamma 4 Zeta@3DL x
H6 L
12
1 7ê2
2 + π +
2 3
EulerGamma x O@xD
12
La nostra funzione, in questo caso, non restituisce un numeri, ma un'espressione, come potete ben
vedere. Possiamo considerarla come un sottoprogramma, come una macro, come quello che volete,
insomma. Le funzioni che si definiscono possono contenere un numero arbitrario di funzioni e
comandi, diventando dei veri e propri programmi che girano all'interno di Mathematica. Il concetto è
proprio questo, ed in questo risiede buona parte della potenza che un utente avanzato riesce a
spremere dal programma. Non per niente in giro esiste una guida in inglese di 3400 pagine su come
programmare in Mathematica... Brrrrrr.... mi vengono i brividi solo a pensare di aprire un simile
libro...
Tranquilli, le cose che faremo qua sono molto, mooolto più semplici (e con questo mi sono dato
dell'imbecille).
Cominciamo a vedere i comandi, per scrivere e ricevere dati.
201
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
Input ed output
Abbiamo visto, prima, come importare ed esportare dati da files, in modo semplice e diretto.
Abibamo anche visto, appena sopra, che è possibile dare in pasto ad un programmino opportuni
argomenti, e inoltre abbiamo visto come stampare i risultati mediante il comando Print. Tuttavia, in
maniera analoga ad altri casi, possiamo anche introdurre dei dati mediante il comando Input:
richiede un valore, esplicitando la richiesta mediante string
Input["String"]
Possiamo eseguire, per esempio, questo comando:
=
a Input@"Inserisci il numero"D
In[4]:= 555
Out[4]= a
In[5]:= 555
Out[5]=
Qua non posso mostrarlo, ma appena eseguiamo il comando, appare una finestra del kernel del
programma, dove compare sopra la stringa che abbiamo scritto, e sotto un riquadro dove scrivere il
valore desiderato. In questo modo ho introdotto il valore, che è stato assegnato, come avete visto,
alla variabile a. Questo è utile quando dobbiamo scrivere funzioni con molti parametri, e magari
utilizziamo alcuni solo in situazioni particolari. Tuttavia si tratta sempre di valori che dobbiamo
introdurre noi, per cui non è possibile effettuare Input se la funzione deve essere automatizzata, cioè
deve essere effettuata senza il nostro intervento, In questo caso bisogna passare tutti gli argomenti
necessari, oltre a magari definire prima delle variabili opportune.
Come abbiamo visto, per l'output su schermo possiamo usare il comando Print, oltre che i vari
comandi di disegno nel caso ci servano. 202
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
disegno@D := Sequence@
In[6]:= =
n Input@"Inserisci il numero di seni:"D,
Plot@
Evaluate@ 8i,
Table@
D
Sqrt@iD Sin@i xD, n<
D,
8x, 0, 10<,
→
D,
PlotStyle Hue@0.4D <> <>
Print@"Hai disegnato " ToString@nD " seni."D
D Clear@nD
disegno@D;
In[7]:= 2
1 2 4 6 8 10
-1
-2
Hai disegnato 6 seni.
In questo programmino abbiamo visto tutti e tre i metodi: il modo di avere un input al programma, e
due output: uno grafico, che si ottiene semplicemente con il comando Plot, e l'altro ottenuto
mediante Print.
Possiamo anche scrivere e leggere file che contengano espressioni di Mathematica, se non abbiamo
bisogno di importare ed esportare, semplificando la sintassi. Supponiamo che dobbiamo scrivere
un'espressione, e di volerla salvare su un file perchè, per esempio, dobbiamo uscire con la nostra
ragazza, ed al ritorno, se saremo tristi e soli perchè ci ha lasciati, possiamo aprire un nuovo file senza
dover ricaricare e valutare quello vecchio, continuando da dove ci siamo interrotti:
203
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
legge un file contenente espressioni di Mathematica,
Get: << restituendo il risultato dell' ultima
scrive l' espressione in un file. Possiamo scriverne più di
Put: >> una nello stesso file con la forma Put@ex1, ex2,...., " file "D
accoda l' espressione nel file
PutAppend: >>>
Dicevamo, che avevamo il seguente output:
−
Expand@Hx 6L ^ 7D
In[8]:= −279936 + − + − + − +
2 3 4 5 6 7
326592 x 163296 x 45360 x 7560 x 756 x 42 x x
Out[8]=
Adesso, vogliamo memorizzarlo nel file
>>
% "espanso"
In[9]:=
Questo comando memorizza l'espressione nel file. Vediamo se lo contiene:
!! espanso
In[10]:= -279936 + 326592*x - 163296*x^2 + 45360*x^3 - 7560*x^4 + 756*x^5 -
42*x^6 +
x^7
Abbiamo visto il contenuto del file. Se vogliamo ricaricarlo in memoria, a questo punto basta fare
= <<
espr espanso
In[11]:= −279936 + − + − + − +
2 3 4 5 6 7
326592 x 163296 x 45360 x 7560 x 756 x 42 x x
Out[11]= espr
In[12]:= −279936 + − + − + − +
2 3 4 5 6 7
326592 x 163296 x 45360 x 7560 x 756 x 42 x x
Out[12]=
Come potete vedere, adesso espr contiene l'espressione che avevamo salvato in precedenza. Notate
come !! non restituisce l'espressione, ma solo il contenuto del file. Abbiamo comunque bisogno del
comando Get per poter leggere il file, interpretarlo e memorizzarlo nella variabile.
A volte, invece, mentre lavoriamo, può capitare di non dover memorizzare tutte le espressioni in una
volta, ma a poco a poco. In questo ci viene in aiuto il comando PutAppend:
204
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
ê Hx êê
− −
ExpandAll@Hx 4L ^ 5 2L ^ 7D TraditionalForm
In[13]:=
Out[13]//TraditionalForm= 5
x
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅ -
- + - + - + -
7 6 5 4 3 2
x 14 x 84 x 280 x 560 x 672 x 448 x 128
4
20 x
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅ +
- + - + - + -
7 6 5 4 3 2
x 14 x 84 x 280 x 560 x 672 x 448 x 128
3
160 x
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅ -
- + - + - + -
7 6 5 4 3 2
x 14 x 84 x 280 x 560 x 672 x 448 x 128
2
640 x
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ
ÅÅÅÅÅÅÅÅÅÅÅÅÅ +
- + - + - + -
7 6 5 4 3 2