GNU Octave/Aproksymacja wielomianowa
Z Wikibooks, biblioteki wolnych podręczników.
[edytuj] Aproksymacja wielomianowa w przestrzeni Hilberta
Rozpatrzmy przestrzeń Hilberta funkcji całkowalnych z drugą potęgą L2(0,1), z iloczynem skalarnym
. Dana jest
. Znaleźć wielomian
stopnia N > 1 najlepiej przybliżający f, czyli taki, który minimalizuje normę
.
W tym celu należy rozwiązać układ równań:
gdzie
jest szukanym wektorem współczyników
macierz G jest macierzą Grama, a
jest wektorem:
W naszym przypadku macierz Grama G sprowadza się do macierzy Hilberta, gdyż
Algorytm ten można wykonać w środowisku Octave następująco. Zdefiniujmy funkcję charakterystyczną
:
function [y]=fcharakt(x) y=(x<=0.5); endfunction;
Do obliczenia wektora
potrzebujemy funkcji
:
function [y]=f_razy_xn(x) global n; global fun; z=feval(fun,x); y=(z).*(x^n); endfunction;
Dla zadanego stopnia wielomianu N tworzymy macierz Grama:
N=15; G=hilb(N+1);
Tworzymy wektor
:
f=zeros(1,N+1);
global n;
global fun;
fun="fcharakt";
for (n=0:N)
f(n+1)=quad("f_razy_xn", 0, 1);
endfor;
I wreszcie obliczamy współczynniki (w odwrotnej kolejności)
:
alfa=G\f'
Uwaga. Ta metoda nie jest dobra dla dużych N, gdyż macierz Hilberta jest źle uwarunkowana.


