Calcolo numerico/Interpolazione polinomiale a tratti (spline)

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:Calcolo numerico

Definizione di spline

Template:Definizione

s è definita come

s(x)={s0(x)⟺x∈[x0,x1]s1(x)⟺x∈[x1,x2]sn−1(x)⟺x∈[xn−1,xn]

dove le si sono polinomi di grado k per i=0,…,n−1, localmente C∞, e tali che globalmente sx∈Ck−1.

Nel caso k=1, consideriamo l'intervallo [a,b] e una partizione, in ciascun sottointervallo si ha un polinomio di grado 1, e le si sono localmente polinomi di grado 1 e s è di classe C0 sull'intervallo; si ha l'interpolazione lineare a tratti.

Nel caso k=3 si ha l'interpolazione spline cubica, si considera una partizione di [a,b], in ciascun sottointervallo definisco un polinomio di grado 3. s è di classe C2 sull'intervallo.

Sistema per la determinazione della spline

si(x) sono polinomi di grado 3, con i=0,…,n−1. Abbiamo 4n coefficienti da determinare.

Dobbiamo imporre le seguenti condizioni:

  • n+1 condizioni di interpolazione, perché la spline deve valere yi in xi;
  • n−1 condizioni di raccordo con continuità, cioè si−1(xi)=si(xi) per i=1,…n−1;
  • 2n−2 condizioni sulle derivate, cioè si′−1(xi)=si′(xi) e si″−1(xi)=si″(xi) perché s dev'essere di classe C2.

Quindi mancano due condizioni per avere un sistema determinato di 4n equazioni in 4n incognite.

In base alle due condizioni aggiuntive che si impongono si hanno diversi tipi di spline:

Spline naturale
imponiamo che s″(a)=s″(b)=0.
Spline completa e vincolata
s0′(a)=f′(a) e sn′−1(b)=f′(b).
Spline periodica
supponiamo T=b−a, allora s0′(a)=sn′−1(b) e analogamente s0″(a)=sn″−1(b).

Abbiamo un sistema di 4n equazioni in 4n incognite, che però ha grandi dimensioni ed è spesso mal condizionato.

Metodo dei momenti

Definizione della funzione: sia Mi la derivata seconda di s in xi, per i=1,…,n (incognite da calcolare), dove Mi sono detti momenti. Siccome si ha grado 3, la sua derivata è un polinomio di grado 1, inoltre, imponendo le condizioni:

{si″(xi)=Misi″+1(xi+1)=Mi+1

si ottiene

si″(x)=Mi+1(x−xi)/hi−Mi(x−xi+1)/hi

dove hi=xi+1−xi.

Integrando due volte otteniamo:

si′(x)=Mi+1(x−xi)22hi−Mi(x−xi+1)22Hi+αi

Integrando nuovamente

si(x)=Mi+1(x−xi)36Hi−Mi(x−xi+1)36Hi+α∗(x−xi)+βiequazione ∗

Imposizione delle condizioni di interpolazione: per determinare i nuovi parametri αi,βi, imponiamo le condizioni di interpolazione e otteniamo:

si(xi)=−Mi(xi−xi−1)36Hi+βi=f(xi)

Inoltre

si(xi+1)=Mi+1∗(xi+1−xi)3/(6Hi)+αi(xi+1−xi)+βi=f(xi+1)

dove l'ultimo passaggio vale per la condizione di raccordo con continuità si(xi+1=si+1(xi+1). Quindi, per i=0,…,n−1 otteniamo:

{MiHi26+βi=f(xi)Mi+1Hi26+αiHi+βi=f(xi+1)

Risolviamo il sistema:

{MiHi26−f(xi)=−βiMi+1Hi26+αiHi−f(xi+1)=−βi

ed eguagliando le due equazioni otteniamo:

MiHi26−f(xi)=Mi+1Hi26+αiHi−f(xi+1)

f(xi+1)−f(xi)+(Mi−Mi+1)Hi26=αiHi

αi=f(xi+1)−f(xi)Hi+(Mi−Mi+1)Hi6

invece ricaviamo βi dalla prima equazione:

βi=−MiHi26+f(xi)

e come soluzione del sistema otteniamo

{βi=f(xi)−MiHi2/6αi=f(xi+1)−f(xi)Hi−Hi/6(Mi+1−Mi)

Imposizione delle condizioni di raccordo con continuità delle derivate:

si′−1(x)=Mi(x−xi−1)22hi−1−Mi−1(x−xi)22Hi−1+αi

=Mi(x−xi−1)22hi−1−Mi−1(x−xi)22Hi−1+f(xi)−f(xi−1)Hi−1−Hi−1/6(Mi−Mi−1)

Quindi, valutando in xi si ottiene:

si′−1(xi)=Mihi−12+f(xi)−f(xi−1)Hi−1−Hi−1/6(Mi−Mi−1)

analogamente

si′(xi)=Mi+1hi2+f(xi+1)−f(xi)Hi−Hi/6(Mi+1−Mi)

ed eguagliando le due espressioni:

Mi−1∗Hi−1/6+Mi(Hi−1+Hi)/3+Mi+1Hi/6=f(xi+1)−f(xi)Hi−f(xi)−f(xi−1)Hi−1

e inserendo l'espressione della differenza divisa:

Mi−1∗Hi−1/6+Mi(Hi−1+Hi)/3+Mi+1Hi/6=f[xi+1,xi,xi−1]∗(Hi−Hi−1)

e dividendo ambo i membri per Hi−Hi−1 otteniamo:

Mi−1∗Hi−16(hi−hi−1)+Mi/3+Mi+1Hi6(hi−hi−1)=f[xi+1,xi,xi−1]

e moltiplicando per 6

Mi−1∗Hi−1Hi−Hi−1+2Mi+Mi+1HiHi−Hi−1=6f[xi+1,xi,xi−1]

Chiamiamo

γi=Hi−1Hi−Hi−1

e simmetricamente

δi=HiHi−Hi−1

e sono due quantità positive, che hanno la proprietà

γi+δi=1,∀i

per qualsiasi tipo di nodi.

Abbiamo n−1 equazioni in n+1 incognite, date da:

Mi−1∗γi+2Mi+Mi+1δi=6f[xi+1,xi,xi−1]

Imposizione delle condizioni iniziali: la situazione dipende dalle condizioni imposte.

Spline naturale: imponiamo che M0=s″(x0)=0, e Mn=s″(xn)=0. Allora otteniamo un sistema A𝒙=𝒃 dove A è una matrice tridiagonale della forma:

A=2δ1000γ22δ2000γ32…000…2δi−1000γn−12

𝒙=M1M2…Mn−2Mn−1

è il vettore delle incognite, mentre il termine noto è

𝒙=f[x0,x1,x2]f[x1,x2,x3]f[x2,x3,x4]…f[xn−2,xn−1,xn]

La matrice è diagonalmente dominante sulle righe.

Se i nodi sono equispaziati, cioè se Hi=H∀i, la matrice è simmetrica. Per risolvere il sistema si può usare l'eliminazione gaussiana senza pivot, oppure metodi diretti che convergono per la dominanza diagonale stretta.

Spline completa: imponiamo le condizioni

s′(x0)=f′(a),s′(xn)=f′(b)

Tenendo conto che

s′(x)=Mi(x−xi−1)22hi−1−Mi−1(x−xi)22Hi−1+f(xi)−f(xi−1)Hi−1−Hi−1/6(Mi−Mi−1)

si ha

s′(x0)=−M0H0/2+f[x0,x1]+H0/6(M0−M1)

f′(x0)=H0f[x0,x0]=s′(x0)=−M0H0/3−M1H0/6+H0f[x0,x1]

che si riscrive come

H0/3M0−H0/6M1=(f[x0,x1]−f[x0,x0])∗H0=f[x0,x0,x1]∗H0

dividendo per H0 e moltiplicando per 6:

2M0+M1=6f[x0,x0,x1]

Analogamente imponendo f′(xn)=s′(xn) si ottene:

Mn−1+2Mn=6f[xn−1,xn,xn]

In questo caso abbiamo un sistema di n+1 equazioni della forma A𝒙=𝒃 con:

A=21000γ12δ1000γ22δ2000γn−12δn−100012

Il vettore delle incognite è

M0M1…Mn−1Mn

Il termine noto è:

6∗f[x0,x0,x1]f[x0,x1,x2]…f[xn−2,xn−1,xn]f[xn−1xn,xn]

Abbiamo una matrice diagonalmente dominante in senso stretto, non è simmetrica neanche nel caso dei nodi equispaziati.

Spline periodica: s′(x0)=s′(xn) e analogamente s″(x0)=s″(xn).

La seconda si traduce nella condizione M0=Mn. Prendendo l'espressione di si′, si impone l'uguaglianza e si ha f(xn)=f(x0). Introduciamo un nodo fittizio xn+1 esterno all'intervallo, imponiamo che Hn=H0. Imponendo tutte le condizioni si ottiene

δnM1+γnMn−1+2Mn=6f[xn−1,xn,xn+1]

γ1Mn+2M1+δ1M2=6f[x0,x1,x2]

Quindi il sistema A𝒙=𝒃 è tale che:

A=2δ1000γ1γ22δ20000γ32δ300000γn−12δn−1γn000δn2

Il vettore delle incognite è

𝒙=M1M2…Mn−1Mn

mentre il vettore del termine noto è

f[x0,x1,x2]f[x1,x2,x3]…f[xn−2,xn−1,xn]f[xn−1,xn,xn+1]

Questa matrice n×n non è tridiagonale a causa di δn in posizione An1 e γ1 in posizione A1n. La matrice in ogni caso è diagonalmente dominante in senso stretto. Se i nodi sono equispaziati si ha la simmetria.

Conclusione

Nei tre casi, la matrice è diagonalmente dominante in senso stretto, e per il primo teorema di Gersch-Gorin è non singolare.

Teorema 5.7

Se i nodi A=x0<x1<…<xn−1<xn=b sono distinti, allora esiste ed è unica la spline cubica che interpola f funzione assegnata.

Teorema 5.8

Supponiamo che f sia C4([a,b]), consideriamo un partizionamento di [a,b] in sottointervalli Hi, poniamo H=maxiHi e chiamiamo β=HminiHi, e sia s la spline cubica interpolante.

|fr−sr|∞≤cr4−r|f(4)|

Template:Avanzamento