La programmazione per il Calcolo Scientifico: un laboratorio didattico

Maria Carmela De Bonis,  mariacarmela.debonis@unibas.it

Concetta Laurita,  concetta.laurita@unibas.it

 

Il Piano Lauree Scientifiche (PLS), promosso dal MIUR, si propone di offrire agli studenti degli ultimi anni delle scuole superiori l’opportunità di conoscere temi, problemi e procedimenti caratteristici delle discipline scientifiche di base e le loro relazioni con il mondo del lavoro.

Lo scopo è quello di aiutare gli studenti con una particolare inclinazione verso studi di tipo scientifico a potenziare le proprie competenze e ad effettuare scelte pienamente consapevoli nella pianificazione del proprio percorso di formazione.

Nell’ambito di tale progetto, cui il Dipartimento di Matematica, Informatica ed Economia dell’Università degli Studi della Basilicata aderisce da diversi anni, è stata realizzata una esperienza didattica dal titolo “Laboratorio di Programmazione per il Calcolo Scientifico” che ha coinvolto studenti frequentanti le classi quarte e quinte dell’indirizzo “Informatica e Telecomunicazioni” dell’I.I.S. “Einstein – De Lorenzo” di Potenza.

L’idea di questa attività didattica è nata con l’obiettivo di far sperimentare l’interdisciplinarità esistente tra la Matematica e l’Informatica, favorendo un processo di integrazione di competenze indispensabile per affrontare in modo completo ed efficace determinate problematiche.

Il Calcolo Scientifico è la disciplina che permette di riprodurre su un calcolatore un fenomeno o processo descritto da un opportuno modello matematico. Anche quando il modello può essere risolto con metodi analitici, potrebbe rivelarsi più efficiente l’uso di metodi di calcolo numerico approssimato.

L’introduzione dei calcolatori ha imposto ed accentuato lo sviluppo dell’analisi e sintesi di metodi computazionali per lo studio e la risoluzione di problemi matematici. In pratica i problemi vengono risolti indicando un processo che, in un numero finito di passi, fornisca una soluzione numerica e, soprattutto, sia implementabile su un elaboratore.

Poichè i calcolatori operano in aritmetica finita, i dati sono affetti da errori di rappresentazione e le operazioni aritmetiche producono errori. Di conseguenza gli algoritmi che scaturiscono dai metodi numerici devono essere tali da ridurre l’entità della propagazione di tali errori. Inoltre, si richiede che siano efficienti in termini di costo di esecuzione e occupazione di memoria.

Il “Laboratorio di Programmazione per il Calcolo Scientifico” è stato organizzato nei seguenti moduli:

  1. Il computer come strumento per il Calcolo Scientifico
  2. Come risolvere problemi matematici al calcolatore.

I due moduli sono stati tenuti rispettivamente dalle ricercatrici Maria Carmela De Bonis e Concetta Laurita dell’Università degli Studi della Basilicata in collaborazione con i docenti Gerardo Salvatore e Donatella Cascia dell’I.I.S. “Einstein – De Lorenzo” di Potenza.

Il primo modulo si è proposto il raggiungimento dei seguenti obiettivi

  • conoscere e sperimentare le problematiche computazionali connesse all’uso dell’aritmetica finita;
  • conoscere gli elementi di base della programmazione in linguaggio MatLab.

Le lezioni iniziali sono state dedicate alla descrizione delle tecniche utilizzate dallo Standard IEEE 754 (Institute of Electrical and Electronical Engineerig) per la rappresentazione dei numeri nella memoria del calcolatore e all’introduzione dell’insieme dei cosiddetti “numeri macchina”, cioè dei numeri reali ivi esattamente rappresentabili.

Tale insieme è solo un sottoinsieme finito, limitato e non denso dell’insieme infinito \(\mathbb{R}\) dei numeri reali. I numeri reali che, pur non essendo numeri macchina, appartengono all’intervallo \([min, max]\), dove \(min\) e \(max\) denotano il minimo e il massimo dei numeri macchina, vengono rappresentati in maniera approssimata, commettendo errori numerici di rappresentazione.

Anche le cosiddette “operazioni macchina”, cioè le operazioni aritmetiche eseguite nell’aritmetica finita del calcolatore, sono sorgenti di errori numerici.

Gli studenti dell’IIS “Einstein – De Lorenzo” durante il laboratorio

Gli studenti hanno avuto modo di sperimentare, con una serie di test svolti al computer, che per leoperazioni macchina non sempre valgono le ben note proprietà associativa, distributiva, unicità dell’elemento neutro, etc. e che la differenza tra numeri “quasi uguali” produce un’amplificazione dei suddetti errori, nota come “cancellazione numerica”.

Sono stati, inoltre, suggeriti e applicati una serie di accorgimenti algoritmici per ridurre gli effetti di tale fenomeno nei calcoli.

In tal modo è stato raggiunto l’obiettivo di rendere gli studenti consapevoli della non infallibilità degli strumenti di calcolo e capaci di confrontarsi con i loro limiti.

Nella seconda parte del primo modulo si è puntato al potenziamento delle competenze informatiche già acquisite nel percorso scolastico, specializzandole nell’ambito del Calcolo Scientifico. Dopo aver introdotto i costrutti di base della programmazione in linguaggio MATLAB, un software particolarmente performante per le applicazioni scientifiche, alcuni algoritmi test sono stati codificati in MATLAB ed implementati sui calcolatori.

Il modulo “Come risolvere problemi matematici al calcolatore” è stato dedicato allo

  • studio di alcuni metodi numerici per la risoluzione di semplici problemi matematici;
  • sviluppo del software che implementa i metodi numerici studiati.

I problemi matematici trattati sono stati la risoluzione di equazioni non lineari, la valutazione di un polinomio in un punto e il calcolo numerico della funzione esponenziale.

Acquisita la consapevolezza che, nella maggior parte dei casi, non risulta possibile risolvere analiticamente un’equazione non lineare e che diventa, pertanto, necessario ricorrere a metodi di calcolo approssimato, è stato descritto ed implementato il metodo di bisezione, una tra le più semplici procedure numeriche per approssimare le soluzioni cercate.

Gli studenti hanno avuto modo di sperimentare come l’accuratezza dei risultati numerici forniti dal metodo dipende dal numero delle operazioni elementari richieste dall’algoritmo che lo implementa, il cosiddetto “costo computazionale”.

Nell’affrontare il problema di calcolare il valore assunto da un polinomio in un punto, si è invece posto l’accento sull’importanza di scegliere, tra vari algoritmi atti alla risoluzione numerica di uno stesso problema, quello più competitivo dal punto di vista del costo computazionale.

Infine, gli studenti sono stati guidati a scoprire e riprodurre gli algoritmi usualmente implementati negli ambienti di calcolo (anche quello in cui opera una semplice calcolatrice tascabile) per computare, in modo approssimato ma con una prefissata precisione, funzioni trascendenti elementari quali l’esponenziale, il seno o il coseno, prevedendo opportune soluzioni algoritmiche al fine di aumentare l’efficacia del metodo numerico applicato.

Gli studenti hanno partecipato attivamente alle attività svolte nel corso del Laboratorio collaborando con i docenti nella scelta delle migliori strategie per la risoluzione dei problemi proposti e dimostrando di aver sviluppato il senso critico necessario per l’utilizzo consapevole del calcolatore.

Il livello di comprensione dei concetti cruciali è stato verificato con un test finale di valutazione che gli studenti hanno svolto collegandosi on-line alla piattaforma e-learning messa a disposizione dall’Università degli Studi della Basilicata.

Di seguito sono riportati i 14 quesiti a risposta multipla oggetto del test.

1. Quali delle seguenti istruzioni in MATLAB è corretta per disegnare il grafico del polinomio \(p(x)=5x^6-2x^4-3x^3+x-7\) nell’intervallo \( [-2,3]?\)

Scegli un’alternativa:

a)  a=[5, -2,-3,1,-7];

p=@(x) horner(a,x);

fplot(p,[-2, 3]);

b)  a=[5, 0,-2,-3,0,1,-7];

p=@(x) horner(a,x);

fplot(p,[-2, 3]);

c) a=[5, 0,-2,-3,0,1,-7];

p=@(x) horner(a,x);

fplot(p,[-5, 3]);

2. Quali sono le \(3\) conseguenze dell’utilizzo di un’aritmetica finita per rappresentare i numeri su un calcolatore?

Scegli un’alternativa:

a)

  • L’insieme dei numeri rappresentabili è limitato inferiormente e superiormente.
  • L’insieme dei numeri rappresentabili è denso.
  • Si generano errori nei calcoli.

b)

  • L’insieme dei numeri rappresentabili è limitato inferiormente ma illimitato superiormente.
  • L’insieme dei numeri rappresentabili è “bucato”.
  • Valgono sempre le proprietà delle operazioni aritmetiche.

c)

  • L’insieme dei numeri rappresentabili è limitato inferiormente e superiormente.
  • L’insieme dei numeri rappresentabili è “bucato”.
  • Si generano errori nei calcoli.

3. Qual è il valore dell’esponenziale nel punto \( 10.7\), cioè \( e^{10.7}?\) Qual è il numero complessivo di iterazioni effettuate dalla procedura più ottimale?

Scegli un’alternativa:

a) Il valore è \( 4.435585513029620e+04.\)
Il numero delle iterazioni è \( 25\).
b) Il valore è \( 4.435585513029784e+04\).
Il numero delle iterazioni è \( 14\).
c) Il valore è Il valore è \( 4.435585513029620e+04\).
Il numero delle iterazioni è 14.

4. Qual è la rappresentazione normalizzata del numero \(92.25\)?

Scegli un’alternativa:

a)  \(0.9225 \ 10^2\)
b)  \(0.9225 \ 10^3\)
c)  \(9.225 \ 10^2\)

5. Che valore assume il polinomio \(\displaystyle p(x)=37x^{12}+10x^9-0.8 x^7-x^3+2x^2+2\) nel punto \(0.5\)?

Scegli un’alternativa:

a) \(3.397314453125125e+1\)
b) \(2.397314453125\)

6. Quali dei seguenti numeri possono essere rappresentati esattamente su un calcolatore basato su un’aritmentica in doppia precisione?

Scegli una o più alternative:

a) \(-0.52874895 10^{+80}\)
b) \(1.239854 10^{-20}\)
c)  \(1.555566666958652415657858298\)
d) \(12.2356 10^{+400}\)
e)  \(0.152687\)
f)  \(-0.5226875989 10^{-380}\)

7. Qual è il corretto arrotondamento del numero \(0.1235677891236746467856\) a \(6\) cifre significative?

Scegli un’alternativa:

a)  \(0.12356778\)
b) \(0.123568\)
c)  \(0.123567\)

8. Quali delle seguenti ben note proprietà dell’aritmetica infinita non valgono quando si lavora su un calcolatore?

Scegli una o più alternative:

a) \(a b=0\) se e soltanto se \(a=0\) oppure \(b=0\)
b) Proprietà associativa
c)  Proprietà commutativa
d) L’elemento neutro del prodotto è unico
e)  Proprieta distributiva
f)  L’elemento neutro della somma è unico

9. Quali delle seguenti istruzioni MATLAB sono corrette per calcolare il numero reale \(\sqrt 3\) commettendo un errorre assoluto minore o uguale a \(10^{-7}\)?

a)  f=@(x) x.\(\wedge\)2-3;

[x,k]= MetodoBisezione(f,0,2,10\(\wedge\)(-7))
b)  f=@(x) x.\(\wedge\)2-3;

[x,k]= MetodoBisezione(f,-2,0,10\(\wedge\)(-7))
c)  f=@(x) x.\(\wedge\)2-3;

[x,k]= MetodoBisezione(f,0,2,10\(\wedge\)(-5))
d)  f=@(x) x.\(\wedge\)2-sqrt(3);

[x,k]= MetodoBisezione(f,0,2,10\(\wedge\)(-7))

 

10. Quale dei seguenti numeri è il risultato del prodotto scalare dei vettori

a=[1, -3, 2, -5, 8] e b=[-2, 2, 6, -1, 5]?

Scegli una o più alternative:

a) 12
b) 51
c) 49
d) 60

11. Quale fra le seguenti function MATLAB è corretta per calcolare la somma di tutti i numeri interi dispari minori di 20?

a)

function [sum]=sommaDispari(n)
sum=0;
for i=1:2:n

sum=sum+i;

end
b)

function [sum]=sommaDispari(n)
sum=0;
for i=1:n

sum=sum+i;

end

c)

function [sum]=sommaDispari(n)
sum=0;
for i=1:n

if i==dispari
sum=sum+i;
end

end

12.  Quale codice MATLAB è corretto per la costruzione della matrice:

\[A=\left(\begin{array}{ccccccc}
6 & 7 & 0 & 0 & \ldots & 0 & 0 \\
1 & 6 & 7 & 0 & \ddots & & 0 \\
1 & 1 & 6 & 7 & \ddots & \ddots & \vdots \\
1 & 1 & 1 & \ddots & \ddots & 0 & 0 \\
\vdots & \vdots & \ddots & \ddots & \ddots & 7 & 0 \\
1 & 1 & \cdots & 1 & 1 & 6 & 7 \\
1 & 1 & 1 & \cdots & 1 & 1 & 6 \\
\end{array}
\right)\]
con \(n=10\)?

Scegli un’alternativa:

a)  n=10;

A=diag(6*ones(1,n))+diag(7*ones(1,n-1),1)+ tril(ones(n),-1)
b)  n=10;

A=diag(7*ones(1,n))+diag(7*ones(1,n-1),1)+ tril(ones(n),-1)
c) n=10;

A=diag(6*ones(1,n))+tril(ones(n),-1)

13. Qual è il valore approssimato dell’esponenziale nel punto -1.3, cioè \(e^{-1.3}\), calcolato con un errore assoluto minore o uguale di $10^{-9}$?
Qual è il numero complessivo di iterazioni effettuate dalla procedura ottimale?

Scegli un’alternativa:

a)  Il valore è \(2.725317930340126e-01.\)
Il numero d’iterazioni è 12.
b)  Il valore è \(2.725317930298802e-01.\)
Il numero d’iterazioni è 12.
c) Il valore è \(2.725317930298802e-01.\)
Il numero d’iterazioni è 8.

14. La seguente equazione non lineare  \[ e^x-3\sin(x)-1=0,\]
ha una soluzione reale nell’intervallo  \([-3,-2]. \) Calcolarne il valore approssimato con un errore assoluto minore o uguale di \(10^{-10}\).
Qual è il numero complessivo di iterazioni effettuate dalla procedura?

Scegli un’alternativa:

a) La soluzione è \(-2.822696881339653e+00.\)
Il numero delle iterazioni è 20.
b) La soluzione è $ latex -2.822723388671875e+00.$
Il numero delle iterazioni è 34.
c) La soluzione è \(-2.822696881339653e+00.\)
Il numero delle iterazioni è 34.

 

Scarica qui questo articolo in pdf.

Lascia un commento