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
Disdici quando vuoi 162x117
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Sintesi
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.


<div>

Scarica il

</div>

Estratto del documento

Daniele Lupo 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]:= è!!! è!!!

»» H5 H5

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: restituisce il numero delle soluzioni di poly

CountRoots[poly, {x, , m }

nell'intervallo complesso

m m {m

, }] 1 2

1 2 restituisce gli intervalli disgiunti che isolano le radici

RealRootIntervals[poly] reali di poly

poly restituisce gli intervalli disgiunti che isolani le radici

RealRootIntervals[{ ,

1 reali delle equazioni poly , poly , …

poly , … }] 1 2

2 restituisce gli intervalli disgiunti che isolano le

ComplexRootIntervals[poly] soluzioni complesse di poly

poly indovinate cosa fa??? Per i polinomi poly , poly , …

ComplexRootIntervals[{ 1 1 2

poly

, , … }]

2 n] restituisce un intervallo isolante che circonda il valore

ContractInterval[a, a fino alla precisione di almeno n

del numero algebrico

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 fediamo 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 contentente 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 + − +

, ,

, 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:

restituisce un approssimazione numerica della

NFourierTransform[expr,

w] trasformata di Fourier di expr valutata nel valore

t, w, mentr expr è considerata funzione di t

numerico

restituisce un approssimazione numerica della

NInverseFourierTransform[e

w, trasformata inversa di Fourier di expr valutata nel valore

xpr, t] w

numerico t, mentr expr è considerata funzione di

restituisce un approssimazione numerica della

NFourierSinTransform[expr,

w] trasformata in seno di Fourier di expr valutata nel valore

t, w, mentr expr è considerata funzione di t

numerico

frestituisce un approssimazione numerica della

NInverseFourierSinTransfor

w, trasformata inversa in seno di Fourier di expr valutata nel

t]

m[expr, valore numerico t, mentr expr è considerata funzione di

restituisce un approssimazione numerica della

NFourierCosTransform[expr,

w] trasformata in coseno di Fourier di expr valutata nel

t, w, mentr expr è considerata funzione di

valore numerico

restituisce un approssimazione numerica della

NInverseFourierCosTransfor

w, trasformata inversa in cosenodi Fourier di expr valutata

t]

m[expr, nel valore numerico t, mentr expr è considerata funzione

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

w

trasformata, per esempio in = 10, possiamo utilizzare la funzione del packge:

<< 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 vantagigo di questo comando, rispetto alla trasformata numerica predefinita in Mathematica, è

che, mentre quest'ultima lavora solamente con liste di dati, quella definira 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

-

restituisce l' n simo coefficiente nell'espansione in serie

FourierCoefficient[expr, esponenziale della funzione periodica in t uguale ad

t, n] 1 1

ÅÅÅÅ ÅÅÅÅ

t=- , t=

expr nell'intervallo 2 2

-

restituisce l' n simo coefficiente nell'espansione in

FourierSinCoefficient[expr, serie del seno

t, n] -

restituisce l' n simo coefficiente nell'espansione in

FourierCosCoefficient[expr, serie del coseno

t, n] t, k] restituisce la serie esponenziale fino all'ordine k

FourierSeries[expr, della funzione periodica in t uguale ad expr

1 1

ÅÅÅÅ ÅÅÅÅ

nell'intervallo t=- , t=

2 2

restituisce l'espansione in serie trigonometrica

FourierTrigSeries[expr, fino all'ordine k

t, 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

1 1

ÅÅÅÅ ÅÅÅÅ

considerazione dal comando è compreso in , non abbiamo bisogno di specificare il Round, e

2 2

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:

327

Printed by Mathematica for Students

Daniele Lupo Appunti di Mathematica

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

sombolici: restituisce l'approssimazione numerica dell'

NFourierCoefficient[expr, -

n simo coefficiente nell'espansione in serie

t, n] restituisce l'approssimazione numerica dell'

NFourierSinCoefficient[expr -

n simo coefficiente nell'espansione in serie seno

t, n]

, restituisce l' approssimazione numerica dell'

NFourierCosCoefficient[expr - simo coefficiente nell' espansione in serie coseno

n

t, n]

, t, k] trova l'espansione in serie esponenziale, di ordine k,

NFourierSeries[expr, con coefficienti numerici

trova l'espansione in serie trigonometrica, di ordine k,

NFourierTrigSeries[expr, con coefficienti numerici

t, k]

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

1 1

ÅÅÅÅ ÅÅÅÅ

sarà più contenuto in , Per ovviare a ciò, dobbiamo modificare i parametri di Fourier. Per

2 2

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

More…

digits of working precision to meet these tolerances.

82.00009, 8x → −3.14159<<

Out[34]=

Possiamo vedere (nonostante il warning, dovuto al fatto che abbiamo un piccolo problema di

p,

convergenza, perchè il minimo è una cuspide), che il periodo è fra -p 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 d i s c r e t e inverse discrete Fourier transform

F o u r i e r

‚ ‚

convention Hr-1L Hs-1Lên

n n -2 p

1 1

ÅÅÅÅ

ÅÅÅÅÅ ÅÅÅÅ

ÅÅÅÅÅ i

Mathematica u v e

{0, 1} r s

Hr-1L Hs-1Lên

1ê2 1ê2

n n

r=1 s=1

default p

2 i

e ⁄

‚ Hr-1L Hs-1Lên

n -2 p

1 n

ÅÅÅÅ i

data analysis u v e

{-1, 1} r s

Hr-1L Hs-1Lên s=1

n r=1

p

2 i

e

⁄ ‚ Hr-1L Hs-1Lên

n p

1

n ÅÅÅÅ 2 i

s i g n a l u v e

Hr-1L Hs-1Lên

{1, -1} r s

r=1 n s=1

-2 p i

processing e

Dettagli
Publisher
156 pagine