MOiPP Matlab Aproksymacja Interpolacja Inne metody obliczeniowe

Slides:



Advertisements
Podobne prezentacje
OBLICZENIA NUMERYCZNE
Advertisements

I część 1.
Podstawy informatyki Informatyka Stosowana Zajęcia nr 2
Ilustracja obliczania całek oznaczonych metodą Monte Carlo
IV Tutorial z Metod Obliczeniowych
Grażyna Mirkowska PJWSTK, 10 stycznia 2001
Interpolacja Cel interpolacji
Programowanie w języku Visual Basic
Wizualizacja rozkładu zmiennej
Materiały pochodzą z Platformy Edukacyjnej Portalu
Metody Analizy Programów Wykład 02
STATYSTYKA WYKŁAD 03 dr Marek Siłuszyk.
Programowanie I Rekurencja.
Języki programowania C++
Grafika komputerowa Wykład 7 Krzywe na płaszczyźnie
ZŁOŻONOŚĆ OBLICZENIOWA
Metody Sztucznej Inteligencji w Sterowaniu 2009/2010Optymalizacja miary efektywności działania sztucznych sieci neuronowych Dr hab. inż. Kazimierz Duzinkiewicz,
AUTOMATYZACJA OBLICZEŃ INŻYNIERSKICH
WŁASNOŚCI FUNKCJI LINIOWEJ
Dr Anna Kwiatkowska Instytut Informatyki
PASCAL (2) dr Anna Kwiatkowska.
Metody matematyczne w Inżynierii Chemicznej
Schemat Hornera Mgr inż. Michał Szucki.
Podstawy programowania
Marcin Kołodziej POLITECHNIKA WARSZAWSKA ZAKŁAD SYSTEMÓW INFORMACYJNO-POMIAROWYCH.
Dane do obliczeń.
Programowanie w języku Matlab
Analiza współzależności cech statystycznych
Metody matematyczne w inżynierii chemicznej
Własności funkcji liniowej.
ETO w Inżynierii Chemicznej MathCAD wykład 4.. Analiza danych Aproksymacja danych.
Metody numeryczne SOWIG Wydział Inżynierii Środowiska III rok
Podstawy analizy matematycznej II
PHP: warunki, pętle, switch, break, continue
Zakładamy a priori istnienie rozwiązania α układu równań.
Programowanie strukturalne i obiektowe
Modelowanie i identyfikacja 2010/2011Optymalizacja miary efektywności działania sztucznych sieci neuronowych Dr hab. inż. Kazimierz Duzinkiewicz, Katedra.
Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy
Źródła błędów w obliczeniach numerycznych
MOiPP Matlab Sortowanie Obliczenia symboliczne - Symbolic ToolBox
MOiPP Wykład 3 Matlab Przykłady prostych metod obliczeniowych.
FUNKCJE Opracował: Karol Kara.
Ogólna struktura programu w TP
MOiPP Wykład 7 Matlab cd..
MOiPP Matlab Przykłady metod obliczeniowych Obliczenia symboliczne
FUNKCJE Pojęcie funkcji
MOiPP Wykład 5 Matlab Przykłady praktyczne Równania różniczkowe.
Metody numeryczne szukanie pierwiastka metodą bisekcji
Metody matematyczne w Inżynierii Chemicznej
Ekonometryczne modele nieliniowe
Metody matematyczne w inżynierii chemicznej Wykład 3. Całkowanie numeryczne.
Wspomaganie Decyzji IV
PWSW Mechatronika Wykład 7 Matlab cd.
Tematyka zajęć LITERATURA
Metody matematyczne w inżynierii chemicznej
Ćwiczenia 8 Aproksymacja funkcji
Analiza szeregów czasowych
Wykład 6 Dr Aneta Polewko-Klim
Regresja liniowa. Dlaczego regresja? Regresja zastosowanie Dopasowanie modelu do danych Na podstawie modelu, przewidujemy wartość zmiennej zależnej na.
Pakiety numeryczne Interpolacja i aproksymacja
Stosowane modele równowagi ogólnej (CGE) Wykład 2.
Informatyka Transport Matlab c.d. Macierze cd. Wykresy graficzne
Osoby prowadzące zajęcia z Informatyki (II część): Prof. Mirosław Czarnecki (W+L) Konsultacje:piątek (p. 302a)
Wstęp do metod numerycznych
Fundamentals of Data Analysis Lecture 12 Approximation, interpolation and extrapolation.
Osoby prowadzące zajęcia z Informatyki (II część): Prof. Mirosław Czarnecki (W+L) Konsultacje:piątek (p. 302a)
Podstawy Informatyki.
Metody matematyczne w Inżynierii Chemicznej
Jednorównaniowy model regresji liniowej
Obliczenia w Matlabie Interpolacja i aproksymacja
Zapis prezentacji:

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

Aproksymacja 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 Wykorzystanie np. gdy mamy wiele dyskretnych punktów pomiarowych i chcemy znaleźć funkcję aproksymującą. 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.

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

x1=0, y1=0 x2=5, y2=1 x3=10, y3=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 = -0.0400 0.4000 0.0000

Nierównomierność kroku dla x – 4 punkty x1=0, y1=0 x2=2, y2=1 x3=3, y3=2 x4=10, y4=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 = -0.0327 0.3304 -0.0298 0.0000

N=2 N=5 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=[0 1 2 3 4 5] y=[0 1 1 1 1 0] 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([0 5 -1 2]) N=2 N=5

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

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) gdzie: x - tablica punktów zmiennej niezależnej p - wektor współczynników wielomianu ypi - wektor wartości wielomianu w zadanych punktach x

Przykładowe rozwiązanie 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

Aproksymacja - błędy 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-') błąd n=3 n=6 p1 = 53.0000 -126.3856 80.8523 -9.3899 p2 = 1.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

Jeszcze o wykresach… fill(x,y,'r', 'Linewidth',5) 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=[10 10 90 90 10] y=[1 4 4 1 1] fill(x,y,'r', 'Linewidth',5) W funkcji fill domknięcie konturu jest automatyczne x=[10 10 90 90] y=[1 4 4 1]

Znane są dokładne wartości funkcji w punktach węzłowych. Interpolacja 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.

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ą.

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.

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

yi = interp1(x,y,xi,'linear'); plot(x,y,'o',xi,yi) figure(2) Przykłady metod interpolacji 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'); figure(3) yi = interp1(x,y,xi,'spline');

yi = interp1(x,y,xi,'linear'); plot(x,y,'o',xi,yi) subplot(3,1,2) Teraz dowolne węzły clc clear x = 0:10; y = [1 2.5 3 2.5 1 0 -1 -2.5 -3 -2.5 -1]; 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'); subplot(3,1,3) yi = interp1(x,y,xi,'spline');

– rozszerzenie poza przedział węzłów EKSTRAPOLACJA – rozszerzenie poza przedział węzłów 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'); subplot(3,1,3) yi = interp1(x,y,xi,'pchip','extrap');

Interpolacja powierzchni [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([-3 3 -3 3 -5 30])

Iteracje ciągów factorial(n) = n! %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 a=k+1; b=factorial(k); e=0.5*sum(a./b) e = 2.7183 suma innego ciągu

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

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

Algorytm iteracyjny z połowieniem przedziału dla znalezienia interval bisection method 12=1 za małe 22=4 za duże 1.52=2.25 za duże 1.252=1.5625 za małe 1.3752=1.8906 za małe itd. a b xi xi+1 xi+1 jeśli za duże jeśli za małe

Realizacja 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; disp(a) disp(b) 2.2204e-016 a = 1.4142 b =

Badanie zmiany znaku funkcji – też połowienie przedziału warunek: sign(f(a))~=sign(f(b)) funkcja (signum) - znak sign(x)= (-1 || +1) 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; a b disp('Ustal inne a i b') a = 3.1416 b = ~= nierówne Warunek sign(f(a))~=sign(f(b)) można też zapisać: f(a)*f(b)<0

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

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

Wyznaczenie miejsca zerowego funkcji ln(x) log(x) df = 1/x x = 0.330258509299405 0.696145164463784 0.948286903858718 0.998639213816122 0.999999073710225 0.999999999999571 1 >> 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

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

Realizacja w Matlabie 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)

"Strzelamy" losowo N razy w kwadratową tarczę o boku A. 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:  A2/4 stąd =4*k/N

Realizacja w Matlabie %Monte Carlo pi clc,clear N=1000000; 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

naszePI = 3.1411

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

fill(x(1,:),x(2,:),'c') Realizacja w Matlabie clc,clear %axis([-1 6 -1 6]) 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')