Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Lekce 01

Pro výuku budeme používat program GNU/Octave, který lze stáhnout z webových stránek projektu. Jedná se o svobodný software, který je alternativou k programu MATLAB, se kterou je z větší míry zpětně kompatibilní (alespoň pro naše potřeby).

Odkazy na literaturu

Na internetu lze nalézt spoustu materiálů, ze kterých lze čerpat zdroje. Uvádím jen malý výběr:

Jak vypadá GNU/Octave po spuštění

Jakmile program spustíme, vidíme že se skládá z několika částí. Pro nás bude momentálně nejdůležitější okno na pravé strane, které se jmenuje Command window. Do tohoto okna budeme zadávat jednotlivé příkazy.

octave

Základní použití

Octave lze použít jako obyčejnou kalkulačku, která zvládá všechny základní operace:

  • sčítání,

  • odčítání,

  • násobení,

  • dělení,

  • umocňování,

  • odmocňování.

1+1
ans = 2
2-1
ans = 1
2*3
ans = 6
6/2
ans = 3
2^3
ans = 8
sqrt(16)
ans = 4

Pokud chceme vypočítat odmocninu vyššího řádu, můžeme buď využít zlomků, nebo příkaz nthroot():

32^(1/5)

nthroot(32,5)
ans = 2
ans = 2

Přirozeně je možné zapisovat i složitější výrazy a to i s využitím kulatých závorek:

4+3*2
ans = 10
(4+3)*2
ans = 14

Jak je vidět, GNU/Octave zachovává pořadí operací tak, jak jsme zvyklí, tj. operace jsou prováděny v následujícím pořadí:

  • závorky

  • mocnina odmocnina

  • násobení a dělení

  • sčítání a odčítání

S rostoucí komplexností výrazů roste i počet potřebných závorek. Je důležité si pamatovat, že používat lze pouze kulaté závorky, ostatní druhy závorek mají v programovacím jazyku jinou funkci. Stejně tak je třeba dýt pozor na to, že GNU/Octave používá desetinnou tečku másto desetinné čárky - jedná se o častý zdroj chyb!

Vyzkoušejte si zápis složitějších výrazů:

373+1\frac{3-7}{3+1}
(3-7)/(3+1)
ans = -1
3+3+342+22+5\frac{3+\frac{3+3}{4\cdot2}+2}{2+5}
(3+((3+4)/(4*2)+2))/(2+5)
ans = 0.8393

Mezi další často používáné funkce patří exp() pro exe^x, log pro přirozený logaritmus, abs() pro absolutní hodnotu, sin() pro sinus, cos pro cosinus, tan pro tangens. Hodnotu konstanty π\pi zjistíme příkazem pi.

Proměnné

Stejně jako v jiných programovacích jazycích lze používat proměnné, do kterých budeme ukládat hodnoty. Na rozdíl od jiných programovacích jazyku není třeba provádět deklaraci proměnných. Stačí jen napsat název proměnné a pomocí == ji přiřadit hodnotu a GNU/Octave už se o vše postará:

jablko=2
jablko = 2

Vytvořili jsme proměnnou jablko do které jsme uložili hodnotu 2. Pokud bychom chtěli zjistit, jaká hodnota je v proměnné jablko uložena, stačí zadat název proměnné a její hodnota bude vypsána na obrazovku:

jablko
jablko = 2

Proměnných si můžeme vytvořit, kolik bude třeba. Jen je při vymýšlení jejich názvu třeba myslet na základní pravidla:

  1. Název proměné je tvořen písmeny a čísly, ovšem musí začínat písmenem.

  2. Proměnné jsou case sentive - rozlišujeme u nich velká a malá písmena (jablko, Jablko, JABLKO a JaBlKo jsou 4 rozdílné proměnné)

  3. V názvu proměnné je možné použít symbol _\_

  4. Není doporučeno používat jako názvy proměnných klíčová slova (názvy základních funckí apod.). Seznam klíčových slov lze vypsat za použití příkazu iskeyword

S jednotlivými proměnnými můžeme dále pracovat:

jablka = 2
hrusky = 5

jablka+hrusky
jablka = 2
hrusky = 5
ans = 7

Výsledky můžeme ukládat do jiných proměnných:

stavebnice = 5
puzzle = 11

hracky = stavebnice+puzzle
stavebnice = 5
puzzle = 11
hracky = 16

Pokud bychom chtěli hodnotu proměnné navýšit o jedna, lze použít následující postup:

hodnota = 5
hodnota = hodnota +1
hodnota = 5
hodnota = 6

Tímto číslo uložené v proměnné hodnota zvýší o jedna. Pokud příkaz zadáme znovu, číslo se opět zvýší o jedna:

hodnota = hodnota+1
hodnota = 7

Tvorba skriptů

Abychom nemusely příkazy psát pořád dokola, je možné tvořit skripty. Jedná se o posloupnost příkazů, které se postupně v daném pořadí vykonávají. Abychom toto mohli používat, je třeba si nejprve vybrat složku, do které budeme skripty ukládat (a ze které je budeme spouštět).

Postup:

  1. Klikneme na ikonku složky uprostřed nahoře

octave
  1. Vybereme složku, ve které budeme dále pracovat

  2. Vpravo dole se přepneme na Editor, ve kterém budeme skripty tvořit.

octave
  1. V novém okně můžeme náš skript jako v textovém editoru. Před spuštěním je třeba skript uložit a pojmenovat. V názvu souboru napoužívejte diakritiku a mezery. Soubor se uloží s příponou .m, ale jedná se o obyřejný textový soubor, který lze editovat třeba v poznámkovém bloku, pokud jej přejmenujete na txt.

Na obrázku vidíme jednoduchý skript, který jsme pojmenovali ovoce.m

octave
  1. Nás skript teď stačí spustit. K tomu slouží klávesa F5, ikonka ozubeného kola nebo se lze přepnout do Command window a napsat název souboru (bez přípony). Následně se všechny příkazy našeho skriptu povedou v uvedeném pořadí a vypíší se na obrazovku:

octave

Tip: pokud nechcete vypisovat všechny příkazy na výstup, je možné jednotlivé příkazy potlačit pomocí středníku. Zkuste si spustit následující skript:

jablka = 1+1;
hrusky = (8+2)/4;

ovoce = jablka+hrusky
ovoce = 4.5000

Tvorba prvních skriptů

Výpočet objemu a povrchu kvádru

Naším ukolem bude vytvořit skript, který na základě zvolených délek stran kvádru vypočítá jeho objem a povrch.

%Vypocet objemu kvadru

%jednotlive strany
stranaA=5;
stranaB=7;
stranaC=10;

%vypocet objemu a povrchu
objem_kvadru=stranaA*stranaB*stranaC

povrch_kvadru=2*(stranaA*stranaB+stranaB*stranaC+stranaA*stranaC)
objem_kvadru = 350
povrch_kvadru = 310

Komentář ke skriptu

  • Jednotlivé délky stran jsme uložili do proměnných s názvem stranaA, stranaB a stranaC

  • výsledný objem jsme uložili do proměnné objem_kvadru

  • výsledný povrch jsme uložili do proměnné objem_kvadru

  • ve skriptu jsme použili komentáře - jedná se o text, který je uvozen symbolem procenta. Komentáře se při spuštění skriptu ignorují (GNU/Octave je přeskakuje). Je vhodné používat komentáře, obzvlášť u složitějších skriptů, abychom se v nich později vyznali.

Výpočet kořenů kvadratické rovnice (s nezáporným diskriminantem)

Naším úkolem bude napsat skript, který na základě zadaných členů a,ba, b a cc kvadratické rovnice ax2+bx+ca x^2+bx+c vypočítá jeho kořeny x1x_1 a x2x_2, které uloží do porměnných x1 a x2

%Vypocet korenu kvadraticke rovnice (s nezapornym diskriminantem)

%Jedotlive cleny ulozime do promennych
a=2
b=9
c=4

%Vypocitame diskriminant
Diskriminant=b^2-4*a*c

%Vypocitame koreny rovnice
x1=(-b+sqrt(Diskriminant))/(2*a)
x2=(-b-sqrt(Diskriminant))/(2*a)
a = 2
b = 9
c = 4
Diskriminant = 49
x1 = -0.5000
x2 = -4

Komentář ke skriptu

  • Skript jsme rozdělili do tří částí: uložení hodnot do proměnných a,ba,b a cc; výpočtu diskriminantu do proměnné Diskriminant a následného výpočtu kořenů.

  • Pokud bychom chtěli výpočet zjednodušit, mohli bychom prostřední krok vynechat a počítat rovnou kořeny kvadratické rovnice

  • Tím bychom ale ztratili informaci o diskriminantu a navíc bychom ho vlastně počítali dvakrát - u obou kořenů

Tento skript už se nám může hodit - například pokud chystáme písemku a chce rychle spočítat kořeny pro námi vybrané členy a,ba, b a cc.

Jak tento kód vylepšit si ukážeme v prvním domácím úkolu.