condizionamento degli zeri di un polinomio

8
Calcolo numerico Condizionamento degli zeri di un polinomio Roberto Patrizi, 09114657 pag 1 di 8 1. Approccio al problema Il condizionamento degli zeri (ξ) al variare dei coefficienti a del polinomio è defini- to come: ) ( ' Δ ξ p a ξ ε ε Cp n n k rx ry = = 1 , 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 12 ). Per la stessa radice, nel grafico logaritmico, si osserva una variazione di segno in cui il modulo della funzione è superiore ai 10 -12 anche se il passo della y è di sole 0,2 unità; Il picco ver- 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.

Upload: roberto

Post on 12-Nov-2014

466 views

Category:

Documents


2 download

DESCRIPTION

Condizionamento degli zeri di un polinomio, algoritmo in matlab per il calcolo delle radici, tesina per il corso di Calcolo Numerici

TRANSCRIPT

Page 1: Condizionamento degli zeri di un polinomio

Calcolo numerico Condizionamento degli zeri di un polinomio

Roberto Patrizi, 09114657 pag 1 di 8 

1. Approccio al problema

Il condizionamento degli zeri (ξ) al variare dei coefficienti a  del polinomio è defini-to come: 

)('

Δ

ξpaξ

εε

Cp nnk

rx

ry ⋅==−− 1

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 1012). Per  la stessa radice, nel grafico  logaritmico, si osserva una variazione di segno  in cui  il modulo della funzione è superiore ai 10-12 anche se il passo della y  è di sole 0,2 unità; Il picco ver-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. 

Page 2: Condizionamento degli zeri di un polinomio

Calcolo numerico Condizionamento degli zeri di un polinomio

Roberto Patrizi, 09114657 pag 2 di 8 

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: 

)(')(

n

nnn xp

xpxx 31 −=+  

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>>

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

ξ1=-4.333329182771288.

Page 3: Condizionamento degli zeri di un polinomio

Calcolo numerico Condizionamento degli zeri di un polinomio

Roberto Patrizi, 09114657 pag 3 di 8 

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: 

p (a) · p (b) < 0     con p (x ) X C2[a, b] 

p ’’(x ) K0, ∀xX [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

in cui epsilon=1·10-16, delta=1·1010. 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-4 ). Infatti la differenza tra 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 105, p (x i ) decresce fino a rendere inattendibile il rapporto tra le funzioni. 

ξ2=-0.59015865392079569

Page 4: Condizionamento degli zeri di un polinomio

Calcolo numerico Condizionamento degli zeri di un polinomio

Roberto Patrizi, 09114657 pag 4 di 8 

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 l’applicazione del metodo con x0=62, epsilon=1·10-16, delta=1·1010: 

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 polinomio è dell’ordine di 10-5. 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 

Page 5: Condizionamento degli zeri di un polinomio

Calcolo numerico Condizionamento degli zeri di un polinomio

Roberto Patrizi, 09114657 pag 5 di 8 

3. Coefficienti di condizionamento

Perturbando  il termine noto,  il coefficiente di condizionamento che si ottiene ha la forma: 

)('

Δ

ξpa

εε

Cp n

rx

ry ==  

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-zionamento della radice di circa 3·1018. 

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: 

)(' ξpaξCp 2

4 ⋅=  

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. 

Page 6: Condizionamento degli zeri di un polinomio

Calcolo numerico Condizionamento degli zeri di un polinomio

Roberto Patrizi, 09114657 pag 6 di 8 

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);

Page 7: Condizionamento degli zeri di un polinomio

Calcolo numerico Condizionamento degli zeri di un polinomio

Roberto Patrizi, 09114657 pag 7 di 8 

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)

Page 8: Condizionamento degli zeri di un polinomio

Calcolo numerico Condizionamento degli zeri di un polinomio

Roberto Patrizi, 09114657 pag 8 di 8 

%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;