Calcolo numerico
Algoritmi
Un algoritmo è una successione finita di istruzioni che ci permette di passare da una situazione iniziale (dati) ad una situazione finale (risultati).
Dati → Algoritmo → Risultati
- Successione finita di istruzioni
- Modo non ambiguo (preciso e ordinato)
- Fa passare da dati a risultati
- Tempo finito
Un buon algoritmo deve avere 2 requisiti:
- Generalità → deve risolvere una classe di problemi
- Ottimalità → deve essere un algoritmo "ottimale", cioè il migliore rispetto al tempo, rispetto al numero di operazioni, ecc.
Es.:
Somma di n numeri
Somma di n numeri a1, a2, ..., an
- Leggi: n, a1, a2, ..., an
- Poni S = 0
- Per i = 1, 2, ..., n
- Poni S = S + ai
- Scrivi S
- Stop
Prodotto di n numeri
Prodotto di n numeri a1, a2, ..., an
- Leggi: n, a1, a2, ..., an
- Poni P = 1
- Per i = 1, 2, ..., n
- Poni P = P * ai
- Scrivi P
- Stop
Calcolo numerico
Algoritmi
Un algoritmo è una successione finita di istruzioni che ci permette di passare da una situazione iniziale (dati) ad una situazione finale (risultati).
Dati → Algoritmo → Risultati
Algoritmo
- Successione finita di istruzioni
- Modo non ambiguo (preciso e ordinato)
- Fa passare da dati a risultati
- Tempo finito
Un buon algoritmo deve avere 2 requisiti:
- Generalità: deve risolvere una classe di problemi
- Ottimalità: deve essere un algoritmo "ottimale", cioè il migliore rispetto al tempo, rispetto al numero di operazioni ecc.
Es.
Somma di n numeri
Somma di n numeri a1, a2, ..., an
- Leggi: n, a₁, a₂, ..., aₙ
- Poni S = 0
- Per i = 1, 2, ..., n
- Poni S = S + aᵢ
- Scrivi S
- Stop
Prodotto di n numeri
Prodotto di n numeri a1, a2, ..., an
- Leggi: n, a₁, a₂, ..., aₙ
- Poni P = 1
- Per i = 1, 2, ..., n
- Poni P = P * aᵢ
- Scrivi P
- Stop
Problema: determinare √N
Adesso prendiamo come problema il seguente: determinare √N, N > 0 mediante un procedimento iterativo.
Procedimento iterativo
Procedimento che si basa su una sequenza di istruzioni ripetute continuamente con lo scopo di trovare una soluzione o di avvicinarsi il più possibile ad essa.
Non è certo che sia un numero finito di istruzioni.
→ Non è un algoritmo (dato che può non finire)
Determinare √N, N > 0
- Individuare m, h > 0 tale che: m2 < N < h2
- Calcolare c = (m+h)/2
- Se c2 = N, c = √N → Stop
- Se c2 < N → sostituire c con m e tornare al punto 2
- Se c2 > N → sostituire c con h e tornare al punto 2
Dato che per molti numeri non esiste un valore preciso di radice quadrata, dobbiamo trovare un numero di iterazioni dopo le quali fermarsi.
Questo "numero finito" renderebbe il nostro procedimento iterativo un algoritmo a tutti gli effetti.
A differenza del procedimento iterativo il controllo dell'uguaglianza viene sostituito da un controllo di approssimazione dopo aver superato il numero di iterazioni di esempio.
Criterio di arresto
Decidiamo di fermarci se:
|c2 - N| ≤ ε, ε > 0
dove c è un'approssimazione di √N
c = (m+n)/2
Quando il problema determinare √N, N > 0 sarebbe risolto dal seguente algoritmo:
- Leggi N, m, n, ε
- Calcola c = (m+n)/2
- Se |c2 - N| ≤ ε → Vai al punto 6
- Se c2 < N poni m = c e vai al punto 2
- Se c2 > N poni h = c e vai al punto 2
- Scrivi c
- Stop
Con il criterio d'arresto c'è un rischio:
I numeri m, n troppo grandi oppure il valore ε troppo piccolo potrebbero implicare troppo tempo di calcolo.
Può essere giusto fissare un numero massimo di iterazioni:
Esempio:
- Leggi h, m, N, ε, Nmax
- Per n = 1, 2, ... Nmax
Calcola c = (m+n)/2
Se |c2 - N| ≤ ε → Vai al 6
Se c2 &
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.