Metodo delle secanti

Il metodo delle secanti è un ``ibrido'' tra il metodo di Newton ordinario e quello delle corde, poiché ad ogni passo né calcola la derivata prima della funzione, né tiene fissato un valore, ma approssima la derivata con la pendenza della retta secante il grafico della funzione passante per le due approssimazioni precedenti. In pratica $ x_1$ viene calcolato con il metodo di Newton ordinario e successivamente il metodo diventa del tipo

$\displaystyle x_{n+1}= \Phi(x_n, x_{n-1})
$

dove viene effettuata la seguente approssimazione

$\displaystyle f^{\prime}(x _n) \approx
\frac{f(x _n) - f(x _{n-1})}
{x _n - x _{n-1}}
$

il secondo membro non è altro che il coefficiente angolare della retta secante il grafico passante per i punti $ (x _n,f(x _n))$ e $ (x _{n-1},f(x_{n-1}))$; l'espressione del metodo ricapitolando diventa

$\displaystyle x_{n+1} = x_n -
\frac{f(x _n) - f(x _{n-1})}
{x _n - x _{n-1}}
$

e il metodo ovviamente viene detto a passo multiplo.
Ordine di convergenza= \begin{displaymath}
\left\{
\begin{array}{l r }
\frac{1+\sqrt{5}}{2} & \textr...
...lici} \\
1 & \textrm{radici multiple}
\end{array}
\right.
\end{displaymath}
Per la complessità valgono considerazioni analoghe al metodo della corde notando che $ f(x _{n-1})$ è nota dal passo precedente e non deve quindi essere ricalcolata. Nell'esempio vediamo che il metodo delle secanti dà buoni risultati se applicato alla funzione $ y=e^x-1$ infatti converge alla radice in 13 passi.

[$ x$,passi]=secanti(f,df,x0,epsilon,upper) - Applica il metodo delle secanti alla funzione $ f$ (con derivata $ df$) con punto iniziale $ x_{0}$, accuratezza epsilon e numero massimo di passi upper. Restituisce in $ x$ la radice (se trovata) e in passi, il numero di passi effettuati.

\framebox{\textbf{CODICE: secanti.m}}

%SECANTI
%[x,passi]=secanti(f,x0,epsilon,upper)
%  Pre: f derivabile
%  Applica il metodo delle secanti per il calcolo della
%  radice dell'equazione f(x)=0
%  f       - funzione
%  x0      - punto di innesco
%  epsilon - tolleranza per la radice
%  upper   - numero massimo di iterazioni consentite 
%
%  Restituisce in x la radice trovata e in passi il numero
%  di iterazioni che sono state necessarie per reggiungerla
%  See also BISEZ,  NEWTON, CORDE.

function [x,passi]=secanti(f,df,x0,epsilon,upper)
count=0;
x_old=x0;
y_old=feval(f,x_old);
d=feval(df,x0);
x_curr=x0-y_old/d;
y_curr=feval(f,x_curr);

while(count<upper) & (abs(y_curr)>epsilon)
	count=count+1;
	tmp_x=x_curr;
	tmp_y=y_curr;
   
	x_curr=tmp_x -((tmp_y*(tmp_x - x_old))/(tmp_y -y_old));
	y_curr=feval(f,x_curr);

	x_old=tmp_x;
	y_old=tmp_y;
end
x=x_curr;
passi=count;
return
\framebox{
\textbf{ESEMPIO di secanti.m}
}

>> type f_e

function y=f_e(x)
y=exp(x)-1;


>> [x,passi]=secanti('f_e','exp',4,1E-19,300)

x =

    1.230367509482608e-017


passi =

    13

Nel grafico di figura 2.3 è illustrato il comportamento del metodo delle secanti applicato alla funzione $ y=e^x-1$ con punto di innesco $ x=3$. Il metodo converge alla radice con un errore dell'ordine di $ 10^{-17}$ in 10 passi. Nella figura è disegnata in colore verde la retta tangente in $ x_0$ ottenuta dal metodo di Newton ordinario.

Figura 2.3: Metodo delle secanti applicato alla funzione $ y=e^x-1$ con punto di partenza $ x_0=3$. Converge alla radice $ \overline{x}=0$ in 10 passi.
\includegraphics[width=0.75\textwidth]{secantif_e.eps}
2004-05-29