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:
  1. V případě volby 'Zmrzlinu': 'Hned Vam zmrzlinu donesu.'
  2. V případě volby 'Tvarohovy kolac': 'Hned Vam kolac donesu.'
  3. 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):
  1. V prvním kroku () položíme: , .
  2. 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:
  1. Základní interval rozdělte na dílů, tj. vytvořte uzlových bodů.
  2. Procházejte rozdělený základní interval bod po bodu.
  3. 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í.
  4. 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í.
  5. Body 2. - 4. opakujte tak dlouho, dokud bude docházet k dalšímu dělení intervalů.
  6. 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.