155GIT1 / 1. cvičení: Porovnání verzí

Z GeoWikiCZ
Skočit na navigaci Skočit na vyhledávání
 
(Není zobrazeno 29 mezilehlých verzí od 2 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, vektory, indexování}}
+
{{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ň cvičení ==
 
== Náplň cvičení ==
  
* ukázka Matlabu a [https://www.gnu.org/software/octave/ GNU Octave] (instalátor pro [http://mxeoctave.osuv.de/octave-3.8.2-5-installer.exe Windows])
+
* ukázka Matlabu a GNU Octave, viz [[155GIT1#Nástroje|nástroje]]
<center>
+
 
{|
+
{{fig|octave-gui|Grafické uživatelské rozhraní GNU Octave|size=500}}
|style="vertical-align:top; text-align: left"|{{fig|matlab-ubuntu-launch|Spuštění Matlabu v Ubuntu|size=300}}
+
 
|-
 
|style="vertical-align:top"|{{fig|octave-cmd|Spuštění GNU Octave z příkazové řádky, ukončení příkazem <code>exit</code>}}
 
|{{fig|octave-gui|Grafické uživatelské rozhraní GNU Octave, spustitelné z terminálu příkazem <code>octave --force-gui</code>|size=500}}
 
|}
 
</center>
 
 
* nápověda, help, doc
 
* nápověda, help, doc
 
** http://www.gnu.org/software/octave/doc/interpreter/
 
** 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, sloupcový, řádkový
+
** vektor sloupcový, řádkový
 
* matice, dimenze, ukázka konzistence
 
* matice, dimenze, ukázka konzistence
* skalární hodnoty
+
** 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 27: Řádek 31:
 
* 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 řádku pomocí znaku <code>\</code>
+
* 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)
Řádek 33: Řádek 37:
 
* 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)
 
* 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 46:
  
 
<source lang=octave>
 
<source lang=octave>
s = 1
+
s = 1
c = 2.3  % pozor, nutno používat desetinnou tečku!
+
c = 2.3  % pozor, nutno používat desetinnou tečku!
a = 3,9  % čárka odděluje příkazy
+
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 49: Řádek 69:
  
 
<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 62: Řádek 83:
  
 
<source lang=octave>
 
<source lang=octave>
A = [1, 2, 3;3, 2, 1;-1, -2, -3]
+
A = [1 2 3; 3 2 1;-1 -2 -3]
B = [1, 2, 3; 4, 5; 6]
+
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>
 +
 
 +
''(násobení, transponovaná matice)'' {{bullet}} {{wikipedia|Transpozice matice|Wikipedia}}
 +
 
 +
<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>
  
Řádek 69: Řádek 106:
  
 
<source lang=octave>
 
<source lang=octave>
C = rand(3, 4)
+
C = rand(3, 4)
 +
</source>
 +
 
 +
''(dimenze)''
 +
 
 +
<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>
 +
 
 +
=== Operátor dvojtečka ===
 +
 
 +
''(výčet, rozsah)''
 +
 
 +
<source lang=octave>
 +
i = -3
 +
j = 3
 +
i:j
 +
 
 +
I = 2
 +
J = -2
 +
I:J
 +
J:I
 +
 
 +
m = 0
 +
n = 10
 +
krok = 0.5
 +
m:krok:n
 
</source>
 
</source>
  
''(indexování)''
+
''(submatice)''
 +
 
 +
<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>
 +
 
 +
=== 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>
 
<source lang=octave>
A(1, 2)
+
% horizontálně
A(4)
+
[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>
 
</source>
  
''(násobení)''
+
''(odstranění řádku/sloupce)''
  
 
<source lang=octave>
 
<source lang=octave>
B = 2 * A
+
% vložení prázdného řádku/sloupce = odstranění řádku/sloupce
A*B
+
M(5,:) = []
B'
+
M(end,:) = []
A*B'
+
M(:, [3, 5]) = []
 
</source>
 
</source>
  
''(dimenze)''
+
''(matice s komplexními  čísly)''{{bullet}} {{wikipedia|Komplexně sdružené číslo}}
  
 
<source lang=octave>
 
<source lang=octave>
rows(C)
+
Q = [ 0, 1 + 5i; 10 + 3i, -1 ]
columns(C)
+
Q'
length(C)
+
Q.'
size(C)
 
[r, c] = size(C)
 
 
</source>
 
</source>
  
 
== Úlohy ==
 
== Úlohy ==
  
* výpočet vzdálenosti mezi dvěma body
+
* [[155GIT1 / 1. cvičení / Příklady|1. cvičení - příklady]]
* výpočet vodorovné vzdálenosti
 
* obsah trojúhelníka ({{wikipedia|Heronův vzorec}})
 

Aktuální verze z 26. 2. 2020, 17:43

stránky předmětudalší cvičení

První seznámení s Matlabem a GNU Octave - proměnné, vektory, matice, indexování, základní matematické operace, skripty

Náplň cvičení

Grafické uživatelské rozhraní GNU Octave
  • nápověda, help, doc
  • 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íst
    • format 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.'

Úlohy