Příklady (if, switch, for, while) - pokračování
Ing. Petr Pokorný, Ph.D.
Příklad 1
Vytvořte m-file, ve kterém nejprve vyčistěte prostředí. Dále nakopírujte příkaz pro vytvoření dotazového dialogu:
VYBER = questdlg( 'Jaky byste radi zakusek k obedu?', 'Zmrzlinu', 'Tvarohovy kolac', 'Zakusek si nedam', 'Zmrzlinu' );
Funkce questdlg vrátí do proměnné VYBER retezec 'Zmrzlinu', 'Tvarohovy kolac', nebo 'Zakusek si nedam' v závislosti na volbě uživatele. Vytvořte switch/case/otherwise rozcestník, který vyhodnotí odpověď a odpoví zákazníkovi:
- V případě volby 'Zmrzlinu': 'Hned Vam zmrzlinu donesu.'
- V případě volby 'Tvarohovy kolac': 'Hned Vam kolac donesu.'
- V jiném případě: 'Dobra, co bych Vam mohl dal nabidnout?'
Příklad 2
Napište algoritmus pro numerický iterativní výpočet průsečíku přímky s plochou. Přímka nechť je zadána polohovým vektorem
a jednotkovým směrovým vektorem
. Plocha nechť je zadána funkcí
. Konfiguraci pro testování vhodně navrhněte (vhodně zvolte vektory
,
a funkci
). Označíme-li hledaný průsečík
, potom algoritmus výpočtu bude následující (p značí číslo iterace): - V prvním kroku (
) položíme:
,
. - V p-té iteraci poté bude platit:
,
,
.
Výše uvedený algoritmus v každém kroku vypočte průsečík přímky s rovinou, která je kolmá na osu z a prochází bodem
. Iterativní výpočet probíhá tak dlouho (
), dokud není splněna podmínka
, kde Δ značí zvolenou toleranci. Výsledek testovacího výpočtu zobrazte do vhodného grafu. Analyzujte konvergenci, tj. vypište počet iterací, zobrazte graf rozdílů
v závislosti na číslu iterace p, apod. Příklad 3
Pomocí numerické integrace lichoběžníkovým pravidlem vypočtěte
, jestliže vztah pro lichoběžníkové pravidlo s rovnoměrným dělením základního intervalu lze zapsat vztahem:
. Počet dělení N vhodně zvolte. Výsledek zkontrolujte pomocí funkce trapz. Příklad 4
Modifikujte integraci z Příkladu 3 následujícím způsobem pro adaptivní dělení osy x:
- Základní interval
rozdělte na
dílů, tj. vytvořte
uzlových bodů. - Procházejte rozdělený základní interval bod po bodu.
- Na každém i-tém lévém uzlovém bodě dělení vypočtěte rozdíl
funkčních hodnot vypočtený z krajních bodů intervalu dělení, tj.:
, kde
značí funkci integrandu. Dále vypočtěte hodnotou
pomocí totálního diferenciálu, tedy:
, kde
značí derivaci funkce integrandu vyčíslenou v bodě
a
označuje délku i-tého dílku dělení. - Jestliže bude absolutní hodnota rozdílu hodnot
a
větší než hodnota tolerance T, kterou vhodně zvolte (např.
), rozdělte interval na dva a pokračujte na další interval dělení. - Body 2. - 4. opakujte tak dlouho, dokud bude docházet k dalšímu dělení intervalů.
- Vypočtetě součet ploch lichoběžníků.
Příklad 5
Vytvořte m-file, ve kterém nejprve vyčistěte prostředí. Dále nakopírujte příkaz pro vytvoření dialogu zadání cesty k obrázku:
[ file, path, indx ] = uigetfile( '*.jpg', 'Zvolte obrazek' );
Jestliže je zvolena cesta k souboru JPG, poté je do proměnné file uložen název obrázku, do proměnné path cesta do složky s obrázkem a do proměnné indx hodnota true. V případě stisknutí Cancel nebo zavření dialogu je do proměnné indx zapsáno false.
Jestliže byla zadána cesta k obrázku, použijte funkci imread pro jeho načtení.
Jestliže byl načten obrázek, vytvořte algoritmus, který vypočte průměrnou hodnotu Red, Green a Blue složky v obrázku. Dále obrázek zobrazí (image nebo imagesc) a v titulku zapíše, která barva má největší zastoupení (title), resp. která barva má maximální průměrnou hodnotu v obraze.
Nápověda: Obrázek je uložen jako matice rozměru (M,N,3), kde M a N značí výšku a šířku obrázku v pixelech, (i,j,1) značí i,j-tý pixel Red, (i,j,2) značí i,j-tý pixel Green a obdobně (i,j,3) značí i,j-tý pixel Blue.