Obliczenia w Matlabie 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.
Funkcja interp1 zwraca wartości funkcji w punktach Interpolacja liniowa Funkcja interp1 zwraca wartości funkcji w punktach 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'}); Funkcja polyfit zwraca współczynniki wielomianu
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
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 Niech będzie dane N punktów interpolacji (xi, yi), i=1,2,…,N. Sześcienna interpolująca funkcja sklejana (sklejająca) S(x) określona jest jednoznacznie przez następujące własności: S(x) spełnia warunek interpolacji S(xi)=yi, i=1,2,…,N. S(x) w każdym przedziale [xi,xi+1] (i=1,2,…,N) jest wielomianem stopnia co najwyżej 3. S(x) jest dwukrotnie w sposób ciągły różniczkowalna w całym przedziale aproksymacji [x1, xN]. S(x) spełnia warunki brzegowe: S’’(x1)=S’’(xN)=0 lub S’(x1)=y1’, S’(xN)=yN’ lub S(x1)=S(xN), w przypadku gdy y1=yN, i S’(x1)=S’(xN) oraz S’’(x1)=S’’(xN)
Funkcje sklejane – wyznaczanie współczynników
Funkcje sklejane – wyznaczanie współczynników
Funkcja ppval oblicza wartość funkcji sklejanej w punkcie Funkcje sklejane Funkcja ppval oblicza wartość funkcji sklejanej w punkcie 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'});
Sztuczne sieci neuronowe (typ MLP) x=linspace(-1,1,100); y=linspace(-1,1,100); [X,Y]=meshgrid(x,y); z=X.^2+Y.^2-cos(2.5*pi*X)-cos(2.5*pi*Y)+2; surf(x,y,z); view(-30,60); set(gcf,'Color',[1 1 1]); set(gca,'FontSize',32); xlabel('x');ylabel('y');zlabel('z');
Sztuczne sieci neuronowe (typ MLP) f=@(X)X(1).^2+X(2).^2-cos(2.5*pi*X(1))-cos(2.5*pi*X(2))+2; N=30; % N=10; N=20; x=linspace(-1,1,N); y=linspace(-1,1,N); X=zeros(2,N*N); Y=zeros(1,N*N); for i=1:N X(:,(i-1)*N+1:i*N)=[x;y(i)*ones(1,N)]; end for i=1:N*N Y(i)=f(X(:,i)); SSN=fitnet([10,5]); SSN=train(SSN,X,Y); view(SSN);
Sztuczne sieci neuronowe (typ MLP) Y_SSN=sim(SSN,X); Y_SSN=reshape(Y_SSN,N,N); surf(x,y,Y_SSN); view(-30,60); set(gcf,'Color',[1 1 1]); set(gca,'FontSize',32); xlabel('x');ylabel('y');zlabel('z'); title(['N=' num2str(N)]);
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');
Planowanie eksperymentu
Planowanie eksperymentu Czynniki mające wpływ na dokładność estymacji parametrów modelu: wariancja zakłóceń, liczba pomiarów, obszar eksperymentu, funkcje rozpinające model, plan eksperymentu, metoda przetwarzania wyników.
Planowanie eksperymentu Model: X obszar eksperymentu v(x) wektor funkcji rozpinających model σ2(x) funkcja opisująca wariancję zakłóceń DoE xi – nośniki planu pi – wagi punktów xi ∈ [-1,1]⨯… ⨯[-1,1]
Planowanie eksperymentu Model opisany jest przez zależność:
Planowanie eksperymentu Większość kryteriów umożliwiających ocenę planu eksperymentu bazuje na macierzy informacyjnej definiowanej następująco: Macierzą informacyjną planu ξ∈Ξ zadania estymacji parametrów modelu (X, v(x), σ2(x)) nazywa się przy założeniu, że σ (x) > 0, x ∈ X. Plan ξ* nazywa się D-optymalnym jeżeli
Algorytm Wynna-Fedorova
Algorytm W-F implementacja v=@(x)[1;x]; N=2; sigma=@(x)1; ksi0.x=2*rand(1,N)-1; ksi0.p=1/N*ones(1,N); [ksi_opt M_opt fi_opt]=algorytm_WF(v,N,sigma,ksi0) rysuj_fi(fi_opt); function rysuj_fi(fi) figure('Color',[1 1 1]); x=-1:0.01:1; fi_val=zeros(size(x)); for i=1:length(x) fi_val(i)=fi(x(i)); end plot(x,fi_val,'LineWidth',2); set(gca,'FontSize',16);
Algorytm W-F implementacja function [ksi_opt M_opt fi_opt]=algorytm_WF(v,n,sigma,ksi) m=length(ksi.p); x=ksi.x; p=ksi.p; M=zeros(n,n); for i=1:m M=M+(1/(sigma(x(i))^2))*p(i)*v(x(i))*v(x(i)).'; end fi=@(x)-1/sigma(x)^2*v(x).'/M*v(x); k=1; [fix_max fiy_max]=ga(fi,1,[],[],[],[],-1,1); fiy_max=-fiy_max;
Algorytm W-F implementacja while (fiy_max/n>1.0001 && k<500) alpha=1/(k+1); [yi xi]=min(abs(fix_max-ksi.x)); for i=1:length(ksi.p) ksi.p(i)=(1-alpha)*ksi.p(i); end if (yi<0.1) ksi.p(xi)=ksi.p(xi)+alpha; ksi.x(xi)=(ksi.x(xi)+fix_max)/2; else ksi.x(end+1)=fix_max; ksi.p(end+1)=alpha;
Algorytm W-F implementacja indx=find(ksi.p<0.05); suma=sum(ksi.p(indx)); ksi.x(indx)=[]; ksi.p(indx)=[]; ksi.p=ksi.p+suma/length(ksi.p); m=length(ksi.p); x=ksi.x; p=ksi.p;
Algorytm W-F implementacja M=zeros(n,n); for i=1:m M=M+(1/(sigma(x(i))^2))*p(i)*v(x(i))*v(x(i)).'; end fi=@(x)-1/sigma(x)^2*v(x).'/M*v(x); [fix_max fiy_max]=ga(fi,1,[],[],[],[],-1,1); fiy_max=-fiy_max; k=k+1; ksi_opt=ksi; M_opt=M; fi_opt=@(x)1/sigma(x)^2*v(x).'/M_opt*v(x);
Algorytm W-F przykładowe wyniki v=@(x)[1;x]; sigma=@(x)1; ksi_opt = x: [1.0000 -1.0000] p: [0.5000 0.5000]
Algorytm W-F przykładowe wyniki v=@(x)[1;x^2]; sigma=@(x)1; ksi_opt = x: [1.0000 -2.5665e-006 -1.0000] p: [0.2976 0.5119 0.1905]
Algorytm W-F przykładowe wyniki v=@(x)[1;x^2]; sigma=@(x)x+1.5; ksi_opt = x: [-1.0000 -0.3822] p: [0.5000 0.5000]
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