% 6. cvičení z předmětu PPEL - MATLAB a=[1:5] % zadání vektoru a a = 1 2 3 4 5 sum(a) % součet hodnot všech prvků ve vektoru a ans = 15 cumsum(a) % kumulativní součet - součet prvků se všemi předchůdci ans = 1 3 6 10 15 prod(a) % součin hodnot všech prvků ve vektoru a ans = 120 cumprod(a) % kumulativní součin - součin prvků se všemi předchůdci ans = 1 2 6 24 120 diff(a) % diference - rozdíly mezi sousedními prvky vektoru a ans = 1 1 1 1 b=[-3,0,5,4,9] % zadání vektoru b b = -3 0 5 4 9 diff(b) % diference - rozdíly mezi sousedními prvky vektoru b ans = 3 5 -1 5 c=3+4i; % zadání komplexního čísla d=conj(c) % komplexně sdružené číslo k číslu c d = 3.0000 - 4.0000i disp(d) % výpis na obrazovku bez názvu proměnné, není možno formátovat 3.0000 - 4.0000i %---------------------------------------------- % programové konstrukce for, while, if, switch %---------------------------------------------- % for - cyklus s pevným počtem opakování % Př. Vytvoření 10-ti prvkového vektoru n-tou odmocninou z čísla 100, % kde n je pořadové číslo vektoru. for n=1:10 % for počátek:krok:konec (zde od 1 do 10, krok 1 není uveden) x(n)=100^(1/n); % příkaz (naplní n-tý prvek vektoru n-tou odmocninou z čísla 100) end % konec cyklu x x = 100 10 4.6416 3.1623 2.5119 2.1544 1.9307 1.7783 1.6681 1.5849 % lze nahradit výpočtem pomocí vektorů (efektivnější - výpočet probíhá pomocí vektorových operací) % => cykly používat jen v nutných případech n=1:10; % vektor od 1 do 10 x=100.^(1./n) % naplní vektor x s 10 prvky n-tou odmocninou z čísla 100 % nutno použít .^ (operace prvek po prvku) x = 100 10 4.6416 3.1623 2.5119 2.1544 1.9307 1.7783 1.6681 1.5849 %----------------------------------------------- % while - cyklus s podmínkou na začátku % Př. Zmenšování čísla a dokud se nerovná číslu b a=10; b=1; % zadání proměnných a,b while a~=b % while logický výraz - dokud "a nerovná se b" a=a-1; % příkaz end % konec cyklu c=a+b % součet proměnných a,b (po proběhnutí cyklu a rovná se b), c = % tj. v proměnné c je dvojnásobek b 2 %----------------------------------------------- if - podmíněný příkaz % Př. Pokud součet prvků na diagonále "magické" matice je menší než 10, parametru p se přiřadí 0, % pokud součet prvků na diagonále matice je z intervalu (10;100), parametru p se přiřadí 1, % pokud součet prvků na diagonále matice je větší než 100, parametru p se přiřadí 2. A=magic(5); % zadání "magické" matice 5x5 ds=sum(diag(A)); % do ds se uloží součet prvků na diagonále if ds<=10 % if logický výraz - jestliže platí ds<=10 p=0 % příkaz - proměnné p se přiřadí 0 else % else - jinak, tzn. jestliže neplatí ds<=10 p=1 % příkaz - proměnné p se přiřadí 1 end % konec podmíněného příkazu p = 1 A=magic(10); % zadání "magické" matice 10x10 ds=sum(diag(A)); % do ds se uloží součet prvků na diagonále if ds<=10 % if logický výraz - jestliže platí ds<=10 p=0 % příkaz - proměnné p se přiřadí 0 elseif ds>=100 % elseif - logický výraz - jestliže neplatí ds<=10, platí ds>=100 p=2 % příkaz - proměnné p se přiřadí 2 else % else - jinak, tzn. jestliže neplatí ani ds>=100 p=1 % příkaz - proměnné p se přiřadí 1 end % konec podmíněného příkazu p = 2 A=magic(2); % zadání "magické" matice 2x2 ds=sum(diag(A)); % do ds se uloží součet prvků na diagonále if ds<=10 % if logický výraz - jestliže platí ds<=10 p=0 % příkaz - proměnné p se přiřadí 0 elseif ds>=100 % elseif - logický výraz - jestliže neplatí ds<=10, platí ds>=100 p=2 % příkaz - proměnné p se přiřadí 2 else % else - jinak, tzn. jestliže neplatí ani ds>=100 p=1 % příkaz - proměnné p se přiřadí 1 end % konec podmíněného příkazu p = 0 %--------------------------------------------- % Vstup - input %--------------------------------------------- k=input('Zadej cislo: ') % proměnná = input ('informace pro uživatele') Zadej cislo: 5 % na výzvu uživatel zadá 5, k = % do proměnné k se uloží 5 5 m=input('Zadej matici: M=') % proměnná = input ('informace pro uživatele') Zadej matici: M=5 % na výzvu uživatel zadá 5 m = % do proměnné m se uloží 5 5 m=input('Zadej matici: M=') % proměnná = input ('informace pro uživatele') Zadej matici: M=[1,3,5] % na výzvu uživatel zadá [1,3,5] m = % do proměnné m se uloží řádkový vektor [1,3,5] 1 3 5 m=input('Zadej matici: M=') % proměnná = input ('informace pro uživatele') Zadej matici: M=1:2:9 % na výzvu uživatel zadá 1:2:9 m = % do proměnné m se uloží řádkový vektor od 1 do 9 s krokem 2 1 3 5 7 9 m=input('Zadej matici: M=') % proměnná = input ('informace pro uživatele') Zadej matici: M=[1:5;6:10] % na výzvu uživatel zadá [1:5;6:10] m = % do proměnné m se uloží matice 2x5 1 2 3 4 5 6 7 8 9 10 t=input('Zadej text: ','s') % chceme-li zadat text nebo znak, druhý argument příkazu input musí být 's' Zadej text: ahoj % na výzvu uživatel zadá ahoj t = % do proměnné t se uloží řetězec 'ahoj' ahoj %-------------------------------------------------------------------- % m-file % skript neobsahuje klíčové slovo function % je to posloupnost příkazů % ukádá se do souboru s příponou .m % spustí se napsáním názvu do příkazového řádku % proměnné vytvořené v rámci provádění skriptu zůstanou zachovány 5 (viz Workspace po provedeni skriptu) % funkce obsahuje klíčové slovo function, % hlavička je ve tvaru function výstup=nazev(vstup) % vstup, výstup nejsou povinné % hlavička zajišťuje přenos dat z a do funkce % proměnné ve funkci jsou lokální (po skončení posledního příkazu funkce zaniknou) % výstupní proměnné zůstanou zachovány (viz Workspace) %-------------------------------------------------------------------- magic_fce % skript magic_fce % viz http://home.zcu.cz/~lsroubov/PPEL % pro zadaný rozměr "magické" matice vypočte součet prvků na diagonále % je-li tento součet <= 10, parametru p přiřadí 0, % je-li tento součet mezi 10 a 100, parametru p přiřadí 1, % je-li tento součet >=100, parametru p přiřadí 2. Zadej rozmer ctvercove matice MAGIC: k=6 % na výzvu uživatel zadá 6 Soucet prvku na diagonale je 111 Parametr p je 2 %----------------------- pocitej % skript pocitej.m % viz http://home.zcu.cz/~lsroubov/PPEL % pro zadaná čísla vypočte jejich součet, rozdíl, součin nebo podíl % použití switch Zadej prvni cislo: a=2 % na výzvu uživatel zadá 2 Zadej druhe cislo: b=5 % na výzvu uživatel zadá 5 Vyber soucet,rozdil,soucin,podil: rozdil % na výzvu uživatel zadá rozdil rozdil a-b je -3 rozdil b-a je 3 pocitej % skript pocitej.m % viz http://home.zcu.cz/~lsroubov/PPEL % pro zadaná čísla vypočte jejich součet, rozdíl, součin nebo podíl Zadej prvni cislo: a=[1,2,3] % na výzvu uživatel zadá řádkový vektor [1,2,3] Zadej druhe cislo: b=[1;2;3] % na výzvu uživatel zadá sloupcový vektor [1;2;3] Vyber soucet,rozdil,soucin,podil: soucin % na výzvu uživatel zadá soucin soucin a*b je 14 soucin b*a je 1 2 3 2 4 6 3 6 9 pocitej % skript pocitej.m % viz http://home.zcu.cz/~lsroubov/PPEL % pro zadaná čísla vypočte jejich součet, rozdíl, součin nebo podíl Zadej prvni cislo: a=4 % na výzvu uživatel zadá 4 Zadej druhe cislo: b=8 % na výzvu uživatel zadá 8 Vyber soucet,rozdil,soucin,podil: podil % na výzvu uživatel zadá podil podil a/b je 0.5000 podil b/a je 2 pocitej Zadej prvni cislo: a=9 % na výzvu uživatel zadá 9 Zadej druhe cislo: b=0 % na výzvu uživatel zadá 0 Vyber soucet,rozdil,soucin,podil: pocitej % na výzvu uživatel zadá pocitej neznama volba % uživatel nevybral z nabízených možností sincos % funkce sincos.m % vykreslí průběhy funkcí sin a cos do jednoho grafu % viz http://home.zcu.cz/~lsroubov/PPEL %----------------------- z=0; % zadání proměnné z k=2*pi; % zadání proměnné k p=50; % zadání proměnné p sincos_vstup(z,k,p) % funkce sincos_vstup.m % viz http://home.zcu.cz/~lsroubov/PPEL % vykreslí průběhy funkcí sin a cos na intervalu % od daného "z" do daného "k" v "p" bodech a=-pi/2; % zadání proměnné a b=pi/2; % zadání proměnné b pocet=20; % zadání proměnné pocet sincos_vstup(a,b,pocet) % funkce sincos_vstup.m % viz http://home.zcu.cz/~lsroubov/PPEL % vykreslí průběhy funkcí sin a cos na intervalu % od daného "a" do daného "b" v "pocet" bodech sincos_vstup(-pi/2,pi/2,50) % opět funkce sincos_vstup.m % viz http://home.zcu.cz/~lsroubov/PPEL % vykreslí průběhy funkcí sin a cos na intervalu % od daného "-pi/2" do daného "pi/2" v "50" bodech %------------------------------- [y1,y2]=sincos_vstup_vystup(0,2*pi,100) % funkce sincos_vstup_vystup.m % viz http://home.zcu.cz/~lsroubov/PPEL % vykreslí průběhy funkcí sin a cos na intervalu od y1 = % dané "0" do daného "2*pi" ve "100" bodech, 0 % do proměnných y1, y2 se uloží hodnota sin(0), resp.cos(0) y2 = 1 [s,c]=sincos_vstup_vystup(-2*pi,2*pi,150) % funkce sincos_vstup_vystup.m % viz http://home.zcu.cz/~lsroubov/PPEL % vykreslí průběhy funkcí sin a cos na intervalu od s = % daného "-2*pi" do daného "2*pi" ve "150" bodech, 2.4493e-016 % do proměnných s,c se uloží hodnota sin(-2*pi), resp.cos(-2*pi) c = 1 %---------------------------- [y1,y2]=sincos_zad_vystup % funkce sincos_zad_vystup.m % viz http://home.zcu.cz/~lsroubov/PPEL % vykreslí průběhy funkcí sin a cos na intervalu od daného "z" % do daného "k" v "p" bodech, "z", "k" a "p" zadány uživatelem, % do proměnných y1, y2 se uloží hodnota sin(z), resp. cos(z) Zadej pocatek intervalu: z=-pi/2 Zadej konec intervalu: k=pi/2 Zadej pocet bodu na ose x: p=20 y1 = -1 y2 = 6.1232e-017 [m,n]=sincos_zad_vystup % funkce sincos_zad_vystup.m % viz http://home.zcu.cz/~lsroubov/PPEL % vykreslí průběhy funkcí sin a cos na intervalu od daného "z" % do daného "k" v "p" bodech, "z", "k" a "p" zadány uživatelem, % do proměnných m, n se uloží hodnota sin(z), resp. cos(z) Zadej pocatek intervalu: z=-3/4*pi Zadej konec intervalu: k=1.25*pi Zadej pocet bodu na ose x: p=50 m = -0.70711 n = -0.70711 %---------------------------- prolozeni_dat % prolozeni_dat.m % viz http://home.zcu.cz/~lsroubov/PPEL % prolozeni bodu polynomy zvolenych stupnu a interpolacni funkci - kubickymi spline