MATLAB – PODSTAWY ZNAKI SPECJALNE FUNKCJE SPECJALNE
matlab cz.1 matlab cz.1
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 – Not–a–Number 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 Inf–Inf
- Page 2 and 3: 2 ZMIENNE LICZBOWE W MATLAB-IE dzie
- Page 4 and 5: 4 PODSTAWOWĄ STRUKTURĄ DANYCH W M
- Page 6 and 7: 6 OPERATORY ARYTMETYCZNE W MATLAB-i
- Page 8 and 9: 8 Y = tril(A) Funkcja zwraca jako m
- Page 10 and 11: 10 c = 1.0000 -1.5000 -4.0000 -6.50
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