mini-mini-matl-aba wersja 21 styczeń 2012

Nie ustawiać okien na max !
Używać jako 'desktop layout' opcję 'default'
  
1. ABSOLUTNE PODSTAWY
format compact   – oszczędny tryb drukowania na monitorze
who   – podaje nazwy zmiennych w pamięci roboczej (w 'workspace')
whos   – nazwy, typy i rozmiary zmiennych w pamięci roboczej (w 'workspace')
pwd   – scieżka do aktualnej kartoteki
help nazwa_funkcji   – pomoc nt danej funkcji
doc nazwa_funkcji   – bardziej szczegółowa dokumentacja do danej funkcji
help help   – na jaki temat możemy uzyskać 'help'
lookfor nazwa   – szukamy dokumentacji w ktorej występuje dana nazwa (fragment nazwy)
clear lista_zmiennych   – usuwanie zmiennych z pamięci roboczej czyli z workspace
del nazwa_zmiennej   – usuwanie zmiennej z pamięci roboczej lub pliku z aktualnej kartoteki
which nazwa_funkcji   – gdzie - w jakim folderze - znajduje się plik tekstowy o danej nazwie, zawierający nagłówek funkcji i jej treść (body of the function)
pojęcie M-file   – plik z rozszerzeniem .m zawierający instrukcje Matlaba, przygotowane do wykonania. Pisząc na zaproszenie do pisania nazwę takiego pliku (może być bez rozszerzenia) otrzymuje się wykonanie zawartych w nim instrukcji.
Linie M-file poprzedzone znakiem procentu % nie są wykonywane.
clc   – clear screen czyli czyszczenie ekranu
clf   – czyści aktualne okno graficzne (figure)
close all   – zamyka wszystkie okna graficzne
dir   – listuje aktualną kartotekę
quit   – zamyka Matlaba
cd nazwa_folderu   – ang. change directory, zmienia folder w którym aktualnie pracujemy
...   – kontynuacja instrukcji w następnej linii
;   – brak średnika na końcu instrukcji spowoduje, że wartości utworzonych zmiennych (zapamiętane w workspace) zostaną wydrukowane również na monitorze
disp('wtorek')   – wydrukuje zawartość łancucha na monitorze, i przejdzie do nowej linii
edit nazwa_pliku   – otwarcie w edytorze tekstowym Matlaba pliku o podanej nazwie; jeśli taki plik nie istnieje, to Matlab pyta się, czy może taki plik otworzyć  
Ctrl R lub Ctrl T   – zakomentowanie lub odkomentowanie zaznaczonych wierszy w pliku otwartym pod edytorem tekstowym Matlaba
F9 wykonanie zaznaczonych wierszy w pliku otwartym pod Edytorem tekstowym Matlaba (przy uruchomionym Matlabie oczywiście)
 

2. TABLICE – ARRAYS
2.1 Wczytywanie tablic do pamięci operacyjnej

a) z pliku tekstowego
Uwaga: dane w pliku tekstowym muszą mieć postać prostokątnej tablicy danych o rozmiarze N x d, wtedy zapamiętana przez Matlaba tablica A też będzie postaci tablicy rozmiaru N x d.
load('A.txt'), alternatywnie: load A.txt   –   wczytuje tablicę danych z pliku tekstowego o nazwie 'A.txt';
i zapamiętuje ją w przestrzeni roboczej Matlaba (w workspace) jako zmienną 'A'
A=load('dane15.txt')   –   wczytuje dane z pliku 'dane15.txt'; i zapamiętuje je jako zmienną 'A'. Wczytywany plik może zawierać wykomentowane wiersze tekstu.

Do czytania danych w specjalnym formacie (np. 'csv', lub o różnych separatorach) służą komendy 'textread' lub 'uiimport'   –   patrz 'help' Matlaba.

b) z pliku binarnego o rozszerzeniu .mat
Dane (zmienne) stworzone podczas sesji Matlaba można zapamiętać   –   za pomocą komendy save   –   w plikach binarnych specyficznych dla Matlaba.
Jedna komenda save może zapamiętac kilka zmiennych różnego formatu. Np.
save sesja1.mat dane1 dane2 ii1 ii2 -mat Rezultatem tej komendy jest plik 'sesja.mat' zapisnay w aktualnym folderze użytkownika; umieszczone w nim zmienne dane1, dane2, ii1, ii2 zapisano w formacie binarnym Matlaba (rozszerzenie .mat), co wymusił ostatni parametr (czyli zapis -mat).
Zapamiętane zmienne można wczytać do pamięci roboczej (workspace) na następnej sesji za pomocą komendy load('sesja1.mat') lub load sesja1.mat

c) z okna komend
Wczytanie do pamięci operacyjnej zmiennej A będącej tablicą o 3 wierszach i 5 kolumnach:
A= [ 1 2 3 4 5
     6 7 8 9 10
     11 12 13 14 15];

Ten sam efekt uzyskamy, zaznaczając koniec wiersza średnikiem:
A= [ 1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15];
Przy wczytywaniu tablicy liczba elementów w każdym wierszu musi być taka sama. Standardowym separatorem liczb jest spacja lub przecinek.
Znak nowej linii w powyższym czytaniu działa jako koniec wiersza.
Aby dowiedzieć się, czy zmienna 'A' istnieje w pamięci operacyjnej ('workspace'), pytamy się Matlaba pisząc w oknie komend:
'who' lub 'whos'.
Tablicę zawierającą liczby o stałej różnicy możemy określić prościej, np.
A=[1:5; 6:10; 11:15]; lub A=[1:1:5; 6:1:10; 11:1:15]; lub A=[1:150],
a następnie zmienić rozmiary tablicy przez reshape, np. A=reshape(A, 10,15)
Wektory są specjalnym przypadkiem tablic, dla których liczba wierszy lub liczba kolumn wynosi 1.


2.2 Operacje na tablicach

Podstawowe dzialania
Operacje: mnożenie, transpozycja, dodawanie, odejmowanie – tak jak określone w algebrze.
Mamy dodatkowe działania: .*, ./, .^2 - oznacza 'elementwise', działanie na elementach tablic o jednakowych rozmiarach.

Linearyzacja macierzy: A=A(:)
Transpozycja macierzy - oznaczamy apostrofem (znak ').
Macierze specjalne zeros(m,n), ones(m,n)
Tworzenie bloków macierzy repmat(A, m,n)
Łączenie macierzy:
C= [A, B]   –   macierze A, B mają tę samą liczbę wierszy, i zostają umieszczone ob ok siebie, X= [X1;X2]   –   macierze X1, X2 mają tę samą liczbę kolumn, i zostają zapisane jedna pod drugą..


Wybieranie podmacierzy. Przykłady:
a=A(:,2) -> wybiera drugą kolumnę z tablicy A,
a=A(:,end) -> wybiera ostatnią kolumne,
b=A(3,:) -> wybiera trzeci wiersz z tablicy A
a=A(end,:) -> wybiera ostatni wiersz,
c=A(1,1:2) -> wybiera elementy a11, a12 z tablicy A
d=A(1,[1,3]) -> wybiera elementy a11, a13 z tablicy A
e=A(1,1:(end-1)) -> wybiera elementy 1-go wiersza tablicy A za wyjątkiem ostatniego elementu.
Różne funkcje
[n,d] = size(A) -> funkcja ta zwraca rozmiar (wymiary) tablicy A, tj. liczbę wierszy (n) oraz liczbę kolumn (d) tej tablicy i umieszcza te wartości jako zmienne n oraz d w pamięci operacyjnej.
l=length(x) -> Długość wektora 'x' kolumnowego lub wierszowego,
n = length(A(:,1)) -> długość wektora stanowiącego pierwszą kolumnę tablicy A. Równoważna instrukcja: n = size(A,1) -> bierzemy z rozmiaru tablicy A (tj. pary [n,d]) pierwszą wartość.

3. WYRAŻENIA I FUNKCJE LOGICZNE, INSTRUKCJE WARUNKOWE i POWTARZANE

4. PROSTE FUNKCJE STATYSTYCZNE
Niech X o wymiarach n x d oznacza macierz (tablicę) o n wierszach i d kolumnach.
Tablica ta składa się z liczb rzeczywistych (elementy typu 'double'). Wiersze są interpretowane jako 'instancje' (osobniki'), a kolumny określają 'atrybuty' ( 'cechy') jednostek. Poniżej podane funcje statystyczne obliczają odpowiednie wielkości (np. średnie) dla poszczególnych cech, czyli dla ustalonej kolumny wg wierszy, czyli według wymiaru pierwszego. Sposób ten jest domyślny.
Aby obliczać wg wymiaru drugiego, należy wyraźnie zadeklarować wymiar drugi, np. m=mean(X,2);

m=mean(X)   –  średnia arytmetyczna, mean
ss=var(X) lub ss=var(X,1) lub ss=var(X,w)   –  wariancja, variance, w-wektor wag, patrz help
s=std(X) lub s=std(X,flag,dim )odchylenie standardowe, standard deviation
flag=0 oznacza używanie dzielnika n-1, flag>=1 oznacza dzielnik n,
dim=1, obliczanie po kolumnach, dim=2 – obliczanie po wierszach.
s=std(X) używa dzielnika n-1, std(X,1) używa dzielnika n,
me= median(X)   –  mediana, median
maX= max(X)   –  maksimum z kolumn, miX=min(X)   –  minimum z kolumn
suma= sum(X)   –  suma wszystkich liczb w kolejnych kolumnach
csum= cumsum(X)   –  obliczanie kumulowanych sum
Wymienione wyżej funkcje mean &ndash cumsum mają na ogół domyślny drugi parametr, oznaczający wymiar, według którego są obliczane wartości danej funkcji. W trybie domyślnym jest to wymiar pierwszy (1), którego nie trzeba deklarować.
Jesli byśmy chcieli obliczać odpowiednie wielkości według drugiego wymiaru (np. średnie z kolejnych wierszy tablicy X), to powinniśmy to zadeklarować poprzez napisanie m=mean(X,2);
Zmienne wynikowe podawanych niżej funkcji mean, ..., cumsum są wektorami wierszowymi o d elementach odpowiadających d kolumnom obliczanej macierzy X.

c=cov(X) oblicza macierz kowariancji między wszystkimi kolumnami macierzy X
c=cov(x,y) jesli x,y sa wektorami, to jest obliczana macierz kowariancji dla macierzy X=[x,y]
jesli x,y sa macierzami, to jest obliczana macierz kowariancji dla macierzy X=[x(:),y(:)]
Jesli X,Y sa macierzami, patrz help Matlaba.
r=corrcoef(A) oblicza macierz korelacji między wszystkimi kolumnami macierzy A

Dodatkowe funkcje:
c=dot(x,y) – iloczyn skalarny miedzy wektorami x,y. y=sort(x) lub [y,iix]=sort(x) sortowanie wektora danych rosnąco
u=unique(x) różne (unikalne) wartości wektora x
w=mldivide(A,t) lub w=A\t rozwiązuje układ równań liniowych metodą najmniejszych kwadratów (LSE, Least Square Error), tzn. rozwiązuje układ rówmań   Aw=t      
gdzie A jest rozmiaru (n x p), w jest rozmiaru (p x 1), t jest rozmiaru (n x 1)

Generatory liczb losowych
X=rand(n,d)   – generowanie tablicy liczb pseudo-losowych o rozmiarze n wierszy i d kolumn.
Tablica ta zawiera liczby pseudolosowe z rozkładu jednostajnego na odcinku (0,1).
X= randn(n,d)   – wygenerowana tablica zawiera liczby pseudolosowe z rozkładu normalnego N(0,1) (dla takich liczb wiemy że 95 % generowanych liczb zawiera się w z dużym prawdopodobieństwem w przedziale (-2, 2) )
iiK=ceil(rand(n,1)*K) generuje z rozkładu jednostajnego n liczb całkowitych ze zbioru {1, ...,K}; to samo czyni instrukcja: irand=1+floor(rand(1)*K)
iiab=a+floor( rand(n,1)*(b-a+1) ) generuje - wg. rozkładu jednostajnego - n liczb całkowitych z przedziału [a,b],
perm=randperm(n) daje losową permutację liczb 1,2, ... , n .

5. GRAFIKA DWUWYMIAROWA   – funkcja PLOT

Wykaz znaków (markerów), kolorów i stylów linii używanych przez funkcję plot
  'marker'                            'color'         'linestyle'       
 .  point     v  triangle (down)     y     yellow    -     solid
 o  circle    ^  triangle (up)       m     magenta   :     dotted
 x  x-mark    <  triangle (left)     c     cyan      -.    dashdot
 +  plus      >  triangle (right)    r     red       --    dashed
 *  star      p  pentagram           g     green     none  bez linii
 s  square    h  hexagram            b     blue
 d  diamond                          w     white
                                     k     black 
Tablica wartości RGB danych jako trójki
[0   0    0 ] black               [1   0.62  0.60 ] róż chinski 
[1   1    1 ] white               [1   0.92  0.90 ] blady róż 
[1   0    0 ] red                 [0.5 0.5    0.0 ] olive 
[0   1    0 ] green               [0   0.5    0.0 ] oliwkowy 
[0   0    1 ] blue                [.49 1     .83  ] aquamarine (morski) 
[0.4 0.5  1 ] light blue          [.80 1     .80  ] zielonkawy  
[1   1    0 ] yellow              [0   0.5   0.2  ] dark green  
[1   0    1 ] magenta             [0.5 0.1    0.9 ] violet 
[0   1    1 ] cyan                [0.25 0.88  0.82] turqoise 
[.5  .5   .5] gray                [1    0.75 0.80 ] pink 
[.7  0    0 ] dark red            [0.5  0    0.5  ] purple 
[1   .62 .40] copper              [0.86 0.08 0.24 ] crimson  
[1  .62  .30] zloty               [1    0.65 0    ] orange     

Wykres rozproszenia punktów {xi, y i}, i=1, ..., n (ang. scatterplot) jest rysowany za pomocą funkcji:
h=plot(x,y,s) -- gdzie
wektory x i y są wektorami kolumnowymi o n składowych i zawierają kolejne wartości {xi} i {yi} i=1, ...,n,
s jest łancuchem zawierającym trójkę znaków określających symbol (marker) i kolor wykreślanych punktów, oraz to czy wykreślane punkty mają być połaczone linią (patrz tabelka najczęściej stosowanych oznaczeń powyźej oraz przykłady uźycia poniżej ),
h jest tzw. rączką (ang. handle) do obiektu, który stanowi wykreślony rysunek. Aby dowiedzieć się o własnościach obiektu, pytamy się np. (z okna komned): g=get(h); i oglądamy co zawiera zmienna g; są tam nazwy i aktualne ustawienia poszczególnych własności obiektu h.
Jeśli nie zadeklarujemy parametrów s,x,h, to Matlab przyjmuje ich domyślne wartości.
Przykłady - dla danych wektorów kolumnowych x i y o tej samej długości, zawierających wartości {xi} i {yi} odpowiednio:
plot(x,y) &ndash zostaną wyrysowane linie lączące (niewidoczne) punkty o wartościach {xi} i {yi} . Punkty sa łączone w takiej kolejności, jak wystepują w wektorach x i y.
plot(x,y,'*r') rysuje czerwone gwiazdki niepołączone żadną linią.
plot(x,y,'color',[0,0.2,0.8],'marker','.'); rysuje kropki specjalnym kolorem, też niepołączone.
Możemy również zmieniać wielkości markerów i grubości linii, np. jak niżej:
plot(x,y,'color',[0,0.2,0.8],'marker','.', 'markersize', 16, 'linewidth', 3); Uwaga: trzeba deklarować x i y jako oddzielne wektory. Jesli poda się tylko jeden argument (np. wektor y o wymiarach n x 1), to Matlab przyjmuje jako domyślny argument x kolejne numery elementów wektora y, czyli wektor liczb całkowitych ii=[ 1,2, ... , n]' jako zmienną x, i wykresla wykres tak, jak gdybyśmy napisali: plot(ii,y) .
Napisanie rozkazu plot(Y), gdzie Y jest macierzą rozmiaru (nxK) spowoduje, że tablica Y zostanie rozszczepiona na K kolumn: Y=[y1, ..., yk, ... yK]. i dla każdej kolumny yk zostanie wykonany – na tym samym rysunku – wykres pary (ii, yk).
Do opisu rysunku służą funkcje:
title('s'), xlabel('sx'), ylabel('sy')   –   tytuł, opis osi 'x', opis osi 'y'
oraz legend('s1', 's2','s3')   –   legenda do wykreślonych punktów lub krzywych.
Zmiana podziałki i opisu osi 'x' (funkcja gca znajduje aktualny układ osi). Poniższe instrukcje powoduja, że aktualny opis osi 'x' będzie zawierał tylko trzy wartości: -1, 0, i 1, którym będą przypisane etykiety A, B, C.
set(gca, 'xtick', [-1, 0, 1]); – daje tickmarki w tych 3 miejscach
set(gca, 'xticklabel', [-1, 0, 1], {'A', 'B', 'C"}); – tak będa opisane te trzy miejsca.


KOMPONOWANIE OKIEN GRAFICZNYCH   –  funkcje 'figure', 'subplot', 'gtext', 'text'

Funkcja figure powoduje otwarcie nowego (pustego) okna graficznego.
Np. funkcja figure(3) otwiera (czyni aktywnym) okno o numerze 3. Rezultat wykonania tej instrukcji może być dwojaki:
  1. Jeśli okno o numerze 3 nie istnieje, to zostaje otworzone puste okno o tej nazwie; wydana następnie instrukcja 'plot' będzie wykonana w tym właśnie oknie.
  2. Jeśli okno o numerze 3 już istnieje, to zostaje ono umieszczone na górze stosu okien i staje sie oknem 'aktualnym'. Nowo wydana instrukcja 'plot' wymaże treść tego okna i wrysuje na jej miejsce nową treść wynikającą z wykonywanej instrukcji.
Do przytrzymania (zatrzymania) starej treści okna i dorysowania do niej nowych elementow służy instrukcja hold on.
Uwaga, w przypadku większej liczby otwartych okien należy zwrócić uwagę, do którego okna był wydany rozkaz hold on.
Odwołanie instrukcji 'hold on' do danego okna następuje przez hold off.

Funkcja subplot pozwala komponować okna jako tablice o w wierszach i k kolumnach. Nagłówek funcji:
subplot(w,k,h) gdzie w,k określają generalnie rozmiar tablicy, natomiast liczba h (1<= h <= w*k) określa miejsce okna (pozycje) w tablicy. Liczba 'h' numeruje okna liniowo wierszami, od lewej do prawej, tj. najpierw jest wypełniany pierwszy wiersz tablicy (miejsca: 1, 2, ..., k), potem drugi wiersz tablicy (miejsca: k+1,..., k+k), itp.

Funkcja gtext nanosi w miejsce zaznaczone myszą tekst dany jako 'string'.
Przykład wywolania: gtext('Bolek')
Funkcja text umieszcza w miejscu określonym pierwszymi dwoma parametrami zadany tekst-łancuch (string). Np. text(2,5,'Bolek')
Zarówno w przypadku użycia funkcji 'gtext' jak i 'text' można justować położenie napisu względem zadeklarowanego punktu położenia (alignement) – patrz help

Zamiana zmiennych numerycznych na napisy (strings)
s1= int2str(j) zamiana wartości liczby calkowitej zapamiętanej w zmiennej 'j' na string s1
s2= num2str(x, 4) zamiana liczby rzeczywistej na napis (string) z 4 miejscami znaczącymi
title(['rxy=',num2str(x)]) przykład umieszczania kombinowanej informacji w opisie rysunku danego jako 'figure'
disp(['rxy=',num2str(x)]) drukowanie informacji na aktualnym wyjściu (monitorze)

Funkcja fplot Wykresy funkcji jednej zmiennej, patrz help Matlaba.
Funkcja inline patrz help Matlaba

Obliczanie prostej regresji y=b1*x+b0 przy danych wektorach kolumnowych x i y – metodą najmniejszych kwadratów (LSE).
Można tu skorzystać z następującego sposobu: Obliczamy C, macierz kowariancji dla macierzy [x,y]. Wtedy współczynniki b1 i b0 określające prostą regresji wyznaczamy za pomocą następujących instrukcji:
C=cov([x,y]); b1=C(1,2)/C(1,1); b0=mean(y)-b1*mean(x):
Mając współczynniki regresji b1 i b0, dodajemy prostą regresji do wykresu rozproszenia sporządzonego na podstawie wektorów x i y następującymi rozkazami:
xx=linspace(min(x), max(x),50) – dzielimy przedział [min(x), max(x)] na 50 równych podprzedzialików
hold on, plot(xx, b1*xx+b0)

histogram, konstrukcja:
hist(x) lub hist(x, nbin), gdzie x jest wektorem danych, a nbin liczbą przedziałów (nb of bins), patrz help Matlaba
Zmiana koloru słupków histogramu na np. czerwony z czarnym obrysem:
h= findobj(gca, 'type', 'patch'); set(h, 'MarkerFaceColor','r', 'MarkerEdgeColor', 'k'):
set(h, 'Facealpha',[0.80]) - reguluje przeźroczystość, można również ustawiać przez funkcję alpha, np. alpha([0.4]).
pcolor(C) używane np. w Conway's game of life.
PCOLOR(C) is a pseudocolor or "checkerboard" plot of matrix C.
The values of the elements of C specify the color in each cell of the plot. In the default shading mode, 'faceted', each cell has a constant color and the last row and column of C are not used.


6. VARIA
6.1 Wczytywanie i odtwarzanie plików graficznych
I= imread('drzewko.jpg');   –   wczytanie obrazka z pliku graficznego
image(I) lub imagesc(I)   –   wyświetlenie obrazka (tablicy I) na ekranie

Kolory pikseli sa często pamiętane w postaci indeksowanej, przyjmującej wartości calłkowite (np. od 0 do 255). Do zapamiętania takich obrazków Matlab używa oszczędnego formatu uint8 lub uint16. Aby wykonać na tak zapamiętanych tablicach jakieś operacje numeryczne (np. obliczenie podobieństwa), należy zamienić format na 'double'. Można to zrobić w następujący sposób:
if isa(I, 'double')==0, I=double(i), end; – jeśli zmienna I nie jest typu double, to zostaje zamieniona na typ takiej klasy.
a=uint8(b) – zmienna 'b' zostaje zamieniona na zmienna 'a' o typie uint8.

6.2 Drukowanie wektorów w zadanym formacie
Dany jest wektor x=[1, 2.5, 0.0125]
Instrukcja fprintf('%3d %4.1f %7.4f\n',x) – drukuje wektor x oraz przechodzi do nowej linii (znak _ oznacza spację)
 __1___2.5___0.0125 
'%3d' oznacza druk jako liczba calkowita na 3 pozycjach
'%4.1f' jako liczba rzeczywista zajmująca 4 pozycje, w tym jedna pozycja po kropce dziesiętnej
'%4.2e ' format exponentialny.
Np.mamy x=127000256; instrukcja sprintf('%9.2e',x) daje ans = 1.27e+008.

  –