Calcolo numerico/Altre scritture dei polinomi interpolanti

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:Calcolo numerico

Scrittura dei polinomi interpolanti in funzione dei polinomi nodali

Template:Definizione

Cerchiamo una scrittura equivalente dei polinomi interpolanti:

∑i=0nyili=

=∑i=0nyi∏i≠j,j=0n(x−xj)∏i≠j,j=0n(xi−xj)

e tenendo conto dell'espressione di wn+1(x):

=∑i=0nyiwn+1(x)x−xi∗1∏j≠i,j=1n(xi−xj)

Osserviamo che:

wn+1(x)′=(∏j=0n(x−xj))′=∑i=0n∏j≠i,j=0n(x−xj)

e valutando in xk:

wn+1(xk)′=∏j≠k,j=0n(xk−xj)

quindi, tornando all'espressione del polinomio interpolante:

∑iyili(x)=

=Wn+1(x)∗∑i=0nyi1x−xi∗1wn′+1(xi)

Considerazioni sui costi computazionali

Poniamo

pn(x)=wn+1(x)∗∑i=0nzix−xi

dove zi=yi∏i≠j,j=0n(xi−xj).

Ci si chiede qual è il costo computazionale della valutazione di pn(x) in un x assegnato. Sono necessarie:

  1. n sottrazioni per calcolare x−xi (al denominatore);
  2. n2/2 sottrazioni per calcolare gli xi−xj nella produttoria, e questo equivale a calcolare le entrate della matrice L=(lij) con 0 sulla diagonale principale, tale che lij=−lji;
  3. n2 operazioni per calcolare gli zi, in particolare per calcolare ogni zi, una volta che gli xi−xj sono noti, sono necessari solo n prodotti. Siccome gli zi sono n abbiamo in totale n2 operazioni;
  4. n addizioni (defivano dalla sommatoria) e n moltiplicazioni per calcolare zix−xi, divisione tra due numeri già noti;
  5. n operazioni per la valutazione del polinomio nodale di cui già conosco i fattori.

tot=n2/2+n2

più una quantità trascurabile dell'ordine di n operazioni.

Ci si chiede quanto costa calcolare il polinomio interpolante in un nuovo punto x¯, dopo aver effettuato il calcolo descritto sopra. Le operazioni riferite ai punti 2 e 3 (calcolo completo degli zi) sono indipendenti dal punto in cui si valuta il polinomio, e non vanno ripetute a ogni passaggio. Si hanno quindi solo 2n operazioni additive e 2n moltiplicative. Rispetto alla risoluzione del sistema delle n+1 equazioni nelle n+1 incognite (come nella dimostrazione 1), dove la fattorizzazione LU richiede n3 operazioni, si risparmiano operazioni.

Supponiamo di aggiungere un nuovo punto (xn+1,yn+1) ai dati: si vuole calcolare un nuovo polinomio interpolante di grado n+1.

Gli zi sono già stati calcolati, si ha che il nuovo polinomio è:

pn+1(x)=wn+2(x)∗[∑i=0n(zi(n+1)x−xi)+zn+1(n+1)x−xn+1]

zi(n+1)=yi∏j=0n(xi−xj)∗1xi−xn+1, quindi

zi(n+1)=zi(n)xi−xn+1

Inoltre

wn+2(x)=wn+1(x)∗(x−xn+1)

e si ricava che

pn+1(x)=wn+1(x)∗(x−xn+1)∗[∑i=0n(zi(n)(x−xi)(xi−xn+1))+zn+1(n+1)x−xn+1]

quindi le operazioni totali in più, avendo già calcolato pn(x), sono una sottrazione per x−xn+1, n sottrazioni per xi−xn+1, n moltiplicazioni per zi(n+1), n addizioni per la sommatoria, n moltiplicazioni per zin/(x−xi), 2 operazioni per l'ultimo termine.

In totale abbiamo 2n addizioni e 2n moltiplicazioni.

Forma di Newton

Il polinomio interpolante è unico ma ci sono diverse riscritture. La forma di Newton permette di calcolare i polinomi interpolanti aumentando le operazioni additive e diminuendo quelle moltiplicative.

Il polinomio interpolante

pn(x)=∑k=0nak∗ϕk(x)

viene riscritto in funzione della base dei polinomi nodali, ponendo

ϕk=∏j=1k(x−xj)

Gli ak vengono posti uguali alla differenza divisa di ordine k.

Template:Definizione

Vogliamo dimostrare che

pn(x)=f[x0]+f[x0,x1]∗(x−x0)+f[x0,x1,x2]∗(x−x0)∗(x−x1)+…+f[x0,x1,…,xn)∗(x−x0)∗(x−x1)∗(x−xn−1)

è un polinomio interpolante, dimostriamo prima il lemma di Neville.

Lemma 5.1 (formula di Neville)

Dato I={i1,…,ik} un insieme di indici, e definendo p(i0,…,ik) il polinomio valutato nei nodi (xij,yij) per j=0,…,n, si ha che:

pk(x)=(x−xi0)∗pk−1(x)(i1,…,ik)−(x−xik)∗Pk−1(x)(i0,…,ik−1)xik−xi0

è un polinomio interpolante.

Dim. Il lemma dà una rappresentazione ricorsiva del polinomio interpolante.

Per calcolare l'espressione di p(i0) si tiene conto che il termine (x−xi0)∗pk−1(i1,…,ik) è nullo, quindi rimane

p(i0)=−(x−xik)∗Pk−1(xi0)(i0,…,ik−1)xik−xi0=pk−1(xi0)(i0,…,ik−1)=yi0

Valutando invece p(ik) si annulla il secondo termine, e rimane:

p(ik)=(xik−xi0)∗pk−1(i1,…,ik)(xik)xik−xi0=

pk−1(i1,…,ik)(xik)=yik

per un generico j=1,2,…,k−1, si ha:

p(ij)=p(xij)=(xij−xi0)∗pk−1(i1,…,ik)(xij)−(xij−xik)∗pk−1(i0,…,ik−1)(xij)xik−xi0

=(xij−xi0)∗yij−(xij−xik)∗yijxik−xi0

=yij

Abbiamo quindi verificato tutte le condizioni di interpolazione.

Teorema 5.3 (dimostrazione della forma di Newton)

pn(x)=f[x0]+f[x0,x1]∗(x−x0)+f[x0,x1,x2]∗(x−x0)∗(x−x1)+…+f[x0,x1,…,xn]∗(x−x0)∗…∗(x−xn−1)

è un polinomio interpolante.

Dimostrazione

Dimostriamo l'asserto per induzione.

  1. Se n=0, otteniamo che p0(x)=f[x0]=y0, per definizione.
  2. Per ipotesi induttiva, assumo che sia vero che il polinomio di Newton è il polinomio interpolante per il grado n−1 rispetto alla base nodale, e lo dimostro per n.
  3. Supponiamo che pn(x) sia il polinomio interpolante di grado n rispetto alla base delle ϕk(x) date dai polinomi nodali di indice k, allora possiamo scriverlo come:

pn(x)=pn−1(x)+an∗(x−x0)(x−x1)∗…∗(x−xn)

vogliamo dimostrare che an=f[x0,…,xn]. Consideriamo la formula di interpolazione di Neville. Allora

pn(x)=(x−x0)∗pn−1(1,…,n)−(x−xn)∗pn−1(x)(0,…,n−1)xn−x0

Dall'ipotesi di induzione segue che: pn−1(1,…,n) è il polinomio interpolante di grado n−1 sui nodi x1,…,xn, e per ipotesi di induzione il coefficiente K1 del termine di grado massimo è f[x1,…,xn]. pn−1(0,…,n−1) è il polinomio interpolante rispetto ai nodi (x0,…,xn−1) e il coefficiente K2 del suo termine di grado massimo è f[x0,…,xn−1]. Quindi, nel polinomio pn, in base alla formula di Neville e a quanto osservato, il coefficiente del termine di grado massimo è:

K=1∗K1−1∗K2xk−x0

=1∗f[x1,…,xn]−1∗f[x0,…,xn−1]xn−x0=f[x0,…,xn]per definizione

Osservazione 5.1

La differenza divisa non dipende dall'ordine dei punti. Infatti, confrontando la scrittura del polinomio interpolante in forma di Newton e di Lagrange, per il coefficiente an si ha:

an=f[x0,…,xn]=∑i=0nf(xi)pn′+1(xi)

siccome nella sommatoria non c'è dipendenza dall'ordine dei punti, anche la differenza divisa non ne dipende in aritmetica esatta.

Algoritmo alla Neville

Consideriamo i due vettori colonna x=(x0,x1,…,xn) e y=(f0,f1,…,fn) dove fi=f(xi). L'algoritmo alla Neville porta alla costruzione di una matrice triangolare inferiore A, dove le entrate sono determinate nel seguente modo:

for(i=1:n−1)

for(j=n:i)

Y(j)=(y(j)−y(j−1))/(x(j)−x(j−i))differenza divisa

end

end

Ad esempio, presi 6 punti (x0,x1,x2,x3,x4,x5 la matrice che risulta dall'algoritmo di Neville è:

x0f(x0)x1f(x1)f[x1,x0]0000x2f(x2)f[x2,x1]f[x2,x1,x0]000x3f(x3)f[x3,x2]f[x3,x2,x1]f[x3,…,x0]00x4f(x4)f[x4,x3]f[x4,x3,x2]f[x4,…,x1]f[x4,…,x0]0x5f(x5)f[x5,x4]f[x5,x4,x3]f[x5,…,x2]f[x5,…,x1]f[x5,x0]

Il ciclo viene fatto a ritroso perché, calcolando la triangolare inferiore con la colonna partendo dal basso, si possono sovrascrivere direttamente i vettori. In questo algoritmo, l'entrata Aij diventa la differenza divisa tra gli elementi Ai,j−1 e Ai−1,j−1, per ogni j.

Numero di operazioni effettuate: per ogni elemento faccio una divisione e due sottrazioni, e la triangolare inferiore ha n2/2 elementi, quindi vengono effettuate 2∗n2/2=n2 operazioni additive e n2/2 operazioni moltiplicative.

Algoritmo di Hornern

Per la valutazione del polinomio di Newton in un punto x si usa l'algoritmo di Horner: ad esempio, nel caso di un polinomio di grado 3, il polinomio di Newton si rappresenta come:

pn=a0+a1(x−x0)+a2(x−x0)(x−x1)+a3(x−x0)(x−x1)(x−x2)

Raccogliamo x−x0 tra gli ultimi tre addendi:

pn=a0+(x−x0)∗[a1+a2(x−x1)+a3(x−x1)(x−x2)]

Poi raccogliamo x−x1 tra gli ultimi due addendi:

pn=a0+(x−x0)∗[a1+(x−x1)∗[a2+(x−x2)∗a3]]

e per eseguire le operazioni partiamo dall'ultima parentesi. Tuttavia le operazioni necessarie per la valutazione del polinomio in un punto sono di più rispetto a quelle del polinomio di Lagrange.

Template:Avanzamento