Z Skrypty dla studentów Ekonofizyki UPGOW
Analiza Szeregów Czasowych <<< Techniki analizy szeregów czasowych
Spis treści |
Matlab / GNU Octave
Matlab oraz jego otwarty odpowiednik GNU Octave stanowią środowisko programistyczne oraz język interpretowany w jednym. Nazwa Matlab pochodzi od MATrix LABoratory i w rzeczywistości największa siła owego narzędzia tkwi w obliczeniach bazowanych na macierzach (wektoryzacji obliczeń). Po więcej informacji ogólnych o obu system odsyłamy czytelnika do wikipedii. Poniżej prezentujemy tez kilka bardzo użytecznych linków mogących służyć do podstawowego i nieco bardziej zaawansowanego opanowania Matlab / GNU Octave.
Odnośniki
- na tej platformie
- internet
Wizualizacja danych
Wizualizacja danych to podstawowe i bardzo potężne narzędzie analizy szeregów czasowych. Ciąg liczb nigdy nikomu nic nie powie jeżeli nie zostanie zaprezentowany na wykresie. Ten krótki podrozdział omówi podstawowe formatowanie plików wyjściowych. Wstęp do rysowania wykresów zawarty jest w tym rozdziale o grafice w podręczniku Programowanie. Tutaj nieco rozszerzymy tą wiedzę.
Zapoznaj się z komendami: figure, close, hold, clf.
Podstawową instrukcją do rysowania wykresów jest komenda plot. Przykładowe komendy
x = 0:2*pi/100:2*pi; y = power(sin(x),2); plot(x,y)
spowodują narysowanie linii składającej się ze 100 punktów a przedstawiającą kwadrat funkcji trygonometrycznej sin na przedziale \([0, 2 \Pi] \) w aktywnym oknie graficznym. Następne komendy posłużą do podstawowego opisu osi wykresu i tytułu. Proszę zauważyć, że Octave rozumie formatowanie znane z latexa, takie jak podniesienie (sub: ^), indeksowanie (sup: _) czy symbole matematyczne (\(\sqrt{\cdot}, \gamma, \dots\)).
xlabel('x', 'FontName', 'Times', 'FontSize', 18) ylabel('sin(x)^2', 'FontName', 'Times', 'FontSize', 18) title('Funkcje trygonometryczne', 'FontName', 'Times', 'FontSize', 22)
Ustawiliśmy też czcionkę, jaką chcemy wykorzystać i jej rozmiar (dobrze jest jeżeli czcionka istnieje w systemie ;) ). To teraz lekko podrasujemy wygląd naszego wykresu
plot(x, y, '--rs;sin^2(x);', 'LineWidth', 2, 'MarkerSize', 10) grid on legend('Location', 'North')
Po kolei:
- '--' to linia przerywana
- 'r' to kolor wykresu (czerwony)
- 's' to znaczniki (kwadraty) pojawiające się w miejscu punktów
- ';sin^2(x);' to legenda wykresu
- 'LineWidth' i następujący po nim numer ustawiają szerokość linii
- 'MarkerSize' i następujący po nim numer ustawiają wielkość znaczników
- grid on - włącza siatkę (off wyłącza)
- legend('Location', 'North') - ustawia legendę na środku u góry wykresu
Czasami potrzebne jest formatowanie napisów tekstowych w np: legendach, po ty by przykładowo wstawić automatycznie obliczoną średnią czy wartość jakiejś zmiennej do ciągu znaków. Można to zrobić wykorzystując np: funkcję sprintf. Działa ona identycznie jak z języku c.
plot(x, y, sprintf('--rs;{/Symbol m} = %.2f;', mean(y)), 'LineWidth', 2, 'MarkerSize', 10)
Przy okazji pokazaliśmy jak można uzyskać symbole greckich liter w ciągach znaków i w ogólności jak lokalnie zmodyfikować czcionkę (font).
Zapisywanie grafiki w pliku
Funkcja print umożliwia zapisywanie do wielu formatów graficznych zarówno rastrowych (png, jpg, gif, ...) jak i wektorowych (cdr, svg, eps, ....). Przykładowo, poniższa komenda zapisze nam wynik naszej pracy do pliku png, z rozmiarem 640x480,
print('wykres.png', '-dpng', '-S640,480')
- Najważniejsze formaty
- -dformat
- ps, ps2, psc, psc2 - Postscript (level 1 i 2, mono i color)
- eps, eps2, epsc, epsc2 - Encapsulated postscript (level 1 i 2, mono i color)
- tex, epslatex, epslatexstandalone, pstex, pslatex - generuje plikiu LaTeX (TeX) i odpowiednie pliki EPS (plik wyprodukowany przez epslatexstandalone może być przetwarzany bezpośrednio przez LaTex).
- ill, aifm - Adobe Illustrator
- cdr, corel - CorelDraw
- dxf - AutoCAD
- png - Portable Network Graphics
- jpg, jpeg - JPEG
- gif - GIF
- svg - Scalable Vector Graphics
- pdf - Portable Document Format
- inne przełączniki
- -Sxsize,ysize - ustawia rozmiar obrazka w pikeslach (PNG i SVG)
- -Ffontname:size - ustawia czcionkę i (opcjonalnie) jej rozmiar
Obiekty graficzne
Odpowiednie sformatowanie obiektu graficznego pozwoli nam stworzyć czytelny rysunek. Jeżeli np: zostawimy wszystkie ustawienia jako podstawowe Octave wydrukuje nam plik wielkości Letter (A4), nie dostosowując automatycznie czcionek do wielkości rysunku, rozdzielczości, aspektu (wysokości do szerokości) czy wreszcie ułożenia marginesów. Wszystkie te wielkości możemy dostosować samodzielnie. Co więcej powinniśmy to robić!
Do podstawowej komendy obsługującej format wykresu należy uchwyt gcf. Komenda
h = gcf();
zwraca uchwyt do obecnie budowanego obiektu typu figure. Jeżeli takowy nie istnieje to go tworzy. Możemy teraz na tym obiekcie dokonywać zmian (set) lub uzyskiwać o nim informacje (get). Kod
h = gcf(); set (h, 'papertype', 'a4'); set (h, 'paperunits', 'centimeters'); set (h, 'papersize', [4 3]); set (h, 'paperposition', [0,0,[4 3]]); set (h, 'defaultaxesposition', [0.15, 0.15, 0.75, 0.75]);
definiuje kilka podstawowych własności graficznego okna. Po dokładny opis możliwych modyfikacji odsyłam do literatury.
Podobną funkcją jest funkcja gca zwracająca uchwyt do obsługi osi na aktualnie modyfikowanym obiekcie. Np: ustawienie
ax = gca(); set (ax, 'xlim', [0, 2*pi]);
spowoduje ustawienie zakresu zmienności osi x na [-10:10] niezależnie od danych na wykresie. Natomiast ustawienie
a = gca; set(a,'XTick', 0 : pi / 2 : 2 * pi) set(a, 'XTickLabel', {'0', '{/Symbol p}/2', '{/Symbol p}', '3{/Symbol p}/2', '2{/Symbol p}'} )
spowoduje wygenerowanie poprawnego opisu osi dla naszego przykładu.
Wszystkie powyższe rysunki są wielkości 640x480px i pomniejszone poprzez skalowanie HTML w tym dokumencie. Łatwo zauważyć nieostre linie i czcionki. Aby uniknąć takiej sytuacji można generować (poprze set) rysunki o dokładnie takiej wielkości jaką chcemy użyć na stronie czy w innej dowolnej publikacji. Jeżeli chcemy drukować to większe rysunki (z zachowaniem proporcji!!!) będą bardziej odpowiednie (np: 1200x800px, 3600x2400px). Poniżej znajdziecie odpowiednio sformatowany rysunek, tak, że wszystkie linie są ostre i rysunek dalej pozostaje czytelny (czcionki są odpowiednio duże i czytelne).
Najczęściej używane własności
Style linii
- linestyle
- styl linii może być jedną z
- "-" linia ciągła,
- "--" linia przerywana,
- ":" linia wykropkowana,
- "-." kropka - kreska,
- linewidth
- określa szerokość linii, podstawowa wartość to 1, 2 oznacza dwukrotnie grubszą.
plot(..., 'Linewidth', 2, ...)
Znaczniki
- marker
- może przyjmować wartości
- '+' - krzyż
- '*' - gwiazdka
- 'o' - otwarte kółko
- 'x' - iks
- '^' - trójkąt
- 's' - pełny kwadrat
- 'p' - pusty kwadrat
- 'd' - diament
- 'h' - diament pusty
- MarkerSize
- definiuje wielkość znaczników w punktach, np:
plot(..., 'MarkerSize', 14, ...)
Kolory
Można specyfikowac jako tryplety RGB, lub użyć jednego z predefiniowanych (numerów, skrótów lub pełnych nazw):
- 'r', 'red' - czerwony
- 'g', 'green' - zielony
- 'b', 'blue' - niebieski
- 'm', 'magenta' - magenta
- 'c', 'cyan' - cyan
- 'w', 'white' - biały
- 'b', 'black' - czarny
- 'y', 'yellow' - żółty
pakiet TSA
pakiet ASC
Wszystkie prezentowane kody źródłowe do programów w języku Matlab / Octave jeżeli nie sprecyzowano inaczej dostępne są na licencji LGPL v3: ASC