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):
  1. che x1 < x2
  2. che l'intervallo iniziale contenga almeno uno zero


Il metodo (bisezione) consiste in:

Parte iterativa:

  1. individuati due intervalli [x1,xmed] e [xmed,x2] dove xmed e' il punto intermedio xmed=(x1+x2)/2
  2. verificare in quale dei due sotto intervalli avviene il cambio di segno; attenzione, può succedere che xmed sia lo zero cercato (controllare!)
  3. 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)
  4. calcolare il nuovo punto centrale xmed
  5. ripetere dal punto 2 , finché la semi-ampiezza dell'intervallo (x1,x2) è superiore alla precisione voluta.
  6. 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)