Calcolo numerico/Introduzione all'aritmetica floating point
Quattro parole chiave dell'aritmetica floating-point
[modifica | modifica sorgente]- Stabilità dell'algoritmo
- Un algoritmo è l'implementazione del metodo che vogliamo usare per risolvere il problema matematico che vogliamo trattare. La stabilità è in corrispondenza con l'errore algoritmico.
- Condizionamento di un problema
- A cui viene associato l'errore inerente (tipico del problema).
- Complessità computazionale
- Riguarda il tempo impiegato da un algoritmo per ottenere la soluzione. È relazionata con il tempo di calcolo e con l'errore algoritmico.
- Convergenza
- Associata a errore analitico o di approssimazione.
Stabilità di un algoritmo
[modifica | modifica sorgente]Un algoritmo è una sequenza finita di operazioni. Per uno stesso problema possono esistere diversi algoritmi che portano alla soluzione. Su un calcolatore, algoritmi diversi portano però a risultati diversi. L'ordine con cui vengono svolte le operazioni può portare a risultati leggermente diversi.
Si definiscono algoritmi numericamente instabili quelli in cui si ha un'elevata propagazione dell'errore, mentre si definiscono algoritmi numericamente stabili quelli in cui la propagazione dell'errore è contenuta. 16 è inoltre il numero di cifre decimali rappresentabili con Matlab.
Esempio
[modifica | modifica sorgente]Vogliamo calcolare una quantità (in aritmetica esatta ).
Algoritmo 1:
Algoritmo 2:
Quando è positivo ma molto piccolo, il secondo procedimento è stabile mentre l'altro no, iniziano a esserci problemi per numeri dell'ordine di .
Esempio
[modifica | modifica sorgente]Consideriamo la risoluzione del sistema lineare
con matrice quadrata . Il sistema si può risolvere con il metodo di Kramer: la soluzione del sistema può essere calcolata come il rapporto tra due determinanti
dove, indicando con le colonne della matrice,
e
dove sostituiamo alla -esima colonna il termine noto. Il determinante si calcola con la formula dei cofattori. Chiamiamo il numero di operazioni moltiplicative per calcolare il determinante di una matrice di dimensione .
Il calcolo del determinante è ridotto al calcolo di determinanti di matrici più piccole ) moltiplicate per coefficienti. Quindi (operazione ricorsiva).
Per trovare tutte le soluzioni del sistema dobbiamo calcolare determinanti di matrici di dimensione , quindi il costo del metodo di Kramer è maggiore uguale di e richiede tempi molto lunghi. Il costo del metodo di Gauss è invece maggiore o uguale di .
Il metodo di Gauss trasforma il sistema in un sistema equivalente della forma con matrice triangolare superiore.
Calcolo un coefficiente detto moltiplicatore, tale che al passo .
Nell'algoritmo si combinano linearmente le due equazioni.
L'elemento è detto elemento pivetale. Se in aritmetica esatta si ha un problema, perché non si può dividere per 0. In aritmetica floating-point quando è piccolo sorgono dei problemi.
Con il calcolatore si fa in modo che l' che viene usato sia il meno piccolo possibile. Applichiamo la tecnica del pivet parziale: cerco l'indice di equazione tale che a in modulo è il massimo per dei valori assoluti di .
Prima di proseguire si scambia la riga -esima con la -esima.
Il risultato di questa tecnica è che
Condizionamento
[modifica | modifica sorgente]Esistono problemi in cui si ha un errore elevato indipendentemente dal metodo utilizzato per calcolare la soluzione. La difficoltà è una proprietà intrinseca del problema stesso.
Esempio 1.1
[modifica | modifica sorgente]Supponiamo di avere il sistema
e le due rette si intersecano nel punto .
Presa la prima equazione, se perturbiamo il coefficiente di ponendolo uguale a otteniamo:
e il punto di intersezione è
cioè una piccola variazione dei dati da una grande variazione nella soluzione (questo avviene perché le due rette sono quasi parallele).
Convergenza
[modifica | modifica sorgente]Si ha a che fare con la convergenza in due casi.
1. Processi di discretizzazione. Consideriamo ad esempio una funzione di classe almeno , e consideriamo
La discretizzazione ha un errore che si comporta come , e va a 0 come .
2. Metodo iterativo: ad esempio, vogliamo approssimare la soluzione dell'equazione . Definisco una successione con , assegnando come valore iniziale , e proseguendo così.
