Matlab II skrypty, funkcje, wizualizacja danych Piotr Wróbel piotr.wrobel@igf.fuw.edu.pl Pok. B 4.22 Metody numeryczne w optyce 2017
Skrypty Pierwszy skrypt: Home->NewScript Home -> New->NewScript Zakładka EDITOR: - new, open, save - funckje wspomagające edycję i wykonywanie skryptu Wykonanie skryptu Run z linii poleceń: >> nazwa_skryptu Skrypty operują na zmiennych z przestrzeni roboczej i tam są zapisywane po jego wykonaniu 2
Skrypty cd Przydatne komendy: (%) - komentarz (;) ukrywanie echa (rezultatu) na ekranie ( ) przejście do następnego wiersza pause zatrzymanie do momentu uzycia dowolnego klawisza pause(3) pauza trwająca 3 sekundy Przydatne uwagi: skrypt powinien zawierać krótki opis działania (help) umieszczony na jego początku oraz ujęty znakiem komentarza (%). >> help nazwa_funckji poszczególne kroki skryptu dobrze jest opisać komentarzem skrypty przechowują zmienne w przestrzeni roboczej unikaj powtarzania nazw zmiennych aby przyspieszyć wykonywanie skryptu, polecenia wykonuj z opcją ukrywania echa (rezultatu) 3
Funkcje Tworzenie funkcji function [x,y,]=nazwa_funkcji(a,b,c) % Funkcja zwraca zmienne x i y dla zadanych % parametrów wejściowych a, b i c nazwa pliku.m jest identyczna z nazwą funkcji w jednej funkcji można umieścić wiele funkcji, ale tylko główna może być wykorzystana bezpośrednio Od wersji 2016R istnieje możliwość deklarowania funkcji w jednym skrypcie dla przetestowania funkcji najpierw utwórz skrypt function [P,Ob]=kolo(r) Przykład % Funkcja zwraca pole koła P oraz jego obwód % Ob przy zadanym promieniu r. Ob = 2*pi*r; P=pi*r^2; % koniec funkcji >> r=5; >>[P, Ob]=kolo(r) P = Ob = 78.5398 31.4159 Wykonanie funkcji 4
Funkcje Deklaracja funkcji w skrypcie function [y,]=nazwa_funkcji(a,b,c) % Funkcja zwraca zmienne x i y dla zadanych % parametrów wejściowych a, b i c y=a*fun2.^2 + b*fun2+c; end %------------------------------------ x=2; y=sin3(x); function y=sin3(x); y=sin(x).^3; end %-------------------------------------- f = @nazwa_funkcji; Uchwyt do funkcji %----------------------------------------------------- function y=sin3(x); y=sin(x).^3; end %----------------------------------------------------- f = @sin3; >> a = 4; >>b = f(a) 5
Wizualizacja danych (2D) podstawy Wykres funkcji y=sin(x) Utwórz wektor x o 100 elementach z zakresu od 0 4π, np.: funkcją linspace >>x=linspace(0,4*pi,100); oblicz sin(.) wektora x >>y=sin(x); Wykreśl wektor y >>plot(y) >> help plot 6
Wizualizacja danych (2D)- upiększanie plot(x,y,'r-*','linewidth', 3) hold on plot(x,y1,'go','linewidth', 3) hold on plot(x,y2,'b-s','linewidth', 3) hold off x=linspace(0,4*pi,100); y=sin(x); y1=sin(2.*x); y2=sin(3.*x); grid on ylabel('y','fontsize',[30]) xlabel('x','fontsize',[30]) set(gca,'fontsize',[30]) ylim([-1.5 1.5]) legend('y','y1','y2') 7
Wizualizacja danych (2D)- uchwyty Dostęp do opcji wyświetlanego elementu (funkcji / okna) uzyskujemy za pomocą uchwytów: >> x=linspace(0,4*pi,100); y=sin(x); >>h=plot(x,y,'r-*','linewidth', 3); >>get(h) DisplayName: 'y' Annotation: [1x1 hg.annotation] Color: [1 0 0] LineStyle: '-' LineWidth: 3 Marker: '*' MarkerSize: 6 MarkerEdgeColor: 'auto... BusyAction: 'queue' HandleVisibility: 'on' HitTest: 'on' Interruptible: 'on' Selected: 'off' SelectionHighlight: 'on gca uchwyt do osi w bieżącym oknie (Figure) >> get(gca) >> set(gca,'clim',[0 5]) >>set(h,'linestyle','o', 'MarkerSize', 20) 8
Wizualizacja danych (2D)- subplot clc, clf,clear all x=linspace(0,4*pi,100); y=sin(x); y1=sin(2.*x); y2=sin(3.*x); y3=sin(4.*x); subplot(2,2,1) plot(x,y,'r-*','linewidth', 3) subplot(2,2,2) plot(x,y1,'go','linewidth', 3) subplot(2,2,3) plot(x,y2,'b-s','linewidth', 3) subplot(2,2,4) plot(x,y3,'k--','linewidth', 3) 9
Przydatne funkcje: Osie semilogx oś x w skali logarytmicznej semilogy oś y w skali logarytmicznej loglog obie osie w skali logarytmicznej scatter wyświetla kolorowe kółka w punktach wyznaczonych przez dane x i y plotyy dwie osie y na jednym wykresie plot3 trójwymiarowa krzywa ezplot/ezpolar - Plotting symbolically defined functions polar - Polar co-ordinate plot fplot - Autmoatic function plot; similar to ezplot Wykresy bar - wykreśla wektor w postaci słupków (bar) stem - wykreśla wektor w postaci linii pionowych (ystem) hist (x,m) - wykreśla histogram z podziałem na m przedziałów, stairs -wykreśla wektor w postaci schodków od największego do najmniejszego elementu errorbar - wykreśla wartości wektora wraz z błędami 10
Wizualizacja danych (2D) przykłady hist (x,m) errorbar ezplot >> x=randn(1,100); >> hist(x,10) >> x=0:10; y=x.^2; >> E=std(y).*ones(size(x)); >>errorbar(x,y,e) >> ezplot('x^2-y^2-1') 11
Wizualizacja danych (3D) Aby zwizualizować dwuwymiarową funckję/ macierz musimy stworzyć dwuwymiarową siatkę współrzędnych meshgrid tworzy macierze opisujące położenie węzłów siatki prostokątnej Przykład >> x = -2:0.05:2; y = x; >> [X,Y] = meshgrid(x); >> F = X.*exp(-X.^2-Y.^2); >> mesh(x,y,f) >> x = 1:3; y = 1:5; [X,Y] = meshgrid(x,y) >> X.^2+Y.^2 12
Wizualizacja danych (3D) przydatne funkcje Funkcje oparte na meshgrid mesh Wykres siatkowy meshc Wykres jak mesh + poziomice meshz Wykres jak mesh + zasłony na końcach surf Wykres powierzchniowy surfc Wykres powierzchniowy + poziomice surfl Wykres powierzchniowy + cieniowanie ezmesh- Wykres siatkowy ezsurf - Wykres powierzchnia waterfall - Wykres plasterkowy Dodatki plot3 Linia w 3 wymiarach ezplot3 Wykres parametryczny isosurface Izowarstwy dla danych 3D bar3 Wykres słupkowy scatter3 - Wykres typu scatter slice - Przekrój przez wykres wolumetryczny Obiekty 3D cylinder Generacja walca elipsoid Generacja elipsoida fill3 Generacja wielokąta sphere Generacja kuli 13
Wizualizacja danych (3D) przykłady Surf >> x=-10:10; >> [X,Y]=meshgrid(x); >> Z=X.^2-Y.^2; >> surface(x,y,z) Sphere >> [x,y,z]=sphere(50); >> surf(x,y,z); axis equal Slice x=-2:.2:2; y=-2:.2:2; z=-2:.2:2; [x,y,z] = meshgrid(x,y,z); v = x.^2 - y.^2 - z.^2; slice(x,y,z,v,[-1.2.8 2],2,[-2 -.2]) 14
Zadania Materiały https://www.igf.fuw.edu.pl/pl/courses/ 15