Python e il calcolo scientifico

Nell’ottobre 2020, dopo aver parlato molto di Python in questo blog, ho ritenuto utile produrre un manualetto, allegato all’articolo “Python per principianti”, in cui sono descritte le basi del linguaggio ad uso di dilettanti che vogliano divertirsi a scrivere codice per propri usi personali.
Dando per scontata la conoscenza di queste basi avevo precedentemente, nel maggio 2018, in un allegato all’articolo “Grafica con Python”, illustrato il modulo Tkinter attraverso il quale possiamo vestire i nostri programmi Python con una interfaccia grafica.
Sempre dando per scontata la conoscenza di queste basi avevo precedentemente, nel settembre 2019, in un allegato all’articolo “Software libero per il calcolo simbolico”, descritto il modulo Sympy attraverso il quale possiamo utilizzare il linguaggio Python per il calcolo simbolico.
Per calcoli numerici molto impegnativi, tipo quelli ricollegabili alla Data Science ed all’analisi dei big data, per eseguire i quali la scrittura del codice va ben oltre le basi del linguaggio, nell’articolo “Orange: data science con Python senza scrivere codice” del dicembre 2020, ho illustrato uno strumento basato su Python che ci dà modo di sviluppare queste analisi senza conoscere il linguaggio.
Ora, a parte la grafica e il calcolo simbolico, mi accorgo che tra le basi del linguaggio e la data science c’è una zona, identificabile genericamente come calcolo scientifico, nella quale il dilettante può trovare modo di divertirsi utilizzando alcuni moduli aggiuntivi: Numpy, Scipy e Matplotlib.
Ad un utilizzo di base di questi moduli Python dedico l’allegato manualetto in formato PDF, liberamente scaricabile, stampabile e distribuibile.

python_calcolo_scientifico

Software libero per il calcolo simbolico

Nell’allegato “calcolo.pdf” al mio articolo del maggio 2015 “Software libero per calcolare”, archiviato in questo blog nella categoria Software libero, dopo aver introdotto la distinzione tra calcolo numerico e calcolo letterale o simbolico, per quanto riguarda quest’ultimo ho accennato all’esistenza del software libero Maxima, che ritenevo e tuttora ritengo il migliore.
Successivamente ho presentato con maggiore approfondimento alcuni importanti strumenti di calcolo: Calc di Libre Office (nell’allegato all’articolo “Matematica e Statistica con Calc” del giugno 2016) e KNIME (nell’allegato all’articolo “KNIME: l’alternativa a Python per i data scientists” del giugno 2019). Tutti strumenti di calcolo numerico.
Ora torno al calcolo letterale o simbolico per una più esauriente illustrazione dell’argomento e degli strumenti di software libero in quello che viene chiamato CAS, Computer Algebra System, dove il calcolo coinvolge non soltanto dati numerici (3 4,67 8 ecc.) ma anche o solo simboli (a x δ z β ecc.).
L’utilità del calcolo simbolico sta nella sua capacità di astrazione e di generalizzazione del calcolo numerico attraverso l’introduzione di simboli che sottendono un valore numerico qualsiasi in notazioni che chiamiamo espressioni matematiche.
Gli stessi simboli possono essere oggetto di calcolo fornendo sempre un risultato espresso in simboli in nuove espressioni matematiche.
Solo sostituendo ai simboli dei valori numerici si addiviene ad un risultato numerico.
Tutto ciò richiama il meccanismo delle formule matematiche.
Il modo più sintetico di definire il doppio di un numero è 2x. Se moltiplichiamo 2x per 2 otteniamo 4x in definizione del quadruplo di un numero. Per ottenere il doppio di 3, nell’espressione 2x sostituiamo 3 a x e otteniamo 6. Per ottenere il quadruplo di 5, nell’espressione 4x sostituiamo 5 a x e otteniamo 20.
Complicando un po’ le cose: il modo più semplice per calcolare il valore della derivata prima della funzione x al quadrato per x = 0,5 è quello di calcolare in simboli che la derivata prima di x al quadrato è 2x e poi sostituire 0,5 a x in quest’ultima espressione per arrivare al risultato numerico 1. E la formula 2x può servire per calcolare il valore della derivata della funzione x al quadrato in qualsiasi punto, compresa la possibilità, attraverso la soluzione dell’equazione 2x = 0, di trovare il punto in cui la derivata si azzera, ad indicare la possibile esistenza, in quel punto, di un massimo o di un minimo relativo della funzione x al quadrato.
Come si vede, riconosciuto al calcolo numerico tutto il merito di quantificare soluzioni a problemi concreti nei più disparati campi, non si può negare che senza il calcolo simbolico non esisterebbe l’analisi matematica e il linguaggio scientifico sarebbe veramente a corto di possibilità espressive.
Peraltro lo stesso calcolo numerico molto spesso fornisce risultati utili in quanto alle sue spalle esiste un tracciato costruito in simboli che prepara la strada per raggiungere quei risultati.
* * *
Esistono parecchi software per il calcolo simbolico, generalmente utilizzabili anche per il calcolo numerico.
Ai blasonati e costosi software commerciali Maple, Mathematica, Derive, Matlab arricchito della Toolbox per il CAS si affiancano altrettanti ed equivalenti software liberi e gratuiti, tutti funzionanti non solo su Linux ma anche su Windows e Mac.
Il migliore di questi, come ho già detto e secondo la mia opinione, è Maxima, che troviamo all’indirizzo http://maxima.sourceforge.net/ nella versione a riga di comando o in quella per la finestra Unix Xwindow (xMaxima), entrambi ben documentati da un help inglobato nel software. Per un utilizzo reso estremamente intuitivo da una ben fatta interfaccia grafica consiglio la versione wxMaxima che si trova all’indirizzo https://sourceforge.net/projects/wxmaxima/. Su Google Play troviamo una versione di Maxima anche per Android (Maxima on Android).
Sempre restando sui software più completi e accreditati, ricordo Axiom (scaricabile da qui), Reduce (scaricabile da qui) e Yacas (scaricabile da qui). Per Yacas è disponibile un file .jar, utilizzabile con la Java Virtual Machine.
Le ultime versioni di Geogebra (dalla Classic 5.0 in poi) sono dotate di una calcolatrice CAS: con questa non possiamo fare tutto ciò che facciamo con Maxima ma possiamo fare comunque molto con ottima integrazione in quell’insuperabile software didattico libero che è Geogebra.
* * *
Tutti questi software compiono elaborazioni di calcolo simbolico su input espressi secondo un linguaggio che varia da software a software e forniscono un risultato. Se questo risultato è funzionale per compiere ulteriori elaborazioni, esso è inseribile, sempre secondo il linguaggio del software, in queste ulteriori elaborazioni fino al raggiungimento del risultato finale, magari di carattere numerico.
Al programmatore, più o meno dilettante, che voglia inserire in un programma scritto nel suo linguaggio preferito passaggi di calcolo simbolico, insieme a quant’altro, questi software non servono.
Ma nel mondo del software libero si è pensato anche a queste esigenze e, di fianco ai citati software a ciclo completo, si sono create librerie che consentono di inserire il calcolo simbolico all’interno di normali programmi scritti in C, in Pascal o in Python.
Probabilmente la più famosa è GiNaC (acronimo ricorsivo di Ginac is not a cas), biblioteca per C++.
Altra biblioteca, utilizzabile in C, C++, Pascal, Fortran, Perl e Python, è Pari.
Ma un appassionato di Python come me non può certo ignorare SymPy, il modulo di calcolo simbolico del linguaggio Python.
Tra l’altro SymPy ha il pregio di essere la più completa risorsa nel mondo Python per la soluzione di equazioni di ogni tipo.
E’ proprio a questa libreria che dedico l’allegata guida introduttiva, in formato PDF, liberamente scaricabile, stampabile e distribuibile.

sympy