Estratto del documento

Appunti di Mathematica

Packages

Vediamo adesso alcuni packages, predefiniti in Mathematica, che potrebbero essere particolarmente utili per risolvere particolari problemi (per esempio, disegnare diseguaglianze, o tracciare diagrammi di Bode, che hanno scale logaritmiche).

Di solito i packages vengono trascurati, e ci si concentra solamente sulle funzioni predefinite in Mathematica. Questo di certo non è male, per chi ci mette mano per la prima volta, tuttavia trascurare i package secondo me rappresenta un grave errore; si pensa che si tratti solamente di comandi aggiuntivi di poca importanza, e che la sostanza è in Mathematica stessa. Questo è vero e falso allo stesso tempo: vero perché i packages sono scritti nel linguaggio standard di Mathematica, e quello che fanno lo potete fare anche voi definendo le vostre funzioni: falso perché per implementare una funzione di quelle definite nei packages occorrerebbero pagine e pagine di codice, che fortunatamente qualcun altro ha già scritto per noi. Non si tratta solamente di orpelli, ma ci sono molti comandi che possono veramente semplificare la vita di chi utilizza Mathematica. Sono certo che fra i vari package ce ne saranno almeno un paio che troverete invitanti, e che non abbandonerete.

Capisco che la prima cosa che si deve fare è imparare ad usare il programma ma, una volta imparato, imparare i comandi dei package (mica tutti: l'help serve anche per trovare quello che cercate in un dato momento), vi permette di fare cose che altrimenti, diciamocela tutta, non sapreste fare.

Non li elencherò tutti, perché sono troppi, ma quelli che reputo utili (o che almeno mi sono serviti) sono tutti qua; considero anche il fatto che, pur essendo solamente alcuni, sono già parecchi, per cui avrete di che sperimentare ed imparare fino alla laurea ed oltre... Ovviamente appena finito di leggere queste pagine dovete correre a leggervi l'help per scoprire gli altri!!!!

Comunque, cominciamo:

Algebra`AlgebraicInequalities`

<< Algebra`InequalitySolve`

In[1]:=

Questo package contiene una funzione utilizzata per risolvere una disequazione (oppure un sistema di disequazioni): x] trova i valori di x che soddisfano l'espressione

InequalitySolve[expr, contenente operatori logici e disuguaglianze algebriche

x p r, trova i valori di x che soddisfano le diseguaglianze

I n e q u a l i t y S o l v e [e i

x

{x , , … }]

1 2 320

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

Supponiamo di avere la seguente espressione:

ê H1

= + <

diseguaglianza x ^ 2 xL 5

In[2]:= 2

x < 5

Out[2]= +

1 x

InequalitySolve@diseguaglianza, xD

In[3]:= è!!! è!!!

L L

1 1

< −1 − +

< <

x 3 3

5 x 5

Out[3]= 2 2

Come potete vedere, abbiamo ottenuto la soluzione che volevamo.

Un sistema di diseguaglianze viene scritto come un'unica equazione, dove le varie parti del sistema sono legate fra di loro dall'operatore AND:

=

ê H4 ê Hx

sistema

In[4]:= > + − <

y x x ^ 3 yL yL && x y ^ 2

+

3

y 4 x y

> < 2

&& x y

Out[4]= −

x x y 8x,

InequalitySolve@sistema, y<D

In[5]:= è!!!

Hx »» H0 L »» Hx

< < < ≤ > > >

0 && y xL x 1 && y x 1 && y xL

Out[5]=

Abbiamo utilizzato le soluzioni desiderate, sotto forma di condizioni per le incognite.

Come potete vedere, questo comando è molto potente, anche se funziona soltanto con equazioni polinomiali: < +

InequalitySolve@Exp@xD 1 x, xD

In[6]:=

— InequalitySolve::npi : A nonpolynomial equation or inequality encountered. The solution set may be incorrect.

False

Out[6]=

Come potete vedere, non possiamo ottenere gli intervalli, in questo caso.

321

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

Algebra`ReIm`

Questo package permette di lavorare meglio con funzioni complesse, estraendone parte reale ed immaginaria senza dover utilizzare ComplexExpand.

Vediamo, per esempio, questa espressione:

ê

Re@x yD

In[7]:= E

x

ReA

Out[7]= y

Vediamo che rimane non valutata. Andiamo, adesso, a caricare il package:

<< Algebra`ReIm`

In[8]:= ê

Re@x yD

In[9]:= Re@xD

Im@xD Im@yD Re@yD

+

Out[9]= 2 2 2 2

+ +

Re@yD Re@yD

Im@yD Im@yD

Come si vede, questa volta Mathematica esplicita direttamente la parte reale ed immaginaria dei simboli, evitando comandi come ComplexExpand. Tuttavia, se specifichiamo un simbolo come reale o come immaginario, senza dover specificare il simbolo esplicitamente:

ê: =

y Re@yD 0;

In[10]:= ê

Re@x yD

In[11]:= Im@xD

Out[11]= Im@yD

Come vedere, con il package abbiamo calcolato il valore considerando l'assunzione che avevamo fatto.

322

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

Algebra`RootIsolation`

Con questo package possiamo avere funzioni per gestire meglio il conteggio e l'isolamento di soluzioni di equazioni polinomiali:

  • CountRoots[poly, {x, m1, m2}] restituisce il numero delle soluzioni di poly nell'intervallo complesso.
  • RealRootIntervals[poly] restituisce gli intervalli disgiunti che isolano le radici reali di poly.
  • RealRootIntervals[{poly1, poly2, …}] restituisce gli intervalli disgiunti che isolano le radici reali delle equazioni poly1, poly2, …
  • ComplexRootIntervals[poly] restituisce gli intervalli disgiunti che isolano le soluzioni complesse di poly.
  • ComplexRootIntervals[{poly1, poly2, …}] indovinate cosa fa??? Per i polinomi poly1, poly2, …
  • ContractInterval[a, b, n] restituisce un intervallo isolante che circonda il valore del numero algebrico fino alla precisione di almeno n cifre significative.

Si possono eseguire delle operazioni sui polinomi e scoprire proprietà sulle loro radici senza bisogno di andare a trovarle esplicitamente. Per esempio:

<< Algebra`RootIsolation`

In[12]:= Hx 8x,

− + − −5,

CountRoots@Hx 4L ^ 4 3 x 6L, 5<D

In[13]:= 3

Out[13]=

Abbiamo visto che nell'intervallo specificato si trovano tre soluzioni, senza averle calcolate:

8x,

+ +

CountRoots@x ^ 9 1, 0, 1 I<D

In[14]:= 2

Out[14]=

Come vedete, funziona anche per intervalli complessi.

Consideriamo ancora la prima espressione, e vediamo gli intervalli delle soluzioni reali:

H−6 LD

+ + + 4

RealRootIntervals@H−4 xL 3 x x

In[15]:= 88−3, 81, 82,

0<, 2<, 6<<

Out[15]=

Questi sono, per l'appunto, intervalli disgiunti, ognuno contenente una radice reale del polinomio.

Analogamente possiamo realizzarli per le soluzioni immaginarie:

323

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

+

ComplexRootIntervals@x ^ 9 1D

In[16]= 98−2, 9− =, 9− =, 9− 9− =,

3 3 3 3 3 3 3 3 3 3

− − − + −

0<, , , , 0=, ,

Out[16]= =, 90, =, 9 =, 9 ==

9− 2 2 4 2 4 4

2 2 4 2

3 3 3 3 3 3 3 3 3 3 3

3 3 + − +

, ,

, 4

2 4 2 4 2 2 4 2 2

Possiamo anche specificare un intervallo piccolo a piacere per una soluzione:

+

ContractInterval@Root@x ^ 9 1, 2D, 20D

In[17]= 9− 56524103165212567109 189717416474225563087

− ,

Out[17]= =

73786976294838206464 295147905179352825856

452192825321700536871 379434832948451126173

− − 590295810358705651712

590295810358705651712

N@%, 20D

In[18]= 8−0.76604444311897803520 <

− 0.64278760968653932632 ,

Out[18]= −0.76604444311897803520 − 0.64278760968653932632

Come potete vedere, possiamo ottenere l'approssimazione che vogliamo.

324

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

Calculus`FourierTransform`

Questo package contiene alcune funzioni che sono l'equivalente numerico dei comandi per la trasformata di Fourier predefinite in Mathematica:

  • NFourierTransform[expr, t, w] restituisce un'approssimazione numerica della trasformata di Fourier di expr valutata nel valore numerico w, mentre expr è considerata funzione di t.
  • NInverseFourierTransform[expr, w, t] restituisce un'approssimazione numerica della trasformata inversa di Fourier di expr valutata nel valore numerico t, mentre expr è considerata funzione di w.
  • NFourierSinTransform[expr, t, w] restituisce un'approssimazione numerica della trasformata in seno di Fourier di expr valutata nel valore numerico w, mentre expr è considerata funzione di t.
  • NInverseFourierSinTransform[expr, w, t] restituisce un'approssimazione numerica della trasformata inversa in seno di Fourier di expr valutata nel valore numerico t, mentre expr è considerata funzione di w.
  • NFourierCosTransform[expr, t, w] restituisce un'approssimazione numerica della trasformata in coseno di Fourier di expr valutata nel valore numerico w, mentre expr è considerata funzione di t.
  • NInverseFourierCosTransform[expr, w, t] restituisce un'approssimazione numerica della trasformata inversa in coseno di Fourier di expr valutata nel valore numerico t, mentre expr è considerata funzione di w.

Supponiamo di avere la seguente espressione:

ê H1

= +

espr Exp@−Abs@t ^ 3DD Abs@tDL;

In[19]:= Timing@FourierTransform@espr, t, wDD

In[20]:= 921.422 3

−Abs@tD

Second, FourierTransformA , t, wE=

Out[20]= +

1 Abs@tD

Come potete vedere, in questo caso non è in grado di calcolare la trasformata di questa funzione, fra l'altro dopo un tempo neanche breve per il programma. Allora, se ci interessa comunque la trasformata, per esempio in w = 10, possiamo utilizzare la funzione del package:

<< Calculus`FourierTransform`

In[21]:= Timing@NFourierTransform@espr, t, 10DD

In[22]:= 80.016 <

+

Second, 0.00716034 0.

Out[22]= 325

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

Come potete vedere, non solo abbiamo trovato la soluzione che ci interessava, ma abbiamo anche risparmiato un sacco di tempo...

8ω,

Plot@

In[23]:= ωDDD, −8,

8Hue@0.35D,

Evaluate@Abs@NFourierTransform@espr, t, 8<,

→

PlotStyle Thickness@0.013D<,

→

Frame True,

D

PlotLabel "Trasformata numerica di Fourier per espr"

Trasformata numerica di Fourier per espr

0.5

0.4

0.3

0.2

0.1

0 -7.5 -5 -2.5 0 2.5 5 7.5

Graphics

Out[23]=

Come potete vedere, non è poi molto importante il non poter calcolare analiticamente la funzione, a meno che non dobbiate scriverlo sul quaderno, ovvio...

Il vantaggio di questo comando, rispetto alla trasformata numerica predefinita in Mathematica, è che, mentre quest'ultima lavora solamente con liste di dati, quella definita nel package invece lavora su funzioni, il che specialmente in calcoli teorici è un bel vantaggio.

Oltre che per la trasformata generale, il pacchetto offre anche funzioni per lavorare con le funzioni periodiche e con la serie di Fourier:

326

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

  • FourierCoefficient[expr, t, n] restituisce l'n-simo coefficiente nell'espansione in serie esponenziale della funzione periodica in t uguale ad expr nell'intervallo t = −1/2, t = 1/2.
  • FourierSinCoefficient[expr, t, n] restituisce l'n-simo coefficiente nell'espansione in serie del seno.
  • FourierCosCoefficient[expr, t, n] restituisce l'n-simo coefficiente nell'espansione in serie del coseno.
  • FourierSeries[expr, t, k] restituisce la serie esponenziale fino all'ordine k della funzione periodica in t uguale ad expr nell'intervallo t = −1/2, t = 1/2.
  • FourierTrigSeries[expr, t, k] restituisce l'espansione in serie trigonometrica fino all'ordine k.

Supponiamo di avere la classica onda quadra:

ê 8x,

= − − −2,

p1 Plot@Hx Round@xDL Abs@x Round@xDD, 2<D

In[24]:= 1

0.5

-2 -1 1 2

-0.5

-1

Graphics

Out[24]= H- L,

Sviluppiamo adesso i primi quattro termini della serie di Fourier: dato che l'intervallo preso in considerazione dal comando è compreso in −1/2, 1/2, non abbiamo bisogno di specificare il Round, e basta scrivere:

ê

FourierTrigSeries@Abs@tD t, t, 5D

In[25]= π π π

4 Sin@2 tD 4 Sin@6 tD 4 Sin@10 tD

+ +

Out[25]= π π π

3 5

Vediamo che effettivamente rappresenta quello che volevamo:

8t, 8RGBColor@0.3,

−2, →

Plot@%, 2<, PlotStyle 0.6, 0.7D<D

In[26]= 1

0.5

-2 -1 1 2

-0.5

-1

Graphics

Out[26]= Show@p1, %D

In[27]= 1

0.5

-2 -1 1 2

-0.5

-1

Graphics

Out[27]=

Come potete vedere, l'espansione trigonometrica (troncata) rappresenta effettivamente l'espansione in serie di Fourier. Possiamo anche trovarci la serie esponenziale, se vogliamo:

ê

FourierSeries@Abs@tD t, t, 5D

In[28]= −2 π π −6 π π −10 π π

t 2 t t 6 t t 10 t

2 2 2

2 2

2 − + −

− +

Out[28]= π π π

π π π

3 3 5 5

Naturalmente, possono capitare casi in cui non è possibile risolvere simbolicamente l'espansione in serie:

328

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

Clear@esprD

In[29]:= espr@t_D := Cos@Cos@tDD

In[30]:= FourierTrigSeries@espr@tD, t, 3D

In[31]:= †

† 1 1

2 2

+ π π +

Cos@Cos@tDD t 2 Cos@2 tD Cos@2 tD Cos@Cos@tDD t

Out[31]= 1 1

− −

2 2

† 1

2 π +

π Cos@4 tD Cos@Cos@tDD t

2 Cos@4 tD 1

− 2

† 1

2 π

π Cos@6 tD Cos@Cos@tDD t

2 Cos@6 tD 1

− 2

Possiamo comunque ottenere la serie con coefficienti numerici, se non riusciamo a trovare i simbolici:

  • NFourierCoefficient[expr, t, n] restituisce l'approssimazione numerica dell'n-simo coefficiente nell'espansione in serie.
  • NFourierSinCoefficient[expr, t, n] restituisce l'approssimazione numerica dell'n-simo coefficiente nell'espansione in serie seno.
  • NFourierCosCoefficient[expr, t, n] restituisce l'approssimazione numerica dell'n-simo coefficiente nell'espansione in serie coseno.
  • NFourierSeries[expr, t, k] trova l'espansione in serie esponenziale, di ordine k, con coefficienti numerici.
  • NFourierTrigSeries[expr, t, k] trova l'espansione in serie trigonometrica, di ordine k, con coefficienti numerici.

Vediamo di risolvere il problema di poco fa in termini numerici:

NFourierTrigSeries@espr@tD, t, 3D

In[32]= − π + π −

0.574072 0.0405754 Cos@2 tD 0.00954455 Cos@4 tD

Out[32]= π + π + π + π

0.00419166 Cos@6 tD 0. Sin@2 tD 0. Sin@4 tD 0. Sin@6 tD

Notate anche che, se avete espressioni comunque convertibili, nella stragrande maggioranza dei casi la soluzione numerica si trova molto più velocemente di quella simbolica, per cui, per espressioni complicate, usatela solo se vi serve veramente.

H- L.

Inoltre, potremmo avere funzioni periodiche, ma con un periodo diverso da 1, per cui il periodo non sarà più contenuto in −1/2, 1/2. Per ovviare a ciò, dobbiamo modificare i parametri di Fourier. Per esempio, se ho:

329

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

Hf = + +

8x,

3 Sqrt@Abs@Sin@xDDD Cos@3 xD;

In[33]:= −7,

Plot@f, 7<DL 5

4.5

4

3.5

3

2.5

-6 -4 -2 2 4 6

Graphics

Out[33]= 8x, −4<D

FindMinimum@f,

In[34]:=

— FindMinimum::lstol :

The line search decreased the step size to within tolerance specified by AccuracyGoal and PrecisionGoal but was unable to find a sufficient decrease in the function. You may need more than MachinePrecision digits of working precision to meet these tolerances.

More…

82.00009, 8x → −3.14159<<

Out[34]=

Possiamo vedere (nonostante il warning, dovuto al fatto che abbiamo un piccolo problema di convergenza, perché il minimo è una cuspide), che il periodo è fra −π e π per cui dobbiamo far sapere al comando che questi sono i nuovi limiti; per far questo si utilizza l'opzione Fourier-Parameters, modificando i parametri necessari:

330

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

common setting discrete inverse discrete Fourier transform

Fourier

convention (r−1)(s−1)/n

n n −2 π

1 1

i

Mathematica u v e

{0, 1} r s

default π

2 i

e /

(r−1)(s−1)/n

n −2 π

1 n

i

data analysis u v e

{−1, 1} r s

(r−1)(s−1)/n s=1

n r=1

π

2 i

e

signal u v e

(r−1)(s−1)/n

{1, −1} r s

r=1 n s=1

−2 π i

e

Anteprima
Vedrai una selezione di 10 pagine su 156
Manuale di Mathematica 10 Pag. 1 Manuale di Mathematica 10 Pag. 2
Anteprima di 10 pagg. su 156.
Scarica il documento per vederlo tutto.
Manuale di Mathematica 10 Pag. 6
Anteprima di 10 pagg. su 156.
Scarica il documento per vederlo tutto.
Manuale di Mathematica 10 Pag. 11
Anteprima di 10 pagg. su 156.
Scarica il documento per vederlo tutto.
Manuale di Mathematica 10 Pag. 16
Anteprima di 10 pagg. su 156.
Scarica il documento per vederlo tutto.
Manuale di Mathematica 10 Pag. 21
Anteprima di 10 pagg. su 156.
Scarica il documento per vederlo tutto.
Manuale di Mathematica 10 Pag. 26
Anteprima di 10 pagg. su 156.
Scarica il documento per vederlo tutto.
Manuale di Mathematica 10 Pag. 31
Anteprima di 10 pagg. su 156.
Scarica il documento per vederlo tutto.
Manuale di Mathematica 10 Pag. 36
Anteprima di 10 pagg. su 156.
Scarica il documento per vederlo tutto.
Manuale di Mathematica 10 Pag. 41
1 su 156
Sintesi

Pacchetti fondamentali di Mathematica

Nel documento vengono presentati i “pacchetti” (Packages) fondamentali di Mathematica: tali pacchetti raccolgono al loro interno tutta una serie di comandi e funzioni predefinite che, sebbene possano essere programmate anche in autonomia da ogni singolo utente, vengono standardizzate nel software e quindi risultano più comode da usare. Il documento si divide in tre parti: nella prima si analizzano pacchetti per il calcolo simbolico o la risoluzione di problemi speciali (calcolo delle radici di un'equazione, operazioni con i numeri complessi, trasformate di Fourier…).

Nella seconda e più estesa parte si analizzano molti dei pacchetti grafici del software: dal classico plot per le funzioni nel piano cartesiano, a quello per grafici 3D, passando per i grafici discreti, gli alberi, le curve parametriche e altri.

Nell’ultima parte vengono introdotti i pacchetti di algebra lineare, quali il calcolo matriciale e vettoriale o l’ortogonalizzazione di vettori.

D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi