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
kjer so $T_n$ polinomi Čebiševa. Polinomi Čebiševa so definirani z relacijo
in zadoščajo dvočlenski rekurzivni enačbi
Namesto cele vrste, lahko obdržimo le prvih nekaj členov in funkcijo aproksimiramo s funkcijo oblike
Iščemo torej koeficiente funkcije $f(x)$ v razvoju po $T_n$.
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
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.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
NumMat.chebkoef
— Methodfp = chebkoef(fun,n)
izračuna koeficiente v razvoju funkcije fun na intervalu [-1,1] po Čebiševih polinomih stopnje največ n.