({{Číslo projektu, CZ.1.07/1.1.36/02.0066}, {Autor, Ladislav Kašpárek}, {Předmět, Programovací metody}, {Téma, Zobecnění interpolací}, {Metodický pokyn, výkladový text s ukázkami, experimentální dokument pro žáky}})

Zobecnění interpolací jinými funkcemi

Interpolačních metod je k dispozici celá řada, každá je vhodná pro jiný typ úloh, celá problematika je rozsáhlá a přesahuje naše možnosti. Následující text je rozšířením daného učiva a opírá se o předchozí znalosti řešení soustav rovnic.

Pokračujme ve výkladu o interpolacích pomocí jiných funkcí než polynomu, ale myšlenku poněkud rozšíříme. Dále budeme interpolovat naše 4 známé body:

body={{-1,3},{1,-2},{2,2},{5,-1}}

body//ListPlot

Protože již známe mechanismus interpolace polynomem (vede na soustavu lineárních rovnic), snadno zjistíme že Mathamatica má funkci, která totéž a se stejným výsledkem dělá také, dále se o její služby také budeme zajímat. Je to funkce: InterpolatingPolynomial.

fint[x_]=InterpolatingPolynomial[body,x]//Expand

Plot[fint[x],{x,-1,5}]

Všechno dohromady (body a graf).

Show[Plot[fint[x],{x,-1,5}],ListPlot[body,PlotStyle->Directive[Red,PointSize[Large]]]]

Interpolace jinými funkcemi než polynom

Doposud pro výklad byl použit ruční, mechanický postup výpočtu koeficientů polynomu, aby čtenář pochopil o co v interpolaci polynomem jde a jak proces vypadá.
Celý proces lze zautomatizovat napsáním podprogramu v jazyce systému Mathematica, ale to přesahuje rámec výkladu. Mathematica má několik vestavěných funkcí pro interpolaci, např: Intepolation, která je relativně obecná, neiterpoluje nutně pomocí polynomů (spline, hermite - různé metody) a vrací objekt funkce (její vnitřní postup a výsledek je skrytý). Pro vyšší počet bodů vrací odlišné křivky než newtonova metoda.

fint=Interpolation[body,Method->"Hermite"];Plot[fint[x],{x,-1,5}]

Show[Table[(fint=Interpolation[body,Method->m];Plot[fint[x],{x,-1,5}]),{m,{"Hermite","Spline"}}]]

InterpolatingPolynomial[body,x]//Expand

Úkol :

Porovnejte graficky výspupy obou funkcí a obou metod interpolace (pro malý počet bodů budou zřejmě totožné). Najděte jinou skupinu bodů, kde budou výstupy různé, experimentujte.

Interpolace goniometrickými funkcemi

Předpokládejme, že funkce kterou hledáme je periodická (z povahy úlohy, kterou řešíme) proto předpis námi hledané funkce může vypadat následovně:

({{({{f(x)= c Sin(a x+b)+d+c Cos(a x+b)}})}})

Pro čtyři interpolované body bude tato funkce stačit, pro více bodů bude ntné ji zobecnit, např. pomocí mocnin, apod.

Sestavíme příslušnou soustavu rovnic a pokusíme se najít řešení (algebraické řešení z povahy rovnic nemá smysl hledat, proto numerická metoda – funkce FindRoot). Počáteční hodnoty byly zvoleny náhodně.

FindRoot[{3==c Sin[-1a+b]+d+c Cos[-1a+b],-2==c Sin[1a+b]+d+c Cos[1a+b],2==c Sin[2a+b]+d+c Cos[2a+b],-1==c Sin[5a+b]+d+c Cos[5a+b]},{{a,1},{b,0.5},{c,-1.1},{d,0}}]

fsincos[x_]=c Sin[x a+b]+d+c Cos[x a+b]/.%

Výsledná funkce byla sestavena pomocí dosazovacího operátoru /. Následuje obrázek nalezené funkce. Intuitivně je zřejmé, že se jedná o periodickou funkci (přesvěčte se!)

Show[Plot[fsincos[x],{x,-1,5}],ListPlot[body,PlotStyle->Directive[Red,PointSize[Large]]]]

Show[Plot[fsincos[x],{x,-50,50}],ListPlot[body,PlotStyle->Directive[Red,PointSize[Large]]]]

Ověření, že zadané body leží na nalezené funkci (ostatní body doplňte sami):

fsincos[2]

Při experimentování s počátečnímy podmínkami rovnice lze zjistit, že soustava není určena jednosznačně (nemá jediné řešení). Zde je příklad, který mění koeficienty a a b v nějakém rozumném rozmezí. Pro většinu párů čísel a a b je nalezeno řešení a nalezená funkce procházá danými body. Není - li řešení nalezeno, funkce body mine! Prostudujte si následující obrázek a interpretujte jej.

Show[ListPlot[body,PlotStyle->Directive[Red,PointSize[Large]]],Flatten[Table[(res=FindRoot[{3==c Sin[-1a+b]+d+c Cos[-1a+b],-2==c Sin[1a+b]+d+c Cos[1a+b],2==c Sin[2a+b]+d+c Cos[2a+b],-1==c Sin[5a+b]+d+c Cos[5a+b]},{{a,P},{b,Q},{c,-1.1},{d,0}},MaxIterations->500];fsincos[x_]=c Sin[x a+b]+d+c Cos[x a+b]/.res;Plot[fsincos[x],{x,-1,5}]),{P,-2,-1,1/2},{Q,-1,2,1/3}],1]]

Shrnutí

Zde je vidět, že existují i jiné interpolační metody než jen polynom. Je jich k dispozici mnoho druhů (Newtonova, Lagrageova, Hermitova atd). Jedná se o zajímavou kapitolu numerické matematiky.

Úlohy

1/ Zvol si jiné 4 body v rovině a pokus se je interpolovat pomocí funkcí sin a cos. 
1a/ zvol si body na přímce
1b/ zvol si body na hyperbole
1c/ zvol si dva a dva body “daleko” od sebe.
2/ Experimentuj s počátečními podmínkami.

Zdroje

http://reference.wolfram.com/mathematica/ref/FindRoot.html