Sinistra <- User-Mode-Linux - Indice Generale - Copertina - Sviluppo di software Open Source come esempio ... -> Destra

Sistemi Liberi


Software libero per il trattamento di problemi scientifici (Parte I. Introduzione)

di Francisco Yepes Barrera

L'articolo...

L'articolo è suddiviso in tre parti: nella prima parte, pubblicata in questo numero del PLUTO Journal, si discute sulle caratteristiche generali del software scientifico e le aree di utilizzo più importanti.



Introduzione

Negli ultimi anni, il software libero si è imposto sempre di più in una molteplicità di ambiti di lavoro, producendo programmi per fare quasi tutto, se non tutto: ambienti desktop grafici, database, server e client di posta, server web, programmi per la grafica e il video, modellazione tridimensionale, grafica computerizzata, CAD, ecc...

Ci sono però alcuni ambiti in cui il software libero non ha raggiunto livelli di utilizzo paragonabili ai programmi che abbiamo elencato in precedenza. Uno di questi ambiti è quello scientifico, dove si fa ricorso predominantemente, almeno per quello che ho potuto constatare io, a programmi proprietari. E dico utilizzo perché in realtà il software c'è ed è di ottima qualità.

Questo fatto è dovuto a una molteplicità di fattori, alcuni dei quali sono comuni al software libero in generale, mentre altri sono caratteristici di questo particolare tipo di programmi:

  1. la, relativamente, bassa diffusione dei sistemi operativi liberi;
  2. la ancora bassa diffusione dei programmi liberi in ambiente desktop;
  3. la specificità delle materie a cui i programmi scientifici vanno diretti, che richiede in genere personale specializzato per il loro utilizzo;
  4. la, in generale, bassa cultura informatica delle persone che li dovrebbero utilizzare.

L'ultimo punto potrebbe sembrare un paradosso. Tutto sommato, scienziati e ingegneri hanno a che fare con materie complesse, per cui ci si aspetterebbe una certa competenza nell'utilizzo di sistemi operativi e software adeguati al trattamento di queste problematiche. Nella mia esperienza, però, questa affermazione non corrisponde al vero: ho potuto constatare come anche all'interno di enti di ricerca predominino in genere sistemi operativi e software proprietari.

Non voglio dilungarmi su queste questioni, che tra l'altro tutti sicuramente conosciamo, ciascuno nel proprio ambito d'interesse. Questo articolo intende dare una panoramica delle possibilità che si hanno con il software libero di taglio scientifico, e in più si illustrerà qualche altra cosa. L'utilizzo di questi programmi non presuppone alcun tipo di conoscenze approfondite (anche se sono strumenti ottimi per chi le ha, docenti e professionisti), e può risultare proficuo a partire dagli studenti degli ultimi anni della scuola secondaria o dei primi anni di università.

L'articolo si divide in tre parti. Nella Parte I si fa una discussione sulle caratteristiche generali del software scientifico e le aree di utilizzo più importanti. La Parte II illustrerà alcuni software particolarmente interessanti tramite l'utilizzo di alcuni esempi, in modo da mostrare le loro potenzialità. La Parte III tratterà l'argomento dell'interfacciamento grafico, descrivendo le caratteristiche desiderabili in una buona interfaccia e illustrando una piccola applicazione web che consente l'interfacciamento a uno dei programmi descritti nella Parte II.

Di seguito verranno enumerate le tipologie di software che si hanno a disposizione e il loro relativo campo di utilizzo. All'interno di queste categorie saranno identificati alcuni problemi di media complessità, i quali forniranno un banco di prove per l'utilizzo di alcuni programmi che possiamo considerare rappresentativi delle rispettive categorie, e che saranno brevemente considerati nella Parte II di questo articolo.

Ambiti applicativi del software scientifico

I problemi matematici possibili sono di una vastità incredibile. Tuttavia è possibile individuare alcuni temi fondamentali che sono i mattoni di base con i quali risolvere problemi più complessi. In genere i software disponibili offrono strumenti all'interno delle seguenti problematiche [1]:

Soluzione di equazioni lineari algebriche Sistemi di equazioni non lineari
Interpolazione e estrapolazione Minimizzazione e massimizzazione di funzioni
Integrazione di funzioni Eigensistemi
Calcolo funzionale Trasformate di Fourier e metodi spettrali
Funzioni speciali Descrizione statistica di dati
Numeri random Modelli di dati
Ordinamento Integrazione di equazioni differenziali ordinarie
Ricerca di radici Equazioni alle derivate parziali

L'ampiezza delle problematiche trattabili con software scientifico rende necessaria una codifica per un'identificazione univoca degli algoritmi. Una codifica molto usata è quella elaborata dal GAMS (Guide to Available Mathematical Software, http://gams.nist.gov), che è un sistema incrociato di indicizzazione e un repository virtuale di componenti software utilizzabili nelle scienze della computazione e in ingegneria. La codifica GAMS prevede le seguenti categorie, ciascuna identificata da un codice anlfanumerico:

A Aritmetica, analisi di errori K Approssimazione
B Teoria di numeri L Statistica, probabilità
C Funzioni elementari e speciali M Simulazione, modelli stocastici
D Algebra lineare N Data handling
E Interpolazione O Computazione simbolica
F Soluzione di equazioni non lineari P Geometria computazionale
G Ottimizzazione Q Grafica
H Integrazione, differenziazione R Routine di servizio
I Equazioni differenziali e integrali S Tool di sviluppo software
J Trasformate integrali Z Altro

Ognuna di queste categorie è articolata a sua volta in una serie di sottocategorie a più livelli, che consentono la codifica e la classificazione univoca di ogni algoritmo.

Classificazione del software utilizzabile in ambito scientifico

Dall'ottica di questo articolo è conveniente realizzare una classificazione sommaria del software disponibile, in modo da delimitare alcuni ambiti applicativi che consentano una maggior chiarezza espositiva. Queste categorie sono arbitrarie e da certi punti di vista sono comuni agli altri tipi di software. Vengono proposte due diverse classificazioni.

Classificazione dal punto di vista architetturale

Dal punto di vista dell'architettura, il software può essere suddiviso in due categorie principali:

  1. librerie: sono collezioni di codice che può essere riutilizzato in molteplici progetti software [2]. Le librerie consentono di incorporare nei programmi delle funzioni già realizzate e testate, evitando di doverle riscrivere ogni volta. Sono importanti dal punto di vista del programmatore, permettendogli di usare porzioni di codice di programmi già realizzati da lui o da altri. Le librerie possono essere di due tipi:
    1. statiche: che sono collezioni di uno o più file oggetto che contengono il codice riutilizzabile precompilato. Ogni file oggetto costitutivo è anche chiamato modulo o membro. Le librerie statiche sono immagazzinate in un particolare formato con una tabella o mappa che collega il nome dei simboli ai moduli nei quali quel simbolo è definito. Questo velocizza il processo di "linkaggio" e compilazione. In genere le librerie statiche hanno la estensione .a (derivato dall'inglese archive) e sono "linkate" al programma durante il processo di compilazione;
    2. dinamiche: a differenza di quelle statiche, le librerie dinamiche sono "linkate" al programma durante il processo di runtime, cioè il caricamento in memoria del programma. La loro caratteristica principale è che consumano molte meno risorse delle librerie statiche, dato che sono caricate in memoria una sola volta per tutti i programmi che le devono utilizzare.
  2. programmi: alcuni programmi, e questo è particolarmente vero per i programmi di calcolo scientifico, sono composti da librerie che vengono chiamate da un frontend per dare accesso alle funzionalità del software. In genere è possibile usare tali librerie separatamente, linkandole ai propri programmi e richiamando le funzioni con la giusta sintassi.

Benché questa classificazione sia comune a tutti i tipi di software, l'inclusione qui è giustificata dal fatto che le librerie costituiscono una modalità particolarmente importante con cui viene rilasciato il software scientifico. Nella Parte II daremo alcuni esempi di librerie importanti.

Classificazione dal punto di vista applicativo

Dal punto di vista della natura dei problemi da trattare, il software scientifico può essere suddiviso nelle seguenti categorie, ognuna caratterizzante un grande ambito applicativo:

  1. utilità: sono l'analogo dei programmi di servizio per il sistema operativo, cioè programmi che realizzano delle funzioni specifiche di base. In genere sono di piccole dimensioni e accessibili esclusivamente attraverso la riga di comando. Un programma tipico è units;
  2. grafica: il software di grafica funzionale, bi e tridimensionale, è fondamentale all'interno delle problematiche legate al calcolo matematico e scientifico. I programmi di una certa complessità, come quelli che vedremo più avanti, hanno in genere dei moduli per la rappresentazione grafica. Un programma tipico è gnuplot;
  3. calcolo numerico: la categoria più importante. In genere i problemi che coinvolgono operazioni matematiche complesse vengono risolti in maniera numerica. Le possibilità vanno dal semplice calcolo delle radici di un polinomio al calcolo di sistemi di equazioni alle derivate parziali o di integrali multidimensionali. Un programma tipico è octave;
  4. calcolo simbolico: probabilmente il grande sconosciuto. L'utilizzo di questi programmi avviene in ambiti molto specifici, quando è necessario disporre della forma funzionale delle soluzioni ai problemi che si vogliono risolvere. Un programma tipico è maxima.

Un sistema standard per il calcolo scientifico

Di che cosa ho bisogno se voglio avere una stazione di lavoro autosufficiente per quanto riguarda il calcolo scientifico? Secondo me si devono avere i seguenti tipi di software:

Se in più si è un programmatore, un buon sistema dovrebbe prevedere:

Conclusione

In questa prima parte abbiamo effettuato una discussione di carattere generale sul software scientifico, ed è stata proposta una classificazione in maniera da delimitare il più chiaramente possibile gli ambiti applicativi. Nella Parte II entreremo più nel dettaglio, descrivendo alcuni programmi interessanti che saranno illustrati con l'aiuto di alcuni esempi.

Bibliografia


1
William H. Press, Saul A. Teukolsky, William T. Vetterling, and Brian P. Flannery.
Numerical Recipes in C, The Art of Scientific Computing.
Cambridge University Press, second edition, 1995.
2
Kurt Wall.
Linux Programming.
Que Corporation, 2000.


L'autore

Francisco Yepes Barrera, Paco, è socio di ILS ed appassionato per diletto e per lavoro di informatica e di scienze. I suoi interessi riguardano la computazione scientifica, l'intelligenza artificiale e l'utilizzo di software libero nella soluzione di problemi matematici.


Sinistra <- User-Mode-Linux - Indice Generale - Copertina - Sviluppo di software Open Source come esempio ... -> Destra