MATLAB – PODSTAWY ZNAKI SPECJALNE FUNKCJE SPECJALNE

matlab cz.1 matlab cz.1

holmes.iigw.pl
from holmes.iigw.pl More from this publisher
14.09.2015 Views

1 MATLAB PODSTAWY ZNAKI SPECJALNE = symbol przypisania [ ] tworzenie tablic, argumenty wyjściowe funkcji, łączenie tablic { } indeksy struktur i tablic komórkowych ( ) nawiasy do określania kolejności działań, do ujmowania indeksów tablic, do ujmowania argumentów wejściowych funkcji . kropka dziesiętna ... kontynuacja polecenia w następnej linii , separator indeksów tablicy, argumentów funkcji, poleceń ; koniec wiersza macierzy, rezygnacja z wypisywania wyniku na ekranie % początek komentarza w danej linii : generowanie wektorów, indeksowanie macierzy ‘ początek i koniec łańcucha znaków, operator transpozycji, operator sprzężenia zespolonego FUNKCJE SPECJALNE pi 3.14159265... realmin najmniejsza liczba rzeczywista realmax największa liczba rzeczywista Inf nieskończoność NaN NotaNumber ans zmienna robocza Inf nieskończoność jest generowana przez dzielenie liczby różnej od 0 przez zero, lub przez działanie na wartościach, które wykraczają po za największą możliwą wartość rzeczywistą określoną przez funkcję realmax. NaN jest generowana przy próbie wykonania działań typu 0/0 lub InfInf

1<br />

<strong>MATLAB</strong> <strong>–</strong> <strong>PODSTAWY</strong><br />

<strong>ZNAKI</strong> <strong>SPECJALNE</strong><br />

= <strong>–</strong> symbol przypisania<br />

[ ] <strong>–</strong> tworzenie tablic, argumenty wyjściowe funkcji, łączenie tablic<br />

{ } <strong>–</strong> indeksy struktur i tablic komórkowych<br />

( ) <strong>–</strong> nawiasy do określania kolejności działań, do ujmowania indeksów<br />

tablic, do ujmowania argumentów wejściowych funkcji<br />

. <strong>–</strong> kropka dziesiętna<br />

... <strong>–</strong> kontynuacja polecenia w następnej linii<br />

, <strong>–</strong> separator indeksów tablicy, argumentów funkcji, poleceń<br />

; <strong>–</strong> koniec wiersza macierzy, rezygnacja z wypisywania wyniku na ekranie<br />

% <strong>–</strong> początek komentarza w danej linii<br />

: <strong>–</strong> generowanie wektorów, indeksowanie macierzy<br />

‘ <strong>–</strong> początek i koniec łańcucha znaków, operator transpozycji, operator<br />

sprzężenia zespolonego<br />

<strong>FUNKCJE</strong> <strong>SPECJALNE</strong><br />

pi <strong>–</strong> 3.14159265...<br />

realmin<br />

<strong>–</strong> najmniejsza liczba rzeczywista<br />

realmax<br />

<strong>–</strong> największa liczba rzeczywista<br />

Inf<br />

<strong>–</strong> nieskończoność<br />

NaN<br />

<strong>–</strong> Not<strong>–</strong>a<strong>–</strong>Number<br />

ans<br />

<strong>–</strong> zmienna robocza<br />

Inf <strong>–</strong> nieskończoność jest generowana przez dzielenie liczby różnej od 0 przez zero,<br />

lub przez działanie na wartościach, które wykraczają po za największą możliwą<br />

wartość rzeczywistą określoną przez funkcję realmax.<br />

NaN jest generowana przy próbie wykonania działań typu 0/0 lub Inf<strong>–</strong>Inf


2<br />

ZMIENNE LICZBOWE W <strong>MATLAB</strong>-IE dzielą się na dwa typy:<br />

typ całkowity ze znakiem (int8, int16, int32, int64) i<br />

typ całkowity bez znaku (uint8, uint16, uint32, uint64)<br />

typ rzeczywisty pojedynczej precyzji (single) oraz typ<br />

rzeczywisty podwójnej precyzji (double)<br />

Defaultowym (domyślnym) typem numerycznym dla zmiennych <strong>MATLAB</strong>-a jest typ<br />

double!<br />

Typ Zakres zmiennych typu rzeczywistego<br />

single <strong>–</strong>3.40282e038 3.4283e+038<br />

double <strong>–</strong>2.22507e+308 1.79769e+308<br />

Jeśli zmienna x ma wartość<br />

>> x = 12.56<br />

x =<br />

12.5600<br />

Instrukcja<br />

>> int16(x)<br />

ans =<br />

13<br />

konwertuje wartość x na liczbę całkowitą.<br />

ans <strong>–</strong> oznacza zmienną utworzoną automatycznie przez <strong>MATLAB</strong><strong>–</strong>a, gdy dane<br />

wyrażenie nie zostało przypisane żadnej zmiennej. Por. z przykładem poniżej:<br />

>> x = 12.56<br />

x =<br />

12.5600<br />

>> y = int16(x)<br />

y =<br />

13


3<br />

RÓŻNE FORMATY ZAPISU LICZBY RZECZYWISTEJ NA PRZYKŁADZIE<br />

LICZBY π<br />

Format Typ Postać<br />

short stałoprzecinkowy 3.1416<br />

long stałoprzecinkowy 3.14159265358979<br />

short e zmiennoprzecinkowy 3.1416e+000<br />

long e zmiennoprzecinkowy 3.141592653589793e+000<br />

rat ułamkowy 355/113<br />

>> format long, pi<br />

ans =<br />

3.14159265358979<br />

>> format long e, pi<br />

ans = 3.141592653589793e+000<br />

ZMIENNE W <strong>MATLAB</strong><strong>–</strong>ie<br />

Zmiennym nadaje się nazwy. Nazwa może się składać:<br />

• z liter, cyfr i znaku podkreślenia<br />

• z dowolnej liczby znaków, ale tylko około 63 są rozróżnialne przez<br />

<strong>MATLAB</strong>-a<br />

Nazwa musi zaczynać się od litery !<br />

UWAGA!<br />

<strong>MATLAB</strong> rozróżnia wielkość liter w nazwie zmiennej !!! Dla <strong>MATLAB</strong>-a zmienne A i<br />

a to dwie różne zmienne!


4<br />

PODSTAWOWĄ STRUKTURĄ DANYCH W <strong>MATLAB</strong>-IE JEST TABLICA<br />

Tablica (array) <strong>–</strong> to forma gromadzenia i przechowywania danych w pamięci<br />

komputera. Tablicom nadaje się nazwy. Dane przechowywane w tablicy nazywają się<br />

jej elementami. Położenie elementu w tablicy określone jest za pomocą indeksów.<br />

<strong>MATLAB</strong> dopuszcza tablice wielowymiarowe!<br />

Macierz (matrix) <strong>–</strong> jest szczególnym przypadkiem tablicy dwuwymiarowej!<br />

⎛2<br />

⎜<br />

⎜5<br />

A = ⎜0<br />

⎜<br />

⎜1<br />

⎜<br />

⎝0<br />

7<br />

4<br />

2<br />

0<br />

7<br />

7<br />

2<br />

7<br />

7<br />

9<br />

0<br />

9<br />

10<br />

0<br />

2<br />

10⎞<br />

⎟<br />

9 ⎟<br />

7 ⎟<br />

⎟<br />

4 ⎟<br />

10<br />

⎟<br />

⎠<br />

<strong>–</strong> tablica A(5 x 5) <strong>–</strong> macierz<br />

B = 10 <strong>–</strong> tablica B(1 x 1) <strong>–</strong> skalar<br />

STANDARDOWE <strong>FUNKCJE</strong> MATEMATYCZNE


5<br />

OPERATORY ARYTMETYCZNE W <strong>MATLAB</strong><strong>–</strong>ie w odniesieniu do<br />

MACIERZY<br />

Operatory działań na macierzach:<br />

A+B A-B A*B<br />

A/B A\B A^B A’<br />

Operator Opis<br />

+ Dodawanie, jednoargumentowy operator plus<br />

- Odejmowanie, jednoargumentowy operator minus<br />

* Mnożenie macierzy<br />

/ Prawostronne dzielenie macierzy<br />

\ Lewostronne dzielenie macierzy<br />

^<br />

Potęgowanie macierzy<br />

‘ Transponowanie macierzy<br />

Wyjaśnienie. Jeśli:<br />

⎛8<br />

1 6⎞<br />

⎛1<br />

1 1⎞<br />

⎜ ⎟<br />

⎜ ⎟<br />

A = ⎜3<br />

5 7⎟<br />

B = ⎜1<br />

2 3⎟<br />

⎜ ⎟<br />

⎝4<br />

9 2<br />

⎜ ⎟<br />

⎠<br />

⎝1<br />

3 6⎠<br />

* Mnożenie macierzy<br />

⎛ 8⋅1+<br />

1⋅1+<br />

6⋅1<br />

⎜<br />

C = A* B = ⎜ 3⋅1+<br />

5⋅1+<br />

7 ⋅1<br />

⎜<br />

⎝4<br />

⋅1+<br />

9 ⋅1+<br />

2 ⋅1<br />

8⋅1+<br />

1⋅<br />

2 + 6⋅3<br />

3⋅1+<br />

5⋅2<br />

+ 7 ⋅3<br />

4 ⋅1+<br />

9 ⋅ 2 + 2 ⋅3<br />

8⋅1+<br />

1⋅3<br />

+ 6⋅6<br />

⎞<br />

⎟<br />

3⋅1+<br />

5⋅3<br />

+ 7 ⋅6<br />

⎟<br />

4 ⋅1+<br />

9 ⋅3<br />

+ 2 ⋅6⎟<br />

⎠<br />

n<br />

cij = ∑aikbkj,<br />

i,<br />

j = 1,2,...<br />

n<br />

k = 1<br />

/ Prawostronne dzielenie macierzy<br />

B / A = B ⋅ A<br />

−1<br />

\ Lewostronne dzielenie macierzy<br />

A \ B = A<br />

−1<br />

⋅ B<br />

Związek między działaniami na macierzach B/A I A\B<br />

B / A = ( A'\<br />

B'<br />

)'<br />

^<br />

Potęgowanie macierzy <strong>–</strong> podniesienie macierzy A do potęgi p<br />

Przypadki:<br />

p liczba całkowita >0<br />

p liczba całkowita


6<br />

OPERATORY ARYTMETYCZNE W <strong>MATLAB</strong><strong>–</strong>ie w odniesieniu do TABLIC.<br />

NOTACJA KROPKOWA<br />

Operatory działań na tablicach:<br />

A+B A-B A.*B<br />

A./B A.\B A.^B A.’<br />

Operator Opis<br />

+ Dodawanie, jednoargumentowy operator plus<br />

- Odejmowanie, jednoargumentowy operator minus<br />

.* Mnożenie tablic<br />

./ Prawostronne dzielenie tablic<br />

.\ Lewostronne dzielenie tablic<br />

.^ Potęgowanie tablic<br />

.’ Transponowanie tablicy<br />

‘ Sprzężenie zespolone<br />

Wyjaśnienie. Jeśli<br />

⎛8<br />

⎜<br />

A = ⎜3<br />

⎜<br />

⎝4<br />

1<br />

5<br />

9<br />

6⎞<br />

⎟<br />

7⎟<br />

2⎟<br />

⎠<br />

⎛1<br />

⎜<br />

B = ⎜1<br />

⎜<br />

⎝1<br />

1<br />

2<br />

3<br />

1⎞<br />

⎟<br />

3⎟<br />

6⎟<br />

⎠<br />

D =<br />

A. * B<br />

⎛8⋅1<br />

⎜<br />

= ⎜ 3⋅1<br />

⎜<br />

⎝4<br />

⋅1<br />

1⋅1<br />

5⋅<br />

2<br />

9 ⋅3<br />

6⋅1⎞<br />

⎟<br />

7 ⋅3⎟<br />

2 ⋅6⎟<br />

⎠<br />

cij = aijbij<br />

i. j = 1,2,...<br />

n<br />

DZIELENIE TABLICOWE<br />

PRAWOSTRONNE A./B<br />

a<br />

C<br />

P<br />

= A.<br />

/ B ⇔ cij<br />

=<br />

b<br />

ij<br />

ij<br />

LEWOSTRONE A.\B<br />

b<br />

C<br />

L<br />

= A.<br />

\ B ⇔ cij<br />

=<br />

a<br />

ij<br />

ij<br />

SPOSOBY OKREŚLANIA TABLIC W <strong>MATLAB</strong>-ie<br />

• Dane do tablicy są wprowadzane z klawiatury<br />

• Tablica jest wczytywana z zewnętrznego pliku z danymi<br />

• Tablicę może wygenerować użytkownik aplikacji wg ściśle określonego<br />

algorytmu, za pomocą napisanej przez siebie funkcji<br />

• Tablica może zostać wygenerowana za pomocą odpowiedniej funkcji <strong>MATLAB</strong>-a


7<br />

ZADAWANIE TABLICY Z KALWIATURY<br />

• Wprowadź dane oddzielając elementy danego wiersza macierzy spacjami lub<br />

przecinkami<br />

• Użyj znaku średnika by zaznaczyć koniec wiersza<br />

• Otocz wprowadzoną listę elementów nawiasami [ ]<br />

Dla macierzy<br />

⎛8<br />

1 6⎞<br />

⎜ ⎟<br />

A = ⎜3<br />

5 7⎟<br />

napiszemy >>A = [8 1 6; 3 5 7; 4 9 2]<br />

⎜ ⎟<br />

⎝4<br />

9 2⎠<br />

<strong>FUNKCJE</strong> <strong>MATLAB</strong><strong>–</strong>a DO GENEROWANIA TABLIC<br />

(n <strong>–</strong> liczba wierszy, m <strong>–</strong> liczba kolumn)<br />

• magic(n) <strong>–</strong> generuje macierz magiczną<br />

• pascal(n) <strong>–</strong> generuje macierz Pascala stopnia n<br />

• eye(n,n) <strong>–</strong> generuje macierz jednostkową nxn<br />

• ones(n,m) <strong>–</strong> generuje tablicę nxm złożona z samych jedynek<br />

• zeros(n,m) <strong>–</strong> generuje tablicę nxm złożoną z samych zer<br />

• rand(n,m) <strong>–</strong> generuje tablicę nxm o elementach będących liczbami<br />

losowymi o rozkładzie równomiernym z przedziału (0,1)<br />

• randn(n,m) <strong>–</strong> generuje tablicę nxm złożoną z liczb będących liczbami<br />

losowymi o rozkładzie normalnym<br />

PODSTAWOWE <strong>FUNKCJE</strong> DZIAŁAŃ NA TABLICACH<br />

Y = sum(A)<br />

gdy:<br />

A <strong>–</strong> wektor, funkcja sum zwraca jako Y sumę elementów wektora<br />

A <strong>–</strong> tablica, funkcja sum zwraca jako Y wektor sum w kolumnach tablicy<br />

Y = prod(A)<br />

gdy:<br />

A <strong>–</strong> wektor, funkcja zwraca jako Y iloczyn elementów wektora<br />

A <strong>–</strong> tablica, funkcja zwraca jako y wektor iloczynów elementów w kolumnach<br />

Y = diag(A)<br />

Funkcja zwraca jako Y wektor z przekątnej głównej macierzy A<br />

Y = det(A) funkcja zwraca jako Y wartość wyznacznika macierzy kwadratowej


8<br />

Y = tril(A)<br />

Funkcja zwraca jako macierz dolną trójkątną z macierzy A<br />

Y = triu(A)<br />

Funkcja zwraca jako Y macierz górną trójkątną z macierzy A<br />

Y = inv(A)<br />

Funkcja zwraca pod nazwą Y macierz odwrotną do macierzy A<br />

Y = max(A)<br />

gdy:<br />

A jest wektorem funkcja zwraca wartość Y będącą max elementem wektora A<br />

A jest macierzą funkcja zwraca wektor wierszowy Y o elementach będących max z<br />

poszczególnych kolumn<br />

Y = min(A)<br />

gdy:<br />

A jest wektorem funkcja zwraca wartość Y będącą min elementem wektora A<br />

A jest macierzą funkcja zwraca wektor wierszowy Y o elementach będących min z<br />

poszczególnych kolumn tablicy A<br />

Y = mean(A)<br />

gdy:<br />

A jest wektorem funkcja zwraca pod nazwą Y średnią arytmetyczną jego elementów<br />

A jest macierzą - zwraca wektor wierszowy Y o elementach będących średnimi<br />

arytmetycznymi elementów poszczególnych kolumn tablicy A<br />

Y = sort(A) lub Y = sort(A,’ascend’)<br />

gdy:<br />

A jest wektorem funkcja zwraca jako Y wektor uporządkowany rosnąco<br />

A jest macierzą - sortuje każdą kolumnę A rosnąco<br />

Y = sort(A, ‘descend’)<br />

j.w. tylko dla uporządkowania malejącego<br />

NORMY:<br />

Y = norm(A,p)<br />

p =1 - max suma modułów w kolumnach<br />

A = max<br />

1<br />

1≤<br />

j≤n<br />

n<br />

∑<br />

i=<br />

1<br />

a<br />

ij


9<br />

p = inf max suma modułów w wierszach A<br />

A<br />

inf<br />

= max<br />

1≤i≤n<br />

∑<br />

j=<br />

1<br />

p=‘fro’ <strong>–</strong> norma Frobeniusa<br />

n<br />

a<br />

ij<br />

Jeśli<br />

A<br />

=<br />

n<br />

∑∑<br />

a<br />

fro ij<br />

i= 1 j=<br />

1<br />

n<br />

2<br />

⎛1<br />

1 1⎞<br />

⎜ ⎟<br />

A = ⎜1<br />

2 3⎟<br />

wówczas<br />

⎜ ⎟<br />

⎝1<br />

3 6⎠<br />

>> A_1=norm(A,1)<br />

A_1 =<br />

10<br />

>> A_inf=norm(A,'inf')<br />

A_inf =<br />

10<br />

>> A_fro=norm(A,'fro')<br />

A_fro =<br />

7.9373<br />

SZYBKIE TWORZENIE TABLIC <strong>–</strong> OPERATOR DWUKROPEK ( : )<br />

Tworzenie wektora wierszowego:<br />

>> a= 1:5 % Tworzenie wektora wierszowego (to jest komentarz)<br />

a=<br />

1 2 3 4 5<br />

>> b=1:2:10<br />

b =<br />

1 3 5 7 9<br />

>>c = 1:-2.5:-10


10<br />

c =<br />

1.0000 -1.5000 -4.0000 -6.5000 -9.0000<br />

Transponowanie wektora wierszowego:<br />

>> c=c'<br />

c =<br />

1.0000<br />

-1.5000<br />

-4.0000<br />

-6.5000<br />

-9.0000<br />

>> n = (1:5)’ % Tworzy wektor wierszowy i transponuje<br />

n =<br />

1<br />

2<br />

3<br />

4<br />

5<br />

>> potegi = [n n.^2 n.^3 2.^n ] % Tablica kwadratów, sześcianów i potęg liczby 2 ...<br />

% dla w/w tablicy n<br />

potegi =<br />

1 1 1 2<br />

2 4 8 4<br />

3 9 27 8<br />

4 16 64 16<br />

5 25 125 32<br />

Utworzenie tablicy wartości lnx dla danego zakresu x:<br />

>> x = (1:0.2:2)'<br />

x =<br />

1.0000<br />

1.2000<br />

1.4000<br />

1.6000<br />

1.8000<br />

2.0000<br />

>> lnx = log(x)<br />

lnx =<br />

0<br />

0.1823<br />

0.3365<br />

0.4700<br />

0.5878<br />

0.6931<br />

lub


11<br />

>> lnx = [x log(x)]<br />

lnx =<br />

1.0000 0<br />

1.2000 0.1823<br />

1.4000 0.3365<br />

1.6000 0.4700<br />

1.8000 0.5878<br />

2.0000 0.6931<br />

ZNAK (: ) W WYRAŻENIACH INDEKSOWYCH<br />

Wyrażenia indeksowe odnoszą się do części macierzy lub tablicy. Zapis:<br />

A(1:k,j)<br />

oznacza k pierwszych elementów z j-tej kolumny tablicy A.<br />

sum(A(1:4,4))<br />

oznacza sumę elementów leżących w 4. kolumnie tablicy A.<br />

Dwukropek odnosi się do wszystkich elementów w wierszu lub kolumnie<br />

macierzy / tablicy<br />

Słowo kluczowe end odnosi się do ostatniego wiersza lub kolumny tablicy.<br />

sum(A(:,end)) oznacza sumę wszystkich elementów leżących w ostatniej kolumnie<br />

tablicy A.<br />

Na przykład:<br />

A =<br />

1 5 7<br />

3 5 9<br />

1 3 4<br />

0 6 7<br />

>> s=sum(A(1:3,2))<br />

s =<br />

13 <strong>–</strong> suma trzech pierwszych elementów z drugiej kolumny macierzy A.<br />

>> suma_3=sum(A(3:end,end))<br />

suma_3 =<br />

11 <strong>–</strong> suma elementów w ostatniej kolumnie macierzy A z wierszy od 3 do<br />

ostatniego

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!