1 Wykład 1 dr Aneta Polewko-Klim - ii.uwb.edu.plii.uwb.edu.pl/~anetapol/Wykład1_2017.pdf · -...

36
1 1 Wykład 1 dr Aneta Polewko-Klim 1 http://engineering.nyu.edu/files/imagecache/event_node/events/matlab%20graphic%20.jpg

Transcript of 1 Wykład 1 dr Aneta Polewko-Klim - ii.uwb.edu.plii.uwb.edu.pl/~anetapol/Wykład1_2017.pdf · -...

1

1

Wykład 1

dr Aneta Polewko-Klim

1http://engineering.nyu.edu/files/imagecache/event_node/events/matlab%20graphic%20.jpg

2

1. Wprowadzenie do Matlaba.

Języki programowania takie jak C, C++ umożliwiają tworzenie programu realizującego dowolne zadanie obliczeniowe,

jest to często czasochłonne i skomplikowane.

W przypadku zadań typowo obliczeniowych lub inżynierskich alternatywę stanowi skorzystanie z pakietu obliczeniowego

np. MATLAB-a (ang. MATrix LABoratory) firmy MathWorks.

Matlab umożliwia dużo szybsze wykonanie zadania obliczeniowego niż zrealizowanie takiego samego algorytmu np. w

C++.

2

2https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRT6A_Ety5Y2bfcAtDbPOojUWCyV_miXMt-8IHUAZ_8BiJBv47v

3

2. Skład pakietu:

- interpreter języka programowania z

bibliotekami podstawowych działań i

obliczeń na macierzach tj. np. translacja

macierzy, sprzężenie macierzy itd.

- realizujące różne obliczenia standardowe

biblioteki procedur napisane w języku

programu MATLAB

np. procedury realizujące przekształcenia

macierzy, obliczanie wartości funkcji elementarnych

i specjalnych, całkowanie numeryczne,

podstawowe obliczenia statystyczne

- nakładki (dodatkowe programy napisane w

języku pakietu MATLAB), które ułatwiają

realizację obliczeń określonego rodzaju

np. Simulink - nakładka umożliwiająca interakcyjne definiowanie struktury układów dynamicznych oraz wygodną jego

symulację.

- biblioteki dodatkowe (ang. toolbox), które nabywa się oddzielnie w zależności od potrzeb użytkownika.

4

a) Mapping Toolbox

3

3 http://www.mathworks.com

5

b) Signal Processing Toolbox – Cyfrowe przetwarzanie sygnałów,

6

c) Optymization Toolbox

7

d) Bioinformatics Toolbox

8

e) Image Processing Toolbox

4

4http://wiki.biac.duke.edu

9

f) Neural Network Toolbox

10

e) Financial Toolbox

11

3. Zalety:

- możliwość modyfikacji istniejących i dodawania własnych m-plików, dołączaniu do m-plików programów zewnętrznych

napisanych w języku C (C++), wywoływaniu i wykonywaniu w środowisku C (C++) programów napisanych w MATLAB-ie;

konwersja m-funkcji MATLAB-a na kod C (C++), eksport / import plików z / do MATLAB-a (np. z MATLAB-a do Excela i

odwrotnie);

- możliwość jednoczesnego korzystania z m-funkcji, pochodzących z różnych bibliotek dodatkowych; kompilacja m-plików do

postaci wykonywalnej poza środowiskiem MATLAB;

- dostępność na różnych platformach sprzętowych czy systemowych

Integracja Photoshopa z MATLAB

12

4. Kreatywni Studenci kontra Matlab:

(5)

Projekt i wykonanie autonomicznego robota kroczącego „ANIA” sterowanego z wykorzystaniem rozproszonego systemu sensoryki

(Model układu sonaru opracowano w programie Matlab Simulink)

5http://lroj.wordpress.com

14

6. Interfejs.

Główne okno Matlaba - Command

Window (Okno poleceo) służy do

bezpośredniego wpisywaniu

poleceo, w tym samym oknie

pojawiają się również odpowiedzi

programu.

Pozostałe panele:

- Command History (Historia

poleceo), które zawiera wszystkie

polecenia wydane podczas pracy z

Matlabem.

- Workspace (Przestrzeo robocza),

jest to lista aktualnie dostępnych

zmiennych wraz z informacją o ich

rozmiarze i typie.

- Current Directory (Katalog

bieżący), zawierające aktualny

główny katalog roboczy.

15

W górnej części okna

Matlaba znajduje się menu

poziome oraz pasek

narzędziowy. Pierwszą opcją

jest instrukcja File.

New – Nowe puste okno,

mamy do wyboru: m-file (m-

plik), figure (rysunek),

model (okno simulinka), GUI

(okno tworzenia interfejsu

graficznego).

Open... – Otwiera pliki

Matlaba.

Close Command Window –

Zamyka okno główne.

Import Data... – Wprowadza do przestrzeni roboczej zmienne wcześniej zapisane.

Save Workspace As... – Zapisuje zmienne z przestrzeni roboczej. Set Path... – Ustawianie ścieżek dostępu do katalogów roboczych. Preferences... – Ustawienia główne programu.

Z menu Edit wszystko powinno być jasne. View – wprowadza zmiany w wyglądzie samego interfejsu, ustawienie okien itp.

W opcji Window mamy tylko close all. Ostatnia opcja Help. Generalnie otwierane jest oddzielne okno pomocy

Matlaba.Dodatkowo mamy tutaj Demos, które uruchamia okno z programami demonstracyjnymi. Są one napisane w

Matlabie i obrazują działanie samego Matlaba, toolboksów, simulinka itp.

16

7. Wybrane skróty klawiszowe

F5 – uruchamia skrypt otwarty w oknie edytora

F9 – wykonuje w oknie poleceo zaznaczony fragment skryptu

CTRL+C – przerywa wykonywanie programu

CTRL+R – dodaje znak komentarza na początku zaznaczonych linii

CTRL+T – usuwa znak komentarza z początku zaznaczonych linii

CTRL+A – zaznacza cały tekst

CTRL+I – poprawia wcięcia w zaznaczonym fragmencie kodu

6

6https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQwjlmOYucJWaW4KKiWNSJTvQ9ZMAAhkqyz8_waVzrbF_elkB6X

17

8. Pomoc systemowa.

Najprostszą metodą uzyskania informacji o funkcjach Matlaba podczas pracy z pakietem jest wpisane polecenia helpw

konsoli:>> help nazwa_funkcji

18

9. Polecenia pomocnicze.

Wybrane polecenia pomocnicze:

- type nazwa_pliku_tekstowego – wyświetla zawartośd pliku tekstowego o podanej nazwie. Wyświetla także m-pliki, gdyż też są to pliki tekstowe.

- lookfor szukana_nazwa – przeszukuje wszystkie teksty pomocy w celu znalezienia szukanej nazwy, lub jej fragmentów.

- which nazwa_m-piku – wyświetla ścieżkę dostępu do m-pliku lub m-funkcji. Nazwy podaje się bez rozszerzenia, - np.: >> which normal C:\Tools\matlabR12\work\normal

- clc – czyści okno poleceo Matlaba i lokalizuje kursor w lewym górnym rogu. - dir (lub ls) – wyświetla nazwy plików w bieżącym katalogu. - dir nazwa_katalogu – wyświetla nazwy plików w katalogu o podanej nazwie, np.:

>> dir toolbox

. fuzzy matlab rptgenext simulink

.. ident nnet rtw stateflow

control local optim signal symbolic

19

15. Zmienne

nazwa zmiennej Matlaba musi się rozpoczynać literą i może składać się z dowolnej ilości liter, cyfr i znaków podkreślenia.

nie musimy deklarować zmiennych ani podawać ich rozmiaru. jeśli pojawia się nowa zmienna, Matlab automatycznie tworzy ją i przydziela jej odpowiednią ilość pamięci.

jeśli zmienna o takiej nazwie już była, jej poprzednia wartość zostanie zastąpiona nową.

zmienne z przestrzeni roboczej Matlaba można usunąć za pomocą polecenia:

- clear nazwa_zmiennej – usuwa zmienną z przestrzeni roboczej.

- clear lub clearall– usuwa wszystkie zmienne.

20

10. Zmienne i wartości specjalne.

Pierwszą zmienną specjalną jest zmienna ans.

Matlab wykorzystuje tą zmienną gdy przy wykonywaniu jakiegoś polecenia nie podamy pod jaką zmienną ma byd zapisany wynik.

Matlab zawiera też inną standardową zmienną eps, jest to odległośd pomiędzy liczbą 1, a najbliższą większą od niej liczbą

zmiennoprzecinkową. Jej wartośd początkowa to 2.2204e-016 = 2-52. Służy ona m.in. do wyznaczania rzędu macierzy.

21

Mamy też predefiniowane stałe w Matlabie takie jak np. pi.

Niekiedy funkcje zwracają specjalne wartości, i tak:

+/- inf – nieskooczonośd.Jest rezultatem operacji, która przekracza zakres arytmetyki komputera np.: 1/0 lub sinh(10000)

NaN – nieliczba. Jest wynikiem matematycznie niezdefiniowanej operacji, np.: 0/0.

22

11. Zasady pisania programów.

Matlab umożliwia pracę w dwu trybach: - interaktywnym – polega na wpisaniu jednego lub kilku poleceń w linii zgłoszenia, np.:

>> clc

- wsadowym – z wykorzystaniem m-plików czy inaczej skryptów. Jest to niesformatowany plik tekstowy, zawierający instrukcje przeznaczone do wykonania. Wykonanie tego skryptu polega na wpisaniu jego nazwy w linii poleceń Matlaba i jego uruchomieniu. Nazwę wpisujemy bez rozszerzenia (*.m). Wyróżniamy m-pliki funkcyjne oraz właśnie skryptowe. m-pliki funkcyjne operują na zmiennych lokalnych, natomiast skryptowe na zmiennych globalnych.

Przykład m-pliku:

% znak ten oznacza komentarz

clc% czyszczenie ekranu

x = [-1 1];%wektor x

y=3*x; %wartość funkcji

plot(x,y);%wykonanie wykresu

grid on%włączenie siatki

23

Opracowano na podstawie: "MATLAB Style Guidelines" autor Richard Johnson

MATLAB Guidelines

- używaj spacji pomiędzy znakami nie: a=b-c

tak: a = b - c

simpleAverage = (firstTerm + secondTerm) / two;

for index = 1 : nIterations

foo(alpha, beta, gamma) - nazwę zmiennej rozpoczynaj się z małej litery, jej nazwa powinna odnościć się do jej znaczenia:

nie: k = x - y * z

tak: kwotaDlugu = kwotaPozyczki - liczbaSplaconychRat * kwotaRaty

- staraj się używać nazw angielskich np. linearity, qualityOfLife

- zmiennym o małym znaczeniu (zasięgu) nadawaj krótkie nazwy, np. dimX = 5, - dla zmiennych o dużym zasięgu nazwy długie np. dimensionZ = 10 - nazwy zmiennych wejściowych funkcji: x, y, z, t - nazwy zmiennych iteracyjnych: k, m, n

24

- ilościowe zmienne, numer obiektu (prefix n): nFiles, nSegments, nColumns - numer wiersza: mRows - nazwy dwóch zmiennych nie mogą różnić się tylko 1 literą na końcu np.

nie: litera "s" point points

tak: thePoint, thisPoint, pointArray, PointList

- numeracja, iteracja zmiennych:

tak: tableNo, employeeN, iTable, iEmployee

Przykład:

for iFile = 1:nFiles for jPosition = 1:nPositions

........ end

....... end

25

- zmienne logiczne (Boolean)

nie: ~isNotFound isNotFound

tak: isFound ~isFound - Akronimy

nie: hTML, isUSASpecific, checkTIFFFormat()

tak: html, isUsaSpecific, checkTiffFormat() - Funkcje (Functions) - nie nadpisujemy wbudowanych funkcji np.:

alpha, angle, axes, axis, balance, beta, contrast, gamma, image, info, input, length, line, mode, power, rank, run, start, text, type

- nazwy funkcji piszemy małymi literami np.: linspace, meshgrid choć dozwolone jest też:

getobj, setAppData, computeWeightedAverage, computeSpread, findOldestRecord, findTallestMan

26

- funkcje logiczne (Boolean) np. isOverpriced, iscomplete

isValid = (value >= lowerLimit) &… (value <= upperLimit); isNew = ~ismember(value, valueArray);

if (isValid & isNew) : end - inne przykłady:

value = (10 * nDimes) + … (5 * nNickels) + …

(1 * nPennies); krótkie instrukcje:

if(condition), statement; end

while(condition), statement; end

for iTest = 1:nTest, statement; end

27

12. Macierze.

Odmiany macierzy dwuwymiarowej. - skalar – macierz o rozmiarze 1x1 - wektor wierszowy – macierz o jednym wierszu - wektor kolumnowy – macierz o jednej kolumnie

Definiowanie macierzy wymaga uwzględnienia następujących reguł:

- elementy w wierszu macierzy muszą być oddzielone spacją lub przecinkiem - średnik lub znak nowego wiersza (enter) kończy wiersz macierzy i powoduje przejście do następnego

- cała lista elementów macierzy musi być ujęta w nawiasy kwadratoweŚrednik na końcu polecenia powoduje, że nie pojawi się nam wynik operacji. Otrzymamy macierz o dwóch wierszach i czterech kolumnach.

Wariant 1 Wariant 2

>> matrixA = [ 1 5 3 4; 0 2 8 7]; >>matrixB = [ 1 2 3 4 ...

5 6 7 8]

28

Przykład macierzy

Grafika

Relacyjne bazy danych

29

13. Szybkie generowanie elementów z równym krokiem.

- wykorzystujemy wyrażenie ogólne o postaci min : max.

>>vectorX =1:6

vectorX =

1 2 3 4 5 6

- wykorzystujemy wyrażenie min : krok : max

>>vectorY =3:2.3:9

vectorY =

3.0000 5.3000 7.6000

- różne kroki w różnych wierszach:

vectorZ =[1:10; 1:2:20]

vectorZ =

1 2 3 4 5 6 7 8 9 10

1 3 5 7 9 11 13 15 17 19

30

14. Budowanie macierzy z podmacierzy.

Macierz można budować z innych macierzy. Należy najpierw zdefiniować podmacierze:

>> matrixA=[3 -1; 4 9]

>>matrixB= [3 5 7]

>>matrixC=[6; 0]

Otrzymamy:

matrixA =

3 -1

4 9

Utwórzmy teraz macierz wynikową:

>>matrixD=[matrixB; matrixC matrixA]

matrixD =

3 5 7

6 3 -1

0 4 9Pamiętaj że macierz wynikowa musi posiadad jednakową liczbę elementów w każdym wierszu i kolumnie.

matrixB =

3 5 7

matrixC =

6

0

31

15. Funkcje generujące macierze.

Konstruowanie macierzy można wspomagać standardowymi funkcjami, przydadzą Ci się do testów oprogramowania:

Funkcja Opis

eye(n)

eye(n, m)

eye([n m])

tworzy macierz jednostkową o rozmiarze n x n, lub macierz n x m

z jedynkami na głównej przekątnej

ones(n)

ones(n, m)

ones([n, m])

tworzy macierz o wszystkich elementach równych 1

zeros(n)

zeros(n m)

zeros([n, m])

tworzy macierz o wszystkich elementach równych 0

rand(n)

rand(n m)

tworzy macierz o rozmiarze n x n lub n x m wypełnioną liczbami

pseudolosowymi z przedziału <0,1> o rozkładzie jednostajnym

32

rand([n m])

randn(n)

randn(n m)

randn([n m])

tworzy macierz o rozmiarze nxn lub n x m wypełnioną liczbami

pseudolosowymi o rozkładzie normalnym ze średnią 0 i wariancją

równą 1

inv(A) macierz odwrotna do A, inv(A)=A^(-1)

Jeżeli chcemy utworzyd macierz np.: jednostkową o wymiarze takim jak inna macierz X, należy użyd wyrażenia:

eye(size(X))

ones(size(X))

zeros(size(X))

gdzie funkcja size(X) określi wartośd to rozmiar macierzy X

33

16. Dostęp do elementów macierzy.

element macierzy znajdujący się w wierszu o indeksie i oraz w kolumnie o indeksie j jest określony jako A(i,j).

do elementów macierzy można się też odwoływad przy użyciu tylko jednego indeksu, np. A(k) (w przypadku wektora odwołanie takie odnosi się do kolejnego elementu wektora, natomiast w przypadku macierzy odwołanie takie zostanie potraktowane jako odwołanie do wektora kolumnowego utworzonego z kolejnych kolumn macierzy).

Przykład matrixC=

Pytania:

Co wyświetli się na ekranie gdy wpiszemy C(3,2)?

Cowyświetli się na ekranie gdy wpiszemy C(2; :)?

2 5 6 4 9

5 0 3 1 6

1 2 5 9 1

34

A teraz to samo ale z użyciem pliku o np. nazwie kombinacjeKlasyfIdeal.xls, zwród uwagę na analogię:

Co wyświetli się na ekranie gdy wpiszemy kombinacjeKlasyfIdeal(1:3,[2, 8, 14])?

35

17. Odwołanie do fragmentów macierzy.

Odwołanie do wybranych fragmentów wektorów i macierzy możemy zrealizować za pomocą dwukropka:

Odwołanie Opis

x(j:k) elementy wektora wierszowego x o numerach od j do k

A(i,:) wszystkie elementy w wierszu i macierzy A

A(i,j:l) wszystkie elementy w wierszu i macierzy A o numerach od j do l

A(i:k,j:l) wszystkie elementy w kolumnach od j do l wierszy od i do k

A(x,j:l) wszystkie elementy w kolumnach od j do l w wierszach macierzy A o numerach określonych przez

elementy wektora x

A(:,:) cała dwuwymiarowa macierz A

A(:) cała macierz A w postaci wektora kolumnowego

36

18. Usuwanie fragmentów macierzy.

Wybrany element macierzy usuwa się przypisując mu wartość w postaci macierzy pustej. Macierz taka nie ma zawartości

i składa się z dwóch nawiasów kwadratowych ([]).

Weźmy macierz: matrixK =[1 2 3; 4 5 6; 7 8 9]

matrixK =

1 2 3

4 5 6

7 8 9

Aby usunąć np. drugi wiersz należy użyć polecenia:

matrixK(2,:)=[]

otrzymamy:

K =

1 2 3

7 8 9