Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Matlab Aproksymacja Interpolacja Inne metody obliczeniowe Wykład 6 MOiPP 1.

Podobne prezentacje


Prezentacja na temat: "Matlab Aproksymacja Interpolacja Inne metody obliczeniowe Wykład 6 MOiPP 1."— Zapis prezentacji:

1 Matlab Aproksymacja Interpolacja Inne metody obliczeniowe Wykład 6 MOiPP 1

2 2 Metoda aproksymacji polega na znalezieniu funkcji f(x), której wykres przechodzi w pobliżu zbioru zadanych punktów, zaś sama funkcja minimalizuje wartość pewnego kryterium dopasowania Aproksymacja Funkcja aproksymująca nie musi wcale przyjmować identycznych wartości jak funkcja aproksymowana. Kryteria aproksymacyjne są różne, np. kryterium średniokwadratowe jak w metodzie najmniejszych kwadratów. Wykorzystanie np. gdy mamy wiele dyskretnych punktów pomiarowych i chcemy znaleźć funkcję aproksymującą.

3 3 gdzie: x - jest zbiorem N posortowanych rosnąco wartości współrzędnych zmiennej niezależnej, y - jest zbiorem N odpowiadających wartości zmiennej zależnej, n - jest zadanym stopniem wielomianu aproksymującego, p - jest wektorem poszukiwanych wartości współczynników wielomianu aproksymującego. Niech w naszym przypadku funkcją aproksymującą f(x) będzie wielomian n-tego stopnia w(x). Do znalezienia współczynników wielomianu używamy w Matlabie funkcji polyfit, której składnia ma postać: p=polyfit(x,y,n)

4 4 x 1 =0, y 1 =0 x 2 =5, y 2 =1 x 3 =10, y 3 =0 % Obliczenie współczynników paraboli y(x)=p(1)*x^2 p(2)*x+p(3) x=[0,5,10]; y=[0,1,0]; plot(x,y,'o')%wykres punktów p= polyfit (x,y,2) % sprawdzenie paraboli na wykresie x1=0:0.1:10; y1=p(1)*x1.^2+p(2)*x1+p(3); hold on plot(x1,y1) p =

5 5 x 1 =0, y 1 =0 x 2 =2, y 2 =1 x 3 =3, y 3 =2 x 4 =10, y 4 =0 Nierównomierność kroku dla x – 4 punkty % Obliczenie współczynników paraboli y(x)=p(1)*x^3+p(2)*x1^2+p(3)*x1+p(4) clc; x=[0, 2, 3, 10]; y=[0, 1, 2, 0]; plot(x,y,'o') %wykres punktów – "kółeczka" p=polyfit(x,y,3) %teraz wyznaczamy wielomian 3-go stopnia % sprawdzenie paraboli na wykresie x1=0:0.1:10; y1=p(1)*x1.^3+p(2)*x1.^2+p(3)*x1+p(4); %taki zapis niewygodny hold on %zamrożenie wykresu plot(x1,y1) % wykres funkcji f(x) p =

6 6 p1(0 0), p2(1 1), p3(2 1), p4(3 1), p5(4 1) p6(5 0) clc, clear N=input('Podaj rząd wielomianu:') %interakcja: rząd wielomianu x=[ ] y=[ ] p=polyfit(x, y, N) %współczynniki wielomianu x1=0:0.1:5; y1=0; %Inny sposób: pętla sumująca elementy wielomianu for m=1:N y1=y1+p(m)*x1.^(N-m+1); end; %wykres punktów i funkcji plot(x, y, 'o', x1, y1) axis([ ]) N=5N=2

7 7 Wielomian aproksymujący powinien mieć rząd mniejszy niż liczba punktów – inaczej ostrzeżenie o niejednoznacznym rozwiązaniu Wnioski: reduce the degree of the polynomial

8 8 gdzie: x - tablica punktów zmiennej niezależnej p - wektor współczynników wielomianu ypi - wektor wartości wielomianu w zadanych punktach x Wygodna metoda wstawiania wielu punktów do wielomianu o znanych współczynnikach - polyval Wartości otrzymanego wielomianu, w dowolnych zadanych punktach wektorem xx oblicza funkcja polyval ypi = polyval(p, x)

9 9 clc N=15 x=1:N y=round(10*rand(1,N)) %losowe wartości y plot(x, y, 'o') for k=4:7 % pętla stopni wielomianu od 4 do 7 hold on p=polyfit(x,y,k) xx=0:0.1:N; yy=polyval(p,xx); plot(xx,yy, 'Color',[rand rand rand],'LineWidth',k-3) end Przykładowe rozwiązanie

10 10 clc,clear x = [0: 0.1: 2.5]; y=x.^6; p1 = polyfit(x,y,3) p2 = polyfit(x,y,6) f1 = polyval(p1,x); f2 = polyval(p2,x); subplot(2,1,1) plot(x,y,'o',x,f1,x, f2) subplot(2,1,2) plot(x,y-f1,'-',x, y-f2,'r-') Aproksymacja - błędy n=3 n=6 p1 = p2 = błąd

11 11 Jeszcze o wykresach… clc,clear for k=1:100 x(k)=k; y(k)=5*rand; end %wykres losowych punktów plot(x,y,'.','Color','k','MarkerSize',5) hold on %figura konturowa x=[ ] y=[ ] fill (x,y,'r', 'Linewidth',5) W funkcji fill domknięcie konturu jest automatyczne x=[ ] y=[ ]

12 12 Interpolacja to przybliżanie przy pomocy funkcji z pewnej klasy, np. wielomianami, funkcjami trygonometrycznymi, funkcjami sklejanymi itp. Znane są dokładne wartości funkcji w punktach węzłowych. Zadaniem interpolacji jest wyznaczenie funkcji interpolującej, co daje możliwość znalezienia przybliżonych wartości funkcji w punktach nie będących węzłami oraz oszacowanie błędów tych przybliżonych wartości. Interpolacja

13 13 W tym celu należy znaleźć funkcję W(x), nazywaną funkcją interpolującą, która w węzłach interpolacji przyjmuje takie same wartości co funkcja y=f(x). Interpolacja jest w pewnym sensie zadaniem odwrotnym do tablicowania funkcji. Przy tablicowaniu mając analityczną postać funkcji budujemy tablicę wartości, przy interpolacji natomiast na podstawie tablicy wartości funkcji określamy jej postać analityczną.

14 14 Interpolacją funkcji nazywa się wyznaczenie przybliżonych wartości funkcji f(x) dla dowolnego argumentu przy znanych jej wartościach w ustalonych punktach zwanych węzłami interpolacji.

15 15 'nearest' - interpolacja "najbliższy sąsiad" 'linear' - liniowa 'spline' - przy pomocy funkcji sklejanych 'pchip' lub 'cubic' - sześcienna Metody interpolacji

16 16 clc clear x = 0:10; %węzeł y = sin(x); %węzeł xi = 0:0.25:10; %inne x figure(1) yi = interp1(x,y,xi,'linear'); plot(x,y,'o',xi,yi) figure(2) yi = interp1(x,y,xi,'cubic'); plot(x,y,'o',xi,yi) figure(3) yi = interp1(x,y,xi,'spline'); plot(x,y,'o',xi,yi) Przykłady metod interpolacji

17 17 clc clear x = 0:10; y = [ ]; xi = 0:0.25:10; subplot(3,1,1) yi = interp1(x,y,xi,'linear'); plot(x,y,'o',xi,yi) subplot(3,1,2) yi = interp1(x,y,xi,'cubic'); plot(x,y,'o',xi,yi) subplot(3,1,3) yi = interp1(x,y,xi,'spline'); plot(x,y,'o',xi,yi) Teraz dowolne węzły

18 18 clear x = 0:10; y = sin(x); xi = -5:0.25:15; %szerszy przedział x subplot(3,1,1) yi = interp1(x,y,xi,'linear','extrap'); plot(x,y,'o',xi,yi) subplot(3,1,2) yi = interp1(x,y,xi,'spline','extrap'); plot(x,y,'o',xi,yi) subplot(3,1,3) yi = interp1(x,y,xi,'pchip','extrap'); plot(x,y,'o',xi,yi) EKSTRAPOLACJA – rozszerzenie poza przedział węzłów

19 19 [X,Y]=meshgrid(-3:0.4:3) Z=5*sin(X).*cos(Y) [XI,YI]=meshgrid(-3:0.1:3) ZI=interp2(X,Y,Z,XI,YI,'linear') mesh(X,Y,Z) hold mesh(XI,YI,ZI+25) hold off axis([ ]) Interpolacja powierzchni

20 20 %Obliczenie liczby Eulera clc,format compact k=0:1000; e=sum(1./factorial(k)) %to samo z pętlą for e=0; for k=0:1000 e=e+1/factorial(k); end disp(e) %inny sposób k=0:1000; a=k+1; b=factorial(k); e=0.5*sum(a./b) Iteracje ciągów e = e = e = factorial(n) = n! suma innego ciągu

21 21 a nawet gdy nie znamy funkcji factorial, można sobie poradzić z liczeniem silni: N=6; S=1; for k=2:N S=S*k; end disp(S) 720

22 22 Iteracja (pętla) warunkowa while (dopóki) while warunek_logiczny instrukcje end 1.Badanie warunku (true/false) 2.Jeśli warunek==true to instrukcje są wykonywane, jeśli warunek==false to koniec działania pętli warunkowej 3.Ponowne sprawdzenie warunku 4.… itd.

23 23 Algorytm iteracyjny z połowieniem przedziału dla znalezienia 1 2 =1za małe 2 2 =4za duże =2.25za duże =1.5625za małe =1.8906za małe itd. interval bisection method ba xixi x i+1 jeśli za małe jeśli za duże

24 24 format long M = 2 a = 1 b = 2 k = 0; d=1e-7 % dokładność while b-a > d x = (a + b)/2; if x^2 > M b = x; else a = x; end k = k + 1; end disp(a) disp(b) e-016 a = b = Realizacja

25 25 clc,clear k = 0; a = 3; b = 4; if sign(sin(a))~=sign(sin(b)) while abs(b-a) > 1e-10 x = (a + b)/2; %środek if sign(sin(x)) == sign(sin(b)) b = x; % koniec=środek else a = x; % początek=środek end k = k + 1; end a b else disp('Ustal inne a i b') end Badanie zmiany znaku funkcji – też połowienie przedziału funkcja (signum) - znak sign(x)= (-1 || +1) a = b = warunek: sign(f(a))~=sign(f(b)) Warunek sign(f(a))~=sign(f(b)) można też zapisać: f(a)*f(b)<0 ~= nierówne

26 26 W metodzie Newtona przyjmuje się następujące założenia: 1.W przedziale [a,b] znajduje się dokładnie jeden pierwiastek 2.Funkcja ma różne znaki na krańcach przedziału, tj. f(a)*f(b)<0 3.Pierwsza i druga pochodna funkcji mają stały znak w tym przedziale. Metoda Newtona minus bo f(x)<0 Zadaniem jest znalezienie pierwiastka równania zadanej funkcji ciągłej f(x)

27 27 f(x1) u -f(x1)/u = tg( α ) = f '(x1) u = x2-x1= -f(x1)/f '(x1) x2 = x1-f(x1)/f '(x1) α

28 28 clc, clear, format compact, format long syms x f= log (x) df=diff(f) a=0.1; b=4; x=a; xp=b; while abs(x - xp) > eps xp = x; x = x - subs(f)/subs(df) end f = log(x) df = 1/x x = x = x = x = x = x = x = 1 x = 1 >> Wyznaczenie miejsca zerowego funkcji ln(x)

29 29 Paproć Barnsley'a 85% 7% 1%

30 30 krok=500000; x=zeros(1, krok); y=zeros(1, krok); for n=1:krok r=rand(); %liczba losowa if r<=0.01 x(n+1)=0; y(n+1)=0.16*y(n); elseif r<=0.08 x(n+1)=0.2*x(n)-0.26*y(n); y(n+1)=0.23*x(n)+0.22*y(n)+1.6; elseif r<=0.15 x(n+1)=-0.15*x(n)+0.28*y(n); y(n+1)=0.26*x(n)+0.24*y(n)+0.44; else x(n+1)=0.85*x(n)+0.04*y(n); y(n+1)=-0.04*x(n)+ 0.85*y(n)+1.6; end plot(x,y,'.','Color','g','MarkerSize',1) Realizacja w Matlabie

31 31

32 32 Metoda Monte Carlo "Strzelamy" losowo N razy w kwadratową tarczę o boku A. Liczymy liczbę trafień k w koło wpisane w kwadrat. Pole kwadratu: A*A Pole koła:  A 2 /4 stąd  =4*k/N

33 33 %Monte Carlo pi clc,clear N= ; x=zeros(1,N); y=zeros(1, N); k=0; for n=1:N r1=rand()-0.5; r2=rand()-0.5; if r1^2+r2^2<=0.25 x(n+1)=r1; y(n+1)=r2; k=k+1; end plot(x,y,'.','Color','g','MarkerSize',1) naszePI=4*k/N Realizacja w Matlabie

34 34 naszePI =

35 35 Transformacje geometryczne Kontur zamknięty opisany współrzędnymi punktów w postaci: Macierz przesunięcia Prz Macierz skalowania Ska Macierz obrotu Obr 1 0 px 0 1 py sx py cos  sin  0 -sin  cos  x1 x2 x3 ……. y1 y2 y3 …… ….. Przekształcenie= Psz*Ska*Obr

36 36 clc,clear x=[ ; ; ] x(1,:) fill (x(1,:),x(2,:),'c') %axis([ ]) axis equal syms px py sx sy kat Prz=[1 0 px;0 1 py;0 0 1] Ska=[sx 0 0;0 sy 0; 0 0 1] Obr=[cos(kat) sin(kat) 0; -sin(kat) cos(kat) 0; 0 0 1] Cal=Prz*Ska*Obr; x=Cal*x px=2; py=2; sx=0.5; sy=0.5; kat=pi/4; x=subs(x) hold on fill(x(1,:),x(2,:),'r') Realizacja w Matlabie

37 37


Pobierz ppt "Matlab Aproksymacja Interpolacja Inne metody obliczeniowe Wykład 6 MOiPP 1."

Podobne prezentacje


Reklamy Google