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

Z GeoWikiCZ
Skočit na navigaci Skočit na vyhledávání
m
 
(Není zobrazeno 17 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é, matice, vektory, indexování, 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
+
* 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 27:
 
* 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 33:
 
* 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 42:
  
 
<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 65:
  
 
<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
 
  a*a
 
  a*a
 
  a*a'
 
  a*a'
Řádek 62: Řádek 78:
  
 
<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]
 
</source>
 
</source>
  
Řádek 69: Řádek 85:
  
 
<source lang=octave>
 
<source lang=octave>
C = rand(3, 4)
+
C = rand(3, 4)
 
</source>
 
</source>
  
Řádek 75: Řádek 91:
  
 
<source lang=octave>
 
<source lang=octave>
A(1, 2)
+
A(1, 2)
A(4)
+
A(4)
 
</source>
 
</source>
  
Řádek 82: Řádek 98:
  
 
<source lang=octave>
 
<source lang=octave>
B = 2 * A
+
B = 2 * A
A*B
+
A*B
B'
+
B'         % transpozice
A*B'
+
A*B'
 
</source>
 
</source>
  
Řádek 91: Řádek 107:
  
 
<source lang=octave>
 
<source lang=octave>
rows(C)
+
rows(C)   % pouze v Octave
columns(C)
+
columns(C) % pouze v Octave
length(C)
+
length(C)
size(C)
+
size(C)
[r, 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
 +
 
 +
a = 0
 +
b = 10
 +
c = 0.5
 +
a:c:b
 +
</source>
 +
 
 +
''(submatice)''
 +
 
 +
<source lang=octave>
 +
A = [ 2 3 4 5; 6 8 9 1; 3 4 6 7; 3 4 7 8 ]
 +
A(2:3,3)
 +
A(1:3,2:3)
 +
A(:,2)
 +
A(end,1:2)
 +
A(:,end)
 +
 
 +
A(6,5)
 +
A(6,5) = 10  % !!!
 +
</source>
 +
 
 +
=== Maticové operace ===
 +
 
 +
''(sčítání)''
 +
 
 +
<source lang=octave>
 +
% skalární hodnota
 +
A + 10
 +
% matice stejného rozměru
 +
a = [2 3; 4 5], b = ones(2) + eye(2)
 +
a + b
 +
A + b % nelze
 +
</source>
 +
 
 +
''(násobení)'' {{bullet}} {{wikipedia|Násobení matic|Wikipedia}}
 +
 
 +
<source lang=octave>
 +
% skalární hodnota
 +
A * 10
 +
% (m, n) x (n, p)
 +
a * b
 +
A * b % nelze
 +
</source>
 +
 
 +
''(operace po prvcích)''
 +
 
 +
<source lang=octave>
 +
% násobení prvků se stejnými indexy
 +
a .* b
 +
% další operace
 +
a ./ b
 +
a .^ 2
 +
a .^ b
 +
</source>
 +
 
 +
''(transponovaná matice)'' {{bullet}} {{wikipedia|Transpozice matice|Wikipedia}} {{bullet}} {{wikipedia|Komplexně sdružené číslo}}
 +
 
 +
<source lang=octave>
 +
B = [ 0, 1 + 5i; 10 + 3i, -1 ]
 +
B'
 +
B.'
 +
</source>
 +
 
 +
''(spojení matic)''
 +
 
 +
<source lang=octave>
 +
% horizontálně
 +
[a, b] % nebo [a b]
 +
% vertikálně
 +
[a; b]
 +
% rozměr se musí shodovat
 +
c = 5 + zeros(3,2)
 +
[a, c] % nelze
 +
[a; c]
 +
</source>
 +
 
 +
''(odstranění řádku/sloupce)''
 +
 
 +
<source lang=octave>
 +
A(5,:) = []
 +
A(end,:) = []
 +
A(:, [3, 5]) = []
 
</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 20. 2. 2020, 06:07

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

První seznámení s Matlabem a GNU Octave - proměnné, matice, vektory, indexování, 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
  • 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
 a*a
 a*a'

Matice

(musí být obdélníková)

 A = [1 2 3; 3 2 1;-1 -2 -3]
 B = [1 2 3; 4 5; 6]

(náhodné hodnoty)

 C = rand(3, 4)

(indexování)

 A(1, 2)
 A(4)

(násobení)

 B = 2 * A
 A*B
 B'         % transpozice
 A*B'

(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

 a = 0
 b = 10
 c = 0.5
 a:c:b

(submatice)

 A = [ 2 3 4 5; 6 8 9 1; 3 4 6 7; 3 4 7 8 ]
 A(2:3,3)
 A(1:3,2:3)
 A(:,2)
 A(end,1:2)
 A(:,end)

 A(6,5)
 A(6,5) = 10   % !!!

Maticové operace

(sčítání)

 % skalární hodnota
 A + 10
 % matice stejného rozměru
 a = [2 3; 4 5], b = ones(2) + eye(2)
 a + b
 A + b % nelze

(násobení)Wikipedia

 % skalární hodnota
 A * 10
 % (m, n) x (n, p)
 a * b
 A * b % nelze

(operace po prvcích)

 % násobení prvků se stejnými indexy
 a .* b
 % další operace
 a ./ b
 a .^ 2
 a .^ b

(transponovaná matice)WikipediaKomplexně sdružené číslo

 B = [ 0, 1 + 5i; 10 + 3i, -1 ]
 B'
 B.'

(spojení matic)

 % horizontálně
 [a, b] % nebo [a b]
 % vertikálně
 [a; b]
 % rozměr se musí shodovat
 c = 5 + zeros(3,2)
 [a, c] % nelze
 [a; c]

(odstranění řádku/sloupce)

 A(5,:) = []
 A(end,:) = []
 A(:, [3, 5]) = []

Úlohy