Un’altra rapida e semplice incursione nel mondo di Maxima

Continuo la panoramica di Maxima, iniziata proprio con Maxima: panoramica iniziale.

Limiti

Naturalmente Maxima può anche calcolare limiti. Per esempio:

lim1

Questo è un limite notevole. In certi casi il limite “venendo da destra” è diverso dal limite “venendo da sinistra”: possiamo aggiungere un altro argomento a limit che specifica come deve essere fatto il limite, se da destra (plus) o da sinistra (minus).

lim2

Quando c’è questo tipo di ambiguità e non specifichiamo come vada fatto il limite, otteniamo und (undefined).

Naturalmente possiamo far tendere x all’infinito, inf, o meno infinito, minf.

lim3

Come risposta potete ottenere anche infinity (infinito complesso) o ind, indefinito ma limitato (come per esempio è il caso del seno e del coseno). Per qualche altra cosetta rimando al manuale.

Serie di Taylor/Laurent

A Maxima possiamo anche chiedere l’espansione (troncata) in serie di Taylor. Potete sperimentare con le espansioni più note, che ovviamente Maxima gestisce, o con altre cosucce come per esempio la seguente:

taylor1

La lettera γ è la costante di Eulero-Mascheroni. Esce fuori perché il fattoriale è stato espresso (diciamo per forza di cose… ma non dettaglio) in termini della funzione Γ, e infatti otteniamo lo stesso risultato se al posto di x! scriviamo gamma(x+1). Se calcoliamo la derivata dobbiamo ottenere, come potete leggere su Wikipedìa, ψ0(x + 1)Γ(x + 1). Se la calcoliamo a x=0, otteniamo -γ; Maxima “sa“ anche tutto questo:

taylor2

(Ho preso l’ultimo risultato tramite % e poi gli ho detto di considerare x=0.) Con ciò abbiamo sfiorato un paio di funzioni speciali, che naturalmente Maxima conosce.

Una volta che abbiamo l’espansione in serie (troncata) in un intorno di un punto, possiamo usarla per calcolare la funzione in quell’intorno; naturalmente otteniamo un’approssimazione. Ne approfittiamo per vedere che Maxima è anche un linguaggio di programmazione e può fare pure grafici (tipicamente è gnuplot in realtà a farli)…

Vogliamo avere un’idea di come migliora l’approssimazione della funzione gamma man mano che tronchiamo la sua espansione in serie di Taylor sempre più tardi (ma mi fermo presto perché già intorno al termine alla 11 comincia a metterci un po’ troppo… non aspettiamoci che Maxima abbia performance stratosferiche.)

Grafici (e Turing…)

Potremmo anche abbandonare l’ambiente interattivo, aprire un editor, e scrivere il codice come siamo abituati; questo magari sarà effettivamente più comodo in qualche puntata successiva (se ci arrivo!:-D). Per ora continuo ad usare wxmaxima.

L’obiettivo che mi sono posto alla fine del paragrafo precedente è in pratica questo: graficare un po’ di espansionsioni in serie (troncate) di Taylor della Γ, e la Γ medesima, per vedere cosa cambia man mano che aggiungiamo termini.

La Γ è definita per valori positivi della variabile; la funzione che stiamo sviluppando è in realtà Γ(x+1) (siamo partiti dal fattoriale), e la stiamo sviluppando intorno a x=0, per cui non ha senso andare più lontano di 1. Insomma il nostro intervallo sarà [0, 1].

Il codicillo che andiamo ad eseguire ha il seguente aspetto:

code0

(Ricorda: se abbiamo pasticciato un po’ e vogliamo pulire un po’ il nostro ambiente, eseguiamo reset()$ e kill(all)$.)

Abbiamo prima inizializzato una lista vuota; poi abbiamo usato un ciclo for per popolarla, tramite append. Il for parte da 2 e non supera 10 a passi di 3, cioè insomma calcoliamo taylor per 2, 5, 8. Alla fine appendiamo anche la gamma(x+1) che è la funzione “giusta e vera” e gli diciamo di fare un grafico 2D usando come intervallo per la variabile x [0, 1]. Dopo un po’ compare il nostro grafico.

Se vogliamo salvarlo invece che vederlo, possiamo scrivere qualcosa come:

plot2d(t, [x, 0, 1], [gnuplot_term, 'png], [gnuplot_out_file,"graph0.png"])$

Controllando un po’ meglio gnuplot è possibile ottenere grafici “migliori”; senza fronzoli il file generato è questo:

graph0

Se rimaniamo nell’intorno (positivo) del punto in cui abbiamo sviluppato la serie riusciamo a ottenere approssimazioni migliori man mano che aumentiamo i termini della serie; allontanandoci notiamo invece che le cose vanno diveramente e capita che il verde (che ha più termini) va persino peggio del blu (n=2)… Se giocate un po’ vi accorgete che lontano dallo zero avvengono oscillazioni piuttosto consistenti man mano che aggiungiamo termini. Del resto nessuno ci dice che abbia senso allontanarsi dallo zero…

Le possibilità grafiche di Maxima non si esauriscono qui, naturalmente, e nemmeno la capacità di esprimere algoritmi.

Vettori e matrici

Potevano mancare? Possiamo inserire matrici e calcolarne il determinante; come al solito possiamo mettere variabili (simboli) invece di numeri:

dett2x2

Se definiamo matrici più grandi possiamo dedurre la regola usata, che è proprio una di quelle che (forse) abbiamo imparato.

dett3x3

Provate da voi invert(m2), detout; per invertire la matrix 3×3. Noterete che al denominatore c’è proprio il determinante (detout serve per metterlo a fattore comune). Non a caso. Provate

invert(m2), a=0, b=0, c=0;

Quelle imposizioni rendono il determinante nullo, per cui Maxima vi risponde con un errore che può essere un po’ criptico (0 to a negative exponent), ma che dovrebbe farvi capire che c’è una divisione per 0 di mezzo o almeno questo: la matrice non è invertibile.

Possiamo calcolare il prodotto tra due matrici, e “scopriamo” che il prodotto matriciale non commuta:

AB-BA

Eccetera: anche qui ciò che possiamo fare è veramente tanto e potete esplorare e sperimentare con il capitolo del manuale Matrices and linear algebra. Magari proverò ad approfondire tramite qualche applicazione concreta (esercizi?)

Alla prossima

Nella prossima parte proverò ad utilizzare Maxima in modo un po’ più creativo (o forse mi ributto su qualche esercizietto, dipende). Nel frattempo spero che già abbiate iniziato a divorare il manuale e fare i vostri esperimenti.

Posta un commento o usa questo indirizzo per il trackback.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: