MathStat0
Primo contatto con Mathematica

G. D'Agostini

Si assume che chi e` interessato all'uso di queste note sia in grado di lanciare il programma Mathematica (cliccando sull'apposita icona, o digitando il comando Mathematica, a seconda del sistema operativo) e abbia una qualche dimestichezza con il sistema di menu sulle barre di comando. Quando Mathematica e` attivo sul computer sullo schermo si presentano: la barra comandi con menu` principali File, Edit, Cell, Format, Input, Kernel, Find, Window e Help (si ricorda che la lettera sottolineata e' quella che premuta insieme ad Alt produce lo stesso effetto di cliccare con il mouse su tale opzione); una finestra vuota dal titolo Untitled-1; una barra verticale con simboli matematici e lettere greche.

Se siete arrivati a questo punto siamo pronti ad iniziare. Cliccate sulla finestra vuota e quindi scrivete "1+1". Al momento in cui cominciare a digitare comparira` sulla destra una parentesi quadra azzurra. Essa rappresenta la cella entro la quale si trovano i comandi. Dopo aver scritto "1+1" bisogna dare a Mathematica il comando di esecuzione dell'istruzione. Si premano contemoraneamente Shift-Enter (equivalenti italiani?). Segue una attesa visibilmente troppo lunga per la banalità dell'operazione. Il motivo è che con il primo comando Mathematica esegue dei preamboli che non verrano piu ripetuti.

1 + 1

Nel momento in cui si dà l'ordine di esecuzione l'istruzione viene indicata con "In[1]:=".  Il risultato con "Out[1]=". Sulla destra compare il simbolo di cella anche sulla riga del risultato ed inoltre una sovra-cella che comprende sia l'istruzione che il risultato.

Il sistema e` pronto ad accettare un nuovo comando, che sarà "In[2]". Se "1+1" sembrava banale ecco ora una serie di istruzioni che illustrano le potenzialita` di Mathematica. Sono scelti comandi dal significato intuitivo che non richiedono spiegazione. Nel caso di dubbio si consulti l'Help della barra comandi, che contiene integralmente il manuale di Mathematica, o l'help rapido con "?", come mostrato nei prossimi esempi.

Integrate[Sin[a x], x]

?Integrate

?Sin

?Cos

Integrate[x^2 + 2  x, {x, 1, 2}]

D[x^2 + x^3  y^4, x]

D[%, y]

Integrate[%, y]

?%

sol = Solve[a x + b == 0, x]

Si noti:

x

Mentre

x /. sol[[1, 1]]

Oppure

Flatten[sol]

x /. %

?/.

Solve[{5 x + 3  y - 2 == 0, x + 2  y + 1 == 0}, {x, y}]

------------------------------------------------------------------------------------------

Expand[(a + b + c)^3]

Simplify[%]

% /. c -> (a + b)

% /. a -> 3 /. b -> 1/5

N[%]

Sqrt[%]

%/8

%*Pi

Log[%]

E^%

Exp[%%]

Log[10, %]

10^%

-20 %

Sin[% ]

Sin[%% Degree]

Abs[%]

Round[%]

Si noti l'uso delle parentesi: le tonde per le priorita` nelle operazioni, le quadre per le funzioni, le graffe per le liste  le doppie quadre  per gli elementi delle liste (significato e uso delle liste diventerà  nel seguito). I simboli per le quattro operazioni sono, come usuale, +,-,* e /. Il simbolo * puo` anche essere omesso, lasciando uno spazio fra gli operandi (si vedano In[2], In[7], etc.). Procediamo con gli esempi.

------------------------------------------------------------------------------------------

v1 = {2, 3, 5}
v2 = {-1, 3, 2};

Come si vede il punto e virgola serve a non far stampare il risultato, banale in questo caso perche' assegna dei valori ai vettori v1 e v2. Per inserire piu` istruzioni nella stessa cella, digitare Enter dopo ciascuna istruzione. Quando si digita Shift-Enter vengono eseguite in ordine tutte le istruzioni della cella. Nella cella è anche possibile includere dei commenti, scrivendo il testo fra "(*" e "*)".

v2[[1]]                      
v2[[2]]
v2[[3]]

v2 - v1

2 v1

v1*v2

v1 . v2

Sqrt[v1 . v1]

N[%]

N[Sqrt[v2 . v2]]

v3=Cross[v1, v2]

v3 . v1             
v3 . v2

SenoFraV1eV2 = 
      Sqrt[v3 . v3] /(Sqrt[v1 . v1]*Sqrt[v2 . v2]) // 
        N
AngoloInGradi = ArcSin[%] /Degree

A = {{2, 5}, {-3, 1}}              
MatrixForm[
      A]

A[[1, 1]]

\(iA = Inverse[A]; \ \ \ \ \  (*\ matrice\ inversa\ *) 

    MatrixForm[iA]\)

MatrixForm[iA . A]

v4 = {1, -2}          
A . v4                          
v4 . %

------------------------------------------------------------------------------------------

f = x^2 - x - 1

Integrate[f, x]

Integrate[f, {x, 1, 3}]

FindMinimum[f, {x, 0}]

xmin = x /. %[[2]]

D[f, x] /. x -> xmin

D[D[f, x], x] /. x -> xmin

O anche

D[f, {x, 2}] /. x -> xmin

Solve[D[f, x] == 0, x]

xminNew = x /. %[[1]]

Si noti la differenza fra la soluzione esatta (ottenuta analiticamente imponendo che derivata prima si annulli) e quella numerica ottenuta con FindMinimum.

xminNew - xmin

D[f, x] /. x -> xminNew

Plot[f, {x, -5, 5}]

Solve[f == 0, x] // N

retta1 = -x/2 + 3;
retta2 = 1.2  x - 2.6;

Plot[{f, retta1, retta2}, {x, -5, 
          5}];

Solve[retta1 == retta2] // N

y = retta1 /. x -> (x /. %[[1]])

sol = Solve[f == retta1, x] // N

y1 = 
      f /.  x -> (x /. sol[[1]])
y2 = f /.  x -> (x /. sol[[2]])

Solve[f == retta2, x] // N

------------------------------------------------------------------------------------------

Si noti la differenza fra la f definita sopra e la g definita con assegnazione ritardata.

g[x_] := x^2 - x - 1

g[x]

g[a + b]

g[5]

Integrate[g[x], {x, 1, 3}]

?:=

Quando Mathematica non sa fare i conti analiticamente si possono richiedere valutazioni numeriche. Ad esempio:

Integrate[1/Log[Sin[x]], x]

Integrate[1/Log[Sin[x]], {x, Pi/4, Pi/3}]

Ma, come si può vedere, la funzione non è terribile nell'intervallo di interesse.

Plot[1/Log[Sin[x]], {x, Pi/4, Pi/3}];

E, difatti, l'integrale numerico si sa fare:

NIntegrate[1/Log[Sin[x]], {x, Pi/4, Pi/3}]

La funzione è talmente tranquilla che si ottiene lo stesso risultato sommando l'area di 100 quadratini.

fs[x_] := 1/Log[Sin[x]]
dx = (Pi/3 - Pi/4)/100. ;
Sum[fs[Pi/4 + (i - 1/2)*dx]*dx, {i, 1, 100}]

Facciamo un altro esempio di soluzione numerica.

Solve[1.1 Exp[-x^2] == Cos[x], x]

Il plot aiuta a capire.

Plot[{1.1 Exp[-x^2], Cos[x]}, {x, 0, 5}];

In questo caso nemmeno NSolve va bene.

NSolve[1.1 Exp[-x^2] == Cos[x], 
      x]

FindRoot[1.1 Exp[-x^2] == Cos[x], {x, 0.5}]

FindRoot[1.1 Exp[-x^2] == Cos[x], {x, 1.5}]

Tutte le altre soluzioni corrispondono alla condizione Cos[x]==0. Ad esempio

FindRoot[1.1 Exp[-x^2] == Cos[x], {x, 4}]

da confrontare con

Pi*3/2.

------------------------------------------------------------------------------------------

Sqrt[-1]

(-8)^(1/3)

Solve[x^3 == -8, x]

% // N

sol = Solve[ x^2 + x + 2 == 0, x]

Re[x /. sol[[1, 1]]]
Im[x /. sol[[1, 1]]]

Caso un po' più complicato:

sol = N[Solve[x^50 == -1, x]];
points = 
        Table[{Re[x /. sol[[i]]], Im[x /. sol[[i]]]}, {i, 
            Length[sol]}];
Print[" Rappresentazione grafica delle 50 radici di x^50 = -1."]
ListPlot[points, AspectRatio -> 1, 
        AxesLabel -> {"Re[x]", "Im[x]"}];

------------------------------------------------------------------------------------------

Terminiamo questo giro esplorativo con delle informazioni sul notebook e sulle celle. La finestra sulla quale si scrivono i comandi e si ricevono le risposte è chiamata notebook (quaderno). Se il lavoro fatto è interessante si puo` salvare su file, mediante l'opzione "Save as" del menu File. L'estensione raccomandata per il file è "nb", ad esempio "PrimiPassi.nb". Una volta che il notebook è salvato con nome si può seguitare a lavorare su di esso, salvandolo successivamente con "Save" . Si noti che ad ogni Save la versione precedente viene sovrascritta. Quindi si faccia attenzione a non salvare notebook nei quali per errore sono sate distrutte delle parti precedentemente funzionanti. E` buona norma, quando si ha un notebook funzionante con istruzioni interessanti di farne una nuova versione con nome diverso (tramite "Save as") sulla quale sperimentare.

In sessioni di lavoro successive i notebook memorizzari vengono letti con "Open". 
Anche se il notebook è apparentemente identico a quello salvato, le variabili definite nel corso di esso non sono ancora note a Mathematica finché' le istruzioni non vengono rieseguite. Quindi è impossibile continuare ad aggiungere istruzioni ed ottenere risposte basate sull'intera storia del notebook, come è spesso comodo fare. Per eseguire l'intero notebook senza dover dare l'istruzione cella per cella esiste il comando "Evaluate Notebook" nel menu "Kernel", sottomenu "Evaluation".

Terminiamo questa rapida introduzione con informazioni sulle celle e sui commenti fra i comandi. Infatti, il testo che state leggendo non è altro che un notebook commentato. L'importanza dei commenti è nota a tutti coloro che hanno esperienza con la programmazione. Quello che sembra ovvio oggi, non lo è fra un mese e, a volte, nemmeno domani. Quando si scrive nel notebook, aprendo una vuova cella, Mathematica assume si stanno digitando istruzioni. Abbiamo visto come le celle sono generate in successione a mano a mano che si danno le istruzioni.  Se si vuole inserire una nuova cella fra due celle preesistenti, portarsi con il mouse fra le due celle (il cursore si trasforma da verticale a orizzontale) e cliccare. Per rimuovere una cella, selezionarla e cancellarla (vedi "Clear" in "Edit"). La cella si seleziona clickando una volta sul simbolo di cella (la lunga parentesi quadra a destra). Per trasformare il contenuto di una cella in testo, si selezioni la cella  Andare poi nel menu "Format", sottomenu` "Style" e scegliere "Text". L'operazione può essere eseguita più rapidamente premendo contemporaneamente i tasti "Alt" e "7".  
Come si potrà vedere selezionando Style, è anche possibile dare un titolo al notebook, e definire delle sezioni e sottosezioni nelle quali raggruppare le istruzioni. Per capire la comodità della struttura in sezioni e sottosezioni, si inserisca una cella di titolo all'inizio del notebook. Apparirà una grande parentesi quadrata che scorre per tutto il notebook. Se si fa un doppio click sulla linea verticale, l'intero notebook collassa nella cella di titolo. Ma una freccia verso il basso nella seconda parentesi quadrata indica che il notebook contiene informazioni nascoste. Un doppio click sulla parentesi a destra e il notebook riprenderà il suo aspetto originario. Qualcosa di simile succede con le sezioni e sottosezioni, dando la possibilità  di comprimre una parte del notebook per editarlo più  agevolmente.

Crediamo che questo sia quanto basti per cominciare. Si raccomanda di visionare i menu della barra comandi per vedere e provare altre opzioni. In particolare, sotto Help c'è il menù "Getting Started/Demos", contenente, fra l'altro, un tour di Mathematica e gallerie di formule, grafica e suono.
Un altro consiglio è di provare a guardare i vari palettes contenenti funzioni predefinite: Si vada in File, quindi si clicchi su Palettes e si scelga il genere desiderato. Ad esempio sotto BasicCalculations si ha accesso alle funzioni di uso piu' comuni, raggruppate per argomento (aritmetica e numeri, algebra, liste e matrici, funzioni trigonomtriche ed esponenziali, calcolo differenziale, "altre funzioni" e grafica).

Referenze di dovere sono il `manualone' "The Mathematica Book" e il manuale degli add-on "Standard Add-on packages", entrambi di Stephen Wolfram, creatore di Mathematica.
Si  raccomanda anche, come introduzione, il libro della Zanichelli "Matematica & Mathematica" di P. Antognini e G.C. Barozzi.