Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
<div>
Scarica il
</div>Daniele Lupo Appunti di Mathematica
Calcolo Simbolico 1
ü Introduzione
Ahhh!!! Ci voleva proprio questo bel bagnetto!!! Magari riuscirò pure a far sparire l'effetto
mozzarella della mia pelle, prima che finiscano le lezioni!!!
...Ehm....
...Dicevamo... Come vi avevo già accennato, uno degli aspetti più importanti di Mathematica è il
fatto che permette di eseguire con la stessa straordinaria facilità e velocità sia calcoli numerici che,
sopratutto, calcoli simbolici. Possiamo scrivere qualcosa del tipo
H3
+ ∗ +
3 5 7L
In[1]:= 53
Out[1]=
ma possiamo anche, se vogliamo, eseguire calcoli che includano elementi simbolici
+ +
x 5 x 2
In[2]:= +
2 6x
Out[2]=
Mathematica riordina automaticamente gli elementi:
+ +
x^2 2 4 x
In[3]:= + + 2
2 4 x x
Out[3]=
E applica, automaticamente, alcune semplici semplificazioni:
+
Sqrt@1 xD ^ 4
In[4]:= H1 2
+ xL
Out[4]=
Come potete vedere, la radice quadrata è magicamente scomparsa
A volte, facciamo delle elaborazioni algebriche, ottenendo una particolare espressione, e poi ci
piacerebbe sapere il valore che assumerebbe quell'espressione se andiamo a sostituire dei valori
determinati alle varie incognite. Possiamo fare questo tramite l'operatore di sostituzione:
51
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
ê.
+ + + →
3 x 24 x ^ 4 Sqrt@xD x 4
In[5]:= 6153
Out[5]=
L'operatore di sostituzione è dato dalla combinazione /. dopo l'espressione, e dalle regole di
sostituzione: la regola di sostituzione è data scrivendo l'incognita da sostituire, dopo -> ed infine il
valore che vogliamo al posto dell'incognita. Ovviamente, dato che conoscete le liste, a questo punto
(vero?), potete intuire che possiamo andare a sostituire più incognite in una sola volta usando una
lista per le regole di sostituzione, come in quest'esempio:
ê. 8x
+ − → →
x ^ 2 y ^ 2 3 x y 1, y 5<
In[6]:= 11
Out[6]=
Se vogliamo che la sostituzione sia invece permanente, conviene andare a definire una variabile che
abbia il nome dell'incognita:
= =
x 1; y 5;
In[7]:=
Notate, fra l'altro, un altra caratteristica di Mathematica: possiamo eseguire più comandi in una volta
sola, concatenandoli tramite il punto e virgola, e premendo solo alla fine Shift+Invio. Una volta
eseguita questa operazione, ogni volta che il programma incontrerà la variabile, andrà sempre a
sostituire il valore corrispondente:
+ −
x^2 y^2 3 x y
In[8]:= 11
Out[8]=
Per cancellare il valore di una variabile, e renderla ancora incognita, possiamo usare l'assegnamento
del punto oppure il comando Clear:
=.
x
In[9]:= Clear@yD
In[10]:=
Andando a ricalcolarci l'espressione, vediamo come alle due incognite non è associato più nessun
valore: + −
x^2 y^2 3 x y
In[11]:= − +
2 2
x 3 x y y
Out[11]= 52
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
Inoltre, dato che possiamo associare alle variabili sia espressioni numeriche che simboliche, lo stesso
possiamo fare per le sostituzioni, che quindi non sono limitate solo a valori numerici:
ê.
+ + →
x ^ 2 3 y z z 4 y
In[12]:= +
2
x 7 y
Out[12]=
ü Manipolazioni Algebriche
Una volta ottenute e scritte le nostre espressioni, può risultare molto utile effettuare delle determinate
manipolazioni per scriverle nella forma che più ci aggrada. Andiamo, per esempio, a definire la
seguente equazione algebrica:
H1
= +
eq xL ^ 4
In[13]:= H1 4
+ xL
Out[13]=
Ci sono due funzioni basilari, che ci permettono di espandere e contrarre i termini di un'espressione
algebrica: moltiplica tuti i prodotti e potenze, dando il risultato
Expand[expr] come somma di prodotti
scrive expr come prodotto di fattori minimali
Factor[expr]
Se volessimo utilizzare le funzioni per l'espressione che abbiamo appena scritto, possiamo avere:
Expand@eqD
In[14]:= + + + +
2 3 4
1 4 x 6 x 4 x x
Out[14]=
Mentre, Factor lo riporta nella forma originale
Factor@%D
In[15]:= H1 4
+ xL
Out[15]=
Anche se in genere non abbiamo problemi, bisogna prestare comunque, un attimino di attenzione
H1
nell'usare queste due funzioni. Se, per esempio, volessimo usare Expand per l'espressione
+ 100000
xL , possiamo subito notare che avremo sullo schermo (sempre che la memoria del
computer non ci tradisca prima), qualcosa che non avremmo mai voluto avere. Ma questo capita nel
99,9999% dei casi se effettuiamo qualche malaugurato errore di battitura. In questi tre anni che
conosco Mathematica non mi è mai capitato di dover scrivere apposta formule così lunghe...
Se, invece, ci preme poter scrivere la forma più semplice di un espressione, non sempre usare i due
53
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
comandi appena citati è utile. Infatti non è sempre verificabile subito se la forma più semplice è data
dall'una oppure dall'altra formula, e possiamo solo provare, come in questo caso:
= −
eq x ^ 10 1
In[16]:= −1 + 10
x
Out[16]= Expand@eqD
In[17]:= −1 + 10
x
Out[17]= Factor@eqD
In[18]:= H−1 H1 H1 L H1 L
+ + − + − + + + + +
2 3 4 2 3 4
xL xL x x x x x x x x
Out[18]=
In questo caso la forma più semplice, al contrario del caso precedente, si ottiene con il comando
Factor. Expand lavora in maniera diversa quando abbiamo a che fare con delle funzioni razionali
fratte: HHx Hx Hx ê HHx Hx Hx Hx
= − + − − − − +
expr 2L 5L 4LL 1L 1L 8L 1LL
In[19]:= H−4 H−2 H5
H1
H−8 H−1
+ + +
xL xL xL
Out[19]= 2 +
+ + xL
xL xL
Expand@exprD
In[20]:= H1 H1
H−8 H−1
H−8 H−1
40 22 x
− −
Out[20]= 2 2
+ +
+ +
+ + xL xL
xL xL
xL xL H1 H1
H−8 H−1 H−8 H−1
2 3
x
x +
2 2
+ +
+ + + +
xL xL
xL xL xL xL
Possiamo vedere che il denominatore non viene intaccato dal comando, ed anche che abbiamo in
questo caso separato l'espressione in più espressioni razionali fratte. Questo a volte non è
conveniente. Per espandere questo tipo di espressioni ci sono altri comandi più specifici:
espande solamente il numeratore
ExpandNumerator[expr] espande solamente il denominatore
ExpandDenominator[expr] espande il numeratore, distribuendo il denominatore
Expand[expr] su ogni termine
espande sia il numeratore che il denominatore
ExpandAll[expr]
Come possiamo vedere, quindi, se vogliamo espandere per esempio il numeratore, ma non vogliamo
che sia espanso compretamente come prima, dobbiamo usare il comando appropriato:
54
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
ExpandNumerator@exprD
In[21]:= H1
H−8 H−1
− − +
2 3
40 22 x x x
Out[21]= 2 +
+ + xL
xL xL
In questa maniera, espandiamo il numeratore, ma la scrittura è più compatta. Possiamo anche
espandere il denominatore, oppure entrambe le cose, tramite gli altri comandi:
ExpandDenominator@exprD
In[22]:= H−4 H−2 H5
+ + +
xL xL xL
Out[22]= − +
−8 + + 2 3 4
7 x 9 x x
9 x
ExpandAll@exprD
In[23]:= 40 22 x
− −
Out[23]= − + − +
−8 + +
−8 + + 2 3 4 2 3 4
9 x x 9 x x
9 x 7 x
9 x 7 x 2 3
x x
+
−8 + + −8
− + + + − +
2 3 4 2 3 4
9 x 7 x 9 x x 9 x 7 x 9 x x
Se vogliamo una riscrittura più compatta, possiamo combinare per esempio due dei comandi
precedenti:
ExpandNumerator@ExpandDenominator@exprDD
In[24]:= − − +
2 3
40 22 x x x
Out[24]= −8 + + − +
2 3 4
9 x 7 x 9 x x
In questa maniera abbiamo espanso tutto, ma avitando di scrivere un'espressione fratta per ogni
termine del numeratore...
ExpandAll, pur espandendo tutto quanto, ha un'opzione molto interessante:
patt], etc. espande quelle parti dell'espressione che contengono patt
ExpandAll[expr,
Supponiamo di avere un'espressione con più incognite:
Hx Hx
= − + −
expr yL ^ 4 3L ^ 2
In[25]:= H−3 Hx
2 4
+ + −
xL yL
Out[25]=
Proviamo, adesso, ad espanderlo completamente:
ExpandAll@exprD
In[26]:= − + + − + − +
2 4 3 2 2 3 4
9 6 x x x 4 x y 6 x y 4 x y y
Out[26]= 55
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
Quello che ci aspettavamo, in fondo; supponiamo, adesso, di voler espandere la parte
dell'espressione che contiene la y: in questo caso basta specificarla nel comando ExpandAll:
ExpandAll@expr, yD
In[27]:= H−3 2
+ + − + − +
4 3 2 2 3 4
xL x 4 x y 6 x y 4 x y y
Out[27]=
In questa maniera abbiamo lasciato inalterata la parte che non contiene la y; questo è un metodo
abbastanza potente per poter espandere solo le porzioni che ci interessano.
Tuttavia Mathematica ci viene incontro con due comandi molto potenti per la semplificazione delle
espressioni: cerca la forma più semplice utilizzando un set
Simplify[expr] di semplificazioni algebriche standard
cerca la forma più semplice applicando un
FullSimplify[expr] set di regole di semplificazione molto più ampio
Questi due comandi permettono di trovare la forma più compatta di scrivere un'equazione:
+ +
Simplify@x ^ 2 4 x 4D
In[28]:= H2 2
+ xL
Out[28]= −
Simplify@x ^ 10 1D
In[29]:= −1 + 10
x
Out[29]=
Si può notare che nel primo caso la forma più compatta è quella ottenuta con Factor, mentre nel
secondo caso quella ottenuta con Expand, e che in entrambi i casi Simplify restituisce il risultato
corretto. Tuttavia questo comando va ben oltre le semplici equazioni algebriche; permette infatti di
semplificare una vasta gamma di espressioni. E
1 1
1
H−1 H1 L
H1
− −
SimplifyA
In[30]:= + + + 2
4 xL xL 2 x
4
1
Out[30]= −1 + 4
x
Quando, tuttavia, le espressioni sono complicate e usano funzioni avanzate, Simplify potrebbe non
farcela da solo, e qua entra in gioco il comando FullSimplify, che utilizza un numero di regole molto
più vasto, includendo anche equazioni trascendentali e semplificazioni di funzioni avanzate, come la
funzione Gamma: 56
Printed by Mathematica for Students
Daniele Lupo Appunti di Mathematica
= −
eq Gamma@xD Gamma@1 xD
In[31]:= −
Gamma@1 xD Gamma@xD
Out[31]= Simplify@eqD
In[32]:= −
Gamma@1 xD Gamma@xD
Out[32]= FullSimplify@eqD
In[33]:= π Csc@π xD
Out[33]=
A questo punto, si sarebbe tentati di utilizzare sempre il secondo comando, ma io lo sconsiglio: è
vero che è più potente, ma è anche vero che lo è a prezzo di un costo computazionale
esponenzialmente più elevato; questo potrebbe fare la differenza per espressioni grandi, per cui
potrebbe impiegare un tempo esagerato per portare a termine l'operazione. Usatelo, quindi, solo se
ne vale la pena, e se Simplify da solo non vi soddisfa. Anche se, per i calcoli che siamo soliti fare,
non si perde in fondo tutto questo tempo...
Inoltre, ci sono anche altre funzioni che permettono di manipolare ulteriormente le espressioni, in
modo da poter, magari, visualizzarle nel modo che preferiamo:
moltiplica tutti i prodotti e potenze
Expand[expr] applica ovunque
ExpandAll[expr] Expand
scrive sottoforma di prodotto di fattori
Factor[expr] scrive tutti i termini con un comun denominatore
Together[expr] separa l'espressione in termini con semplici denominatri
Apart[expr] cancella i fattori comuni fra numeratore e denominatore
Cancel[expr] Scrive l'equazione raggruppando le potenze di x
x] Scompone in due fattori, dove in uno non compare i