Aproksimacija s polinomi Čebiševa
Weierstrassov izrek pravi, da lahko poljubno zvezno funkcijo na končnem intervalu enakomerno na vsem intervalu aproksimiramo s polinomi. Polinom dane stopnje, ki neko funkcijo najbolje aproksimira je težko poiskati. Z razvojem funkcije po ortogonalnih polinomih Čebiševa, pa se optimalni aproksimaciji zelo približamo. Naj bo $f:[-1,1]\to \mathbb{R}$ zvezna funkcija. Potem lahko $f$ zapišemo z neskončno vrsto
\[f(t)=\sum_{n=0}^\infty a_nT_n(t),\]
kjer so $T_n$ polinomi Čebiševa. Polinomi Čebiševa so definirani z relacijo
\[T_n(\cos(\phi))=\cos(n\phi)\]
in zadoščajo dvočlenski rekurzivni enačbi
\[T_{n+1}(x)=2xT_n(x)-T_{n-1}(x).\]
Namesto cele vrste, lahko obdržimo le prvih nekaj členov in funkcijo aproksimiramo s funkcijo oblike
\[f(x)\sim \sum_{n=0}^N a_nT_n(x).\]
Iščemo torej koeficiente funkcije $f(x)$ v razvoju po $T_n$.
\[\begin{equation} a_k = \frac{2}{\pi}\int_{-1}^1 \frac{f(x) T_k(x)}{\sqrt{1-x^2}}dx, \end{equation}\]
kjer za $k=0$ faktor $\frac{2}{\pi}$ zamenjamo z $\frac{1}{\pi}$. Koeficiente lahko približno izračunamo z gaussovimi kvadraturnimi formulami.
Na vajah bomo koeficiente $a_n$ računali približno z gaussovimi kvadraturnimi formulami. V praksi je mogoče koeficiente $a_k$ izračunati bolj natančno z diskretno Fourierovo kosinusno transformacijo funkcijskih vrednosti v Čebiševih interpolacijskih točkah.
Primer
Uporabimo Čebiševo vrsto za implementacijo funkcije $\arctan(x)$. Definicijsko območje so vsa realna števila, zato si pomagamo z enakostjo
\[\arctan(x)+\arctan\left(\frac{1}{x}\right)= \begin{cases}\frac{\pi}{2}; x>0\cr -\frac{\pi}{2}; x < 0 \end{cases}\]
tako da lahko funkcijo računamo le na intervalu $[-1,1]$.
using NumMat, Plots
catan = chebfun(atan, -1, 1)
println("Stopnja aproksimacijskega polinoma: ", stopnja(catan))
plot(x->catan(x)-atan(x), -1, 1, title="Napaka aproksimacije funkcije arkus tangens.")
Povezave
- Knjižnica `chebfun`
- THE AUTOMATIC SOLUTION OF PARTIAL DIFFERENTIAL EQUATIONS USING A GLOBAL SPECTRAL METHOD
- Trefetnova knjiga
Koda
NumMat.chebfun
— Methodchebfun(fun, a, b, n)
vrne razvoj funkcije po Čebiševih polinomih stopnje največ n na intervalu [a, b]
NumMat.chebfun
— Methodchebfun(fun, a, b)
vrne razvoj funkcije v Čebiševo vrsto.
NumMat.chebkoef
— Methodfp = chebkoef(fun,n)
izračuna koeficiente v razvoju funkcije fun na intervalu [-1,1] po Čebiševih polinomih stopnje največ n.
NumMat.chebval
— Methody = chebval(p,x)
izračuna vrednost polinoma, ki je podan v Čebiševi bazi p(x) = p(1)T0(x) + p(2)T1(x) + ... + p(n+1)Tn(x)
julia> p = [2 0 -1]; t = LinRange(-1, 1, 100);
julia> @assert chebval([0,0,1],t) ≈ 2t.^2 - 1
NumMat.ChebFun
— TypePodatkovni tip za vrsto Čebiševih polinomov