Sei sulla pagina 1di 8

Relazione Calcolo Numerico

Francesco Morandini

June 19, 2020

1
Indice
1 Introduzione 3
1.1 Legenda nomi variabili per ogni metodo . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Esercizio 2: Metodo di bisezione 3

3 Esercizio 3 3
3.1 Metodo di bisezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2 Metodo di Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3 Metodo di Steffensen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.4 Confronto tra Newton-Raphson e Steffensen . . . . . . . . . . . . . . . . . . . . . . . 6
3.5 Metodo di tangente fissa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.5.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4 Esercizio 5 7
4.1 Metodo di Punto fisso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.1.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.2 Metodo di Aitken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.2.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2
1 Introduzione
In questa relazione andrò a esporre e a commentare il funzionamento e i relativi risultati delle
function MATLAB relative ai vari metodi visti per l’approssimazione dello zero di una funzione.
In particolare commenterò sia le function relative ai metodi iterativi sia gli script che permettono
la chiamata delle varie funzioni.
La function è la parte algoritmica del nostro metodo iterativo, mentre lo script riguarda tutta la
parte di visualizzazione e inizializzazione delle variabili della function stessa.

1.1 Legenda nomi variabili per ogni metodo


ˆ Bisezione: b

ˆ Newton-Raphson: n

ˆ Steffensen: s

ˆ Tangente fissa: f

ˆ Punto fisso: p

ˆ Aitken: a

Nello specifico ho cambiato il nome delle variabili per ogni metodo iterativo onde evitare la
possibile sovrascrittura del contenuto delle variabili stesse ogni volta sarebbero state chiamate
dalle function. In questo modo ogni variabile è associata a una sola function.

2 Esercizio 2: Metodo di bisezione


Nell’esercizio 2 era richiesto di trovare la soluzione della funzione x2√− 2 = 0 tramite il metodo
di bisezione nell’intervallo I = [1, 2], cioè di approssimare il valore 2 a meno della tolleranza
(tol=10−12 ), chiamando la function tramite lo script scriptbisezione.m. Il metodo deve avere come
criterio di arresto il residuo pesato, cioè il rapporto tra
il valore
della funzione all’iterata k-esima
e della sua derivata, tutto in valore assoluto (vres = ff0(c
k)
(ck ) ). Il risultato ottenuto, approssimato
correttamente a 12 cifre decimali, tramite la

function [iterb, cnew, vres] = bisezione (a, b, tolb, itmaxb, fun, dfun) è:

2 ≈ 1.414213562373

3 Esercizio 3
Nell’esercizio 3 si chiedeva di implementare i metodi di bisezione, Newton-Rapshon, Steffensen e
tangente fissa tramite lo script scriptes1.m per approssimare lo zero della funzione data.
Tale funzione è la seguente: y = 2αx3 −βx+γe2x −2δ dove i parametri α, β, γ e δ sono stati ricavati
dalle ultime 4 cifre del proprio numero di matricola a cui sono state effettuate alcune operazioni
tramite una function fornitaci dal Professore. Nel mio caso i parametri correttamente calcolati
sono: α = 4, β = 4, γ = 0.7, δ = 4.

3
3.1 Metodo di bisezione
Il metodo di bisezione usato nell’esercizio 3 usa la stessa function dell’esercizio 2. Impiega 2 iter-
azioni per calcolare il punto cnew = 2 che verrà utilizzato in seguito nel metodo di Newton-Raphson
come punto iniziale.

3.2 Metodo di Newton-Raphson


Il primo metodo che viene chiesto di implementare nello scriptes1 è il metodo di Newton-Raphson.
Tale metodo richiede 2 ipotesi:

1. f (x) si derivabile e continua in un intervallo [a, b]

2. f 0 (x) 6= 0

E genera la successione:
f (xk )
xk+1 = xk −
f 0 (xk )

Questo metodo però non ci assicura la convergenza a priori. Per esserne sicuri bisogna verificarlo
tramite l’esistenza di uno zero semplice ξ (uno zero si definisce semplice se f (ξ) = 0 e f 0 (ξ) 6= 0),
se ciò è verificato e prendiamo un punto x0 sufficientemente vicino a ξ allora il metodo convergerà
almeno quadraticamente a ξ. Per la risoluzione di questo punto ho chiamato la

function [itern,xnewn,scartin] = newton(x0n,toln,itmaxn,fun,dfun)

dove toln indica la tolleranza (toln=10−8 ) che indica la precisione della nostra soluzione. Infatti
quando |xk+1 − xk | < toln il ciclo si arresta. Inoltre con itmaxn ho indicato le iterazioni massime
(itmaxn=30) che il ciclo può effettuare nel caso il metodo non dovesse convergere in modo tale da
avere sempre un arresto del ciclo.

4
3.2.1 Risultati
In particolare il metodo di Newton-Raphson mi converge e impiega 7 iterazioni per approssimare
la soluzione a meno della tolleranza.

ˆ ξ = 0.959545837560

ˆ scarto =−3.21000 ∗ 10−12

ˆ M = 1.1784

Inoltre ho calcolato l’errore che eventualmente si sarebbe potuto generare tramite il metodo di
Newton-Raphson rispetto alla funzione fzero integrata in MATLAB applicata alla nostra funzione
f(x) che calcola direttamente lo zero di essa in un intervallo che inseriamo noi a priori nel codice.
Nel mio caso l’errore visualizzato è 0.00000, il che indica che l’errore è al di sotto della precisione
di macchina.

3.3 Metodo di Steffensen


Il secondo metodo richiesto per approssimare ξ è quello di Steffensen. Chiamato dalla

function [iters,xnews,scartis] = steffensen(x0s,tols,itmaxs,fun)

Come per Newton ho definito un punto iniziale, in questo caso l’ho chiamato x0s che ho ricavato
dalla ultima iterazione del metodo di Newton-Raphson a cui è stata sommata la quantità 10−2 ,
ho stabilito una tolleranza (tols=10−8 ) al di sotto della quale viene arrestato il ciclo e le iterazioni
massime (itmaxs) che il ciclo può effettuare pari a 30.
Con il metodo di Newton-Raphson, Steffensen condivide alcune particolarità e allo stesso tempo
si differenzia sotto alcuni aspetti. In comune hanno l’efficienza computazionale e quasi sempre
l’ordine di convergenza (p = 2).
Come differenze possiamo notare invece la più evidente, cioè la forma della successione che si viene
a formare iterando più volte questo metodo, che per questo metodo risulta:

[f (xk )]2
xk+1 = xk −
f (xk + f (xk )) − f (xk )

3.3.1 Risultati
In questo caso il metodo di Steffensen mi converge e si è arrestato dopo 5 iterazioni dopo aver
calcolato uno scarto inferiore alla tolleranza.

ˆ ξ = 0.959545837560

ˆ scarto =−1.40643 ∗ 10−10

ˆ M = 33.7482

Anche in questo caso l’errore tra il metodo di Steffensen e la funzione fzero è 0.00000.

5
3.4 Confronto tra Newton-Raphson e Steffensen
Qui di seguito viene visualizzato il grafico semilogaritmico sull’asse y dei profili di convergenza di
Newton-Raphson e Steffensen rispettivamente di colori rosso e blu.

Come possiamo notare i metodi presentano un profilo di convergenza simile (entrambi convergono
quadraticamente) però il metodo di Newton-Raphson è per tutte le iterazioni al di sopra di quello
di Steffensen, questo perchè per il secondo abbiamo scelto un punto di partenza molto più vicino
alla soluzione ξ rispetto al primo.

3.5 Metodo di tangente fissa


Come terzo metodo si chiede di implementare la tangente fissa. Guardando la successione che si
viene a formare:
f (xk )
xk+1 = xk − 0
f (x0 )
ci si accorge subito che questo metodo è basato su Newton-Raphson fatta eccezione per il denomi-
natore in cui la derivata prima viene calcolata ad ogni iterazione sempre rispetto al punto iniziale
che è lo stesso del metodo di Newton-Raphson. Inoltre sempre dal metodo di Newton-Raphson ho
utilizzato anche la tolleranza, mentre le iterazioni massime itmaxf le ho impostate a 100 essendo
questo metodo meno rapido a convergere rispetto a Newton-Raphson stesso. Prima di chiamare la
function che chiama la tangente fissa

function [iterf,xnewf,scartif] = tanf(x0f,tolf,itmaxf,fun,dfun)

dobbiamo verificare che questo ultimo  metodo  converga dopo un certo numero di iterazioni. Per
f 0 (ξ)

farlo ho impostato la condizione 1 − f 0 (x0n ) < 1 dove ξ indica la soluzione, x0n il punto iniziale

e del metodo di Newton-Raphson. Se questa condizione è verificata allora possiamo chiamare la


function altrimenti visualizziamo a video un messaggio di avviso di non convergenza.

3.5.1 Risultati
Il metodo mi converge e impiega 88 iterazioni per approssimare la soluzione a meno della tolleranza.

6
ˆ ξ = 0.959545884795

ˆ scarti =−9.27193 ∗ 10−09

4 Esercizio 5
Nell’esercizio 5 si chiede di approssimare il valore che soddisfa l’equazione f (x) = 0 rispetto alla
funzione utilizzata nell’esercizio 3 attraverso i metodi di Punto fisso e Aitken, il tutto in un nuovo
script chiamato scriptes2.m. Preliminarmente per aver a disposizione tutte le variabili inizializzate
correttamente come richiesto dalla consegna ho chiamato:

function [iterb, cnew, vres] = bisezione (a, b, tolb, itmaxb, fun, dfun)
function [itern,xnewn,scartin] = newton (x0n,toln,itmaxn,fun,dfun)

4.1 Metodo di Punto fisso


Come primo metodo viene richiesto il Punto fisso. In particolare, seguente questa successione

2αx3k + γe2xk − 2δ
xk+1 = ≡ g(xk )
β
Il metodo di punto fisso si basa sull’equazione:

g(x) = x + f (x)

Un punto fisso è un particolare punto di una funzione in cui x = f (x), quindi che giace sulla biset-
trice del primo e terzo quadrante. Per trovare un punto fisso basta porre f (x) = 0 nell’equazione
che descrive il metodo.
Per prima cosa ho verificato se effettivamente il metodo convergesse tramite l’istruzione condizionale
if-else applicata al valore assoluto della derivata prima della nostra funzione g(x) nel punto xnewn.
Se tale valore fosse maggiore di 1 (|g 0 (xnewn)| > 1) allora tale metodo non potrà convergere e
visualizzerà un messaggio di avviso, al contrario (else) verrà chiamata la

function [xnewp,iterp,scartip] = pfisso (g,x0p,tolp,itmaxp)

dove x0p punto iniziale è lo stesso utilizzato per il metodo di Steffensen, itmaxp sono le iterazioni
massime che il ciclo può effetuare (tolp=100) e inoltre ho impostato una tolleranza (tolp=10−12 )
al di sotto della quale viene arrestato il ciclo.

4.1.1 Risultati
Nel mio script MATLAB il metodo di punto fisso non converge poichè il valore assoluto della
derivata della funzione g(x) nel punto xnewn soluzione del metodo di Newton-Raphson è pari a
7.9095, quindi decisamente maggiore di 1.

7
4.2 Metodo di Aitken
Come ultimo metodo veniva richiesto Aitken applicato al metodo di punto fisso eseguito prece-
dentemente, quindi con lo stesso punto iniziale x0a = x0p ma con tolleranza e iterazioni massime
diverse, più precisamente tola=10−8 e itmaxa=30. Aitken viene chiamato dalla seguente function:

function [itera,xnewa,scartia] = aitken (x0a,tola,itmaxa,g,dg,d2g)

Tale metodo si basa sulla successione:


(xb −xa )2
xk+1 = xa − xb −2xc +xa

dove xa , xb e xc sono definiti come segue:

ˆ xa = xk

ˆ xb = g(xa )

ˆ xc = g(xb )

4.2.1 Risultati
Qui di seguito viene visualizzato il grafico del profilo di convergenza del metodo di Aitken

Il metodo mi converge e impiega 4 iterazioni per approssimare lo zero a meno della tolleranza.

ˆ ξ = 0.959545837560

ˆ scarto=−4.87055e − 10

ˆ M = 9.3209

Come per Newton-Raphson e Steffensen anche in questo caso l’errore tra il metodo di Aitken e la
funzione fzero è 0.00000.

Potrebbero piacerti anche