%------------------------------------- % 3. cvičení z předmětu PPEL - MATLAB %------------------------------------- % Lenka Šroubová, ZČU, FEL, KTE % e-mail: lsroubov@kte.zcu.cz %------------------------------------- %--------------------- % Práce s vektory %--------------------- 2:2:8 % vektor obsahujici radu cisel od 2 do 8 s krokem 2 % [pocatek : krok : konec] 2 4 6 8 linspace(2,8,6) % jiny zpusob utvareni ciselne rady, potrebujeme-li % zadat 6 hodnot mezi cisly 2 a 8 % linspace (pocatek, konec, pocet bodu) 2. 3.2 4.4 5.6 6.8 8. [2:.2:8] % stejny vektor vektor obsahujici radu cisel od 2 do 8 % s krokem.2 vytvoreny jako [pocatek : krok : konec] % nekdy je obtizne zjistit krok a je vhodne vyuzit % funkci linspace (kde se krok urci sam z delky rady) 2. 3.2 4.4 5.6 6.8 8. [2:((8-2)/5):8] % stejny vektor vektor obsahujici radu cisel od 2 do 8 % s krokem.2 % krok.2 muze byt zadan i matematickym vyrazem 2. 3.2 4.4 5.6 6.8 8. linspace(2,8,4) % utvoreni ciselne rady, potrebujeme-li % zadat 4 hodnoty mezi cisly 2 a 8 % linspace (pocatek, konec, pocet bodu) 2 4 6 8 linspace(,,6) % vytvoreni rady s 6 hodnotami mezi cisly a % slinearnim delenim % linspace (pocatek, konec, pocet bodu).2.4.6.8. logspace(,,6) % vytvoreni rady s logaritmickym delenim % od ^, tj. od do, tj. ^ v 6 bodech pomoci % funkce logspace, logspace (^, ^, pocet bodu) % podobna funkce jako linspace.5849 2.59 3.98 6.396 logspace(,2,6) % vytvoreni rady s logaritmickym delenim % od do ^2 v 6 bodech pomoci % funkce logspace, logspace (^, ^2, pocet bodu) 5.849 25.9 39.8 63.96 Strana
logspace(,3,5) % vytvoreni rady s logaritmickym delenim % od do ^3 v 5 bodech pomoci funkce logspace, % logspace (^, ^3, pocet bodu) 3.623 36.23 a=[:5] % zadání vektoru a a = 2 3 4 5 sum(a) % součet hodnot všech prvků ve vektoru a 5 cumsum(a) % kumulativní součet - součet prvků se všemi předchůdci 3 6 5 prod(a) 2 cumprod(a) % součin hodnot všech prvků ve vektoru a % kumulativní součin - součin prvků se všemi předchůdci 2 6 24 2 diff(a) % diference - rozdíly mezi sousedními prvky vektoru a b=[-3,,5,4,9] % zadání vektoru b b = -3 5 4 9 diff(b) % diference - rozdíly mezi sousedními prvky vektoru b 3 5-5 c=3+4i; real(c) % zadání komplexního čísla % reálná část komplexního čísla 3 imag(c) % imaginární část komplexního čísla 4 d=conj(c) % komplexně sdružené číslo k číslu c d = 3. - 4.i %--------------------- % Práce s maticemi %--------------------- A=[,2;3,4] A = 2 3 4 % matice A má 2 řádky a 2 sloupce Strana 2
A' 3 2 4 % transpozice matice A (kdyby A obsahovala komplexní čísla, % vznikla by konjungovaná matice, tj. transponovaná % s komplexními čísly) A.' % prostá transpozice matice A, % u matic s reálnými čísly A.' a A' stejné 3 2 4 A*A.' % maticovým násobením matice A a transponované matice A.' % vznikne matice symetrická podle hlavní diagonály 5 25 inv(a) A*inv(A) % inverzní matice k matici A -2.5 -.5 % maticovým násobením matice A a k ní inverzní matice % vznikne matice jednotková... diag(a) % hlavní diagonála matice A 4 det(a) % determinant matice A, jen pro čtvercové matice % výpočet det(a) = *4-2*3 = -2-2 clear A % odstraneni promenne A T=[,2,3;-4,5,-6;9,8,7] T = 2 3-4 5-6 9 8 7 % matice T T*T.' % maticovým násobením matice T a transponované matice T.' % vznikne matice symetrická podle hlavní diagonály 4-2 46-2 77-38 46-38 94 T*inv(T) % maticovým násobením matice T a k ní inverzní matice % vznikne matice jednotková. -. -. -.... -.. diag(t) % hlavní diagonála matice T Strana 3
5 7 det(t) -2 % determinant matice T PPEL_3_cviceni_MATLAB.txt A=[:5;5:-:;2:2:;5:-3:3;5:5:25] A = 2 3 4 5 5 4 3 2 2 4 6 8 5 2 9 6 3 5 5 2 25 size(a) 5 5 diag(a) 4 6 6 25 % zadání matice A (5 řádek, 5 sloupců) % zjištění rozměru matice A % 5 řádek, 5 sloupců % diagonála matice A A*A.' % maticovým násobením matice A a transponované matice A.' % vznikne matice symetrická podle hlavní diagonály 55 35 5 275 35 55 7 65 75 7 22 2 55 5 65 2 495 525 275 75 55 525 375 inv(a) % inverzní matice k matici A Warning: Matrix is singular to working precision. Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf det(a) % determinant matice A B =.* rand(6,6) B = % matice 6x6 náhodných prvků % z intervalu od do, každý prvek % matice je vynásobený číslem 9.53 4.5647 9.28 4.27.3889.527 2.34.85 7.382 8.9365 2.277 7.4679 6.684 8.24.7627.5789.9872 4.45 4.8598 4.447 4.57 3.5287 6.379 9.38 8.93 6.543 9.3547 8.37 2.729 4.6599 7.62 7.994 9.69.986.988 4.865 Strana 4
%------------------ % zaokrouhlování %------------------ C = floor(b) C = 9 4 9 4 2 7 8 2 7 6 8 4 4 4 4 3 6 9 8 6 9 8 2 4 7 7 9 4 PPEL_3_cviceni_MATLAB.txt % zaokrouhlení prvků matice B na nejbližší nižší % celé číslo, zaokrouhlení dolů D = ceil(b) % zaokrouhlení prvků matice B na nejbližší vyšší % celé číslo, zaokrouhlení nahoru D = 5 5 2 3 8 9 3 8 7 9 2 2 5 5 5 5 4 7 9 7 9 3 5 8 8 2 5 D-C % odečtení prvků matice C od prvků matice D E = round(b) % zaokrouhlení prvků matice B na celé číslo E = 5 9 4 2 7 9 2 7 6 8 2 2 4 8 8 9 2 4 size(e) % zjištění rozměru matice E 6 6 %----------------------------------- % relační operátory == < <= > >= ~= %----------------------------------- a=3;b=5; a<b a<=3 % středník za příkazem zabraní % výpisu výsledku na obrazovku % 3<5 je pravda % 3<=3 je pravda a>b a>=b % 3>5 je nepravda % 3>=5 je nepravda Strana 5
a==b a~=b % 3=5 je nepravda % 3 nerovná se 5 je pravda == % = je pravda ~= % nerovná se je nepravda E % matice E zadána již dříve, zde pro připomenutí E = 5 9 4 2 7 9 2 7 6 8 2 2 4 8 8 9 2 4 M=magic(6) % "magická" matice - magický čtverec % soucet prvku na diagonale je stejny jako % soucet prvku v jednotlivych sloupcich matice M = 35 6 26 9 24 3 32 7 2 23 25 3 9 2 22 27 2 8 28 33 7 5 3 5 34 2 4 6 4 36 29 3 8 M==E % porovnání prvků na stejných pozicích ( pravda, nepravda) M>E % porovnání prvků na stejných pozicích ( pravda, nepravda) M>=E % porovnání prvků na stejných pozicích ( pravda, nepravda) M<E % porovnání prvků na stejných pozicích ( pravda, nepravda) Strana 6
M<=E % porovnání prvků na stejných pozicích ( pravda, nepravda) E==2 % porovnání prvků s číslem 2 ( pravda, nepravda) E<5 % porovnání prvků s číslem 5 ( pravda, nepravda) E> % porovnání prvků s číslem (neplatí pro žádný prvek) E> % porovnání prvků s číslem (3 prvky v matici E jsou nulové) E E = % matice E zadána již dříve, zde pro připomenutí 5 9 4 2 7 9 2 7 6 8 2 2 4 8 8 9 2 4 all(e) % test, zdali jsou vsechny prvky ve vektoru nenulove % ( pravda, nepravda) % vraci, kdyz jsou vsechny prvky ve vektoru (sloupci) nenulove all(e,) % test, zdali jsou vsechny prvky ve sloupci matice nenulove Strana 7
all(e,2) PPEL_3_cviceni_MATLAB.txt % test, zdali jsou vsechny prvky v radku matice nenulove all(e,3) % test, zdali jsou prvky matice nenulove any(e) % test, zdali je nektery prvek ve vektoru nenulovy % ( pravda, nepravda) % vraci, kdyz je nektery prvek ve vektoru (sloupci) nenulovy any(e,) % test, zdali je nektery prvek ve sloupci matice nenulovy any(e,2) % test, zdali je nektery prvek v radku matice nenulovy any(e,3) % test, zdali je nektery prvek v matici nenulovy E(:,4)=[;;;;;] % nahrazeni 4. sloupce matice E vektorem nul E = 5 9 2 7 2 7 6 8 2 2 4 5 4 4 6 9 9 6 9 3 5 8 8 9 2 4 all(e) % test, zdali jsou vsechny prvky ve vektoru nenulove % vraci, kdyz jsou vsechny prvky ve vektoru (sloupci) nenulove % stejny vysledek jako pred nahrazenim 4. sloupce any(e) % test, zdali je nektery prvek ve vektoru nenulovy % vraci, kdyz je nektery prvek ve vektoru (sloupci) nenulovy % nyni 4. sloupec nulovy isreal(e) % test na reálná čísla, vrací, když v matici není Strana 8
% žádné komplexní číslo E(:,4)=[4;9;;4;8;] % nahrazeni 4. sloupce matice E puvodnim vektorem E = 5 9 4 2 7 9 2 7 6 8 2 2 4 8 8 9 2 4 a=[:7,6:-:] % zadání vektoru a a = 2 3 4 5 6 7 6 5 4 3 2 length(a) % zjištění počtu prvků ve vektoru 3 all(a) % test, zdali jsou vsechny prvky ve vektoru nenulove % vraci, kdyz jsou vsechny prvky ve vektoru nenulove any(a) % test, zdali je nektery prvek ve vektoru nenulovy % vraci, kdyz je nektery prvek ve vektoru nenulovy isprime(a) % test na prvočísla, vrací, když prvek % ve vektoru je prvočíslo a(:3)=[2:-:9] % nahrazení.až 3.prvku vektoru čísly od 2 do 9 a = 2 3 4 5 6 7 6 5 2 9 a(4:5)=[-6,-3] % přidání 4. a 5. prvku do vektoru a a = 2 3 4 5 6 7 6 5 2 9-6 -3 maximum=max(a) maximum = 2 minimum=min(a) minimum = -6 % do proměnné maximum se uloží prvek s max. velikostí % do proměnné minimum se uloží nejmenší prvek [maximum,index]=max(a) % do proměnné maximum se uloží největší prvek, maximum = % do proměnné index se uloží jeho pozice ve vektoru a 2 index = [minimum,index]=min(a) % do proměnné minimum se uloží nejmenší prvek, minimum = % do proměnné index se uloží jeho pozice ve vektoru a -6 index = 4 b=sort(a) % setřídění prvků podle velikosti b = -6-3 2 3 4 5 5 6 6 7 9 Strana 9
2 c=b(end:-:) PPEL_3_cviceni_MATLAB.txt % obrácení pořadí prvků ve vektoru b c = 2 9 7 6 6 5 5 4 3 2-3 -6 prumer=mean(a) prumer = 4.8 % průměr ze všech prvků ve vektoru str_hod=median(a) % střední hodnota % pro lichý počet prvků ve vektoru při seřazení % je to prostřední prvek, str_hod = % pro sudý počet je to průměr z velikosti dvou členů 5 % nejblíže středu seřazeného vektoru odch=std(a) % směrodatná odchylka odch = 4.9742 s=sum(a) % součet prvků ve vektoru s = 72 p=prod(a) % součin prvků ve vektoru p = 3.2333e+ E % matice E zadána již dříve, zde pro připomenutí E = 5 9 4 2 7 9 2 7 6 8 2 2 4 8 8 9 2 4 F=sort(E) % setřídění prvků ve sloupcích matice E podle velikosti F = 2 2 5 4 4 2 4 6 5 7 4 2 4 8 6 9 4 2 5 9 8 9 8 3 7 8 9 9 6 9 [F,index]=sort(E) % do proměnné F se uloží seřazené prvky matice E % podle velikosti ve sloupcích do proměnné index se % uloží jejich poloha v příslušném sloupci matice E F = 2 2 5 4 4 2 4 6 5 7 4 2 4 8 6 9 4 2 5 9 8 9 8 3 7 8 9 9 6 9 index = 2 2 3 6 4 4 4 3 2 3 3 2 3 6 6 5 4 6 5 5 3 5 5 5 2 6 6 2 4 4 G=sortrows(E) % setřídění řádků matice E podle velikosti. prvku G = 2 7 9 2 7 Strana
6 8 2 2 4 8 8 9 2 4 5 9 4 [G,ind]=sortrows(E) G = ind = 2 4 3 6 5 2 7 9 2 7 6 8 2 2 4 8 8 9 2 4 5 9 4 % do proměnné G se uloží seřazené řádky matice E % podle velikosti. prvku, do proměnné ind se % uloží jejich poloha v matici E %----------------------------------------------- % některé funkce např. sin, cos, exp, log, log % funkce se aplikují se na celý vektor (matici) %----------------------------------------------- v=[-,-,,,] % zadání vektoru v v = - - o=sqrt(v) % druhá odmocnina z prvků vktoru v o = + 3.623i +.i. 3.623 p=log(v) % přirozený logaritmus (v matematice ln) Warning: Log of zero. p = 2.326 + 3.46i + 3.46i -Inf 2.326 q=log(v) Warning: Log of zero. % logaritmus se základem (v matematice log) q =. +.3644i +.3644i -Inf. r=exp(v) % exponenciální funkce (v matematice e) r =.e+4 *....3 2.226 s=log(r) % přirozený logaritmus (v matematice ln) s = % z prvků vektoru r (výsledkem opět vektor v) - - %----------------------------------------------- % některé funkce pro komplexní čísla %----------------------------------------------- w=[,i,3+4i] % zadání vektoru w s komplexními čísly w =. +.i 3. + 4.i Strana
real(w) % reálné části komplexních čísel (prvků vektoru w) 3 imag(w) % imaginární části komplexních čísel (prvků vektoru w) 4 abs(w) % absolutní hodnota, modul (prvků vektoru w) 5 angle(w) % argument (úhel, fáze) prvků vektoru w (v radiánech).578.9273 angle(w)*8/pi % argument (úhel, fáze) prvků vektoru w, převedený na stupně 9. 53.3 [z,index]=sort(w) % do proměnné z se uloží prvky vektoru w setříděné % podle velikosti,do proměnné index se uloží pozice % ve vektoru w, pro komplexní čísla je třídění prováděno % primárně dle absolutní hodnoty, sekundárně dle úhlu z =. +.i 3. + 4.i index = 2 3 u=log(w) u = % přirozený logaritmus (i pro komplexní čísla) +.578i.694 +.9273i exp(u) % exponenciální funkce (výsledkem opět vektor w) 6.232e-7 + i 3. + 4.i isreal(w) % test na reálná čísla %----------------------------------------------- % Graf %----------------------------------------------- x=[:(2*pi/99):2*pi]; % zadání vektoru x od do 2*pi ve bodech, % tj. s krokem 2*pi/99 x=linspace(,2*pi,); % jiný způsob zadání vektoru x od do 2*pi % ve bodech y=sin(x); plot(x,y) % v proměnné y je hodnot funkce sin(x) % vykreslení dvourozměrného grafu funkce sin(x) plot(x,sin(x),x,cos(x)) % vykreslení dvourozměrného grafu funkci sin(x),cos(x) legend('sin','cos') % legenda ke grafu x=linspace(-2*pi,2*pi,5); % zadání vektoru x od -2*pi do 2*pi % ve 5 bodech y=(sin(x)).^2; % v proměnné y je 5 hodnot funkce (sin(x)).^2 % jedná se o umocnění vektoru - nematicová operace.^ % násobí se stejnolehlé prvky ve vektorech % odpovídá operaci sin(x).*sin(x) Strana 2
plot(x,y) diary off % vykreslení dvourozměrného grafu funkce (sin(x)).^2 % prerusi ukladani do textoveho souboru Strana 3