Manuale Mathematica
Manuale Mathematica
Marco Bramanti
Questi appunti sono scritti per chi vuole imparare velocemente a usare Mathematica per fare le pi comuni operazioni che hanno a che fare con il contenuto dei corsi di Analisi Matematica 1 e 2. Scorrendo il Sommario qui sotto saprete subito cosa potrete imparare e cosa no, leggendo questi appunti. Facendo le operazioni che sono spiegate qui, vi capiter di chiedervi come potreste farne molte altre, che qui non sono spiegate. Le risposte a queste domande si trovano nei manuali ufficiali di Mathematica, che sono i vari libri di Stephen Wolfram, il creatore del programma: c' un libro per ogni versione di Mathematica (attualmente, ottobre 2000, sono in circolazione le versioni 2, 3 e 4). Ciascuno di questi libri ha dalle 900 pagine in su, il che potrebbe scoraggiare qualcuno a consultarli: in realt sono libri ben scritti, in cui non difficile orientarsi. Comunque, questi appunti dovrebbero servire proprio per evitare di sfogliare i manuali, a chi desideri imparare in fretta l'essenziale.
Sommario
1. Nozioni di base su Mathematica
(Conviene leggere integralmente questa prima parte) 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. Primo impatto Calcoli numerici Funzioni elementari Costanti notevoli Definire una funzione o un numero Matematica discreta 1.6.1. Successioni, tabulazioni 1.6.2. Sommatorie
2.8.
2.7.3. Formula di Taylor 2.7.4. Calcolo delle primitive 2.7.5. Calcolo degli integrali definiti, esatto o approssimato 2.7.6. Integrali generalizzati 2.7.7. Funzioni integrali 2.7.8. Equazioni differenziali 2.7.9. Serie di Fourier Funzioni di pi variabili (questa parte non ancora stata scritta) 2.8.1. Grafici di funzioni reali di due variabili 2.8.2. Grafici di linee in forma parametrica,nel piano o nello spazio 2.8.3. Grafici di superfici in forma parametrica 2.8.4. Calcolo di integrali doppi,esatto o approssimato
Come si vede, Mathematica scrive In[n]= davanti all'input (n il numero progressivo degli input digitati nella sessione), e fornisce un output. (Quando un file Mathematica viene salvato, chiuso e riaperto, le scritte In[n]= e Out[n]= non ricompaiono, finch eventualmente l'input non viene valutato di nuovo; questo il motivo per cui in questo file non tutti gli input e output sono numerati). Regole di base: le 4 operazioni si indicano con
+- *
lo stesso che
2*x
ma diverso da 2x (senza spazio tra 2 e x), che denoterebbe una nuova variabile di nome "2x", e non 2 volte la variabile x. L'elevamento a potenza "a alla b" si scrive cos:
a^ b
Si possono usare tutte le parentesi che si vuole, sempre tonde, le une dentro le altre. Anzi, nel dubbio su quale sia la precedenza con cui Mathematica interpreta le operazioni, meglio abbondare, ad esempio:
In[2]:= H2 ^ H3 + xLL H5 x ^ 2 + 1L Out[2]=
23+x 1 + 5 x2
Le parentesi quadre e graffe hanno un significato sintattico particolare che si vedr in seguito, e non vanno usate quindi come parentesi "normali". Esempio.
In[3]:= H2 45L ^ 36 Out[3]=
68719476736 327831360408733226531187361612285036244429647922515869140625
Se il risultato esatto di un calcolo un numero razionale, Mathematica lo scrive come frazione esatta! Se vogliamo un valore numerico approssimato, dobbiamo scrivere:
N@operazione che voglio fareD
Ad esempio:
In[4]:= N@H2 45L ^ 36D Out[4]= 2.09618 10-49
Ad esempio, per ottenere un valore numerico approssimato dell'ultimo output, basta scrivere N[%]. Invece, per indicare l'output numero n si scrive %n. Ad esempio,
In[6]:= 1 %3 Out[6]=
327831360408733226531187361612285036244429647922515869140625 68719476736
(esponenziale di base e)
Log@xD
(logaritmo in base e)
Log@a, xD
(logaritmo in base a)
Sin@xD, Cos@xD, Tan@xD, ArcSin@xD, ArcCos@xD, ArcTan@xD
(funzioni iperboliche)
Sqrt@xD
(radice quadrata di x; ricordare che si pu comunque scrivere x^a per avere potenze a esponente reale qualunque; Mathematica, per, richiede sempre che la base sia positiva. Ad esempio, se si chiede a Mathematica di disegnare il grafico di x^(1/3), lo disegna solo per x>0. Per averlo tutto occorre usare un trucco che si spiegher poi).
Abs@xD
(valore assoluto di x)
2 Cos@3 xD + Sin@2 xD 1 + x2
Il nome della funzione pu essere una lettera (maiuscola) o una parola (con l'iniziale maiuscola). Alcune lettere sono proibite perch hanno gi un altro significato. Ad esempio, si possono usare:
F@x_D, G@x_ D, H@x_ D, M @x_ D
(Motivo: N indica la valutazione numerica, O il simbolo di "o grande", D la derivazione). Se si prova a farlo, Mathematica ci avverte che non lecito. Naturalemente il nome della variabile indipendente arbitrario. Ad esempio potremmo digitare:
In[8]:= F@t_D = HSin@2 tD + 2 Cos@3 tDL H1 + t ^ 2L Out[8]=
2 Cos@3 tD + Sin@2 tD 1 + t2
e sarebbe stata la stessa funzione dell'esempio precedente (In[7]) (t o x sono "variabili mute"). Analogamente, ma pi semplicemente, si pu dare un nome a un numero che in seguito comparir in parecchie operazioni. Si pone ad esempio:
6
a = 2 Pi Sqrt@3D 2 !!!! 3 p
N@%D 53252.3
Avvertenza. Quando si definisce una funzione o un numero dandogli dei nomi, per tutta la sessione di lavoro Mathematica dar a quel nome quel significato. Dopo un po' questo potrebbe diventare fastidioso (non si sa pi che lettere usare perch sono gi tutte "compromesse"). Per dire a Mathematica "ora dimentica che x vuol dire la tal cosa" il comando :
Clear@xD
Mathematica fa s che F non abbia pi il significato di funzione che gli era stato dato.
Fin qui, anzi, Mathematica non sa se noi intendiamo che k sia intero o reale. Potremmo chiedergli di calcolare:
A @PiD 1 p2
che produce i valori di A[k] quando k intero tra n1 e n2. Questo comando, quindi, forza Mathematica a intepretare k come intero.
Table@ A @kD, 8k, 1, 10<D 1 1 1 1 1 1 1 1 1 91, , , , , , , , , = 4 9 16 25 36 49 64 81 100
Ossia: "tabula i valori numerici approssimati di A[k] per k da 1 a 10" Se vogliamo avere un'idea dell'andamento di A[k] per k grande, pu essere utile tabulare i valori di A[k] fino a un valore grande, ma incrementando k ogni volta di un passo maggiore di 1 (per non visualizzare troppi numeri). Ad esempio:
Table@ N@ A @kDD, 8k, 1, 100, 10<D 81., 0.00826446, 0.00226757, 0.00104058, 0.000594884, 0.000384468, 0.000268745, 0.000198373, 0.000152416, 0.000120758<
produce i valori di A[k] per k che si incrementa di 10 alla volta, da 1 a 100. Per rappresentare graficamente i valori di (un po' di termini di) una successione, il comando :
ListPlot@Table@ A @kD, 8k, n1, n2<DD
Graphics
8
ListPlot@Table@ A @kD, 8k, 5, 10<D, Prolog -> AbsolutePointSize@5DD
0.04 0.035 0.03 0.025 0.02 0.015 2 3 4 5 6
Graphics
Pi in generale, ListPlot[{lista di numeri}], produce un grafico dei punti di ascisse 1,2,3,... e ordinate questi numeri
ListPlot@83, 4, 1, 9<D
1.5
2.5
3.5
Graphics
1.6.2. Sommatorie
L'operazione di sommatoria per k da n1 a n2 di A[k] si scrive naturalmente cos:
Sum @A @kD, 8k, n1, n2<D Sum @1 k, 8k, 1, 20<D 55835135 15519504
N@%D
3.59774
L'ultimo numero il valore numerico approssimato del precedente. Come il comando Table, cos il comando Sum forza Mathematica a interpretare la variabile k (o come l'abbiamo chiamata) come intero. Con ci abbiamo introdotto la sintassi principale di Mathematica, che si utilizza in qualsiasi contesto. Ora passiamo agli argomenti specifici di calcolo infinitesimale.
k=1
1 k
...oppure ricopia l'espressione perch non ne sa calcolare la somma, ma non ha neanche la prova che la serie diverga. Per indagare numericamente il comportamento di una serie pu essere utile definire la successione delle somme parziali, e tabularne e/o rappresentarne graficamente i valori. Consideriamo ad esempio la serie il cui termine generale :
In[9]:= B@k_D = H2 ^ kL Hk + k !L Out[9]=
2k k + k!
Out[11]= 81., 2., 2.88889, 3.46032, 3.71632, 3.80447, 3.82983, 3.83618, 3.83759, 3.83787<
...dopo i primi 10 termini appaiono gi stabilizzate le prime 3 cifre decimali della somma...
10
In[12]:= ListPlot@%11D
4 Out[12]= Graphics
10
Inoltre, si possono calcolare parte reale, parte immaginaria, coniugato, modulo, argomento di un numero. I comandi corrsipondenti sono, rispettivamente:
Re@zD, Im @zD, Conjugate@zD, Abs@zD, Arg @zD
Esempi:
Re@H1 + 3 IL ^ 5D 316 Arg @1 + ID p 4
Esempio di calcolo della somma di una serie nel campo complesso (v. "Serie numeriche"):
Sum @1 H1 + IL ^ k, 8k, 0, Infinity<D 1-
11
Il risultato non soddisfacente. Per trovare davvero le radici ennesime di z, bisogna chiedere esplicitamente a Mathematica di applicare la formula di De Moivre, cio dare una sequenza di istruzioni del tipo:
x=1+ I 1+ n=6 6 r = Abs@xD !!!! 2 t = Arg @xD p 4
z@k_D = Hr ^ H1 nLL HCos@Ht + 2 k PiL nD + I Sin@Ht + 2 k PiL nDL 1 p 1 p 2112 JCosA I + 2 k p ME + SinA I + 2 k p MEN 6 4 6 4 Table@ N@z@kDD, 8k, 0, n - 1<D
81.0504 + 0.138288 , 0.405439 + 0.978816 , - 0.64496 + 0.840529 , - 1.0504 - 0.138288 , - 0.405439 - 0.978816 , 0.64496 - 0.840529 <
Plottare gli n punti nel campo complesso richiede invece un'istruzione un po'... complessa, si rimanda al Notebook specifico su questo.
12
Siamo noi che dobbiamo dire a Mathematica quale delle 2 cose fare: se gli chiediamo di risolvere esattamente un'equazione quando ci non possibile, non far nulla (in particolare, non ci dar soluzioni approssimate). Se chiediamo soluzioni approssimate, queste saranno "solo" approssimate, e non esatte, anche qualora fosse possibile trovarle esatte. Il comando per trovare le soluzioni esatte Solve; il comando per trovare le soluzioni approssimate FindRoot. Sintassi di Solve:
Solve@ A @xD B@xD, xD
Esempio:
Solve@x ^ 2 + 3 x + 1 0, xD 1 1 !!!! !!!! 99x I- 3 - 5 M=, 9x I- 3 + 5 M== 2 2
Con questo comando Mathematica trova le radici reali o complesse dell'equazione. Esempi:
Solve@x ^ 3 + x ^ 2 + 1 0, xD 1 1 i 2 y z 99x - - j j !z 3 3 k 29 - 3 !!!!!! 93 {
13
!!!! 1 1 1 1- 3 !!!! !!!!!! ! 13 9x - + I1 + 3 M J I29 - 3 93 MN + =, !!!!!! ! 13 3 6 2 3 223 I29 - 3 93 M !!!! 1 1 1 1+ 3 !!!! !!!!!! ! 13 9x - + I1 - 3 M J I29 - 3 93 MN + == !!!!!! ! 13 3 6 2 3 223 I29 - 3 93 M
1 1 !!!!!! ! 13 - J I29 - 3 93 MN =, 3 2
L'equazione di terzo grado precedente ha una radice reale e due radici complesse coniugate.
Solve@Exp@2 xD - 3 Exp@xD + 1 0, xD
Solve::ifun : Inverse functions are being used by Solve, so some solutions may not be found.
L'equazione precedente un'equazione di secondo grado in Exp[x], perci pu essere risolta esattamente. Si possono risolvere anche sistemi, lineari e (talvolta!) non lineari:
Solve@8x + 2 y == 1, 3 x - y == 0<, 8x, y<D 1 3 99x , y == 7 7
Sintassi di FindRoot:
FindRoot@ A @xD 0, 8x, x0<D
13
Questo comando trova una soluzione approssimata dell'equazione in un intorno del punto x0 (pi precisamente, x0 viene assunto come primo valore dell'algoritmo iterativo che definisce la soluzione approssimata) Ad esempio, l'equazione Tan[x]x ha infinite soluzioni (una zero). Possiamo trovarne qualcuna dando valori diversi a x0:
FindRoot@Tan@xD x, 8x, 2<D 8x 4.49341< 8x 7.72525< 8x 10.9041< FindRoot@Tan@xD x, 8x, 3<D FindRoot@Tan@xD x, 8x, 8<D
Per cercare le soluzioni con criterio, anzich andando a casaccio, pu essere utile prima tracciare con Mathematica il grafico di F[x]=Tan[x]-x, e vedere approssimativamente dove cadono i suoi zeri.Vedremo nel prossimo paragrafo come si fa.
Cos facendo, Mathematica traccia il grafico di F[x] per x nell'intervallo [a,b]. Se in quell'intervallo la funzione non sempre definita, Mathematica protesta, ma fa il possibile.
Plot@ Abs@Log @Abs@xDDD, 8x, - 3, 3<D
6 5 4 3 2 1 -3 -2 -1 1 2 3
Graphics
Notare che noi abbiamo detto ben poco a Mathematica su come tracciare il grafico, e lui ha fatto una serie di scelte (quale scala mettere su ciascun asse, ad esempio). Talvolta non saremo d'accordo con le sue scelte, e vorremo chiedere qualcosa di pi preciso. Questo si fa con vari tipi di opzione. Esempi:
14
Plot@1 + Sin@3 xD ^ 2, 8x, - Pi, Pi<D
2 1.8 1.6 1.4 1.2
-3
-2
-1
Graphics
Mathematica ha tracciato il grafico scegliendo come asse orizzontale la retta y=1 (guardare i numeri scritti sull'asse!). Questo pu essere fuorviante. Se vogliamo che il grafico mostri le y tra 0 e 2, ad esempio (in particolare, che l'asse orizzontale sia la retta y=0), possiamo usare l'opzione PlotRange->{a,b} dove a,b sono i valori estremi delle y che vogliamo compaiano nel grafico:
Plot@1 + Sin@3 xD ^ 2, 8x, - Pi, Pi<, PlotRange 80, 2<D
2 1.75 1.5 1.25 1 0.75 0.5 0.25 -3 -2 -1 1 2 3
Graphics
Altro problema:
Plot@x ^ 2, 8x, - 3, 3<D
8 6 4 2
-3
-2
-1
Graphics
15
Nel grafico precedente la scala non la stessa sugli assi. L'opzione AspectRatioa (a numero positivo, maggiore o minore di 1) permette di dilatare un asse rispetto all'altro. Per tentativi, si pu trovare la scala che si vuole:
Plot@x ^ 2, 8x, - 3, 3<, AspectRatio 1D
-3
-2
-1
-3
-2
-1
Graphics
16
Plot@x ^ 2, 8x, - 3, 3<, AspectRatio 2D
-3
-2
-1
Graphics
Vi sono molte altre opzioni possibili per il comando Plot, ma non ve le spiego per non riscrivere qui il manuale di Mathematica... Si osservi il prossimo trucco per tracciare il grafico di x^(2/3) anche per x<0:
Plot@Hx ^ 2L ^ H1 3L, 8x, - 3, 3<D
2
1.5
0.5
-3
-2
-1
Graphics
17
In[14]:= Plot@If@x < 0, x, x ^ 2D, 8x, - 1, 1<D 1
0.5
-1
-0.5 -0.5
0.5
-1 Out[14]= Graphics
Si possono annidare tanti If[...] uno dentro l'altro, e ottenere funzioni definite in 3 o pi pezzi diversi, ad esempio:
In[15]:= Plot@If@x < 0, x, If@x < 1, x ^ 2, 2 - xDD, 8x, - 1, 2<D 1
0.5
-1
-0.5 -0.5
0.5
1.5
-1 Out[15]= Graphics
L'ultimo input si pu leggere cos: "Disegna, per x in [-1,2], la funzione che se x<0 vale x, altrimenti (se x<1 vale x^2, altrimenti vale 2-x)". Ad esempio, per ottenere il grafico della radice cubica di x anche per x<0 si pu fare cos:
In[16]:= Plot@If@x > 0, x ^ H1 3L, - H- xL ^ H1 3LD, 8x, - 2, 2<D
1 0.5
-2
-1 -0.5 -1
Out[16]= Graphics
Si possono tracciare i grafici di pi funzioni su un solo grafico. Questo si pu fare in due modi:
18
Plot@8F@xD, G@xD, H@xD<, 8x, a, b<D
disegna sullo stesso grafico le funzioni F, G, H. Se invece abbiamo gi prodotto separatamente i grafici di F, G e H, e ci piacerebbe ora vederli tutti insieme, usiamo il comando Show[%n,%m,%r], dove n, m, r sono i numeri progressivi degli input in cui abbiamo fatto i grafici di F, G, H. Ad esempio:
In[17]:= Show@%15, %16D
1 0.5
-2
-1 -0.5 -1
Out[17]= Graphics
Si noti che, col comando Show, Mathematica non esegue nuovi calcoli, ma si limita a mostrare sullo stesso sistema d'assi due o pi grafici gi ottenuti; se le due funzioni erano state disegnate su intervalli diversi, col comando show vedremo solo i tratti di grafico che erano gi stati disegnati (nell'ultimo esempio, si noti che la retta x "non esiste" per x<-1, perch cos era nel grafico originale). Per ovviare a questo problema, dovrei usare il primo metodo, col quale Mathematica ricalcola i due grafici:
In[18]:= Plot@8If@x < 0, x, If@x < 1, x ^ 2, 2 - xDD,
-2
-1 -0.5 -1 -1.5 -2
Out[18]= Graphics
19
Quella ottenuta cos una funzione di 2 variabili: x e n. Fissando un valore di n, una funzione di x:
Plot@8Exp@xD, F@x, 4D<, 8x, - 3, 3<D
10 8 6 4 2
-3
-2
-1
Graphics
Il grafico precedente mostra Exp[x] insieme al suo "polinomio di Taylor di grado 4": vicino a x=0 c' buona approssimazione tra i due. Si possono produrre con una sola istruzione gruppi di grafici col comando Table. Ad esempio, vogliamo confrontare Exp[x] e il suo polinomio di Taylor F[x,n] sull'intervallo [-3,3] per valori crescenti di n:
Table@Plot@8Exp@xD, F@x, nD<, 8x, - 3, 3<D, 8n, 1, 5<D
8 6 4 2
-3
-2
-1 -2 8
-3
-2
-1
20
20
15
10
-3
-2
-1 10 8 6 4 2
-3
-2
-1 20
15
10
-3
-2
-1
(Un solo input ha prodotto 5 grafici). Al crescere di n l'approssimazione sempre migliore, su un intervallo fissato. Oppure, vogliamo confrontare Exp[x] e il suo polinomio di Taylor F[x,5] sull'intervallo[-n,n] per valori crescenti di n:
Table@Plot@8Exp@xD, F@x, 5D<, 8x, - n, n<D, 8n, 1, 5<D
21
-1
-0.5 7 6 5 4 3 2 1
0.5
-2
-1 20
15
10
-3
-2
-1
30
20
10
-4
-2
22
40 30 20 10
-4
-2 -10
(La freccia si ottiene digitando - seguito da >). Se il limite destro e sinistro sono diversi, Mathematica per default calcola il limite destro (questa una caratteristica non molto bella del programma! Se si trova un risultato non si sa se il limite c' o c' solo da destra):
Limit@Exp@1 xD, x 0D
Per chiedere esplicitamente a Mathematica di calcolare un limite destro o sinistro usiamo l'opzione Direction1 per il limite sinistro, Direction-1 per il limite destro:
Limit@x Abs@xD, x 0, Direction 1D -1 Limit@x Abs@xD, x 0, Direction - 1D 1
23
Limit@Exp@1 xD, x 0, Direction 1D 0
L'output significa che il limite non esiste e la "classe limite" l'intervallo [-1,1].
Limit@x Sin@xD, x InfinityD Interval@8-, <D
L'output significa che il limite non esiste e la "classe limite" l'intervallo (-Infinito,Infinito).
Esempio:
D@Sin@2 xD, xD 2 Cos@2 xD
A questo punto per calcolare la derivata seconda, cio la derivata prima di quanto appena trovato, si pu fare cos:
D@%, xD - 4 Sin@2 xD
Oppure:
D@D@Sin@2 xD, xD, xD - 4 Sin@2 xD
Notare che, non ostante il comando si chiami Series, serve a scrivere la formula di Taylor, non la serie di Taylor. Inoltre, notare che il resto (secondo Peano) scritto in modo insolito: al posto del simbolo di o piccolo viene usato il simbolo di O grande. In pratica, ci significa che se Mathematica scrive O[x]^4 bisogna interpretare o[x]^3, e cos via.
24
Series@Sin@xD, 8x, 0, 9<D
Qui O[x]^10=o[x]^9
Series@Exp@x ^ 2D - x Sin@xD, 8x, 0, 5<D 2 x4 1 + + O@xD6 3
(Notare che Mathematica non aggiunge la costante arbitraria). Naturalmente se la primitiva non una funzione elementare, Mathematica non trova nulla:
Integrate@1 ArcTan@xD, xD 1 x ArcTan@xD
che come dire che Mathematica non ha fatto nulla. Talvolta la primitiva di una funzione una funzione non elementare che per in Analisi ha un nome ed studiata; se Mathematica la conosce, fornisce questo risultato. Ad esempio:
Integrate@1 Log @xD, xD LogIntegral@xD
1 La funzione LogIntegral@xD definita proprio come primitiva di . Mathematica Log@xD conosce questa funzione ed in grado di calcolarne valori. Ad esempio :
N@LogIntegral@2DD 1.04516
25
Plot@LogIntegral@xD, 8x, 0, 1<D
0.2 -2 -4 -6 -8 -10 0.4 0.6 0.8 1
Graphics
1 !!!! !!!! I3 Log@3D + 3 LogA3 I1 - 3 ME 6 !!!! !!!! !!!! !!!! !!!! !!!! 3 LogA3 - 3 E - 3 LogA3 I1 + 3 ME + 3 LogA3 + 3 EM
Talvolta, come nell'ultimo caso, l'output infelice: qui ad esempio espresso attraverso numeri complessi (anche se in realt reale). Comunque possiamo sempre chiedergli quanto fa:
N@%D 0.851606 + 0.
cio un numero reale, circa 0.851... Il comando Integrate cerca di calcolare un integrale definito in modo esatto, passando attraverso la primitiva (o con altri metodi esatti): se si prova a calcolare l'integrale definito di una funzione che non ha primitiva conosciuta, Mathematica non calcola nulla:
Integrate@1 H1 + x + Exp@xDL, 8x, 0, 1<D
1 1 x x 0 1+ +x
C' una strada diversa: calcolare un valore approssimato dell'integrale definito, coi metodi dell'analisi numerica. Questo si fa con un comando diverso:
NIntegrate@F@xD, 8x, a, b<D
26
NIntegrate@1 H1 + x + Exp@xDL, 8x, 0, 1<D 0.329971
Si confronti il risultato trovato con Integrate e NIntegrate in un caso in cui entrambi i metodi sono applicabili:
Integrate@1 H1 + x ^ 2L, 8x, 0, 1<D p 4
Si osservi che:
N@Pi 4D 0.785398
Questa una tipica risposta "da Mathematica": ha calcolato il valore esatto dell'integrale, esprimendolo con complicate funzioni. Quanto vale?
27
N@%D 2.03481 Integrate@1 Sqrt@x + Sin@xDD, 8x, 0, 1<D
1 1 x !!!!!!!!!!!!!!!!!!!!!!!!! 0 x + Sin@xD
Questa volta non ce l'ha fatta. Se per gli chiediamo di calcolare l'integrale numericamente:
NIntegrate@1 Sqrt@x + Sin@xDD, 8x, 0, 1<D 1.42608
11976.6
Il messaggio di Mathematica mette in guardia sul fatto che la convergenza dell'algoritmo di approssimazione lenta, il che deve far sospettare che l'integrale possa divergere. L'output comunque un valore numerico (in questo caso inattendibile).
(Attenzione all'uso corretto della variabile muta t, di integrazione). Proviamo a definire, ad esempio:
G@x_D = Integrate@1 H1 + t ^ 2L, 8t, 0, x<D ArcTan@xD
28
H@10D
10 0
1 t t + t2
non troviamo niente. In questi casi (quando cio la primitiva non calcolabile elementarmente, e non nemmeno una funzione speciale, conosciuta da Mathematica), conviene definire la funzione integrale come integrale calcolato numericamente , cio porre:
H@x_D = NIntegrate@1 HExp@tD + t ^ 2L, 8t, 0, x<D
NIntegrate::nlim : t = x is not a valid limit of integration. NIntegrate::nlim : t = x is not a valid limit of integration.
Mathematica ha protestato, perch gli abbiamo chiesto di calcolare numericamente l'integrale definito tra due estremi di cui il secondo non un numero, ma x! Ovviamente non pu farlo; per ora Mathematica sa chi H[x] e pu calcolarla in un punto, o anche tracciarne il grafico:
H@3D 0.780494 Plot@H@xD, 8x, - 5, 5<D
0.5
-4
-2 -0.5 -1 -1.5
Graphics
Nota: il grafico di una funzione integrale un esempio di operazione che pu risultare "impegnativa" per un vecchio PC, come accennato all'inizio. Nel dubbio, meglio salvare prima di premere shift+invio.
29
Notare che la funzione incognita va sempre scritta nella forma y[x] (cio indicando la variabile indipendente, che potrebbe anche non chiamarsi x), le derivate si indicano con y'[x], y''[x], y'''[x],..., e tra i due membri dell'equazione ci vogliono DUE segni di =. Per la derivata seconda, usare due segni ' di fila, e NON il segno di virgolette ". La sintassi con cui si chiede a Mathematica di risolvere un'equazione differenziale :
DSolve@equazione, y@xD, xD
Esempi. Equazione del second'ordine, lineare, a coefficienti costanti, anche non omogenea:
DSolve@ y ''@xD + 3 y '@xD - 2 y@xD == Sin@xD, y@xD, xD
2 I-399y@xD 1
!!!!!!! I-3+ 17 M x !!!!!!! 1 2 i 2 I-3+ 17 M - Sin@xD y 4 Cos@xD 2 I-3+ 17 M x j - z j- z !!!!!!! !!!!!!! !!!!!!! !!!!!!! IH-3-2 L+ 17 M IH-3+2 L+ 17 M IH-3-2 L+ 17 M IH-3+2 L+ 17 M { k !!!!!! ! 17
1 I-3+!!!!!!! - 17 M x 2 1 !!!!!!! 1 I3+!!!!!!! !!!!!!! !!!!!!! 17 M x 1 2 I3+ 17 M x Sin@xD y i 2 I3+ 17 M 2 4 Cos@xD 2 I-3- 17 M x j + z j- z !!!!!!! !!!!!!! !!!!!!! !!!!!!! IH 3 2 L + 17 M IH 3 + 2 L + 17 M IH 3 2 L + 17 M IH3+2 L+ 17 M { k == !!!!!! ! 17 1 !!!!!!!
!!!!!!! 17 M x
2 I-3+ C@1D + 1
!!!!!!! 17 M x
C@2D +
Come si vede, Mathematica d l'integrale generale, chiamando C[1] e C[2] le costanti arbitrarie di integrazione. Equazione del prim'ordine, lineare:
DSolve@ y '@xD + x y@xD x, y@xD, xD
2 99y@xD 1 + - C@1D==
x2
==
30