Matlab – Składnia + podstawy programowania

Transkrypt

Matlab – Składnia + podstawy programowania
Matlab – Składnia + podstawy programowania
Matlab – Matrix – Laboratory – środowisko stworzone z myślą o osobach rozwiązujących
problemy matematyczne, w których operuje się na danych stanowiących wielowymiarowe
tabele – macierze, wektory, itp.
Sercem Matlaba jest interpreter poleceń, odpowiedzialny jest za wykonywanie
poleceń/skryptówi programów. Kolejną cechą środowiska Matlab jest możliwość kompilacji
kodu do postaci wykonywalnej czyli tworzenia tzw. Standlone applications, jak też pełne
wsparcie dla środowisk Java VM, a ostatnio również .Net.
Charakterystyczną cechą Matlaba w porównaniu do innych podobnych środowisk jest
składnia, zoptymalizowana pod kątem obliczeń macierzowych, tak zapis realizowanych
operacji był maksymalnie zwięzły.
Składnia matlaba
Operator:
Przypisania
=
Tworzenia macierzy
[]
Porównania
==
Większości, większy równy
>, >=
Mniejszości, mniejszy równy
<, <=
Mnożenia macierzowego
*
Mnożenia elementowego
.*
Dodawania, odejmowania
+, Dzielenia macierzowego
/
Dzielenia elementowego
./
Potęgowania macierzowego
^
Potęgowania elementowego
.^
Transpozycji
‘
Operator zakresu
:
a = 1; przypisanie do zmiennej a określonej wartości (macierz jednowymiarowa), rozmiar
1x1
b = [1 2 3 4]; przypisanie do zmiennej b wektora (jednowymiarowej tablicy) o elementach
1,2,3,4. Elementy oddzielane spacją lub przecinkiem tworzą wektor poziomy. Rozmiar 1x4
c = [1;2;3;4]; elementy oddzielone średnikiem tworzą wektor pionowy. Rozmiar 4x1
d = [1 2;3 4;5 6;7 8]; tworzona jest zmienna d będąca macierzą dwuwymiarową o rozmiarze
4x2 (cztery wiersze, dwie kolumny)
Sprawdź wynik działa operacji:
e = [1;2 3;3 4 5];
b(2) = 10; Przypisanie drugiemu elementowi wektora b wartości 3
d(3,2) = 7; Przypisanie do elementu znajdującego się w 3 wierszu i 2 kolumnie macierzy d
wartości 7
Ponieważ Matlab posiada możliwość wektoryzacji macierzy możliwy jest również dostęp do
określonego elementu macierzy poprzez zapis
d(7) = 11;
Matlab stosuje zapis kolumnowy! Czyli elementy d(i,j) zapisywane są wg zależności
d(J*(j-1)+i), przy założeniu że d ma J wierszy i K kolumn d
a == 2 w wyniku zwraca wartość 1 jeśli prawda lub 0 jeśli fałsz.
c == 2 w wyniku zwraca macierz o rozmiarze c zawierającą wartości 0 lub 1 w zależności czy
dany element macierzy c był równy stałej Wynik=[0;1;0;0]
Podobne zależności występują dla operatorów >,>=,<,<=
Operatory arytmetyczne *,.*,/,./
Operator * oznacza mnożenie macierzy
b = [1 2 3 4];
c = [1;2;3;4];
b*c
ans =
30
ale
>> c*b
ans =
1
2
3
4
2
4
6
8
3 4
6 8
9 12
12 16
MNOŻENIE MACIERZY NIE JEST PRZEMIENNE
Uwaga: Jęsli wykonywana jest dowolna operacja arytmetyczna i nie tylko bez przypisania
wyniku tzn bez zapisu g = b*c; (samo b*c) wówczas wynik zapisywany jest do zmiennej ans
Podczas gdy operator mnożenia elementowego .* oznacza pomnóż element przez element
>> c.*b'
ans =
1
4
9
16
Zwróć uwagę na operator ‘ (transpozycji macierzy/wektora) Aby mogła zostać zrealizowana
operacja .* rozmiar macierzy/wektorów obydwu zmiennych musi być identyczny. Powyższy
zapis oznacza
Dla każdego i dokonaj c(i).*b(i) Wynik operacji jest tego samego rozmiaru co c i b
Podobne zależości zachodzą pomiędzy operatorami /,./,^,.^
Operator zakresu „:”
Podstawową cechą jak i atutem języka matlab jest operator zakresu „:”. „:” oznacza pewien
zakres wartości. Np. zapis d(:,1) oznacza weź pierwszą kolumnę z macierzy d. d(2,:) oznacza
weź drugi wiersz z macierzy d.
e = d(:,2) spowoduje utworzenie wektora e który będzie się składał z elementów e=[2;4;6;8]
f = d(3,:) utworzenie wektora f o elementach f=[5 6]
Operator zakresu można też używać do określenia przedziału
g = 2 : 5; oznacza to że zmienna g przyjmuje kolejne wartości g = [2 3 4 5]
h = 3 : 0.1 : 4; oznacza h = [4 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0]
Jeśli chcemy by kierunek przedziału był malejący to jedyną możliwą postacią jest:
i = 6 : -1 : 2; co oznacza i = [6 5 4 3 2]
Składnia języka
Instrukcja warunkowa
if warunek
ciąg poleceń
end;
if warunek
ciąg poleceń
else
ciąg poleceń
end;
if warunek1
ciąg poleceń
elseif warunek2
ciąg poleceń
elseif warunek3
ciąg poleceń
end;
switch zmienna
case wartość
ciąg poleceń
case wartość
ciąg poleceń
end;
Przy czym zmienna może być dowolnego typu zarówno string jak i liczba
Pętle
W matlabie występują dwa typy pętli – for oraz Chile
for zmienna=przedział wartości
ciąg instrukcji
end;
np.
for i=1:10
x(i) = i^2;
end;
while warunek
ciąg instrukcji
end;
np.
i=1;
while i<=10
x(i) = i^2;
i = i+1;
end;
Przydatne polecenia
a = load(‘nazwa.pliku’); - wczytanie zawartości pliku
save(‘nazwa.pliku’,’zmienna’); - zapisanie zmiennej zmienna do pliku. Uwaga zmienna jest
podawana jako napis! Jako nazwa zmiennej
s=sort(a); - funkcja zwraca posortowane wartości podane w postaci wektora a wynik
zapisywaney jest do zmiennej s. Jeśli a jest macierzą, funkcja sortuje każdą z kolumn
niezależnie
[s,o]=sort(a); - funkcja robi to co powyżej dodatkowo zwracając zmienną o która zawiera
indeksy posortowanych wartości, tak że: (gdy a jest wektorem) s=a(o);
plot(x,y); - rysuje wykres 2D, jeżeli x jest macierzą, rysuje kilka wykresów, osobno dla każdej
kolumny macierzy x. Uwaga x oraz y muszą mieć ten sam rozmiar
plot(x,y,’ab’); tworzy wykres jak wyżej ale z odpowiedniemu właściwościami gdzie a może
przyjmować wartości [r g b c m y k] odpowiadające kolorom wykresu, zaś b odpowiada
postaci wykresu:
Ciągły
:
Linia punktowa
.Linia kropka punkt
.
Wykres punktowy
s
Punktowy, ale punkty są reprezentowane jako kwadraty
^
Punktowy, ale punkty są reprezentowane jako trójkąty
>
Punktowy, ale punkty są reprezentowane jako trójkąty zwrócone w prawo
<
Punktowy, ale punkty są reprezentowane jako trójkąty zwrócone w lewo
hold on/off; - wywołanie powoduje hold on powoduje że podczas tworzenia nowego wykresu
stara zawartość wykresu nie będzie usuwana. Domyślnie jest hold off;
figure(i); tworzy obiekt graficzny o numerze i na którym będzie rysowany dany wykres.
z = sum(x); sumuje wartości x, jeśli x jest macierzą o wymiarach (n x m) sumowanie
następuje w kolumnach, tak iż po realizacji uzyskujemy wynik w postaci wektora o rozmiarze
(1 x m)
z = sum(x,dim); Podobnie jak wyżej z tą różnicą iż możemy wskazać wymiar macierzu po
którym ma nastąpić sumowanie.
mx = max(x); funkcja znajduje maksymalną wartość x, jeżeli x jest macierzą (n x m) funkcja
max zwraca wektor wartości maksymalnych liczony osobno dla każdej kolumny
mi = min(x); analogicznie jak wyżej dla szukania minimum.
si = size(x); funkcja zwracająca rozmiar tablicy x. Domyślnie wartość zwracana przez funkcję
jest dwuargumentowa zwracając ilość wierszy i ilość kolumn tablicy x. si(1) – liczba wierszy,
si(2) – liczba kolumn
si = size(x,n); podobnie jak wyżej z tą różnicą iż zmienna n określa wymiar który jest
zwracany. Odpowiada to zależności si = size(x); si = si(n);
fi = find(warunek); polecenie zwraca listę indeksów tabeli, które spełniają określony warunek
np. x = [-1 1 2 -3 4 -2]; fi = find(x<0); wynikiem powyższego programu będzie fi = [1 4 6]
Zadania:
Narysuj wykres funkcji y=x2 dla x z przedziału -10 do 10 z krokiem 0.01
Na nowym rysunku narysuj wykres funkcji sin(x) oraz cos(x) dla x z przedział -2pi do 2pi z
krokiem 0.01
Wczytaj dane z pliku iris.data (plik dostępny pod adresem:
http://metet.polsl.pl/~mblachnik/doku.php?id=dydaktyka:zajecia:io) i dokonaj jego
normalizacji (normalizacja oznacza sprowadzenie wartości do przedziału 0 - 1). Innymi
słowy normalizacja powoduje że wartości danej zmiennej powinny mieścić się w przedziale
x  min( x)
od 0 do 1. Aby to zrealizować posłuż się zależnością y 
max( x)  min( x)
Pamiętaj że zbiór Iris.data składa się z 5 kolumn i należy dokonać normalizacji każdej z nich
Po normalizacji narysuj każdą z kolumn tak iż na osi x są numery poszczególnych wektorów,
a na osi y ich wartości.
Narysuj wykres przedstawiający wymiar 3 i 4, przy czym przypadki z różnych gatunków
narysuj innym kolorem i zaznacz innym symbolem.