Sei sulla pagina 1di 3

.

Laboratorio II

Equazioni non Lineari

Metodo di Bisezione
Sia data una funzione f (x) continua, con uno zero α nell’intervallo I, dove I = (a, b). L’algoritmo
deve avere in ingresso la funzione f , i due punti a e b, tali che f (a) · f (b) < 0, e l’indice (massimo)
M delle iterazioni che si vogliono effettuare. In uscita l’algoritmo fornirà l’approssimazione xa
dello zero α.
Vediamo come può essere strutturato l’algoritmo che descrive il metodo di bisezione per la ricerca
dello zero di f (x):

1. definire l’intervallo di partenza: I (0) = (a(0) , b(0) ), con a(0) = a e b(0) = b;


2. calcolare i valori di f (x) negli estremi dell’intervallo: f (a(0) ) e f (b(0) );

3. calcolare il punto medio dell’intervallo I (0) : x(0) = (a(0) + b(0) )/2;


4. se f (x(0) ) = 0 allora xa = x(0) , altrimenti:
• se f (a(0) ) · f (x(0) ) < 0, si considera il nuovo intervallo I (1) = (a(1) , b(1) ), dove a(1) =
a(0) e b(1) = x(0) ;
• in caso contrario, si considera il nuovo intervallo I (1) = (a(1) , b(1) ), dove a(1) = x(0) e
b(1) = b(0) .
5. riapplicare l’algoritmo al nuovo intervallo I (1) = (a(1) , b(1) ) a partire dal punto 3 un numero
di volte pari ad M .

In modo schematico, per la generica iterazione l’algoritmo assume la seguente struttura:




 I (k−1) = (a(k−1) , b(k−1) )

x(k−1) = (a(k−1) + b(k−1) )/2




Se f (x(k−1) ) = 0 → α = x(k−1) .

(1.1)
Altrimenti:


se f (a(k−1) )f (x(k−1) ) < 0 → a(k) = a(k−1) , b(k) = x(k−1)





altrimenti → a(k) = x(k−1) , b(k) = b(k−1)

In entrambi i casi si definisce


x(k) = (a(k) + b(k) )/2 (1.2)
Laboratorio II Equazioni non Lineari

Esercizio 2.1

Si consideri il problema della ricerca degli zeri dell’equazione non lineare f (x) = 0, dove f è
definita da:
f (x) := ex − x2 − sin(x) − 1, x ∈ [−2, 2] . (1.3)

1. Disegnare il grafico della funzione e la retta y = 0 in modo da evidenziare le due soluzioni


dell’equazione.
2. Il metodo di bisezione è applicabile per calcolare entrambe le radici? Motivare la risposta.

3. Scrivere una funzione Matlab bisez.m che implementi il metodo di bisezione. Tale fun-
zione riceve in ingresso gli estremi dell’intervallo di ricerca a e b, la tolleranza richiesta,
il numero massimo di iterazioni e la funzione f . Restituisce in uscita la lista delle itera-
te, il vettore contenente la differenza tra iterate successive, le valutazioni di fun in xvect
e il numero di iterazioni eseguite. Si utilizzi un criterio d’arresto basato sull’ampiezza
dell’intervallo. L’intestazione della funzione sarà ad esempio la seguente:
function [ x v e c t , x d i f , fx , i t ]= b i s e z ( a , b , nmax , t o l l , f u n )

4. Applicare il metodo, quando possibile, con tolleranza pari a 10−12 , utilizzando la funzione
bisez.m.

Metodo di Newton
Esercizio 2.2

Si consideri l’equazione non lineare f (x) = 0, dove f è definita da:

f (x) = ex − x2 − sin(x) − 1, x ∈ [−2, 2].

Sappiamo che essa ammette due zeri nell’intervallo indicato.

1. Discutere le proprietà di convergenza del metodo di Newton per entrambi gli zeri, valutando
l’opportunità di applicare il metodo di Newton modificato.
2. Scrivere una funzione Matlab newton.m che implementi il metodo di Newton. Tale fun-
zione riceve in ingresso il punto di partenza x0 , la tolleranza richiesta, il numero massimo
di iterazioni, la funzione f e la sua derivata, e restituisce in uscita la lista delle iterate
e il numero di iterazioni eseguite. Si utilizzi un criterio d’arresto basato sul modulo del-
la differenza tra due iterate successive. L’intestazione della funzione sarà ad esempio la
seguente:
function [ x v e c t , i t ] = newton ( x0 , nmax , t o l l , fun , dfun )

Si scriva inoltre, in maniera analoga alla funzione newton.m, la funzione newtmod.m che
implementi il metodo di Newton modificato, passando come parametro in ingresso anche
la molteplicità dello zero cercato.

–2–
Laboratorio II Equazioni non Lineari

3. Applicare il metodo di Newton e, quando è il caso, il metodo di Newton modificato con


tolleranza 10−6 , utilizzando le funzioni scritte al punto precedente. Per ogni metodo uti-
lizzato, riportare su un grafico in scala semilogaritmica l’andamento dell’errore in funzio-
ne del numero di iterazioni (si assuma come valore esatto dello zero non nullo, il valore
x = 1.279701331000996).

Esercizio 2.3

Considerando la funzione f dell’esercizio precedente, si utilizzino in sequenza il metodo di bise-


zione e il metodo di Newton per la ricerca dello zero 1 < α2 < 1.5; in particolare si adotti il
metodo di bisezione per l’avvicinamento allo zero e successivamente il metodo di Newton per la
convergenza “veloce” ad α2 , assumendo come guess iniziale lo zero approssimato con il metodo di
bisezione. Nello specifico si considerino 5 iterazioni del metodo di bisezione sull’intervallo [1, 1.5]
e si assuma come tolleranza per il metodo di Newton il valore 10−10 .

Esercizio 2.4

Si considerino le seguenti coniche:

C1 : x21 − 4x22 = −3,


(1.4)
C2 : x1 − x22 = 0.

Le intersezioni tra C1 e C2 possono essere calcolate risolvendo il sistema non lineare f (x) = 0 con
 2
x1 − 4x22 + 3
  
x1
f (x) = , x = .
x1 − x22 x2

1. Utilizzando la funzione plotzeros.m si disegnino C1 e C2 .


2. Si generalizzi la funzione newton.m implementata nell’Esercizio 2.2 estendendola al caso
dei sistemi di equazioni non lineari di dimensione arbitraria. L’intestazione della funzione
sarà, ad esempio,
function [ x v e c t , i t ] = newtonsys ( x0 , nmax , t o l l , fun , J )

dove i parametri di ingresso sono analoghi a quelli di newton.m, eccetto J che ora contiene
lo Jacobiano della funzione definita in fun. Per quanto riguarda gli output, si richiedono la
soluzione xvect ed il numero di iterazioni it. Si garantisca in particolare che la funzione
newtonsys.m gestisca correttamente anche la risoluzione di una singola equazione non
lineare.

3. Calcolare una delle intersezioni fra C1 e C2 applicando la funzione newtonsys.m al sistema


f (x) = 0 utilizzando come punto iniziale x0 = (0, −0.5)> .
4. Calcolare le restanti intersezioni tra C1 e C2 utilizzando opportuni dati iniziali x0 .

–3–

Potrebbero piacerti anche