Pakiety numeryczne Interpolacja i aproksymacja Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania
Definicje Podstawowe zadanie interpolacji polega na przeprowadzeniu krzywej przez szereg zadanych punktów (xi, yi) (i=0,1,…,n). W przypadku aproksymacji krzywa nie musi przechodzić przez zadane punkty.
Interpolacja liniowa x=-1:0.5:1; y=x.^2; xx=-1:0.01:1; yy=interp1(x,y,xx); plot(x,y,'rs',xx,yy); figure; plot(x,y,'rs',x,y,'g');
Aproksymacja wielomianowa x=[0 1 2 3]; y=[2 1.5 4 2.5]; plot(x,y,'rs'); set(gca,'YLim',[0.5 4.5]); p0=polyfit(x,y,0); p1=polyfit(x,y,1); p2=polyfit(x,y,2); p3=polyfit(x,y,3); xx=0:0.01:3; yy0=polyval(p0,xx); yy1=polyval(p1,xx); yy2=polyval(p2,xx); yy3=polyval(p3,xx); hold on; plot(xx,yy0,xx,yy1,xx,yy2,xx,yy3); legend({'Punkty','St 0','St 1','St 2','St 3'});
Efekt Rungego x=0:10; y=rand(size(x)); plot(x,y,'rs'); p=polyfit(x,y,10); xx=0:0.01:10; yy=polyval(p,xx); hold on; plot(xx,yy); Zastosowanie wielomianów wysokiego stopnia może powodować pojawienie się oscylacji, zwłaszcza przy skrajnych węzłach
Wielomiany Czebyszewa T0=1 T1=x Tk=2xTk-1-Tk-2
Wielomiany Czebyszewa T{1}=1; T{2}=[1 0]; for i=3:12 T{i}=conv([2 0],T{i-1})-[0 0 T{i-2}]; end x=5*roots(T{end})+5; y=rand(size(x)); plot(x,y,'rs'); p=polyfit(x,y,10); xx=0:0.01:10; yy=polyval(p,xx); hold on; plot(xx,yy);
Funkcje sklejane
Funkcje sklejane - definicja Mając dyskretną funkcję f zdefiniowaną na przedziale [a,b] oraz zbiór punktów, zwanych węzłami, a=x0<x1<…<xn=b, funkcję F można zdefiniować jako interpolującą kubiczną funkcję sklejaną, gdy spełnia poniższe warunki: 1. Fj jest wielomianem trzeciego stopnia, dla j=0,1,…,n-1 2. oraz , dla j=0,1,…,n-1
Funkcje sklejane - definicja 3. , dla j=0,1,…,n-2 4. , dla j=0,1,…,n-2 5. - metoda ograniczeń naturalnych albo oraz - metoda ograniczeń związanych
Funkcje sklejane - przykład albo albo
Funkcje sklejane x=[0 1 2 3]; y=[0 1 4 9]; s=spline(x,y) s = form: 'pp' breaks: [0 1 2 3] coefs: [3x4 double] pieces: 3 order: 4 dim: 1 xx=0:0.01:3; yy=ppval(s,xx); plot(x,y,'rs',xx,yy)
s.breaks(i+1)-s.breaks(i) Funkcje sklejane Ogólnie: s.breaks(i+1)-s.breaks(i) x=[0 1 2 3]; y=[0 1 4 9]; s=spline(x,y); for i=1:s.pieces xx(:,i)=s.breaks(i):0.01:s.breaks(i+1); yy(:,i)=polyval(s.coefs(i,:),xx(:,i)); end plot(xx,yy); s.coefs ans = -0.0000 1.0000 -0.0000 0 -0.0000 1.0000 2.0000 1.0000 0.0000 1.0000 4.0000 4.0000 for i=1:s.pieces xx(:,i)=s.breaks(i):0.01:s.breaks(i+1); yy(:,i)=polyval(s.coefs(i,:),0:0.01:1); end plot(xx,yy);
Spline vs polynomial x=0:10; y=rand(size(x)); plot(x,y,'rs'); p=polyfit(x,y,10); s=spline(x,y); xx=0:0.01:10; yy=polyval(p,xx); yys=ppval(s,xx); hold on; plot(xx,yy,xx,yys); legend({'Punkty','St 10','Spline'});
Aproksymacja dowolną funkcją x=-pi:pi/2:pi; y=2*sin(3*x); f=fittype('a*sin(b*x)'); f=fit(x.',y.',f,'StartPoint',[1 2]) f = General model: f(x) = a*sin(b*x) Coefficients (with 95% confidence bounds): a = 2 (2, 2) b = 3 (3, 3) xx=-pi:0.01:pi; yy=2*sin(3*xx); yyf=f(xx); plot(x,y,'rs',xx,yy,xx,yyf); legend({'Punkty','Fun','Fit'});
Sztuczne sieci neuronowe (typ MLP) x=-1:0.1:1; y=x.^2; SSN=fitnet(5); view(SSN); SSN=train(SSN,x,y); xx=-1:0.01:1; yy=xx.^2; yy_SSN=sim(SSN,xx); plot(x,y,'rs',xx,yy,xx,yy_SSN) legend({'Punkty','Fun','SSN'});
Interpolacja liniowa funkcji 2D figure('Color',[1 1 1]); [x, y]=meshgrid(-1:0.5:1,-1:0.5:1); z=x.^2+y.^2; plot3(x,y,z,'*','MarkerSize',10) box on; view(-18,50) hold on [xi, yi]=meshgrid(-1:0.05:1,-1:0.05:1); zi=interp2(x,y,z,xi,yi); surf(xi,yi,zi) zi=interp2(x,y,z,xi,yi,'spline');
Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: http://creativecommons.org/licenses/by-sa/3.0/deed.pl