Matematická metoda
V matematický pole numerická analýza, spline interpolace je forma interpolace kde interpolant je speciální typ po částech polynomiální volal a spline. Interpolace spline je často upřednostňována polynomiální interpolace protože chyba interpolace lze zmenšit i při použití polynomů nízkého stupně pro spline.[1] Spline interpolace se vyhne problému Rungeův fenomén, ve kterém může dojít k oscilaci mezi body při interpolaci pomocí polynomů vysokého stupně.
Úvod
Původně, spline byl termín pro elastický vládci které byly ohnuty, aby prošly několika předdefinovanými body („uzly“). Ty byly použity k výrobě technické výkresy pro stavba lodí a konstrukce ručně, jak je znázorněno na obrázku 1.
Obrázek 1: Interpolace s kubickými spline mezi osmi body. Ručně vyráběné technické výkresy pro stavbu lodí byly vytvořeny pomocí flexibilních pravítek, které byly ohnuty tak, aby sledovaly předem definované body
Přístup k matematickému modelování tvaru takových elastických pravítek fixovaný pomocí n + 1 uzly
je interpolovat mezi všemi páry uzlů
a
s polynomy
.
The zakřivení křivky
darováno:

Protože spline získá tvar, který minimalizuje ohyb (pod omezením průchodu všemi uzly), oba
a
bude spojitá všude a na uzlech. K dosažení tohoto cíle je třeba mít toto

Toho lze dosáhnout pouze při použití polynomů stupně 3 nebo vyšších. Klasickým přístupem je použití polynomů stupně 3 - případ kubické splajny.
Algoritmus pro nalezení interpolační kubické spline
Polynom třetího řádu
pro který




lze psát symetricky
 | | (1) |
kde
 | | (2) |
 | | (3) |
 | | (4) |
Tak jako

jeden dostane, že:
 | | (5) |
 | | (6) |
Nastavení t = 0 a t = 1 respektive v rovnicích (5) a (6) jeden dostane z (2), že skutečně první deriváty q '(X1) = k1 a q '(X2) = k2 a také druhé deriváty
 | | (7) |
 | | (8) |
Pokud teď (Xi, yi), i = 0, 1, ..., n jsou n + 1 body a
 | | (9) |
kde i = 1, 2, ..., n a
jsou n interpolace polynomů třetího stupně y v intervalu Xi−1 ≤ X ≤ Xi pro i = 1, ..., n takhle q 'i (Xi) = q 'i+1(Xi) pro i = 1, ..., n-1 pak n polynomy společně definují diferencovatelnou funkci v intervalu X0 ≤ X ≤ Xn a
 | | (10) |
 | | (11) |
pro i = 1, ..., n kde
 | | (12) |
 | | (13) |
 | | (14) |
Pokud sekvence k0, k1, ..., kn je takový, že navíc q ′ ′i(Xi) = q ′ ′i+1(Xi) platí pro i = 1, ..., n-1, pak bude mít výsledná funkce dokonce spojitou druhou derivaci.
Z (7), (8), (10) a (11) vyplývá, že tomu tak je tehdy a jen tehdy
 | | (15) |
pro i = 1, ..., n-1. Vztahy (15) jsou n − 1 lineární rovnice pro n + 1 hodnoty k0, k1, ..., kn.
Protože jsou pružná pravítka modelem interpolace splajnu, máme tu, že nalevo od „uzlu“ nejvíce vlevo a napravo od „uzlu“ nejvíce vpravo se může pravítko volně pohybovat, a proto bude mít podobu přímka s q ′ ′ = 0. Tak jako q ′ ′ by měla být spojitou funkcí X jeden dostane to za "Natural Splines" jeden navíc k n − 1 lineární rovnice (15) by to mělo mít


tj. to
 | | (16) |
 | | (17) |
Nakonec, (15) dohromady s (16) a (17) představovat n + 1 lineární rovnice, které jednoznačně definují n + 1 parametry k0, k1, ..., kn.
Existují další koncové podmínky: „Upnutý spline“, který určuje sklon na koncích spline, a populární „spline bez uzlu“, která vyžaduje, aby třetí derivace byla také spojitá na X1 a XN−1 points.For the "not-a-knot" spline, the additional equations will read:


kde
.
Příklad
Obrázek 2: Interpolace s kubickými „přirozenými“ spline mezi třemi body.
V případě tří bodů hodnoty pro
jsou nalezeny řešením tridiagonální lineární rovnice

s










Za tři body
,
jeden to dostane

a od (10) a (11) že




Na obrázku 2 je funkce splajnu skládající se ze dvou kubických polynomů
a
dána (9) je zobrazen.
Viz také
Počítačový kód
TinySpline: Open source C-knihovna pro splajny, která implementuje kubickou spline interpolaci
SciPy Spline Interpolation: balíček Pythonu, který implementuje interpolaci
Kubická interpolace: Open source C # -knihovna pro kubickou spline interpolaci
Reference
- ^ Hall, Charles A .; Meyer, Weston W. (1976). Msgstr "Optimální hranice chyb pro kubickou spline interpolaci". Žurnál teorie přiblížení. 16 (2): 105–122. doi:10.1016 / 0021-9045 (76) 90040-X.
externí odkazy