Teoria aproksymacji 2 6

Wstęp

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.

Interpolacja Lagrange’a


$$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);

Aproksymacja przy użyciu krzywych Béziera

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

Wykonanie wykresów

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');

Wyznaczanie norm z wykorzystaniem metody Simpsona

Wzory na użyte normy:


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));

Wzory na całkę Simpsona i jej błąd:


$$\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:


Wyszukiwarka