Ottava esercitazione
Esercizio 1
Esercizio 2
Esercizi di calcolo numerico
In ogni esercizio
fate anche il grafico delle funzioni che utilizzate.
Esercizio 1
Calcolate l'integrale definito di
una funzione utilizzando il metodo dei trapezi ed il metodo di Simpson e
confrontatene la precisione a numero punti fissato (N punti, N-1 intervalli)
La funzione che calcola
l'integrale dovrà avere, per entrambi i metodi, il prototipo double integrale(double f(double), double xmin, double xmax, int n)
dove l'intero n definisce il numero di punti e quindi la
precisione dell'integrale.
Provate le routines su una funzione di cui sia
noto l'integrale (a vostra scelta) e sulla funzione gauss.cpp
con estremi di integrazione xmin = -1 e xmax = +1.
Attenzione: Il metodo di Simpson funziona se il
numero di punti è dispari (perchè?).
Facoltativo: creare
anche una funzione che calcoli l'integrale con precisione data: l'integrale
viene ripetuto, raddoppiando ogni volta n, finché la variazione tra i
valori dell'integrale in due iterazioni successive è minore della
precisione.
Il prototipo della funzione sarà del tipo
double integrale_pre(double f(double), double xmin, double xmax, double prec)
e dovrà fare uso delle funzioni predentemente definite.
Esercizio 2
Trovare lo zero di
una funzione f(x) nell'intervallo [x1,x2] tale che f(x1)*f(x2)<0 (si suppone che
l'intervallo contenga un solo zero), dopo aver verificato le seguenti condizioni
(nel main):
- che x1 < x2
- che l'intervallo iniziale contenga almeno uno zero
Il metodo (bisezione) consiste in:
- valutare il numero massimo di iterazioni, in modo da controllare i casi
patologici;
- definire xmed= (x1+x2)/2 il punto intermedio dell'intervallo;
- quindi ripetere i passi seguenti fino a che non è stata
raggiunta la convergenza o che non sia stato superato il numero massimo di
iterazioni.
Parte iterativa:
- individuati due intervalli [x1,xmed] e [xmed,x2] dove xmed e' il punto
intermedio xmed=(x1+x2)/2
- verificare in quale dei due sotto
intervalli avviene il cambio di segno; attenzione,
può succedere che xmed sia lo zero cercato (controllare!)
-
assegnare x1=xmed se il cambiamento e' avvenuto nel secondo intervallo
(restringo da sinistra), viceversa x2=xmed se e' avvenuto nel primo (restringo
da destra) in questo modo ho sempre tre punti ordinati (x1,xmed x2)
-
calcolare il nuovo punto centrale xmed
-
ripetere dal punto 2 , finché la semi-ampiezza dell'intervallo (x1,x2) è superiore alla precisione voluta.
-
Il valore d'uscita è xmed.
Il prototipo della funzione
sarà del tipo
double zeri(double f(double), double x1, double x2, double prec)
e dovrà ritornare la coordinata x dello zero trovato.
Provate la
routine su una funzione di cui conoscete lo zero e per risolvere l'equazione
xex=cos(x) in [-1,1] e in [-2,-1]
(soluzioni x1=0.518
e x2=-1.864)