Stručný návod k programu Octave Octave je interaktivní program vhodný pro technické výpočty. Je nápadně podobný programu MATLAB, na rozdíl od něho je zcela zadarmo. Jeho domovská vebová stránka je http://www.octave.org/, ale jeho další kompilace jak pro Windows tak i pro Linux je možno stáhnout leckde. Stačí hledat. 1 Úvodní poznámky 1. Všechny proměnné jsou matice. Skalár je a(1,1). Vektor je bud řádkový a(1,5) nebo sloupcový a(5,1). 2. Středník za zadanou proměnnou a=5; způsobí, že po zadání proměnné není žádná odezva; po zadání s čárkou nebo bez ničeho, tj. a=5, nebo a=5 se hodnota proměnné vypíše na obrazovku. 3. help objekt zobrazí nápovědu k objektu. help -i objekt dá podrobnější nápovědu. 4. Komentář je text začínající % 5. Příkazy je možno zapsat do textového souboru s koncovkou.m (batch-file) a spustit je najednou spuštěním jména souboru. 2 Proměnné a operace 2.1 Typy proměnných string, pro zápis textu: a= ahoj. Stringy lze spojovat do vektorů: je-li a= dobry ; b= den a c=[a,b], pak c= dobry den. Užitečná je konverze číslo řetězec: s=num2str(a), kde s je string a a double. double, pro přirozené nebo reálné proměnné. Jejich definici je možno provést následovně: Zadáním hodnoty: hodnoty a=5; řádkového vektoru a=[3 5 1]; sloupcového vektoru a=[3; 5; 1], což je totéž jako a=[3 5 1] matice a=[2 3 4; 8 7 6]; Prvky vektorů nebo matic se zadávají do hranatých závorek. Prvky v řádku se oddělují čárkou nebo mezerou. Středník ukončí řádek matice a přejde na nový. Transpozice se provede pomocí apostrofu. 1
Pomocí dvojtečky: a=5:8 s inkrementem 1 vytvoří vektor [5 6 7 8] nebo a=2:3:10; s inkrementem 3 vytvoří vektor [2 5 8]. Funkcí a=zeros(2,3) nebo a=ones(2,3) vytvoří matici 2 x 3 nul nebo jedniček. 2.2 Operace s proměnnými Výběr prvků matice: a(3:5) výpis 3,4 a 5 prvku vektoru a. a(:,1) výpis prvního sloupce matice a a(2:3,:) je výpis 2. a 3. řádku a. Operace: + - / a+b a a-b sčítání a odečítání (stejné rozměry!) a*b násobení (správné rozměry!) a/b nebo a\b znamená a krát inverze b nebo inverze a krát b umocnění je **, odmocnění funkce a=sqrt(b). Tečkové operace:../. Znamenají operace prvek po prvku. Např. [1 2 3].*[6 5 4] je [1*6 2*5 3*4] [2 3; 4 1].**[5 3; 2 8] je [2**5 3**3; 4**2 1**8] Operace s maticí a skalárem: Matice + - * / ** skalár platí pro všechny prvky matice: [2 3]*4 je [2*4 3*4] Logické operace: ==!= < <= > >= & (=and) (=or)! (=not) 2.3 Práce s proměnnými Příkazy who, whos dávají informaci o definovaných proměnných. [m,n]=size(a), m=size(a,1), n=size(a,2) dávají informaci o rozměrech matice a, resp. počtu řádků, resp. počtu sloupců. n=length(a) udává informaci o délce vektoru (větší z rozměrů matice a) clear, clear all uvolňuje pamět. 2.4 Práce s daty na disku save data nebo save data a b uloží na disk do souboru všechny definované proměnné nebo jen proměnné a, b. load data nebo load data a b natáhne z disku datový soubor data nebo jen proměnné a, b z tohoto souboru. 2
Je-li za příkazem save nebo load uvedena volba -ascii, budou proměnné uloženy v ascii kódu. 3 Programovací příkazy Podmínka if if b>c, a=5; else a=0; Vícenásobná podmínka if if b>.1, a=5; elseif b<-.1, a=-5; else a=0; Cyklus for for i=1:5 a(i)=2*i; Je-li splněna podmínka b> c, provede se příkaz a=5; jinak příkaz a=0;. Je-li splněna podmínka b>.1, provede se příkaz a=5; a příkaz končí. Jinak se testuje podmínka b<.1 a provede se příkaz a=-5; nebo příkaz a=0;. Pro i=1,2,3,4,5 se provede příkaz a(i)=2*i;. Výsledek: a=[2, 4, 6, 8, 10]. Cyklus while while i<=5 a(i)=0; i=i+1; Dokud je splněna podmínka i<=5, provádějí se příkazy a(i)=0; a i=i+1; (inkrement) i. Výsledek: a(1:5) se nuluje. Break, return Break: Způsobí ukončení cyklu for nebo while. Program pokračuje za tímto cyklem. Return: Způsobí ukončení prováděné procedury. Pause, keyboard, input Pause: Způsobí zastavení programu (pokračuje po stisku lib. klávesy) Keyboard: Způsobí zastavení programu a předá řízení klávesnici - možnost kontroly proměnných uvnitř programu (pokračuje po zadání příkazu exit). Input: Způsobí zastavení programu a čeká na vstup proměnné (zadat a potvrdit Enter). Např.: a=input( Zadej hodnotu a: ); vypíše text v apostrofech a zadanou hodnotu přiřadí proměnné a. 3
Eval Příkaz eval(strig); spustí příkaz, který je textově zapsán v proměnné string Např. eval( x=1; ) dá příkaz x=1 nebo eval([ x,num2str(i), =1; ]) pro i=5 dá x5=1. 4 Podprogramy a funkce Libovolnou část programu je možno uložit do samostatného souboru (s koncovkou.m) a volat jej v jiném programu jako podprogram. Definované proměnné se přitom nemění. Funkce se od podprogramu liší tím, že předává parametry, tj. do funkce se předají jen vstupní parametry a z funkce vystoupí jen výstupní parametry. Tvar funkce je následující: function [výstupní parametry] = jmeno(vstupní parametry) % popis funkce: co dělá, výst. a vst. parametry vlastní program function Například: function [m1,m2,v1,v2,co] = momenty(x,y) % [mx,my,vx,vy,co] = momenty(x,y) % prvni a druhe momenty souboru x, y % mx,my první momenty (průměry) % vx,vy druhé momenty (výb. rozptyly) % co druhý vzájemný moment (výb. kovariance) % x,y datové soubory (výběry) mx=mean(x); my=mean(y); vx=var(x); vy=var(y); co=cov(x,y); function 5 Tiskový výstup Pro tisk proměnných slouží příkazy disp (bez formátu) a printf (s formátem). disp(a) zobrazí hodnotu proměnné a. disp( ahoj ) vypíše text ahoj. printf( prvek %g vektoru a je %g\n,i,a(i)); vypíše: prvek 5 vektoru a je 4.12 (pokud je to pravda). 4
6 Grafický výstup Dvojrozměrný graf je možno vykreslit příkazem plot. Příklady: plot(y) vykreslí hodnoty vektoru y. Na ose x je pořadí složky vektoru (index). plot(x,y) vykreslí hodnoty vektoru y proti hodnotám vektoru x tzv xy-graf. plot(a) vykreslí sloupce matice a. Formátování grafu: typ čar typ bodů barva - (plná). (bod) r (red) -@ (s body) + (plus) g (green) -* (s hvězdami) * (hvězda) b (blue) -x (s křížky) x (křížek) w (white) Další možnosti: help -i plot. Příklady: plot(x, *r ) vykreslí vektor x pomocí červených hvězdiček. plot(x,y, r-+,u,v, b-x ) vykreslí dvě křivky (x,y) a (u,v); první červenou a čarou s plusy, druhou modrou čarou s křížky. Trojrozměrý graf (zadaný maticí bodů) se vykreslí příkazem mesh. Funkce meshgrid připraví argumenty pro výpočet zobrazované matice. Například program x=-2:.1:2; y=x ; sig=.6; [xx yy]=meshgrid(x,y); z=1/sig*exp(-.5/sig**2*(xx.**2+yy.**2)); mesh(z); vykreslí nenormovanou hustotu pravděpodobnosti normálního rozdělení. 5