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