POLITECHNIKA ŚLĄSKA
w Gliwicach
WYDZIAŁ AUTOMATYKI, ELEKTRONIKI i INFORMATYKI
Instytut Elektroniki
Zakład Elektroniki Biomedycznej
INSTRUKCJA DO LABORATORIUM
OBLICZEŃ INŻYNIERSKICH
Wprowadzenie do MATLABa
Opracował: mgr inż. Paweł Szwarc
Gliwice, 27 kwietnia 2011
1 Cel ćwiczenia
2
1
Cel ćwiczenia
Celem ćwiczenia jest zapoznanie się z podstawami obsługi środowiska MATLAB.
2
Okna w MATLABie
Po uruchomieniu MATLABa widzimy 3 okna:
1. Okno poleceń „Command Window”, w którym wpisujemy polecenia, potwierdzając je
klawiszem ”Enter”. Gdy tekst polecenia nie mieści się w jednej linii okna, można przejść
do następnej, wpisując wielokropek [
] i kontynuować wpisywanie treści polecenia w na-
stępnej linijce, po czym nacisnąć klawisz „Enter”.
Polecenia można zakończyć średnikiem. Wówczas nie zostanie wyświetlona odpowiedź
w oknie poleceń. Niezakończenie polecenia średnikiem powoduje wypisanie w oknie po-
leceń odpowiedzi – wyniku działania polecenia. Przykładowo wpisanie polecenia x=2+3
i naciśnięcie klawisza „Enter” powoduje nadanie zmiennej „x” wartości „5” i wyświetlenie
jej w oknie poleceń, natomiast wpisanie polecenia x=2+3; i naciśnięcie klawisza „Enter”
powoduje nadanie zmiennej „x” wartości „5” bez wyświetlania jej w oknie poleceń.
Wartość zmiennej „x” w powyższym przykładzie zostanie wprowadzona do tzw. „przestrzeni
roboczej” (ang. workspace).
Można także wykonać polecenie typu 2+3. Wówczas wartość „5” przypisana zostanie
do standardowej zmiennej roboczej o nazwie „ans” i pod tą nazwą znajdzie się w prze-
strzenie roboczej.
Aby wywołać tekst napisanego wcześniej polecenia, można:
• użyć klawisza ↑, którego każde kolejne naciśnięcie powoduje przywoływanie poprzed-
nio wydanych poleceń. Po natrafieniu na szukane polecenie należy w celu jego wy-
konania nacisnąć klawisz „Enter”;
• w celu ułatwienia wyszukiwania poleceń przed naciśnięciem klawisza ↑ wpisać pierw-
sze litery szukanego polecenia, np. „x=”. Wówczas kolejne naciśnięcia klawisza ↑
będą przywoływać wydane wcześniej polecenia zaczynające się od podanych liter;
• wykorzystać okno historii poleceń;
Okno poleceń można wyczyścić, wpisując polecenie clc.
UWAGA: W celu korzystania z wbudowanych funkcji MATLABa wygodnie jest korzystać
z okienka podpowiedzi kontekstowej, które otwiera się po wpisaniu pierwszej litery nazwy
funkcji i naciśnięciu klawisza Tab. Przykładowo, gdy chcielibyśmy skorzystać z funkcji
power, wpisujemy literę p i naciskamy Tab. W otwierającym się okienku podpowiedzi
znajdą się wszystkie widziane przez MATLABa funkcje, których nazwy zaczynają się
na wybraną literę. Kolejno naciśnięcia liter o i w przesuwają nas na odpowiednie miejsce
3 Korzystanie z pomocy w MATLABie
3
na liście, po której możemy także poruszać się przy pomocy strzałek. Po zaznaczeniu
żądanej funkcji naciskamy Enter, wprowadzając ją do naszego polecenia.
2. Okno historii poleceń „Command History”, w którym przechowywane są wszystkie po-
przednio wydane polecenia, dopóki nie zostanie wybrana opcja wyczyszczenia tego okna
poprzez wybranie z menu Edit -> Clear Command History. Podwójne kliknięcia polecenia
znajdującego się na liście w oknie historii poleceń powoduje wykonanie tego polecenia.
UWAGA: Możemy również przeciągnąć myszą jedno lub kilka poleceń (uprzednio je za-
znaczywszy) z historii poleceń do okna poleceń. Naciśnięcie klawisza Enter spowoduje
wykonanie przeciągniętych poleceń.
3. Okno z dwiema zakładkami „Current Directory” i „Workspace”. Po kliknięciu zakładki
„Current Directory” widzimy w tym oknie katalogi i pliki znajdujące się w katalogu bie-
żącym MATLABa, który wybrać możemy, klikając ikonkę „. . . ” znajdującą się pod menu
programu. Po kliknięciu na zakładkę „Workspace” widzimy nazwy, wartości i typy zmien-
nych znajdujących się aktualnie w przestrzeni roboczej MATLABa.
Wykonanie polecenia who powoduje wypisanie w odpowiedzi zmiennych obecnych w prze-
strzeni roboczej. Polecenie whos pozwala dodatkowo uzyskać informację o typach zmien-
nych [
], a polecenie whos zmienna o typie wybranej zmiennej. By uzyskać informację
o wartości zmiennej, wystarczy jej nazwę wpisać w wierszu poleceń i nacisnąć „Enter”.
Po podwójnym kliknięciu wybranej zmiennej w oknie „Workspace”, otwiera się dodatkowe
okno edytora tablic „Array Editor”, co umożliwia podgląd zawartości zmiennej tablicowej.
Poleceniem clear uzyskujemy wyczyszczenie przestrzeni roboczej poprzez usunięcie wszyst-
kich obecnych w niej zmiennych. Polecenie clear nazwa_zmiennej powoduje usunięcie
z przestrzeni roboczej zmiennej o podanej nazwie. Polecenie
clearvars -except zmienna_1 zmienna_2 ...; usuwa wszystkie zmienne za wyjąt-
kiem wymienionych.
3
Korzystanie z pomocy w MATLABie
Interaktywny system pomocy uruchamia się w MATLABie poprzez wybór z menu Help ->
MATLAB Help. Podane tam informacje są starannie przygotowane i bogato ilustrowane przy-
kładami oraz rysunkami [
]. Bardzo przydatne jest również polecenie help nazwa_funkcji.
Przykładowo wpisanie help plot pozwala nam zapoznać się z opisem funkcji „plot” służącej
do rysowania wykresów.
4 Macierze
4
4
Macierze
4.1
Tworzenie macierzy
W celu utworzenia np. 5-elementowego wektora o nazwie a, którego elementy to liczby od 1
do 5, wykonujemy polecenie:
a =[1 2 3 4 5 ]
Elementy wektora oddzielamy spacjami lub przecinkami dla wektorów wierszowych, a średni-
kami dla wektorów kolumnowych. Całość wektora zaś obejmują nawiasy kwadratowe.
Utworzenie macierzy o nazwie A i wymiarach 3 na 3 oraz elementach, którymi są kolejne
liczby naturalne, wygląda następująco:
A=[1 2 3 ; 4 5 6 ; 7 8 9 ]
Jak widać, elementy w wierszach oddzielamy spacjami, zaś wiersze od siebie oddzielamy śred-
nikami. Do elementu macierzy odwołujemy się, podając w nawiasach okrągłych indeks wiersza
i kolumny, np. A(2,3) oznacza element znajdujący się w drugim wierszu i w trzeciej kolumnie
macierzy A. Numeracja wierszy i kolumn w MATLABie rozpoczyna się od indeksu „1”.
Wektor o równomiernie rozłożonych elementach uzyskujemy, stosując operator dwukropka [
Przykładowo wektor a o identycznych wartościach, jak poprzednio, można również uzyskać po-
leceniem:
a =1:5
Domyślnym krokiem inkrementacji przy tworzeniu elementów wektora jest jak widać war-
tość „1”. Aby zmienić ten krok, używamy następującej notacji:
c = 1 : 0 . 5 : 5
otrzymując wektor c 9-elementowy, o elementach z zakresu od 1 do 5 z krokiem co 0.5. Gdy chcie-
libyśmy uzyskać wektor d o elementach od 5 do 1, użyjemy polecenia:
d=5: −1:1
Operator dwukropka jest również przydatny, gdy chcemy odwołać się do wybranych wierszy
i kolumn macierzy. Przykładowo, by utworzyć podmacierz B utworzonej wyżej macierzy A
składającą się z elementów macierzy A znajdujących się w pierwszym i drugim wierszu, ale tylko
w kolumnach pierwszej i trzeciej, użyjemy następującego polecenia:
B=A( 1 : 2 , [ 1
3 ] )
Zauważamy tu, iż wyboru sąsiednich wierszy dokonujemy przy pomocy notacji dwukropkowej,
która de facto oznacza dwuelementowy wektor o elementach o wartościach „1” i „2”. Wyboru
kolumn zaś, które nie są w tym przypadku sąsiednimi, dokonujemy, podając po przecinku,
w miejscu indeksu kolumny, wektor (stąd nawiasy kwadratowe) o elementach, których wartości
to indeksy wybieranych kolumn.
4.1
Tworzenie macierzy
5
Chcąc utworzyć macierz C, która stanowiłaby podmacierz macierzy A składającą się z całego
pierwszego i drugiego wiersza macierzy A, również użyjemy notacji dwukropkowej w następu-
jący sposób:
C=A( 1 : 2 ,
: )
Zamiana miejscami kolumn i wierszy macierzy A również nie stanowi problemu. Macierz
F, która różnić się będzie od macierzy A zamianą miejscami wiersza pierwszego i drugiego
oraz kolumny pierwszej i trzeciej, stworzymy w następujący sposób:
F=A( [ 2 1 3 ] , [ 3 2 1 ] )
Gdy nie znamy rozmiaru macierzy, a chcemy odwołać się do jej ostatniego wiersza lub ostat-
niej kolumny, przydatne staje się słowo kluczowe end – przykładowo:
b=A(
end
, : )
tworzy wektor b z ostatniego wiersza macierzy A.
Macierze i wektory w MATLABie można z łatwością sklejać i dopisywać do nich kolejne
elementy. Przykładowo polecenie:
G=[ a ; b 10 1 1 ]
pozwoli z utworzonych wcześniej wektorów a i b oraz dopisanych elementów o wartościach „10”
i „11” stworzyć następującą macierz:
G =
1 2 3
4
5
7 8 9 10 11
.
(1)
Usuwanie wierszy i kolumn macierzy uzyskujemy, stosując operator [ ]. Przykładowo pole-
cenie:
G( : , 1 : 2 : 5 ) = [ ]
usuwa ze stworzonej macierzy G kolumny nieparzyste, co daje w efekcie:
G =
2
4
8 10
.
(2)
Rozmiar wektora pozwala nam uzyskać polecenie length(nazwa_wektora). Rozmiar ma-
cierzy zaś polecenie size(nazwa_macierzy). Gdy chcemy poznać przykładowo liczbę kolumn
macierzy A, zastosujemy polecenie size(A,2).
Utworzenie macierzy jednostkowej wykonuje się poleceniem eye(rozmiar_macierzy). Utwo-
rzenie macierzy, której wszystkie elementy są równe „1”, pozwala uzyskać polecenie ones(liczba_
wierszy, liczba_kolumn). Utworzenie zaś macierzy zerowej polecenie zeros(liczba_wierszy,
liczba_kolumn).
4.2
Operacje na macierzach
6
4.2
Operacje na macierzach
Transpozycji macierzy dokonujemy, stosując operator .’ – polecenie:
H=A. ’
utworzy macierz H stanowiącą transpozycję macierzy A. Sprzężenie macierzy uzyskuje się,
stosując operator ’.
Operacje macierzowe mnożenia, dzielenia, dodawania i odejmowania uzyskuje się, stosując
operatory ∗, /, + i −. Przykładowo polecenie:
I=A∗H
pozwoli uzyskać macierz I stanowiącą iloczyn macierzowy macierzy A i H.
Czasem chcemy jednak uzyskać macierz wynikową, np. J, której każdy element będzie sta-
nowił iloczyn (lub iloraz) odpowiednich elementów innych macierzy, np. A i H. Uzyskamy to,
stosując operator tzw. mnożenia tablicowego .∗:
J=A. ∗H
Odpowiedni operator dzielenia tablicowego to ./. Macierze podlegające mnożeniu lub dzieleniu
tablicowemu muszą mieć oczywiście ten sam rozmiar.
Jeśli macierze A i H określimy jako
A =
a
11
a
12
a
13
a
21
a
22
a
23
a
31
a
32
a
33
i
(3)
H =
h
11
h
12
h
13
h
21
h
22
h
23
h
31
h
32
h
33
,
(4)
to ich iloczyn tablicowy J będzie wyglądał następująco:
J =
a
11
∗ h
11
a
12
∗ h
12
a
13
∗ h
13
a
21
∗ h
21
a
22
∗ h
22
a
23
∗ h
23
a
31
∗ h
31
a
32
∗ h
32
a
33
∗ h
33
.
(5)
Macierz odwrotną uzyskać można, stosując polecenie inv(nazwa_macierzy), np.:
K=
inv
( J )
Można również w tym celu zastosować polecenie nazwa_macierzy^(-1). Wyznacznik macierzy
pozwala uzyskać polecenie det.
Na macierzach o tym samym rozmiarze możemy również prowadzić operacje logiczne. Za przy-
kład niech posłuży porównanie macierzy A i H:
L=A==H
4.2
Operacje na macierzach
7
W wyniku otrzymujemy macierz L, która posiada jedynki na przekątnej, czyli na tych pozy-
cjach, gdzie elementy macierzy A i H (H = A
T
) są identyczne. Można także porównać ma-
cierz z liczbą. Wówczas w wyniku otrzymamy macierz posiadającą jedynki na tych pozycjach,
gdzie w porównywanej macierzy występuje zadana liczba, np.:
M=A==5
Inne przykłady operacji logicznych na macierzach znaleźć można np. w [
Indeksy elementów macierzy spełniające zadane kryterium (np. A == H) znaleźć można,
posługując się poleceniem find. Pamiętać jednak należy, że macierz jest wówczas indeksowana
domyślnie, tak jakby była wektorem. W efekcie wykonania polecenia:
i n d e k s y=
f i nd
(A==H)
otrzymamy w tym przypadku wektor złożony z indeksów 1, 5 i 9. Aby przetworzyć takie indeksy
na indeksy wierszy (i) i kolumn (j), zastosujemy polecenie [i,j]=ind2sub(size(A), indeksy).
Istnieje również polecenie odwrotne zamieniające indeksy wierszy i kolumn na indeksy wekto-
rowe w postaci sub2ind.
UWAGA: Możemy również wywołać funkcję find, przejmując od niej dwa parametry wyj-
ściowe. Wówczas do pierwszego z nich trafią numery wierszy, a do drugiego numery kolumn,
np.:
c l c
;
c l e a r
;
c l o s e a l l
;
A=o n e s ( 3 , 3 ) ;
i n d e k s y=
f i nd
(A==1)
[ i
j ]=
f i nd
(A==1)
Sumę elementów wektora lub macierzy uzyskamy, stosując polecenie sum, np.:
suma=
sum
(
sum
(A) )
Polecenie sum należy w powyższym przykładzie zastosować dwukrotnie, gdyż najpierw sumo-
wane są elementy w każdej z kolumn, co daje w efekcie 3-elementowy wektor, a następnie
sumowane są elementy tego wektora, co pozwala uzyskać sumę elementów macierzy A.
Polecenie prod pozwala nam obliczyć iloczyn elementów wektora. Polecenie mean wyzna-
czyć średnią jego elementów, median ich medianę, min i max zaś znaleźć odpowiednio element
minimalny i maksymalny. Gdy chcemy polecenia te zastosować do macierzy, podobnie, jak
przy poleceniu sum musimy zastosować je wielokrotnie lub użyć zapisu postaci mean(A(:)),
który macierz A potraktuje jako wektor złożony ze wszystkich jej elementów, a następnie po-
liczy ich średnią.
Jeśli chcielibyśmy z kolei znaleźć największy element w każdym wierszu macierzy A, mu-
simy wskazać to w trzecim parametrze polecenia max, pisząc np. maksymalne=max(A, [], 2).
Parametr ten wskazuje tu wymiar drugi, czyli wiersze. Zapis maksymalne=max(A, 2) oznacza
z kolei co innego - wskazanie zawsze większej z liczb - elementu macierzy bądź liczby 2. W
5 Liczby zespolone
8
efekcie uzyskuje się macierz liczb spełniających podane kryterium o tych samych wymiarach,
co macierz A. Analogicznie zachowuje się polecenie min. Pozostałe wymienione wyżej pole-
cenia zachowują się przeciwnie - wymiar podajemy w drugim ich parametrze. Przykładowo
mean(A,2) oznacza średnią elementów w każdym wierszu.
Przydatne mogą również okazać się polecenia std i var obliczające odpowiednio odchylenie
standardowe i wariancję wektora.
Do sortowania elementów wektora służy funkcja sort.
5
Liczby zespolone
W MATLABie przyjęto domyślne symbole i = j =
√
−1. Liczbę zespoloną utworzyć możemy
więc w bardzo prosty sposób, np. z=2+3j. Zapis 3j pozwala uniknąć konfliktu oznaczeń zmien-
nej zespolonej j z inną zmienną, którą mogliśmy sami oznaczyć wcześniej symbolem j. Część
rzeczywistą liczby zespolonej pozwala nam uzyskać polecenie real, np. Re=real(z). Do uzy-
skania części zespolonej służy analogiczne polecenie imag. Kąt liczby zespolonej (w radianach)
uzyskujemy poleceniem angle. Liczbę zespoloną sprzężoną uzyskuje się z kolei operatorem ’.
6
Tworzenie M-plików
Rozróżnia się 2 rodzaje M-plików: skryptowe i funkcyjne. M-pliki funkcyjne będą opisane
w kolejnym punkcie. M-pliki skryptowe zawierają ciągi poleceń operujące na zmiennych do-
stępnych w przestrzeni roboczej. Ułatwiają wprowadzanie większej liczby danych oraz zapis
wyników obliczeń. Mogą zawierać również algorytmy obliczeniowe [
W celu stworzenia M-pliku, który będzie zawierał skrypt (listę poleceń) wykonywany po jego
uruchomieniu, wybieramy z menu File -> New -> M-File. Otwiera się okno edytora/debuggera
MATLABowego „Editor”. Wybieramy z menu edytora File -> Save As. . . i zapisujemy stwo-
rzony M-plik pod wybraną nazwą. Skrypty MATLABa posiadają rozszerzenie „*.m”. Aby otwo-
rzyć już istniejący plik, wybieramy z menu opcję File -> Open. Domyślnym katalogiem zapisu
i otwierania plików jest bieżący katalog roboczy MATLABa.
M-plik jest plikiem ASCII z rozszerzeniem „*.m”. Może on zawierać oprócz sekwencji poleceń
MATLABa wywołania innych M-plików. M-plik może również wywołać sam siebie [
Komentarze w M-plikach wpisujemy po znaku %. Zakomentowanie części skryptu uzysku-
jemy poprzez jej zaznaczenie i naciśnięcie klawiszy Ctrl+R. Usunięcie komentarza uzyskuje się
podobnie, używając skrótu klawiszowego Ctrl+T.
Oddzielenie fragmentów skryptu znakami %% pozwala na oddzielne ich wykonywanie po na-
ciśnięciu kombinacji klawiszy „Ctrl+Enter”. Tekst wpisany w danej linijce po %% staje się
tytułem następującego po nim fragmentu. Lista takich tytułów dostępna jest po kliknięciu
w edytorze ikonki „Show cell titles”. Kliknięcie na wybrany tytuł z listy powoduje przejście
kursora w edytorze do wybranego fragmentu.
7 Funkcje
9
7
Funkcje
M-pliki funkcyjne zawierają funkcje tworzone przez użytkownika. Działają na zmiennych
lokalnych i globalnych. Komunikują się z przestrzenią roboczą poprzez parametry formalne
i zmienne globalne [
M-pliki funkcyjne rozpoczynają się od słowa kluczowego function. Pierwsza linia M-pliku
funkcyjnego winna być zapisana następująco [
function
[ l i s t a p a r a m e t r ó w w y j ś c i o w y c h ] = n a z w a f u n k c j i ( l i s t a p a r a m e t r ó w w e j ś c i o w y c h )
Zaleca się, by nazwa M-pliku funkcyjnego była identyczna z nazwą stworzonej
w nim funkcji.
Funkcja widoczna jest w folderze, w którym ją zapisano. MATLAB przeszukuje również
w poszukiwaniu wywołanych funkcji foldery wpisane do wykazu ścieżek dostępu. Ścieżki te
można dodawać, wybierając z menu programu File -> Set Path. . . -> Add Folder. . . [
Lista parametrów wejściowych zawiera nazwy parametrów wejściowych funkcji, a lista pa-
rametrów wyjściowych zawiera nazwy parametrów wyjściowych funkcji. Parametry wejściowe
i wyjściowe funkcji oddziela się na tych listach przecinkami. Aktualne parametry wejściowe
i wyjściowe oraz wszystkie zmienne używane wewnątrz funkcji mają charakter lokalny.
Przekazanie informacji „na zewnątrz” przez funkcję odbywa się na drodze przypisania war-
tości parametrowi wyjściowemu funkcji. Przykładem niech będzie funkcja prostokat zapisana
w pliku prostokat.m
function
[ p o l e , obwod ] = p r o s t o k a t ( bok a , bok b )
obwod=2∗( b o k a+bok b ) ;
p o l e=b o k a ∗ bok b ;
8
Typy danych
W MATLABie podstawowym typem danych jest tablica. Jej elementami mogą być liczby
rzeczywiste lub zespolone, znaki albo inne tablice. Przedstawiona już macierz jest szczegól-
nym przypadkiem tablicy. Jest to dwuwymiarowa tablica liczb zapisywanych zawsze domyślnie
w podwójnej precyzji (typ double) [
Nie stosuje się deklarowania zmiennych. Tworzenie zmiennych określonego typu wykonuje
się poprzez instrukcję przypisania (tak czyniliśmy dotychczas) lub użycie odpowiedniej funkcji.
Zestawienie tych funkcji podaje polecenie help datatypes [
]. Funkcje te, będąc jednocześnie
nazwami określonych typów zmiennych, służą do konwersji zmiennych zapisanych w innych
typach. Przykładowo:
a =1.4
a=i n t 8 ( a )
tworzy zmienną „a” (domyślnie w typie double), a następnie konwertuje ją do postaci 8-bitowej
liczby całkowitej z zakresu od -128 do 127. W efekcie do „a” trafia wartość „1”.
9 Pętle
10
9
Pętle
W MATLABie do dyspozycji mamy dwie instrukcje iteracyjne [
• wykonującą nieokreśloną liczbę obiegów pętli instrukcję:
while wyrażenie
polecenia
end
• wykonującą ściśle określoną liczbę obiegów pętli instrukcję:
for zmienna sterująca = wartość początkowa : krok : wartość końcowa
polecenia
end
Należy zwrócić uwagę na to, iż instrukcję iteracyjną o ściśle określonej liczbie obiegów pętli
realizuje w rzeczywistości również przedstawiony już wcześniej operator dwukropka. Zapisanie
operacji w notacji dwukropkowej lub z wykorzystaniem operatorów działań tabli-
cowych lub macierzowych jest prostsze i szybsze od wykonania tej samej operacji
przy użyciu pętli [
]. Ilustracji tego zjawiska służy przykład przedstawiony w rozdziale
10
Program ćwiczenia
Kolejne punkty programu ćwiczenia realizujemy w kolejnych fragmentach głównego pliku,
oddzielając je znakami „%%.” Fragmenty takie można uruchamiać niezależnie, ustawiając kur-
sor w danym fragmencie i naciskając kombinację klawiszy „Ctrl+Enter”.
1. Zapoznać się z okienkami w MATLABie zgodnie z opisem przedstawionym w rozdziale
2. Wpisać kolejno polecenia przedstawione w podrozdziałach
i
, obserwując ich dzia-
łanie (0.1pkt);
3. Stworzyć wypełnioną losowo macierz D o wymiarach 10 na 10, a następnie stworzyć
macierz E, która będzie zawierała tylko elementy macierzy D o parzystym indeksie wier-
sza i nieparzystym indeksie kolumny. Zapoznać się w tym celu z opisem funkcji „rand”
pozwalającej na losowe generowanie liczb, korzystając z polecenia help rand (0.1pkt);
4. Korzystając z pomocy w MATLABie odpowiedzieć na pytania, zgodnie z jakim roz-
kładem prawdopodobieństwa losuje liczby funkcja rand, a z jakim funkcja randn
(0.1pkt).
5. Napisać skrypt, który:
(a) wyczyści okno poleceń i przestrzeń roboczą;
(b) stworzy dwie losowo wypełnione macierze A
4×3
i B
3×4
;
10 Program ćwiczenia
11
(c) utworzy macierz C powstałą w wyniku iloczynu macierzowego macierzy A i B;
(d) usunie z macierzy C ostatnią kolumnę;
(e) utworzy macierz F stanowiącą iloczyn tablicowy macierzy A i C zgodnie z opisem
z punktu
Uruchomić cały skrypt, naciskając klawisz F5 (będąc w oknie edytora) oraz zaobserwować
wyniki jego działania w oknie poleceń.
Następnie wrócić do okna edytora, wstawić pułapkę (ang. breakpoint ) w dowolnej linijce
skryptu poprzez ustawienie kursora w tej linijce i naciśniecie klawisza F12 lub kliknięcie le-
wym przyciskiem myszy obok numeru linijki oraz uruchomić ponownie skrypt, naciskając
klawisz F5. Praca programu zatrzyma się w miejscu położenia pułapki. Następnie, naci-
skając klawisz F10, przejść do kolejnej linijki skryptu. Zauważyć, iż po najechaniu myszą
na nazwę wybranej zmiennej pojawia się informacja o wartości tej zmiennej. Następnie
krokowo, naciskając klawisz F10, przejść linijka po linijce do końca skryptu, podglądając
wartości utworzonych zmiennych poprzez najechanie na ich nazwę w edytorze kursorem
myszy (0.1pkt);
6. Korzystając z help randn stworzyć wektor 200 liczb losowych pochodzących z rozkładu
prawdopodobieństwa o dowolnie wybranej wartości średniej i odchyleniu standardowym.
Następnie zweryfikować te wartości, znajdując wartość średnią i odchylenie standardowe
stworzonego wektora. Eksperyment ten powtórzyć dla kilku kolejnych zwiększających się
o rząd wielkości długości wektora. Korzystając z funkcji plot (help plot) pokazać
zmianę wartości średniej wylosowanego wektora wraz ze wzrostem jego dłu-
gości. Zadbać o odpowiedni opis osi odciętych (0.3pkt).
7. Stworzyć wektor zawierający 1000 liczb losowych. Podzielić go na 100 podwektorów o dłu-
gości 10 każdy (podwektor pierwszy to elementy od 1 do 10 wektora 1000-elementowego,
drugi to elementy od 11 do 20 itd.). Podpowiedź: użyć funkcji reshape (0.2pkt).
8. Stworzyć macierz zawierającą 10000 liczb zespolonych o wylosowanej części rzeczywistej i
urojonej pochodzących z rozkładów normalnych o różnych odchyleniach standardowych.
Znaleźć liczbę o największym module. Pokazać wszystkie liczby w postaci punktów
na płaszczyźnie, zaznaczając kolorem tę, która ma największy moduł. Narysować
dodatkowo okrąg o promieniu równym jej modułowi. UWAGA: w celu ponownego rysowa-
nia na tym samym wykresie pomiędzy poleceniami plot należy użyć polecenia hold on
(0.4pkt).
UWAGA: Rozwiązania wykorzystujące pętlę „for” nie będą zaliczane.
9. Stworzyć funkcję prostokat zgodnie z opisem przedstawionym w rozdziałach
i
. Wy-
wołać w pliku głównym funkcję prostokat, wpisując polecenia:
10 Program ćwiczenia
12
b o k 1 = 5 ;
b o k 2 = 1 0 ;
[ p , o ] = p r o s t o k a t ( bok 1 , b o k 2 )
Uruchomić skrypt i zaobserwować wynik jego działania (0.1pkt);
10. Stworzyć funkcję moja_funkcja, która:
• będzie przyjmowała trzy parametry wejściowe: macierz A i dwa progi liczbowe gd
oraz gg z zakresu [0, 1];
• będzie zwracała cztery parametry wyjściowe: macierz B, której elementy będą równe
„1” na tych pozycjach, na których w macierzy A będą wartości większe od zadanego
pierwszego progu liczbowego i „0” na pozostałych pozycjach, macierz C, której ele-
menty będą równe „1” na tych pozycjach, na których w macierzy A będą wartości
należące do zakresu [gd, gg] i „0” na pozostałych pozycjach oraz liczbę elementów
w macierzy A, które są większe od zadanego progu i liczbę elementów macierzy A
z zadanego zakresu.
• w przypadku błędnych wartości progów (spoza zakresu lub gg < gd) wyświetli sto-
sowny komunikat błędu.
W pliku głównym wpisać skrypt umożliwiający wywołanie oraz zaobserwowanie działania
funkcji moja_funkcja. Macierz przekazywaną do funkcji wypełnić losowo. (0.2pkt)
UWAGA: Rozwiązania wykorzystujące pętlę „for” nie będą zaliczane.
11. Stworzyć wektor 10-elementowy liczb całkowitych wypełniony wartościami losowymi oraz ma-
cierz zawierającą 10 kolumn i dowolną ilość wierszy. Posortować malejąco stworzony wek-
tor, a następnie zmienić kolejność kolumn w stworzonej macierzy zgodnie z kolejnością
elementów w posortowanym wektorze. Przykładowo jeśli największy element wektora
znajdował się na 10 pozycji, to kolumna numer 10 macierzy oryginalnej powinna stać
się kolumną numer 1 macierzy po zmianie kolejności kolumn (0.2pkt).
UWAGA: Rozwiązania wykorzystujące pętlę „for” nie będą zaliczane.
12. Wpisać poniższy skrypt:
d i s p l a y ( ’ c z a s o b l i c z e ń d l a i l o c z y n u t a b l i c o w e g o : ’ )
A=
rand
( 5 0 0 0 ) ;
B=
rand
( 5 0 0 0 ) ;
t i c
C=A. ∗B ;
toc
d i s p l a y ( ’ c z a s o b l i c z e ń d l a p ę t l i : ’ )
t i c
11 Sprawozdanie
13
f o r
i =1:5000
f o r
j =1:5000
C( i , j )=A( i , j ) ∗B( i , j ) ;
end
end
toc
Po uruchomieniu skryptu w oknie poleceń pojawi się komunikat o czasie obliczeń (po-
między poleceniami tic i toc). Dla iloczynu tablicowego (.*) będzie on o rząd wielkości
krótszy, niż dla odpowiadającego mu zapisu przy pomocy pętli. W sprawozdaniu podać
uzyskane czasy obliczeń w obydwu przypadkach.
Czasy wykonywania przez program poszczególnych funkcji i poleceń w nich zawartych
można również prześledzić przy użyciu narzędzia „Profiler” z menu „Desktop”. Po otwar-
ciu tego okna z tym narzędziem w polu „Run this code” wpisujemy kod lub nazwę m-pliku,
który ma zostać uruchomiony, a następnie klikamy na „Start Profiling”. Po wykonaniu
zadanego kodu wyświetlony zostanie raport mówiący o tym, ile czasu trwało wykonanie
poszczególnych funkcji i poleceń w nich zawartych z wyszczególnieniem czasu spędzonego
w funkcjach potomnych (wywoływanych, ang. Children Functions). Można również pod-
glądnąć zawartość testowanego skryptu z zaznaczonymi poleceniami, których wykonanie
wymagało proporcjonalnie najwięcej czasu (w części zawartość pliku, ang. File Listing).
(0.1pkt)
13. Wpisać polecenie help datatypes i zapoznać się z opisem liczbowych typów danych do-
uble, single, uint8, uint16, uint32, uint64, int8, int 16, int 32 i int 64. Wpisać w oknie po-
leceń przykład przedstawiony w rozdziale
i w oknie „Workspace” zaobserwować zmianę
typu (kolumna „Class”) i wartości utworzonej zmiennej.
Utworzyć losowo macierz o wymiarach 10 na 10 zawierającą liczby w typie całkowitym
z zakresu 0..255. (0.1pkt)
11
Sprawozdanie
W sprawozdaniu znaleźć winny się kody wszystkich utworzonych podczas realizacji programu
ćwiczenia m-plików oraz odpowiedź na pytanie z punktu
. Punktacja za realizację poszczegól-
nych punktów podana została w programie ćwiczenia.
UWAGA: Polecenia MATLABa możemy podobnie jak polecenia L
A
TEXa umieścić w środo-
wisku verbatim. Istnieje jednak także inna możliwość. W tym celu dołączyć musimy najpierw
pakiet listings. Za przykład jego wykorzystania niech posłuży kod:
\lstset{language=matlab}
\lstset{keywordstyle=\color{blue}\bfseries}
\begin{lstlisting}
LITERATURA
14
for k=1:10
array(k, :) = ones(4,1);
end
\end{lstlisting}
oraz efekt jego działania:
f o r
k =1:10
a r r a y ( k ,
: ) = o n e s ( 4 , 1 ) ;
end
Proszę zamieszczać polecenia MATLABa w sprawozdaniach przy użyciu środowiska lstlisting.
Sprawozdania należy przesłać nie później niż 7 dni, licząc od daty wykonania
ćwiczenia, na adres:
. Za każdy dzień zwłoki odejmowane będzie
0.2pkt, co oznacza, iż bezbłędne sprawozdanie może otrzymać ocenę dostateczną,
jeśli zostanie przesłane nie później niż 14 dni od daty wykonania ćwiczenia.
Literatura
[1] Bogumiła Mrozek, Zbigniew Mrozek: MATLAB i Simulink Poradnik użytkownika, Helion
2004.