155GIT1 / 1. cvičení: Porovnání verzí
m →Ukázky |
mBez shrnutí editace |
||
(Není zobrazeno 43 mezilehlých verzí od 3 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
{{Geoinformatika}} | {{Geoinformatika}} | ||
{{Cvičení|155GIT1|1|První seznámení s Matlabem a GNU Octave - proměnné, matice, | {{Cvičení|155GIT1|1|První seznámení s Matlabem a GNU Octave - proměnné, vektory, matice, indexování, základní matematické operace, skripty}} | ||
== Náplň | == Náplň == | ||
* ukázka Matlabu a GNU Octave, viz [[155GIT1#Nástroje|nástroje]] | |||
{{fig|octave-gui|Grafické uživatelské rozhraní GNU Octave|size=500}} | |||
* nápověda, help, doc | * nápověda, help, doc | ||
** http://www.gnu.org/software/octave/doc/interpreter/ | ** '''Matlab:''' | ||
*** on-line dokumentace: https://www.mathworks.com/help/matlab/ | |||
*** syntaxe funkcí: https://www.mathworks.com/help/matlab/referencelist.html?type=function&s_tid=CRUX_topnav | |||
** '''Octave:''' | |||
*** http://www.gnu.org/software/octave/doc/interpreter/ | |||
* skalární hodnoty | |||
* proměnné, pole, matice (dvourozměrné) | * proměnné, pole, matice (dvourozměrné) | ||
** základní operace s proměnnými, inkrementace | ** základní operace s proměnnými, inkrementace | ||
** vektor | ** vektor sloupcový, řádkový | ||
* matice, dimenze, ukázka konzistence | * matice, dimenze, ukázka konzistence | ||
* | ** indexování matic | ||
** operátor dvojtečka, submatice | |||
** maticové operace | |||
* speciální matice {{bullet}} <code>ones()</code>, <code>zeros()</code>, <code>eye()</code>, <code>rand()</code> | |||
* vytváření skriptů | |||
** <tt>File -> New -> Script</tt> | |||
** spuštění: <tt>F5</tt> | |||
** výstup se vypisuje do ''Command Window'' | |||
** skripty z příkazové řádky {{bullet}} <code>edit</code>, <code>run</code> | |||
== Ukázky == | == Ukázky == | ||
Řádek 28: | Řádek 35: | ||
* Pokud je příkaz ukončen středníkem, tak hodnoty nevypisuje | * Pokud je příkaz ukončen středníkem, tak hodnoty nevypisuje | ||
* Více příkazů lze v jedné řádce oddělit čárkou anebo středníkem | * Více příkazů lze v jedné řádce oddělit čárkou anebo středníkem | ||
* Dlouhý příkaz lze rozdělit na více | * Dlouhý příkaz lze rozdělit na více řádků pomocí <code>...</code> | ||
* Pohyb v historii příkazů (klávesové šipky nahoru a dolu) | * Pohyb v historii příkazů (klávesové šipky nahoru a dolu) | ||
* Doplňování příkazů pomocí klávesy TAB (dvojstisk) | * Doplňování příkazů pomocí klávesy TAB (dvojstisk) | ||
* Komentáře začínají znakem <code>#</code> a jsou ukončeny koncem řádky | * Komentáře začínají znakem <code>%</code> (v Octave i znakem <code>#</code>) a jsou ukončeny koncem řádky | ||
* Rozsah numerických datových typů <code>realmin</code>, <code>realmax</code> | * Rozsah numerických datových typů <code>realmin</code>, <code>realmax</code> | ||
* Textové řetězce jsou ohraničeny jednoduchými uvozovkami (v Octave i dvojitými uvozovkami) | |||
* Nastavení formátu výpisu numerických hodnot: | |||
** <code>format long</code> - výpis na plný počet desetinných míst | |||
** <code>format short</code> - výpis na omezený počet desetinných míst (defaultní) | |||
=== Skalární hodnoty === | === Skalární hodnoty === | ||
Řádek 39: | Řádek 50: | ||
<source lang=octave> | <source lang=octave> | ||
s = 1 | s = 1 | ||
c = 2.3 % pozor, nutno používat desetinnou tečku! | |||
a = 3,9 % čárka odděluje příkazy | |||
</source> | |||
=== Základní matematické operace === | |||
''(+, -, *, /, závorky, mocnina, odmocnina)'' | |||
<source lang=octave> | |||
s = 1 | |||
t1 = s + 4 * 2 % násobení, dělení má prioritu před sčítáním, odčítáním (t1 = 9) | |||
t2 = (s + 4) * 2 % operátor závorka má vždy nejvyšší prioritu (t2 = 10) | |||
u = t1 / t2 ^ 2 % mocnina má prioritu před +, -, *, / (u = 0.09) | |||
v1 = t1^(1/2) % zápis druhé odmocniny | |||
v2 = sqrt(t1) % druhá odmocnina pomocí interní matematické funkce Matlabu/Octave | |||
</source> | </source> | ||
Řádek 47: | Řádek 73: | ||
<source lang=octave> | <source lang=octave> | ||
a = [3,2,5] | a = [3 2 5] % taktéž a = [3,2,5] | ||
b = [2;4;6] | b = [2;4;6] | ||
c = a*b | c = a*b | ||
a' | a' % transpozice - změna vektoru řádkový vs. sloupcový | ||
a*a | a*a % chybné rozměry pro násobení vektorů | ||
a*a' | a*a' % skalární součin vektoru se sebou samým = součet čtverců všech prvků vektoru | ||
a'*a % pozor, takto je výsledkem matice !!! | |||
</source> | </source> | ||
Řádek 60: | Řádek 87: | ||
<source lang=octave> | <source lang=octave> | ||
A = [1 | A = [1 2 3; 3 2 1;-1 -2 -3] | ||
B = [1 | B = [1 2 3; 4 5; 6] % chybné zadání - nejsou definovány všechny prvky matice | ||
</source> | |||
''(indexování)'' | |||
<source lang=octave> | |||
A(1, 2) | |||
A(4) | |||
</source> | </source> | ||
''( | ''(násobení, transponovaná matice)'' {{bullet}} {{wikipedia|Transpozice matice|Wikipedia}} | ||
<source lang=octave> | <source lang=octave> | ||
B = 2 * A % skalárem se násobí všechny prvky matice | |||
A*B % násobení dvou čtvercových matic | |||
B' % transpozice | |||
A*B' % násobení dvou jiných čtvercových matic - operátor transpozice má vyšší prioritu než jiné operátory, transpozice se vykoná jako první | |||
</source> | </source> | ||
''( | ''(náhodné hodnoty'') | ||
<source lang=octave> | <source lang=octave> | ||
C = rand(3, 4) | |||
</source> | </source> | ||
''( | ''(dimenze)'' | ||
<source lang=octave> | <source lang=octave> | ||
rows(C) % pouze v Octave | |||
columns(C) % pouze v Octave | |||
length(C) | |||
size(C) | |||
[r, c] = size(C) | |||
size(C,1) | |||
size(C,2) | |||
</source> | </source> | ||
Řádek 91: | Řádek 130: | ||
<source lang=octave> | <source lang=octave> | ||
i = -3 | |||
i = -3 | j = 3 | ||
j = 3 | i:j | ||
i:j | |||
I = 2 | |||
I = 2 | J = -2 | ||
J = -2 | I:J | ||
I:J | J:I | ||
J:I | |||
m = 0 | |||
n = 10 | |||
krok = 0.5 | |||
m:krok:n | |||
</source> | </source> | ||
Řádek 110: | Řádek 148: | ||
<source lang=octave> | <source lang=octave> | ||
M = [ 2 3 4 5; 6 8 9 1; 3 4 6 7; 3 4 7 8 ] | |||
M(2:3,3) | |||
M(1:3,2:3) | |||
M(:,2) | |||
M(end,1:2) | |||
M(:,end) | |||
M(6,5) % nedefinovaný prvek matice | |||
M(6,5) = 10 % matice lze takto rozšířit | |||
</source> | </source> | ||
=== Maticové operace === | |||
''(sčítání)'' | |||
<source lang=octave> | |||
% skalární hodnota | |||
M + 10 | |||
% matice stejného rozměru | |||
f = [2 3; 4 5], g = ones(2) + eye(2) | |||
f + g | |||
M + g % nelze sčítat matice různých rozměrů | |||
</source> | |||
''(maticové násobení)'' {{bullet}} {{wikipedia|Násobení matic|Wikipedia}} | |||
<source lang=octave> | |||
% skalární hodnota | |||
M * 10 | |||
% (m, n) x (n, p) | |||
f * g | |||
M * g % nelze - rozměry matic neodpovídají rozměrům maticového násobení | |||
</source> | |||
''(operace po prvcích)'' | |||
<source lang=octave> | |||
% násobení prvků se stejnými indexy | |||
f .* g | |||
% další operace po prvcích | |||
f ./ g | |||
f .^ 2 | |||
f .^ g | |||
</source> | |||
''(spojení matic)'' | |||
<source lang=octave> | |||
% horizontálně | |||
[f, g] % nebo [f g] | |||
% vertikálně | |||
[f; g] | |||
% rozměr se musí shodovat | |||
h = 5 + zeros(3,2) | |||
[f, h] % nelze | |||
[f; h] | |||
</source> | |||
''(odstranění řádku/sloupce)'' | |||
<source lang=octave> | |||
% vložení prázdného řádku/sloupce = odstranění řádku/sloupce | |||
M(5,:) = [] | |||
M(end,:) = [] | |||
M(:, [3, 5]) = [] | |||
</source> | |||
''(matice s komplexními čísly)''{{bullet}} {{wikipedia|Komplexně sdružené číslo}} | |||
<source lang=octave> | |||
Q = [ 0, 1 + 5i; 10 + 3i, -1 ] | |||
Q' | |||
Q.' | |||
</source> | |||
== Úlohy == | |||
* [[155GIT1 / 1. cvičení / Příklady|1. cvičení - příklady]] | |||
<!-- --> |
Aktuální verze z 10. 2. 2022, 01:03
První seznámení s Matlabem a GNU Octave - proměnné, vektory, matice, indexování, základní matematické operace, skripty
Náplň
- ukázka Matlabu a GNU Octave, viz nástroje
- nápověda, help, doc
- Matlab:
- on-line dokumentace: https://www.mathworks.com/help/matlab/
- syntaxe funkcí: https://www.mathworks.com/help/matlab/referencelist.html?type=function&s_tid=CRUX_topnav
- Octave:
- Matlab:
- skalární hodnoty
- proměnné, pole, matice (dvourozměrné)
- základní operace s proměnnými, inkrementace
- vektor sloupcový, řádkový
- matice, dimenze, ukázka konzistence
- indexování matic
- operátor dvojtečka, submatice
- maticové operace
- speciální matice •
ones()
,zeros()
,eye()
,rand()
- vytváření skriptů
- File -> New -> Script
- spuštění: F5
- výstup se vypisuje do Command Window
- skripty z příkazové řádky •
edit
,run
Ukázky
- Tipy
- Pokud je příkaz ukončen středníkem, tak hodnoty nevypisuje
- Více příkazů lze v jedné řádce oddělit čárkou anebo středníkem
- Dlouhý příkaz lze rozdělit na více řádků pomocí
...
- Pohyb v historii příkazů (klávesové šipky nahoru a dolu)
- Doplňování příkazů pomocí klávesy TAB (dvojstisk)
- Komentáře začínají znakem
%
(v Octave i znakem#
) a jsou ukončeny koncem řádky - Rozsah numerických datových typů
realmin
,realmax
- Textové řetězce jsou ohraničeny jednoduchými uvozovkami (v Octave i dvojitými uvozovkami)
- Nastavení formátu výpisu numerických hodnot:
format long
- výpis na plný počet desetinných místformat short
- výpis na omezený počet desetinných míst (defaultní)
Skalární hodnoty
(matice o dimenzi 1x1)
s = 1
c = 2.3 % pozor, nutno používat desetinnou tečku!
a = 3,9 % čárka odděluje příkazy
Základní matematické operace
(+, -, *, /, závorky, mocnina, odmocnina)
s = 1
t1 = s + 4 * 2 % násobení, dělení má prioritu před sčítáním, odčítáním (t1 = 9)
t2 = (s + 4) * 2 % operátor závorka má vždy nejvyšší prioritu (t2 = 10)
u = t1 / t2 ^ 2 % mocnina má prioritu před +, -, *, / (u = 0.09)
v1 = t1^(1/2) % zápis druhé odmocniny
v2 = sqrt(t1) % druhá odmocnina pomocí interní matematické funkce Matlabu/Octave
Vektory
(řádkový vs. sloupcový)
a = [3 2 5] % taktéž a = [3,2,5]
b = [2;4;6]
c = a*b
a' % transpozice - změna vektoru řádkový vs. sloupcový
a*a % chybné rozměry pro násobení vektorů
a*a' % skalární součin vektoru se sebou samým = součet čtverců všech prvků vektoru
a'*a % pozor, takto je výsledkem matice !!!
Matice
(musí být obdélníková)
A = [1 2 3; 3 2 1;-1 -2 -3]
B = [1 2 3; 4 5; 6] % chybné zadání - nejsou definovány všechny prvky matice
(indexování)
A(1, 2)
A(4)
(násobení, transponovaná matice) • Wikipedia
B = 2 * A % skalárem se násobí všechny prvky matice
A*B % násobení dvou čtvercových matic
B' % transpozice
A*B' % násobení dvou jiných čtvercových matic - operátor transpozice má vyšší prioritu než jiné operátory, transpozice se vykoná jako první
(náhodné hodnoty)
C = rand(3, 4)
(dimenze)
rows(C) % pouze v Octave
columns(C) % pouze v Octave
length(C)
size(C)
[r, c] = size(C)
size(C,1)
size(C,2)
Operátor dvojtečka
(výčet, rozsah)
i = -3
j = 3
i:j
I = 2
J = -2
I:J
J:I
m = 0
n = 10
krok = 0.5
m:krok:n
(submatice)
M = [ 2 3 4 5; 6 8 9 1; 3 4 6 7; 3 4 7 8 ]
M(2:3,3)
M(1:3,2:3)
M(:,2)
M(end,1:2)
M(:,end)
M(6,5) % nedefinovaný prvek matice
M(6,5) = 10 % matice lze takto rozšířit
Maticové operace
(sčítání)
% skalární hodnota
M + 10
% matice stejného rozměru
f = [2 3; 4 5], g = ones(2) + eye(2)
f + g
M + g % nelze sčítat matice různých rozměrů
(maticové násobení) • Wikipedia
% skalární hodnota
M * 10
% (m, n) x (n, p)
f * g
M * g % nelze - rozměry matic neodpovídají rozměrům maticového násobení
(operace po prvcích)
% násobení prvků se stejnými indexy
f .* g
% další operace po prvcích
f ./ g
f .^ 2
f .^ g
(spojení matic)
% horizontálně
[f, g] % nebo [f g]
% vertikálně
[f; g]
% rozměr se musí shodovat
h = 5 + zeros(3,2)
[f, h] % nelze
[f; h]
(odstranění řádku/sloupce)
% vložení prázdného řádku/sloupce = odstranění řádku/sloupce
M(5,:) = []
M(end,:) = []
M(:, [3, 5]) = []
(matice s komplexními čísly) • Komplexně sdružené číslo
Q = [ 0, 1 + 5i; 10 + 3i, -1 ]
Q'
Q.'