1. Ambienti
software
dedicati al calcolo scientifico
E' ben noto che per creare programmi al "calcolatore" sia necessario
disporre di un "ambiente di programmazione". Tale ambiente, in parte
inserito nel sistema operativo ed in parte costituito da software
aggiuntivo, fornisce strumenti indispensabili alla creazione e
verifica dei programmi, come: un editor, un compilatore, un linker,
un debugger, ...
Un ambiente software dedicato al calcolo scientifico aggiunge a
questi strumenti degli altri strumenti dedicati allo sviluppo di
applicazioni che utilizzano principalmente le capacità di calcolo
del calcolatore.
Da non confondere l'ambiente
software dedicato al calcolo scientifico con la libreria di calcolo
scientifico, che fornisce "solamente" un insieme di metodi numerici,
richiamabili da un programma.
Per poter applicazioni del calcolo scientifico vengono tipicamente
utilizzate assieme più d'una libreria.
Ambienti molto diffusi di questo tipo sono: Matlab ( il capostipite,
1983 ca., commerciale), Octave (open-source), Scilab (open-source).
Recentemente, si sta affermando l'utilizzo di Python ( www.python.it ), grazie alla sua
shell interattiva ed alle estensioni numeriche disponibili.
Vediamo ora quali sono gli elementi che caratterizzano un ambiente
dedicato al calcolo :
- l’esecuzione interattiva dei programmi
- il linguaggio di programmazione orientato alla manipolazione
di vettori e matrici.
ed ora vediamo i songoli comandi più comuni nell'ambiente Matlab.
Il workspace :
l’ambiente di calcolo, che si presenta con una linea di comando,
mantiene disponibili in memoria tutte le variabili che sono state
inizializzate dal momento dell'ingresso nell’ambiente, sia tramite
singoli comandi che tramite istruzioni contenute nei programmi
eseguiti, entrambi impartiti dalla linea di comando dell'ambiente.
Questa è una sostanziale differenza rispetto alla programmazione in
C o in FORTRAN, dove le variabili vengono allocate all’inizio
dell’esecuzione del programma e poi de-allocate (cioè cancellate) al
termine dell’esecuzione stessa. Una conseguenza immediata di questo
fatto è che, ad esempio, in un ambiente come il Matlab non è
necessario salvare esplicitamente su file i valori delle variabili
che si vogliono osservare (es. graficare) dopo l’esecuzione del
programma.
Octave/Matlab:
leggere
ed eseguire il seguente m-file: ESE_CN_Inf_workspace_oper.m
La grafica :
non è sufficiente produrre dei (buoni) risultati numerici, bensì è
anche necessario poterli osservare a valutare in modo adeguato.
Solitamente questa operazione richiede la produzione di qualche tipo
di grafico, per cui l’esistenza di capacità grafiche è un elemento
fondamentale di un ambiente software dedicato al calcolo
scientifico. Matlab possiede capacità grafiche evolute ed Octave si
appoggia a Gnuplot (applicativo anch’esso open-source).
Octave/Matlab:
leggere
ed eseguire il seguente m-file: ESE_CN_Inf_graphics_oper.m
L’esecuzione dei programmi :
per mandare in esecuzione un programma scritto per Matlab o per
Octave (e quindi un file di testo con il suffisso “.m” contenente
istruzioni che rispettano la sintassi del linguaggio di Matlab,
ovvero un “m-file”) è sufficiente scrivere il nome del m-file sulla
riga di comando e premere il tasto invio. Se il programma non è
nella directory corrente, è necessario prima mettersi nella
directory che lo contiene.
Il calcolo dei tempi di
esecuzione è semplice, e quindi è possibile misurare la
velocità di esecuzione dell’algoritmo numerico: conoscendo il numero
di operazioni floating-point (flops) richieste per il calcolo della
soluzione, si può calcolare la velocità MFLOPS = numero_di_flops /
tempo_trascorso .
Notare che il tempo di esecuzione di un algoritmo numerico è oggi il
principale parametro per misurarne l'efficienza. Infatti, mentre
fino a qualche anno fa le operazioni in virgola mobile venivano
fatte via software/firmware, e dunque una moltiplicazione costava
più di un'addizione, ora sono implementate via hardware, e dunque
richiedono sostanzialmente lo stesso numero di cicli di clock del
processore. Pertanto, mentre fino a qualche tempo fa il parametro
più usato era il numero di operazioni floating-point richieste, ora
lo è il tempo di esecuzione dove, attenzione, pesano anche gli
aspetti non numerici dell'algoritmo (esistenza di istruzioni di
scelta, movimento dei dati da e verso la memoria, ...).
Per quanto riguarda l'ambiente di calcolo, è necessario tenere
presente che Matlab (ed Octave) eseguono il programma utente in
maniera interpretata, e
cioè viene letta, compilata ed eseguita un’istruzione alla volta.
Questo incide moltissimo sulla velocità di esecuzione di un
algoritmo. In particolar modo è bene evitare di creare troppi cicli
innestati.
Octave/Matlab: leggere ed eseguire il seguente m-file:
ESE_CN_Inf_exec_times.m
Il linguaggio di programmazione
"domain specific":
L’ambiente Matlab (Octave) mette a disposizione un linguaggio di
programmazione che:
- da un lato contiene tutti i costrutti tipici della
programmazione strutturata (if-then-else, ciclo for, ciclo
while, ecc...);
- dall’altro permette di manipolare in modo molto semplice e
sintetico le strutture-dati fondamentali per il calcolo matriciale, e cioè
vettori e matrici, in modo analogo a quanto viene fatto dal
linguaggio tradizionale più evoluto per il calcolo, il Fortran90
e successive varianti, ed a quanto può essere fatto a partire
dai linguaggi orientati agli oggetti, come il C++ , Java, ... .
Il linguaggio di Matlab (Octave) offre il vantaggio, rispetto ai
linguaggi di programmazione tradizionali, di semplificare molto
l’uso del linguaggio per la costruzione di un programma, lasciando
quindi l’attenzione del programmatore libera il più possibile dagli
aspetti puramente informatici e concentrata sugli aspetti
algoritmici e numerici. Anche per questo è molto diffuso, sia come
strumento di studio che come strumento di lavoro, in particolare per
la prototipazione dei codici di calcolo. Per un utilizzo in
"produzione", i compilatori dei linguaggi tradizionali sono però
preferibili perchè permettono di ottimizzare maggiormente il codice
eseguito dalla macchina e dunque, generalmente, l’algoritmo
implementato viene eseguito più velocemente (che, nella realtà delle
applicazioni, è molto rilevante).
Octave/Matlab: leggere ed eseguire il seguente m-file:
ESE_CN_Inf_lang_fundam.m