1 Wykład 1 dr Aneta Polewko-Klim - ii.uwb.edu.plii.uwb.edu.pl/~anetapol/Wykład1_2017.pdf · -...
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.
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
13
5. Wykorzystanie Matlab w przemyśle:
Przemysł lotniczy i obronny
Przemysł motoryzacyjny
Biotechnologia i przemysł farmaceutyczny
Telekomunikacja
Elektronika_i_pólprzewodniki
Przemysł energetyczny
Usługi finansowe
Automatyzacja i przemysł maszynowy
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]
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