new instrukcja 1 id 317820 Nieznany

background image

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

background image

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 [

1

] 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

background image

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 [

1

], 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 [

1

]. 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.

background image

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 [

1

].

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.

background image

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).

background image

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

background image

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 [

1

].

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

background image

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 [

1

].

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 [

1

].

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.

background image

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 [

1

].

M-pliki funkcyjne rozpoczynają się od słowa kluczowego function. Pierwsza linia M-pliku

funkcyjnego winna być zapisana następująco [

1

]:

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. . . [

1

].

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) [

1

].

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 [

1

]. 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”.

background image

9 Pętle

10

9

Pętle

W MATLABie do dyspozycji mamy dwie instrukcje iteracyjne [

1

]:

• 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 [

1

]. Ilustracji tego zjawiska służy przykład przedstawiony w rozdziale

10

.

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

;

2. Wpisać kolejno polecenia przedstawione w podrozdziałach

4.1

i

4.2

, 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

;

background image

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

4.2

.

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

6

i

7

. Wy-

wołać w pliku głównym funkcję prostokat, wpisując polecenia:

background image

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

background image

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

8

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

4

. 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}

background image

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:

pszwarc@polsl.pl

. 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.


Document Outline


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron