Condizionamento Degli Zeri Di Un Polinomio

  • Uploaded by: Roberto
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Condizionamento Degli Zeri Di Un Polinomio as PDF for free.

More details

  • Words: 1,986
  • Pages: 8
Calcolo numerico

1.

Condizionamento degli zeri di un polinomio

Approccio al problema

Il condizionamento degli zeri (ξ) al variare dei coefficienti a  del polinomio è definito 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 modulo 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   12 corrisponde  una  grande  variazione  della  y   (l’asse  y   è  visualizzato  con  scala  10 ).  Per  la  stessa radice, nel grafico logaritmico, si osserva una variazione di segno in cui il modulo  -12 della funzione è superiore ai 10  anche se il passo della y  è di sole 0,2 unità; Il picco verso 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  determinazione della radici, in particolare  ξ1  potrebbe  coincidere  con un flesso. 

Roberto Patrizi, 09114657

pag 1 di 8 

Calcolo numerico

2.

Condizionamento degli zeri di un polinomio

Ricerca delle radici con Matlab

Sono stati implementati 2 algoritmi in linguaggio Matlab per la ricerca delle radici:  il  metodo  di  Newton  ed  il  metodo  di  bisezione,  con  i  rispettivi  script  riportati  in  appendice. 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  seconda  non  è  mai  nulla.  Le  condizioni  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, pertanto  non  sono  soddisfatte  le  condizioni 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: 

x n +1 = x n − 3

p( x n )   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 seconda  radice,  si  osserva  la  presenza  di  una  distanza tangibile tra la radice ed il nullo della  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 iterare  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  -4 calcolo del rapporto delle funzioni  p (x )/p ’(x ) (dell’ordine di 10  ). Infatti la differenza tra  x i -p (x i )/p ’(x i ) non genera problemi dovuti all’annullamento in quanto  x i  è svariati or5 dini di grandezza superiore del rapporto. Mentre p ’(x i ) si mantiene elevato ordine di 10 ,  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 righe analoghe alla quinta. Notevole il guadagno di 9 ordini di grandezza sulla y  in una sola 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 metodo 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 ovviamente privo di senso matematico. Ciò è dovuto all’errore di rappresentazione dei numeri 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 rappresentare è 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 cifre.  ξ3=61.085147883085845 

Roberto Patrizi, 09114657

pag 4 di 8 

Calcolo numerico

3.

Condizionamento degli zeri di un polinomio

Coefficienti di condizionamento

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

Cp =

ε ry ε rx

=

an   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 traslato 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 orizzontale  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 variazioni piuttosto ampie dello stesso non si hanno consistenti scostamenti della radice. È invece critica la determinazione della stessa, per la quale, infatti, su ha un indice di condi18 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 coefficienti 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 orizzontale) 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

4.

Condizionamento degli zeri di un polinomio

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

Related Documents


More Documents from "enzo de simone"

Www.fotosenpopart.com
May 2020 22
June 2020 23
Paleografia Parte 1
December 2019 44
Up_partitur.pdf
November 2019 33