CALCOLO NUMERICO - Giuseppe Di Capuagiudic.altervista.org/wp-content/uploads/CALCOLO...
Transcript of CALCOLO NUMERICO - Giuseppe Di Capuagiudic.altervista.org/wp-content/uploads/CALCOLO...
INTRODUZIONE
• Quando algoritmi algebrici non determinano la soluzione di un problema o il loro «costo» è molto alto, allora si usano algoritmi di approssimazione che vanno sotto il nome di Algoritmi di Calcolo Numerico
• Si usano quando:• Non esistono algoritmi esatti
• Gli algoritmi esatti non sono efficienti avendo un costo computazionale in termini di tempo e memoria alto
Appunti di Informatica - Prof. Di Capua 2
INTRODUZIONE
• Le tecniche usate da questi algoritmi sono:• Tecniche di discretizzazione (quando il problema ha un dominio continuo ma
si studiano solo alcuni valori di tale dominio ovvero si passa ad un dominio discreto)
• Tecniche di approssimazione successive (ovvero si arriva ad approssimare il risultato attraverso iterazioni successive)
Appunti di Informatica - Prof. Di Capua 3
ALGORITMO DELLA RADICE QUADRATA
• Obiettivo: Calcolare la radice quadrata di un numero positivo n.
• Input: Numero n
• Si calcola un primo valore x0=n/2
• Si calcola un secondo valore x1=1/2*(x0+n/x0)
• E si prosegue iterando il procedimento per k-volte
• Output: il valore xk
Appunti di Informatica - Prof. Di Capua 4
ALGORITMO DELLA RADICE QUADRATA• Si utilizza una variabile rad_prec per
indicare la radice precedente ovvero x0 all’inizio
• Si itera per 10 volte con un ciclo
• Ad ogni iterazione si calcola la radice (variabile rad)
• Si fa diventare la radice calcolata il valore precedente per la nuova iterazione.
Appunti di Informatica - Prof. Di Capua 5
NUMERI PSEUDOCASUALI
• I computer lavora con algoritmi che sono per loro natura DETERMINISTICI (regole rigide, precise, stesso input produce sempre lo stesso output)
• Non è possibile ottenere numeri realmente casuali.
• Il computer genera numeri detti PSEUDOCASUALI ovvero numeri, ottenuti da algoritmi deterministici, che sembrano casuali ma non lo sono
• Gli algoritmi che generano numeri pseudocasuali hanno la caratteristica che dopo aver generato una certa quantità di numeri, questi incominciano a ripetersi.
• La quantità di numeri prima della ripetizione è detta PERIODO DELLA SEQUENZA
• La bontà di un algoritmo dipende dalla lunghezza di questo periodo.
Appunti di Informatica - Prof. Di Capua 6
NUMERI PSEUDOCASUALI
• I numeri pseudocasuali sono generati a partire da un primo numero iniziale detto SEME
• Se usiamo due volte lo stesso seme otterremmo la stessa sequenza di numeri pseudocasuali
• Il linguaggio C++ mette a disposizione 2 librerie.• SRAND(Num) genera un seme a partire dal numero Num
• RAND() crea un numero pseudocasuale
• Le due librerie richiedono l’include di stdlib.h
Appunti di Informatica - Prof. Di Capua 7
ALGORITMO GENERAZIONE DI UN NUMERO PSEUDOCASUALE
• Si prende in input un numero per il seme
• Si genera il seme (SRAND) a partire dal numero
• Si genera il numero Pseudocasuale (RAND)
Appunti di Informatica - Prof. Di Capua 8
ALGORITMO GENERAZIONE DI PIU’ NUMERI PSEUDOCASUALE
• Si prende in input un numero per il seme
• Si prendi in input quanti numeri si vogliono generare
• Si genera il seme (SRAND) a partire dal numero
• Si itera e si producono i numeri Pseudocasuali (RAND)
Appunti di Informatica - Prof. Di Capua 9
ALGORITMO GENERAZIONE DI PIU’ NUMERI PSEUDOCASUALE DA 1 a 90
• Si prende in input un numero per il seme
• Si prendi in input quanti numeri si vogliono generare
• Si genera il seme (SRAND) a partire dal numero
• Si itera e si producono i numeri Pseudocasuali (RAND)
• Ogni numero si divide per 90 , si prende il resto (da 0 a 89) e gli si aggiunge 1 per avere numeri da 1 a 90
Appunti di Informatica - Prof. Di Capua 10
NUMERI PSEUDOCASUALI – ALGORITMO LCG (Linear Congruential Generator)• Questo algoritmo è il più utilizzato per la generazione di numeri pseudocasuali.
• Occorre un seme
• La sequenza è data dalla formula • Xn = (a*Xn-1+C)%m
• Xo è il seme
• a, c ed m sono numeri che hanno le seguenti caratteristiche:• m> 0• m è una potenza di 2• 0<a<m• 0<c<m• Seme < m• c ed m sono primi tra loro• a-1 è divisibile per tutti i fattori primi di m
Appunti di Informatica - Prof. Di Capua 11
NUMERI PSEUDOCASUALI – ALGORITMO LCG (Linear Congruential Generator)• Esempio: a= 5, c = 1, m = 16, X0=1 (seme)
• m= 16 indica che i numeri saranno compresi tra 0 e 15.
• Se si generano più di 16 numeri la sequenza si ripete.
• Per generare diversi numeri occorre iterare (ciclo for) fino ad un massimo di numeri che si vogliono generare.
• In genere si usa m = 231
Appunti di Informatica - Prof. Di Capua 12
ALGORITMO LCG (numeri da 0 a 15)
• Si prende in input un numero per indicare quanti numeri si vogliono generare
• Si fissa a=5, seme = 1, c= 1 ed m=16
• Si stampa il seme
• Si itera per calcolare l’i-esimo numero e poi si assegna il numero calcolato al valore precedente
Appunti di Informatica - Prof. Di Capua 13
CALCOLO DEL π- Metodo di Montecarlo
• Si consideri una circonferenza di raggio 1 inscritta in un quadrato
• Si consideri il rapporto tra l’area del cerchio e l’area del quadrato
• Ac/Aq= πr2/(2 r)2= π/4 da cui ricaviamo π=4*Ac/Aq
Appunti di Informatica - Prof. Di Capua 14
CALCOLO DEL π- Metodo di Montecarlo
• Ora indichiamo con H la quantità di punti che sono nel cerchio e con N la quantità di punti che sono nel quadrato.
• Possiamo dire, con approssimazione , che:
•π=4*H/N• Ora quanti più punti H consideriamo (interni al cerchi) e quanti più
punti totali N consideriamo tanto più questo rapporto si approssima al π
• Ogni punto ha due coordinate x e y. Si calcolano due numeri (x e y) pseudocasuale e si trasformano (attraverso una divisione) in un valore compreso tra 0 e 1 (All’interno del quadrato)
Appunti di Informatica - Prof. Di Capua 15
CALCOLO DEL π- Metodo di Montecarlo
• Per ridurre un numero pseudocasuale ad un valore compreso tra 0 e 1 lo dividiamo con il massimo numero pseudocasuale che si possa avere.
• Tale numero è dato dalla variabile, in C++, RAND_MAX.
• Una volta definite le coordinate di un punto occorre verificare se si trova nel cerchio o meno
• L’equazione del cerchio è X2+Y2=1
• Sostituendo il nostro punto nell’equazione, se X2+Y2<1 allora il punto è nel cerchio e quindi è uno degli H (si incrementa H)
Appunti di Informatica - Prof. Di Capua 16
CALCOLO DEL π- Metodo di Montecarlo
• Si imposta la variabile tanti ad un numero alto (quanti numeri generare)
• Si determina il seme a partire da 1• Si determina x e y due numeri
pseudocasuali• Si divide per RAND_MAX per
portarlo da 0 a 1• Si verifica se il punto è all’interno
del cerchio in tal caso si incrementa la variabile dentro
• Fuori dal ciclo si esegue il calcolo per il pigreco
Appunti di Informatica - Prof. Di Capua 17
CALCOLO DEL NUMERO DI NEPERO e
• Il calcolo del numero si calcola, in modo approssimato, attraverso l’espressione
𝑒 = 1 +1
1!+
1
2!+
1
3!+⋯ .= 𝑘=0
∞ 1/𝑘!
Dove n! è il fattoriale del numero n
Occorre realizzare una funzione che prende in input un numero e restituisce il suo fattoriale.
Appunti di Informatica - Prof. Di Capua 18