Sei sulla pagina 1di 8

Calcolo numerico Condizionamento degli zeri di un polinomio

1. Approccio al problema
Il condizionamento degli zeri (ξ) al variare dei coefficienti a  del polinomio è defini-
to come: 
Δ ε ryξ k − n −1 ⋅ a n
Cp = = , 
ε rx p' (ξ )
occorre quindi in primo luogo determinare le radici del polinomio. 
Radici. Per prima cosa il polinomio viene tabulato per poter isolare gli zeri per via 
grafica. 

 
Dai grafici di p ( x ) , a sinistra con l’asse delle ordinate in scala logaritmica del mo-
dulo di y, a destra in scala lineare si nota la presenza di tre radici intorno a -5, -1, e 60, 
identificate rispettivamente con ξ1, ξ2 e ξ3. 
Si osserva immediatamente come la rapidità della funzione intorno alla radice ξ3 
renda  il  problema  particolarmente  malcondizionato:  ad  una  piccola  variazione  sulla  x  
corrisponde  una  grande  variazione  della  y   (l’asse  y   è  visualizzato  con  scala  10 ).  Per  la 
12

stessa radice, nel grafico logaritmico, si osserva una variazione di segno in cui il modulo 
della funzione è superiore ai 10  anche se il passo della y  è di sole 0,2 unità; Il picco ver-
-12

so il basso avrebbe dovuto tendere verso -∞. 
Dall’ingrandimento  della 
funzione  intorno  all’origine  si 
osserva  la  presenza  di  flessi  in 
prossimità di ξ1 e di ξ2, dei quali 
occorre  tener  conto  per  la  de-
terminazione della radici, in par-
ticolare  ξ1  potrebbe  coincidere 
con un flesso. 

Roberto Patrizi, 09114657 pag 1 di 8 


Calcolo numerico Condizionamento degli zeri di un polinomio

2. Ricerca delle radici con Matlab


Sono stati implementati 2 algoritmi in linguaggio Matlab per la ricerca delle radi-
ci:  il  metodo  di  Newton  ed  il  metodo  di  bisezione,  con  i  rispettivi  script  riportati  in  ap-
pendice. Il calcolatore utilizzato è in grado di operare con numeri in virgola mobile con 
una precisione massima di 17 cifre. 
Radice ξ1. La  presenza  del 
flesso  (p ’ ’ ( x ) =0)  in  prossimità 
della  radice  rende  difficoltosa  la 
ricerca  di  un  intervallo  [a,b], 
all’interno  del  quale  deve  trovarsi 
la  radice  ed  in  cui  la  derivata  se-
conda  non  è  mai  nulla.  Le  condi-
zioni  sovra  esposte  garantiscono 
la  convergenza  del  metodo  di 
Newton a partire da un estremo di 
Fourier (p ( x 0 ) ·p ’ ’ ( x 0 ) >0). 
Non  è  neppure  possibile 
garantire che  p ’ ( x )  sia  non nulla 
in un intorno della radice, pertan-
to  non  sono  soddisfatte  le  condi-
zioni per la convergenza del metodo di Newton. La radice potrebbe avere molteplicità 3, 
in tal caso sarebbe possibile applicare il metodo di Newton modificato, per il quale: 
p( x n )
x n +1 = x n − 3  
p' ( x n )
Con il metodo di bisezione invece è sufficiente scegliere un intervallo [a,b] per il 
quale risulta p (a)·p (b)<0, ciò è verificato per a=-4.6, b=-4. L’output ottenuto è: 

>>bisezpoly(A,a,b,epsilon);
-------------------------------------------------------------------------------
n a b m p(m)
-------------------------------------------------------------------------------
1 -4.600000000000000 -4.000000000000000 -4.300000000000000 5.133e+000
... ... ... ...
46 -4.333329182771303 -4.333329182771286 -4.333329182771294 -3.492e-009
47 -4.333329182771294 -4.333329182771286 -4.333329182771291 -6.694e-010
48 -4.333329182771291 -4.333329182771286 -4.333329182771289 -3.900e-009
49 -4.333329182771289 -4.333329182771286 -4.333329182771287 2.037e-010
50 -4.333329182771289 -4.333329182771287 -4.333329182771288 0.000e+000

Raggiunta radice in 50 passi>>


-16
in cui epsilon è stato impostato a 1·10 . Si assumerà come radice  

ξ1=-4.333329182771288.

Roberto Patrizi, 09114657 pag 2 di 8 


Calcolo numerico Condizionamento degli zeri di un polinomio

Radice ξ2. Dal grafico intorno alla se-
conda  radice,  si  osserva  la  presenza  di  una 
distanza tangibile tra la radice ed il nullo del-
la  derivata  seconda.  In  questo  caso  quindi 
sono valide le ipotesi: 
2
p (a) · p (b) < 0     con p (x ) X C [a, b] 
p ’’(x ) K0, ∀x X [a, b] 
p ’(ξ) K0 
in  cui  l’intervallo  [a,b]  è  ad  esempio  a=-0.7, 
b=-0.5. Dunque è sufficiente determinare un 
estremo di fourier dal quale iniziare ad itera-
re  con  il  metodo  di  newton  per  avere  la  convergenza.  Ad  esempio  posto  x 0=-0.7, 
p (x 0)*p ’ ’ (x 0)>0, dunque  x 0 è un estremo di Fourier. L’esecuzione dello script newtonzp 
da luogo al seguente output: 

>> newtonzp(A,0,epsilon,delta)
---------------------------------------
n xi p(xi)
---------------------------------------
1 -0.735849056603774 3.955e+004
2 -0.601542910811362 1.599e+004
3 -0.590245920932620 1.148e+003
4 -0.590158659143148 8.732e+000
5 -0.590158653920796 5.225e-004

Raggiunto limite precisione macchina in 5 passi


-16 10
in cui epsilon=1·10 , delta=1·10 . L’algoritmo si arresta alla 5 iterazione, quando 
p (x i ) è ancora dell’ordine di 10-4. Con il metodo di bisezione invece: 

>> bisezpoly(A,a,b,,epsilon)
------------------------------------------------------------------------------
n a b m p(m)
------------------------------------------------------------------------------
1 -.59999999999999998 .50000000000000000 0.55000000000000004 -3.907e+003
... ... ... ...
47 -.59015865392079669 -.59015865392079525 -.59015865392079592 1.455e-011
48 -.59015865392079592 -.59015865392079525 -.59015865392079558 -1.455e-011
49 -.59015865392079592 -.59015865392079558 -.59015865392079569 0.000e+000

Raggiunta radice in 49 passi

La  precisione  della  radice  è  maggiore,  l’algoritmo  sembra  funzionare  meglio  del 
metodo di Newton. Ciò probabilmente è dovuto ad errori di arrotondamento eseguiti nel 
calcolo del rapporto delle funzioni  p (x )/p ’(x ) (dell’ordine di 10  ). Infatti la differenza tra 
-4

x i -p (x i )/p ’(x i ) non genera problemi dovuti all’annullamento in quanto  x i  è svariati or-


dini di grandezza superiore del rapporto. Mentre p ’(x i ) si mantiene elevato ordine di 10 , 
5

p (x i ) decresce fino a rendere inattendibile il rapporto tra le funzioni. 

ξ2=-0.59015865392079569

Roberto Patrizi, 09114657 pag 3 di 8 


Calcolo numerico Condizionamento degli zeri di un polinomio

Radice ξ3. Per la terza radice è facile individuare le ipotesi per la convergenza del 
metodo  di  Newton,  ed  è  anche  facile  individuare  l’estremo  di  Fourier  x 0,  per  il  quale 
p (x 0)*p ’ ’ (x 0)>0. Tuttavia la ripidità della funzione nell’intorno della radice, da luogo ad 
un  problema  malcondizionato:  non  appena  ci  discostiamo  dalla  radice  ξ3, otteniamo  un 
valore  del  polinomio  molto  elevato  in  modulo.  Osserviamo  i  dati  ottenuti  con 
-16 10
l’applicazione del metodo con x0=62, epsilon=1·10 , delta=1·10 : 

newtonzp(A,x0,epsilon,delta)
----------------------------------------
n xi p(xi)
----------------------------------------
1 61.157300198834456 1.721e+012
2 61.085638246829994 1.254e+011
3 61.085147905914937 8.461e+008
4 61.085147883085845 3.939e+004
5 61.085147883085845 3.466e-005

Raggiunto limite precisione macchina in 5 passi

In  soli  5  passi  viene  raggiunto  il  limite  di  precisione  macchina  sulla  x,  quando  il 
-5
polinomio è dell’ordine di 10 . Forzando l’algoritmo a continuare, si ottengono tutte ri-
ghe analoghe alla quinta. Notevole il guadagno di 9 ordini di grandezza sulla y  in una so-
la iterazione, che implica che la funzione è ben linearizzabile intorno alla radice. 
Occorre  osservare  che  né  con  il  metodo  di  bisezione,  né  con  altri  metodi  non  è 
possibile ottenere una precisione maggiore: Infatti osserviamo i dati ottenuti con il meto-
do di bisezione: 

>> bisezpoly(A,61,61.1,epsilon)
-------------------------------------------------------------------------------
n a b m p(m)
-------------------------------------------------------------------------------
1 61.000000000000000 61.100000000000001 61.049999999999997 -6.044e+010
43 61.085147883085831 61.085147883085853 61.085147883085838 -1.289e-002
44 61.085147883085838 61.085147883085853 61.085147883085845 3.466e-005
45 61.085147883085838 61.085147883085845 61.085147883085838 -1.289e-002
46 61.085147883085838 61.085147883085845 61.085147883085838 -1.289e-002
 
Il metodo giunge alla stessa identica radice del metodo di newton in 44 iterazioni, 
che tra l’altro è la migliore che si riesce ad ottenere, come visibile dai risultati. 
Alla riga 45 si osserva che la media (a+b)/2, coincide con il valore a, risultato ov-
viamente privo di senso matematico. Ciò è dovuto all’errore di rappresentazione dei nu-
meri del calcolatore utilizzato. Infatti eseguendo in matlab i comandi: 

>> xi=61.085147883085838; %il valore di a alla riga 44


>> xi+eps(xi)
ans = 61.085147883085845

otteniamo che all’iterazione 45 il numero successivo ad a che è possibile rappre-
sentare è proprio b: non esistono numeri intermedi per il calcolatore. Ciò arresta di fatto 
l’algoritmo, e impedisce di ottenere una soluzione più accurata, se non facendo uso di un 
calcolatore in grado di eseguire calcoli in virgola mobile con un numero maggiore di ci-
fre. 

ξ3=61.085147883085845 

Roberto Patrizi, 09114657 pag 4 di 8 


Calcolo numerico Condizionamento degli zeri di un polinomio

3. Coefficienti di condizionamento
Perturbando il termine noto, il coefficiente di condizionamento che si ottiene ha 
la forma: 
Δ ε ry an
Cp = =  
ε rx p' (ξ )

che per le radici trovate assume il valore rispettivamente di  

Cp1 = 5.393094715224958e+009 
Cp2 = 0.39524133495742 
Cp3 = 2.291931500642379e-008 

Intuitivamente si osserva come al variare del termine noto, il polinomio venga tra-
slato orizzontalmente, con il conseguente spostamento delle radici. Questo spostamento 
è tanto maggiore, quanto più il polinomio interseca l’asse delle ascisse orizzontalmente. 
Ciò si rispecchia nei coefficienti di condizionamento: per la radice 1 a tangenza orizzon-
tale  il  Cp1  è  notevolmente  elevato,  al  contrario  per  la  radice  3  data  da  un’intersezione 
quasi verticale del polinomio con l’asse delle ascisse, si ha un Cp3 particolarmente basso, 
come era ragionevole aspettarsi. 
Ciò significa che per la terza radice non è critico il termine noto, anche per varia-
zioni piuttosto ampie dello stesso non si hanno consistenti scostamenti della radice. È in-
vece critica la determinazione della stessa, per la quale, infatti, su ha un indice di condi-
18
zionamento della radice di circa 3·10 . 
Per la prima radice si ha il discorso inverso, mentre la seconda è in un certo qual 
modo più “equilibrata”, le difficoltà della determinazione della radice e la sua sensibilità a 
variazioni del termine noto si equivalgono, e non comportano particolari problemi. 
Perturbando  il  termine di quinto  grado,  per il  quale  k -n -1=4,  i  valori  dei coeffi-
cienti di condizionamento sono dati da: 
ξ 4 ⋅ a2
Cp =  
p' (ξ )

Si ottengono quindi i valori 

Cp1 = -9.629300430614109e+011 
Cp2 = 0.02427769436537 
Cp3 = -0.16158986377900 

Anche in questo caso le radici più sensibili sono quelle in cui il polinomio interseca 
l’asse delle ascisse con pendenza più bassa, vale a dire ξ1 in primo luogo (a tangenza oriz-
zontale) e in misura minore ξ2. In generale le radici multiple, per le quali si annulla anche 
la derivata prima sono malcondizionate rispetto a perturbazioni dei coefficienti. 

Roberto Patrizi, 09114657 pag 5 di 8 


Calcolo numerico Condizionamento degli zeri di un polinomio

4. Codice degli algoritmi

Poly.dat
27 -1296 -20025 -92663 -146320 -35555 -53742 -39546

function A1=deriva(A)
%
% A1=deriva(A)
%
%Se A è una matrice dei coefficienti di un polinomio, la funzione
%restituisce la matrice A1 dei coefficienti della derivata del polinomio
%
n=length(A)-1; %è il grado del polinomio (il -1 serve per la presenza del termine noto)
for i=1:n
A1(i)=A(i)*(n+1-i);
end;

 
function Y=polycalc(A,X)
%
% Y=polycalc(A,X)
%
%Funzione per il calcolo del valore assunto da un polinomio in un punto
%(o vettore di punti X). A è la matrice dei coefficienti del polinomio
%

n=length(A);
Y=X*0; %Inizializzazione di Y
for i=1:n
Y=Y+A(i)*(X.^(n-i));
end;
 
 
function m=bisezpoly(A,a,b,epsilon)
%
% m=bisezpoly(A,a,b,epsilon)
%
%Calcolo gli zeri di un polinomio tramite il metodo di Bisezione. A è la
%matrice dei coefficienti del polinomio, a e b sono gli estremi
%dell'intervallo al quale è applicato il metodo, epsilon è la precisione
%che si vuole ottenere sulla determinazione della radice m
%
%Visualizzazione dei passaggi
s='---------------------------------------------------------------' ;
disp(s)
fprintf(' n\t\t\t a\t\t\t\t\t b\t\t\t\t\t m\t\t\t\t p(m)\n')
disp(s)
n=1; %inizializzazione
N=ceil((log(b-a)-log(epsilon))/log(2)); %numero di iterazioni richieste
fa=polycalc(A,a);
fb=polycalc(A,b);

Roberto Patrizi, 09114657 pag 6 di 8 


Calcolo numerico Condizionamento degli zeri di un polinomio

if sign(fa)==sign(fb) %verifica intervallo


fprintf('L''intervallo non è valido!' )
else
while n<N %avanzamento algoritmo
m=(a+b)/2;
fm=polycalc(A,m);
fa=polycalc(A,a);

%visualizzazione output
fprintf('%3d\t %17.17f\t %17.17f\t %17.17f\t %8.3e\n',n,a,b,m,fm)
if fm==0
fprintf('\nRaggiunta radice in %3d passi',n)
n=N;
elseif sign(fa)==sign(fm)
a=m;
elseif sign(fa)~=sign(fm)
b=m;
end;
n=n+1;
end
end;
 

 
function xi=newtonzp(A,x0,epsilon,delta)
%
% xi=newtonzp(A,x0,epsilon,delta)
%
%Calcolo gli zeri di un polinomio tramite il metodo di Newton. A è la
%matrice dei coefficienti di un polinomio, x0 è il punto iniziale dal quale
%far partire l'algoritmo, xi è la radice alla quale è giunto il metodo,
%epsilon e delta sono le precisioni che si vuole raggiungere,
%rispettivamente sulla x e sulla f(x)

%Inizializzazione
A1=deriva(A);
xi=x0;
x=xi;
%Visualizzazione dei passaggi
s='---------------------------------------';
disp(s)
fprintf(' n\t\t\t xi\t\t\t\t\t p(xi)\n')
disp(s)

Roberto Patrizi, 09114657 pag 7 di 8 


Calcolo numerico Condizionamento degli zeri di un polinomio

%parte centrale dell'algoritmo:


for n=1:100 %100=numero massimo di iterazioni
p=polycalc(A,x);
p1=polycalc(A1,x);
r=p/p1;
%controllo sul rapporto delle funzioni
if abs(r) < eps
fprintf('\nRaggiunto limite precisione macchina in %d passi',n)
return
end
%calcolo radice successiva
xi=x-(p/p1);
fprintf('%2d\t %17.15f\t\t %8.3e\n' ,n,xi,p)
%controllo precisione
%if (abs(xi-x)<epsilon)|(abs(p)<delta)
if (abs(p)<delta)
fprintf('\nRaggiunta precisione richiestain %d passi',n)
break ;
end
x=xi;
end;
 

Roberto Patrizi, 09114657 pag 8 di 8