GNU Octave/Aproksymacja wielomianowa
Aproksymacja wielomianowa w przestrzeni Hilberta
[edytuj]Rozpatrzmy przestrzeń Hilberta funkcji całkowalnych z drugą potęgą , z iloczynem skalarnym . Dana jest . Znaleźć wielomian stopnia najlepiej przybliżający , 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.