Operátory

S tím, že v MATLABu je všechno chápáno jako matice, souvisí chování operátorů. Připravme si proměnné, na kterých budeme zkoumat chování operátorů:
>> A = [1 2; 3 0; 4 -1]
>> B = [0 1 1 1; 1 0 -1 2; 0 0 1 5]
>> C = [1 2 5 0; 1 1 0 3]
>> u = [0 3 -2]
>> D = [1 0; 2 0; 3 1]
>> E = [1 0 0; 0 2 0; 0 0 3]
>> F = [1 1 1; 2 2 2; 1 2 3]
>> G = [3+i -2+i; 1.5+i -3.1-i]

V části "vyzkoušejte" jsou uvedeny ukázky, přičemž chybné výrazy jsou označené >>.

1) Aritmetické operátory

a) unární


názevsyntaxepopisvyzkoušejte 
unární plus+a1- výsledek je shodný s a1>> +u
unární minus-a1- výsledek je téhož rozměru jako a1 a obsahuje opačná čísla>> -u
transpozice a konjugovanosta1'- výsledkem je transponovaná matice, přičemž všechna komplexní čísla změní znaménko imaginární části (na opačné)
- u reálných matic funguje stejně jako .'
>> G'
>> B'
transpozicea1.'- výsledkem je transponovaná matice (oproti ' nemění komplexní prvky znaménko imaginární části)>> G.'
>> B.'

b) binární


názevsyntaxepopisvyzkoušejte 
sčítánía1+a2- provádí se po prvcích
- argumety musí mít SHODNÉ rozměry nebo alespoň jeden z nich je skalár
- prvky výsledku jsou součtem/rozdílem odpovídajících si prvků a1 a a2 (skalár je automaticky doplněn na rozměr druhého argumentu)
>> A+D
>> 25+B
>> u+A
odčítánía1-a2>> u-2.1
>> A-D
>> u-F
 
násobení matica1*a2- jedná se o algebraické násobení matic, a proto počet sloupců a1 musí být shodný s počtem řádků a2 (tj. mxp a pxn). Pak výsledek C=A*B má rozměr mxn a každý jeho prvek je >> A*E
>> u*E
>> D*A
>> D*G
- jedním z argumentů může být skalár (druhým libovolná matice, vektor či skalár). Pak se jedná o algebraické násobení matice/vektoru číslem a platí: C = A*a = a*A = a.*A = A.*a, kde >> C*5
>> 4.2*u
>> 3.*u
>> 5*37
násobení po prvcícha1.*a2
- pokud žádný z argumentů není skalár, jedná se o násobení odpovídajících si prvků matic/vektorů. Provádí se po prvcích, proto oba argumenty musí mít SHODNÉ rozměry. Výsledek obsahuje prvky >> A.*E
>> u.*E
>> D.*A
>> D.*G
 
umocnění maticea1^a2- pokud jsou oba argumenty skaláry, jde o a2-tou mocninu čísla a1 (viz níže)
- pokud je a1 matice a a2 kladné celé číslo (skalár), platí: a1^a2 = a1*a1*...*a1 (násobení matic!), tedy a1 musí být čtvercová matice
- poznámka: operace neoznámí chybu, pokud alespoň jeden z argumentů je skalár (jak se počítá výsledek pro matici a1 a jakékoli číslo a2 nebo pro skalár a1 a matici a2, to naleznete v nápovědě)
>> F^2
>> G^4
>> D^3
>> A^D
>> 5^E
- jsou-li oba argumenty skaláry, je výsledkem číslo a1a2 a není rozdíl mezi a1^a2 a a1.^a2, tedy pro SKALÁRY není rozdíl mezi .^ a ^>> 2^3
>> 2.^3
>> 9^0.5
umocnění po prvcícha1.^a2
- provádí se po prvcích, a proto oba argumenty musí mít SHODNÉ rozměry nebo alespoň jeden z nich je skalár (pro právě dva skaláry je výsledek popsán výše)
- výsledek má stejný rozměr jako argument, který není skalárem. Tedy nebo nebo
>> F.^2
>> G.^4
>> D.^3
>> A.^D
>> A.^E
>> 5.^E
 
dělení matica1/a2- zhruba platí, že A/B = A*inv(B) (inv značí inverzní matici), tedy druhým argumentem by měla být regulární matice odpovídajícího rozměru (či skalár). Přesně je A/B=(B'\A')'
- druhým argumentem může být i skalár - viz níže
>> u/E
>> u/F
>> A/D
- je-li druhý argument skalár, jedná se o dělení všech prvků a1 číslem a2
- jsou-li oba argumenty skaláry, jde o dělení dvou čísel
- v obou případech není rozdíl mezi / a ./
>> A/3
>> A./3
>> 2/5
>> 2./5
dělení po prvcícha1./a2
- provádí se po prvcích
- argumentem jsou matice STEJNÝCH rozměrů (nebo alespoň jeden je skalár - viz výše)
- výsledek C=A./B obsahuje prvky
>> A./D
>> D./A
>> u./F
>> A./E
 
dělení matic zlevaa1\a2- pokud je prvním argumentem čtvercová matice, pak je výsledek A\B stejný jako inv(A)*B
- je-li argumentem čtvercová matice A a sloupcový vektor b, pak se operátor používá pro řešení soustav lineárních rovnic, kdy řešení je x=A\b (při výpočtu se používá Gaussova eliminace)
- poznámka: operátor lze použít i tehdy, když a1 není čtvercovou maticí - více naleznete v nápovědě
>> b=u'
>> E\b
- je-li prvním argumentem skalár, jedná se o dělení všech prvků a2 číslem a1
- jsou-li oba argumenty skaláry, jde o dělení čísla a2 číslem a1
- v obou případech není rozdíl mezi \ a .\ a platí a1\a2 = a2/a1
>> 3\A
>> 3.\A
>> 5\2
>> 5.\2
dělení po prvcích zlevaa1.\a2
- provádí se po prvcích
- argumentem jsou matice STEJNÝCH rozměrů (nebo alespoň jeden je skalár - viz výše)
- výsledek C=A.\B obsahuje prvky
- jsou-li oba argumenty skaláry, není rozdíl mezi .\ a \
>> D.\A
>> A.\D
>> F.\u
>> E.\A

!!! POZOR u čtvercových matic !!!
Pro čtvercové matice většina operátorů funguje, aniž by MATLAB hlásil chybné rozměry matic. Proto je potřeba dávat si u těchto matic velký pozor na to, zda chceme provést operaci maticovou, anebo po prvcích. Výsledky jsou obecně odlišné!
Porovnejte např. výsledky následujících výrazů:
>> E*F
>> E.*F
>> F^3
>> F.^3

c) dvojtečka


názevsyntaxepopisvyzkoušejte 
vytváření aritmetických posloupnostíi:k:j
i:j
- všechny argumenty musí být SKALÁRY
- vytvoří aritmetickou posloupnost od i do j s krokem k, tj. [i i+k i+2k ... j] (v případě, že (j-i)/k není celé číslo, tak poslední člen není j, ale číslo menší (maximálně o k-1))
- není-li k použito, je krok automaticky volen jako jedna, tedy i:j generuje posloupnost [i i+1 i+2 ... j]
- je-li krok zvolen chybně (nelze se od i dostat k j), pak je výsledkem prázdná matice
>> 1:3:10
>> 1:5:20
>> 1:-3:4
>> 1:20
>> -3:3
>> 2:-2

2) Relační operátory

názevsyntaxepopisvyzkoušejte 
menšía1<a2- provádějí se po prvcích
- argumenty musí mít STEJNÉ rozměry nebo alespoň jeden z nich je skalár
- výsledek má rozměr jako neskalární argument (nebo je to skalár)
- výsledek obsahuje pouze nuly (nepravda, false) a jedničky (pravda, true) podle toho, zda je příslušná relace mezi argumenty pravdivá
- pokud je jeden z argumentů skalár, porovnává se s ním každý prvek druhého argumentu
>> A<3
>> -1<3.2
>> -1>3.2
>> B<=1.5
>> A>D
>> 5<u
>> B~=1
>> A<=E
>> u<=C
menší nebo rovnoa1<=a2
většía1>a2
větší nebo rovnoa1>=a2
rovnost (je rovno?)a1==a2
nerovnost (je různé?)a1~=a2

!!! POZOR: je velký rozdíl mezi == a = !!!


3) Logické operátory

a) unární


názevsyntaxepopisvyzkoušejte 
negace~a1- aplikuje se na každý prvek a1
- výsledek má rozměr jako a1
- výsledek obsahuje pouze nuly a jedničky (viz tabulka negace)
>> ~3.125
>> ~0
>> ~-1.2
>> ~B

negace
a1  ~a1  
  nenulové  0
01

b) binární


názevsyntaxepopisvyzkoušejte 
logický součin, ANDa1&a2- provádějí se po prvcích
- argumenty musí mít STEJNÉ rozměry nebo alespoň jeden z nich je skalár
- výsledek má rozměr jako neskalární argument (nebo je to skalár)
- výsledek obsahuje pouze nuly a jedničky (viz tabulka logického součinu a součtu)
>> A&D
>> E&1
>> 2&5
>> u&F
logický součet, ORa1|a2 >> A|D
>> u|1
>> -1|3.2
>> C|u

logický součin a součet
a1a2  a1&a2    a1|a2  
  nenulové    nenulové  11
  nenulové  001
0  nenulové  01
0000

Priorita operátorů

Pořadí, v jakém se budou jednotlivé části výrazu vyhodnocovat, můžeme podle potřeby zadat tím, že použijeme kulaté závorky pro ohraničení všech potřebných částí výrazu. Protože každý z výše uvedených operátorů má pevně dané pořadí vyhodnocování, není někdy závorek potřeba. Proto si nyní uvedeme pořadí vyhodnocování (prioritu) operátorů. Operátory v tabulce jsou seřazeny shora dolů podle klesající priority (tj. ty nejnižší se vyhodnocují nejpozději).

 symbolpoznámka
1.()závorky
2..' .^ ' ^transpozice, umocnění, transpozice+konjugovanost, maticové umocnění
3.+ - ~unární plus, unární minus, negace
4..* ./ .\ * / \násobení po prvcích, dělení po prvcích, dělení po prvcích zleva,
násobení matic, dělení matic, dělení matic zleva
5.+ -sčítání, odčítání
6.:dvojtečka
7.< <= > >= == ~=relační operátory
8.&logický součin, AND
9.|logický součet, OR

Příklad:
výsledky jsou uvedeny pro a=-2; b=2; c=1.5 (protože se jedná o skaláry, tak není nutné používat operátory s tečkou):

výrazzápis v MATLABuvýsledek (zaokr. na 4 des. místa)
  >> a+3*b^2/-a^3+2*c-11.5
>> (a+3*b^2)/(-a^3+2*c)-1-0.0909
>> (a+3)*b^2/(-a^3+2*c)-1-0.6364
>> (a+3*b)^2/((-a^3+2)*c)-10.0667





Předchozí lekce   PŘEHLED   Další lekce