Académique Documents
Professionnel Documents
Culture Documents
“Calcolo Scientifico”
Mario Pezzella
Marco Panico
Venerdì 5 Ottobre 2018
Sommario
La seguente trattazione riprende l’attività di laboratorio per il corso
“Calcolo scientifico” degli autori e si focalizza sull’analisi di alcuni metodi
particolari per la ricerca degli zeri di una funzione generalmente non lineare,
a valori scalari (bisezione, regula falsi, secanti e Newton Raphson) o a valori
in Ω ⊆ R2 (Newton per sistemi bidimensionali).
Per entrambe le tipologie, oltre ad una descrizione di carattere teorico,
viene fornito il codice per l’implementazione diretta in MATLAB corredato
da una serie di sperimentazioni di tipo numerico.
1
Di seguito ci si metterà sempre nelle ipotesi del Teorema 1.1, sicchè sicura-
mente uno zero da ricercare esista, mentre qualora fosse necessario assicurarne
altresì l’unicità ci si metterebbe in un intervallo in cui la funzione sia strettamente
monotona.
Metodo 1.1. (Bisezione) Tale primo metodo alquanto intuitivo è così denomi-
nato poichè basato sulla ripetuta divisione dell’intervallo in cui sono assicurate
le ipotesi del Teorema 1.1, scegliendo tra i due sottointervalli ottenuti quello che
contiene almeno uno zero, ovvero quello in cui il teorema di Bolzano è ancora
utilizzabile.
Definita la funzione di cui ricercare gli zeri nell’intervallo (a, b), il primo elemen-
to fondamentale per detto metodo è la costruzione di una successione di intervalli
incapsulati {(an , bn )}n∈N tali che:
lim bn − an = 0.
n→∞
2
Figura 1: Alcuni passi del metodo della bisezione, applicato all’intervallo [a1 ; b1 ]. Il
punto in rosso è la radice dell’ equazione F (x) = 0.
Ulteriore classe di metodi risolutivi per il problema esposto è quella dei meto-
di di punto fisso, il cui passo primo essenziale sta nella riscrittura dell’equazione
f (x) = 0 nella forma x = φ(x) (dove φ è una funzione detta di iterazione op-
portunamente scelta) e nella computazione xn+1 = φ(xn ) dove la successione di
punti {xn }n∈N verrà considerata approssimante lo zero x0 .
Definizione 1.1. Si definisce punto fisso del procedimento iterativo xn+1 = φ(xn )
un qualsiasi valore α che soddisfi la condizione α = φ(α).
Definizione 1.2. Il metodo iterativo che inividui la successione {xn }n∈N si defi-
nisce convergente a β se lim xn = β.
n→∞
3
tale condizione sicuramente è non necessaria; detto in altro modo, quandanche si
scegliesse una φ con diversi punti fissi, non si avrebbe la certezza che il metodo
iterativo del tipo xn+1 = φ(xn ) con essa definito sia convergente.
Teorema 1.3. Sia α un punto fisso per il procedimento iterativo xn+1 = φ(xn ),
sia h > 0 tale che x0 ∈ (α−h, α+h) e sia φ continua e derivabile in [α−h, α+h].
Allora è sicuramente vera l’implicazione
e quindi
|s − α| = |t − α||φ0 (ξ)|.
Inoltre poichè t ed α appartengono ambedue all’intervallo (α − h, α + h) anche ξ
vi appartiene, ovvero ∃λ tale che |φ0 (ξ)| ≤ λ e quindi
|s − α| ≤ λ|t − α|
ovvero s = φ(t) è più vicino a α rispetto a t del fattore λ, per cui l’asserto è
verificato.
Tra le righe della dimostrazione, oltre alla convergenza della successione {xn }n∈N ,
sono altresì dimostrate le seguenti due proprietà:
1. poichè ∀i xi−1 ∈ (α − h, α + h) ⇒ xi ∈ (α − h, α + h), allora l’aver scelto
il punto iniziale x0 in tale intervallo assicura che in esso giacciano tutti gli
xn termini della successione del metodo in esame;
4
La seguente definizione ultima sarà utile per la classificazione ed il confronto
dei possibili metodi iterativi della tipologia appena esposta.
f (xi )
xi+1 = xi − (1)
ki
e a seconda della pendenza scelta si ottiene un metodo piuttosto che un altro.
Figura 2: Alcuni passi della Regula Falsi, applicato all’intervallo [a1 ; b1 ]. Il punto in
rosso è la radice dell’ equazione F (x) = 0.
Metodo 1.2. (Regula falsi) Si ottiene considerando la retta secante per i punti
(x0 , f (x0 )) e (xi , f (xi )).
Esso, secondo la Definizione 1.3, ha convergenza lineare (p = 1) se f 00 (α) 6=
0, altrimenti di ordine p > 1. Rappresentazione geometrica di tale metodo è
riportata nella Figura 2.
5
Figura 3: Alcuni passi del metodo delle Secanti.
Metodo 1.3. (Secanti) Si ottiene considerando la retta secante per i punti (xi−1 , f (xi−1 ))
e (xi , f (xi )).
Esso, secondo la Definizione 1.3, ha convergenza superlineare (p ' 1.618). Rap-
presentazione geometrica di tale metodo è riportata nella Figura 3.
Figura 4: Alcuni passi del metodo delle Tangenti, o Newton Raphson che dir si voglia
6
1.2 Implementazione metodi e sperimentazione numerica
Si è proceduto allora alla stesura di un codice nell’ambiente MATLAB per la
computazione del metodo di bisezione precedentemente descritto.
7
43 fb = fxk ;
44 % altrimenti se si trova a destra
45 else
46 a = x ( k );
47 fa = fxk ;
48 end
49 end
50 % Infine plotto la successione di approssimazioni
51 nodi = linspace (1 , it +2 , it +2);
52 plot ( nodi ,x , ’ .: ’ , ’ MarkerSize ’ ,20)
1.8
Approssimazione zero della funzione
1.6
1.4
1.2
0.8
0.6
0.4
0.2
0
1 2 3 4 5 6 7 8 9 10
Numero iterate
√
Figura 5: Approssimazioni 3 come zero della funzione f (x) = x2 − 3 in funzione del
numero di iterate per il Metodo 1.1, come riportato nella Sperimentazione 1.1 .
8
0 2.0000 1.0000 1.5000 1.7500
xiter
10 =
1.6250 1.6875 1.7188 1.7344 1.7266
nonchè una rappresentazione dell’errore di approssimazione in relazione al nume-
ro di iterate effettuate, come riportato nella Figura 5 di pagina 8.
Si
√ osservi che la soluzione ottenuta è in accordo con quanto richiesto, poichè
3 = 1.7321 e l’approssimazione ultima ottenuta coincide con essa per la parte
intera e per la prima cifra decimale.
Si è poi proceduto a ripetere la sperimentazione imponendo una precisione mag-
giore, osservando che per ottenere due cifre decimali esatte sono necessarie 13
iterate, mentre per ottenerne tre sono neccessarie 17 iterate.
0 2.0000 1.0000 1.5000 1.7500
1.6250 1.6875 1.7188 1.7344 1.7266
xiter
20 =
1.7305
1.7324 1.7314 1.7319 1.7322
1.7321 1.7320 1.7320 1.7320 1.7320
In secondo luogo si è proceduto alla implementazione dei metodi di punto
fisso, con particolare attenzione al Metodo 1.2, al Metodo 1.3 e al Metodo 1.4.
20 ierr =0;
21 k =0;
22 a = x0 ;
23 x = x1 ;
24 % Vado a salvare il termine n+1 della successione in x
25 while k < Nmax && abs ( f ( x )) > ftol | abs (x - a ) > tol
9
26 a=x;
27 % salvo il termine del passo precedente
28 % per la forma dell’errore
29 coef =( f ( x ) - f ( x0 ))/( x - x0 );
30 x =x -( f ( x )/ coef );
31 % questo il termine ennesimo della successione,
32 % che salvo in uno scalare;
33 k = k +1;
34 end
35 if abs (x - a ) > tol
36 ierr = -1;
37 end
38 if abs ( f ( x )) > ftol
39 ierr = -2;
40 end
15 ierr =0;
16 % calcoliamo il coefficiente il metodo
17 coeff =( f ( x1 ) - f ( x0 ))/( x1 - x0 );
18 % calcoliamo la soluzione approssiamata
19 x = x1 -( f ( x1 )/ coeff );
20 fx = f ( x );
21 k =1;
22 while k < Nmax && (( abs ( fx ) > ftol | abs ( x - x0 ) > tol ))
23 % aggiorniamo gli estremi
24 x0 = x1 ;
25 x1 = x ;
26 coeff =( f ( x1 ) - f ( x0 ))/( x1 - x0 );
27 x = x1 -( f ( x1 )/ coeff );
28 fx = f ( x );
29 k = k +1;
30 end
31 if k > Nmax
10
32 ierr = -1;
33 end
21 ierr =0;
22 k =0;
23 a = x0 ;
24 x = x0 ;
25 while k < Nmax
26 if k >1 & abs (( x - a )/ x ) < tol & abs ( f ( x )) < ftol
27 break
28 end
29 % imponiamo il doppio controllo, usciamo
30 % se siamo sufficientemente vicini;
31 a=x;
32 % esso mi serve per salvare il termine di questo
33 % passo, per non perderlo successivamente;
34 x =x -( f ( x )/ fd ( x ));
35 % questo il termine ennesimo della successione,
36 % che salvo in uno scalare;
37 k = k +1;
38 end
39 if abs (( x - a )/ x ) > tol
40 ierr = -1;
41 elseif abs ( f ( x )) > ftol
42 ierr = -2;
43 end
11
Il codice prodotto è stato poi utilizzato direttamente per la risoluzione di un
semplice esercizio di seguito riproposto.
2
f(x)=4x3 -10x2 +2x+5
-2
-4
-6
-8
-10
-12
-1 -0.5 0 0.5 1 1.5 2
x
Figura 6: Grafico della funzione p(x) = 4x3 − 10x2 + 2x + 5, come riportato nella
Sperimentazione 1.2 .
Guidati dal grafico nella determinazione della posizione degli zeri cercati, uti-
lizzando i vari metodi proposti, si è pervenuti ai risultati riportati nella Tabella 1,
nella Tabella 2 e nella Tabella 3, dove è altresì esplicita la velocità di convergenza
dei metodi in esame (le approssimazioni iniziali sono state in ogni caso scelti in
maniera accurata).
Tabella 1: Dati per il primo zero per la funzione della Sperimentazione 1.2 .
12
x2zero = 1.18166411896 Regula falsi Secanti Newton-Raphson
−3 −3
Tolleranza imposta 10 10 10−3
Iterate necessarie 6 4 4
Risultato ottenuto 1.18166841155 1.18166411896 1.18166404303
Tabella 2: Dati per il secondo zero per la funzione della Sperimentazione 1.2 .
Tabella 3: Dati per il terzo zero per la funzione della Sperimentazione 1.2 .
13
rappresentate nella Figura 7.
(
(x − 2)2 + (y − 1)2 = 4
x2 + 3y 2 = 1
Le soluzioni ottenute partendo da approssimazioni inziali ricavate dallo studio
(x-2)2+(y-1)2=4
2.5 x 2+3y2=1
1.5
1
y
0.5
-0.5
-1 0 1 2 3 4
x
Figura 7: Grafico delle coniche riportate nella sperimentazione 1.3
14