Interpolacja wielomianowa, nazywana interpolacją Lagrange’a, a także po prostu interpolacją jest metodą numerycznego przybliżania funkcji wielomianem Lagrange’a stopnia n, przyjującym w n+1 punktach, zwanych węzłami interpolacji wartości takie same jak przybliżana funkcja. Stosowana jest w naukach doświadczalnych, w których dysponuje się skończoną liczbą danych do określenia zależności między wielkościami, a także w celu uproszczenia skomplikowanych funkcji.
Pierre Bézier w latach 60. XX wieku opisał typ krzywych nazywanych krzywymi Béziera, które pierwotnie używane były przy projektowaniu nadwozi samochodów Renault.
Krzywe Béziera są krzywymi parametrycznymi, tzn. każda współrzędna punktu krzywej jest pewną funkcją liczby rzeczywistej będącej wspomnianym parametrem; aby określić krzywą na płaszczyźnie potrzebne są dwie funkcje, aby określić krzywą w przestrzeni – trzy, itd. Ze względu na rodzaj tych funkcji mówi się o krzywych wielomianowych oraz krzywych wymiernych. Powszechnie stosuje się również krzywe złożone z kawałków gładko połączonych krzywych wielomianowych bądź wymiernych, tzw. krzywych B-sklejanych (także: krzywych gładkich).
Niezależnie od rodzaju krzywej na jej przebieg wpływa łamana kontrolna określona za pomocą punktów kontrolnych, których liczba jest zwykle niewielka. Ta cecha bardzo ułatwia pracę interakcyjną, bowiem człowiek w naturalny sposób może ustalać położenie punktów i w łatwy sposób korygować błędy.
$$x\left( t \right) = \frac{9}{1 + \frac{1}{t}}$$
$$y\left( t \right) = \frac{0.5}{1 + \frac{1}{t*t}}$$
Interpolację wykonałam za pomocą funkcji polyfit, która tworzy wielomian interpolacyjny Lagrange’a. Do uzyskania wartości w konkretnych punktach użyłam funkcji polyval.
function z = teoaproxb6(n) % n = liczba przedziałów w przedziale [0.1,2] % Wyznaczanie elementów po podziale na n części delta=(2-0.1)/n; T=0.1:delta:2; % Tworzenie tablicy używanej przy wykresie T2=0.1:0.01:2; % Obliczenie funkcji interpolowanej X2=9./(1+1./T2); Y2=0.5./(1+1./(T2.*T2)); % Tworzenie danych do interpolacji oraz interpolacja X=9./(1+1./T); Y=0.5./(1+1./(T.*T)); aux=size(T); FITX=polyfit(T,X,aux(2)-1); FITY=polyfit(T,Y,aux(2)-1); Xint= polyval(FITX, T2); Yint= polyval(FITY, T2); |
---|
Aproksymację wykonałam korzystając ze wzoru:
$$B\left( t \right) = \sum_{j = 0}^{n}{t^{j}C_{j}}$$
$$C_{j} = \frac{n!}{\left( n - j \right)!}\sum_{i = 0}^{j}{\frac{\left( - 1 \right)^{i + j}P_{i}}{i!\left( j - i \right)!} = \prod_{m = 0}^{j - 1}\left( n - m \right)\sum_{i = 0}^{j}\frac{\left( - 1 \right)^{i + j}P_{i}}{i!\left( j - i \right)!}}\backslash n$$
% Tworzenie danych do aproksymacji oraz aproksymacja index=1; k=0; while k<=1 X2apx(index)=0; Y2apx(index)=0; for j=0:n C=nchoosek(n,j)*(1-k)^(n-j)*k^j; X2apx(index)=X2apx(index)+ C*X(j+1); Y2apx(index)=Y2apx(index)+ C*Y(j+1); end k=k+0.002; index=index+1; end |
---|
Wykresy wykonałam za pomocą funkcji plot. Dodałam również opis osi oraz ograniczyłam wartości na osi poziomej oraz pionowej do przedziału x∈<0,7>, y∈<0,0.6>.
% Rysowanie wykresów plot(X2,Y2,'r.',Xint,Yint,'g.',X2apx,Y2apx,'b.'); xlabel('x'); ylabel('y');title('Wykres funkcji y=f(x) oraz funkcji interpolującej'); axis([0 7 0 0.6]); legend('funkcja interpolowana','interpolacja Lagrangea','aproksymacja Beziera'); |
---|
∥f1∥ = ∫ab|f(x)|dx
$$\left\| f_{2} \right\| = \sqrt[2]{\int_{a}^{b}{f^{2}(x)\text{dx}}}$$
Nix=X2-Xint; Niy=Y2-Yint; norma1i=simpson(abs(Nix),0.1,2)+simpson(abs(Niy),0.1,2); norma2i=sqrt(simpson(Nix.*Nix,0.1,2))+sqrt(simpson(Niy.*Niy,0.1,2)); |
---|
Liczenie norm dla funkcji interpolowanej i aproksymowanej:
deltaux=(2-0.1)/(index-2); Taux=0.1:deltaux:2; Xaux=9./(1+1./Taux); Yaux=0.5./(1+1./(Taux.*Taux)); Nx=X2apx-Xaux; Ny=Y2apx-Yaux; norma1a=simpson(abs(Nx),0.1,2)+simpson(abs(Ny),0.1,2); norma2a=sqrt(simpson(Nx.*Nx,0.1,2))+sqrt(simpson(Ny.*Ny,0.1,2)); |
---|
$$\int_{a}^{b}{f\left( x \right)\text{dx} = {\frac{1}{6}\ \left( b - a \right)\ \left\lbrack f\left( a \right)\ + \ 4f\left( \frac{a + b}{2} \right)\ + f(b) \right\rbrack}}$$
$$R\left( f \right) = - \frac{1}{180}*\left( b - a \right)^{5}*{f^{\left( 4 \right)}\left( \varepsilon \right)}_{\varepsilon \in \left\lbrack a,b \right\rbrack}\ = \ - \frac{1}{180}*\left( b - a \right)^{5}\ *\ \operatorname{}\left( f^{\left( 4 \right)}\left( \varepsilon \right) \right)$$
$$f^{\left( 4 \right)}\left( x \right) = \frac{e^{\frac{x}{x - 1}}\left( {24x}^{3} - 36x^{2} + 12x + 1 \right)}{\left( x - 1 \right)^{8}}$$
Wyniki
N=2 | N=4 | N=7 | N=50 | |
---|---|---|---|---|
∥f1∥ interpolacja | 0.3027 | 0.0162 | 3.2542e-004 | 2.6634e-007 |
∥f2∥ interpolacja | 0.2562 | 0.0152 | 4.2276e-004 | 9.3399e-007 |
∥f1∥ aproksymacja | 0.8758 | 0.4441 | 0.2556 | 0.0416 |
∥f2∥ aproksymacja | 0.7194 | 0.3711 | 0.2146 | 0.0338 |
Wnioski
Jak widać na powyższych wykresach, zadana krzywa stosunkowo łatwo interpoluje się interpolacją Lagrange’a. natomiast aproksymacja krzywą Beziera przy małej ilości węzłów daje dużo gorsze przybliżenie przebiegu funkcji natomiast warto zauważyć, że mimo tego dobrze odzwierciedla jej kształt. Dla liczby węzłów 50 aproksymacja daje przybliżony rezultat jaki interpolacja osiąga już przy 7 węzłach.
Wykresy zależności normy I błędu aproksymacji w zależności od liczby węzłów: - w skali zwykłej:
- w skali logarytmicznej:
Wykresy zależności normy II błędu aproksymacji w zależności od liczby węzłów: - w skali zwykłej:
- w skali logarytmicznej: