% 5. cvičení z předmětu PPEL - MATLAB A=[1:5;5:-1:1;2:2:10;15:-3:3] % zadání matice A (4 řádky, 5 sloupců) A = 1 2 3 4 5 5 4 3 2 1 2 4 6 8 10 15 12 9 6 3 A(5:6,:)=[4:4:20;25:-5:5] % přidání 5. a 6. řádku k matici A A = 1 2 3 4 5 5 4 3 2 1 2 4 6 8 10 15 12 9 6 3 4 8 12 16 20 25 20 15 10 5 size(A) % zjištění rozměru matice A ans = % nyní 6 řádek, 5 sloupců 6 5 A(1,:)=[] % odstranění 1.řádku matice A A = 5 4 3 2 1 2 4 6 8 10 15 12 9 6 3 4 8 12 16 20 25 20 15 10 5 size(A) % zjištění rozměru matice A ans = % nyní 5 řádek, 5 sloupců 5 5 A(6,6)=6 % přidání prvku na pozici 6.řádek, 6. sloupec do matice A A = % A byla 5x5, proto se zbytek matice doplní nulami 5 4 3 2 1 0 2 4 6 8 10 0 15 12 9 6 3 0 4 8 12 16 20 0 25 20 15 10 5 0 0 0 0 0 0 6 size(A) % zjištění rozměru matice A ans = % nyní 6 řádek, 6 sloupců 6 6 A(6,1:5)=[1:5] % nahrazení 1.až 5.prvku v 6. řádku čísly 1,2,3,4,5 A = 5 4 3 2 1 0 2 4 6 8 10 0 15 12 9 6 3 0 4 8 12 16 20 0 25 20 15 10 5 0 1 2 3 4 5 6 A([1,3,5],6)=[10,30,50] % nahrazení 1.,3.,5. prvku v 6. sloupci čísly 10,30,50 A = 5 4 3 2 1 10 2 4 6 8 10 0 15 12 9 6 3 30 4 8 12 16 20 0 25 20 15 10 5 50 1 2 3 4 5 6 B = 11 .* rand(6,6) % matice 6x6 náhodných prvků z intervalu od 0 do 1 vynásobená číslem 11 B = 1.8787 4.3256 10.277 10.636 4.7318 1.7117 10.937 6.5068 2.9089 7.3142 9.7935 2.1023 4.8377 1.3172 1.7633 9.5742 8.084 4.647 3.7405 0.41942 9.6014 0.1092 7.5606 9.4157 3.4564 5.0446 2.6167 1.5071 3.8072 5.3927 4.0159 9.5685 7.1041 9.0063 1.8264 8.9753 C = floor(B) % zaokrouhlení prvků matice B na nejbližší nižší celé číslo % zaokrouhlení dolů C = 1 4 10 10 4 1 10 6 2 7 9 2 4 1 1 9 8 4 3 0 9 0 7 9 3 5 2 1 3 5 4 9 7 9 1 8 D = ceil(B) % zaokrouhlení prvků matice B na nejbližší vyšší celé číslo % zaokrouhlení nahoru D = 2 5 11 11 5 2 11 7 3 8 10 3 5 2 2 10 9 5 4 1 10 1 8 10 4 6 3 2 4 6 5 10 8 10 2 9 D-C % odečtení prvků matice C od prvků matice D ans = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 E = round(B) % zaokrouhlení prvků matice B na celé číslo E = 2 4 10 11 5 2 11 7 3 7 10 2 5 1 2 10 8 5 4 0 10 0 8 9 3 5 3 2 4 5 4 10 7 9 2 9 size(E) % zjištění rozměru matice E ans = 6 6 %----------------------------------- % relační operátory == < <= > >= ~= %----------------------------------- a=3;b=5; % středník za příkazem zabraní výpisu výsledku na obrazovku ab % 3>5 je nepravda ans = 0 a>=b % 3>=5 je nepravda ans = 0 a==b % 3=5 je nepravda ans = 0 a~=b % 3 nerovná se 5 je pravda ans = 1 0==0 % 0=0 je pravda ans = 1 1~=1 % 1 nerovná se 1 je nepravda ans = 0 A % matice A zadána již dříve, zde pro připomenutí A = 5 4 3 2 1 10 2 4 6 8 10 0 15 12 9 6 3 30 4 8 12 16 20 0 25 20 15 10 5 50 1 2 3 4 5 6 E % matice E zadána již dříve, zde pro připomenutí E = 2 4 10 11 5 2 11 7 3 7 10 2 5 1 2 10 8 5 4 0 10 0 8 9 3 5 3 2 4 5 4 10 7 9 2 9 A==E % porovnání prvků na stejných pozicích (1 pravda, 0 nepravda) ans = 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 A>E % porovnání prvků na stejných pozicích (1 pravda, 0 nepravda) ans = 1 0 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 1 0 A>=E % porovnání prvků na stejných pozicích (1 pravda, 0 nepravda) ans = 1 1 0 0 0 1 0 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 1 0 A100 % porovnání prvků s číslem 100 (neplatí pro žádný prvek) ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 A>0 % porovnání prvků s číslem 0 (2 prvky v matici A jsou nulové) ans = 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 a=[1:7,6:-1:1] % zadání vektoru a a = 1 2 3 4 5 6 7 6 5 4 3 2 1 length(a) % zjištění počtu prvků ve vektoru ans = 13 a(10:13)=[12:-1:9] % nahrazení 10.až 13.prvku vektoru čísly od 12 do 9 a = 1 2 3 4 5 6 7 6 5 12 11 10 9 a(14:15)=[-6,-3] % přidání 14. a 15. prvku do vektoru a a = 1 2 3 4 5 6 7 6 5 12 11 10 9 -6 -3 maximum=max(a) % do proměnné maximum se uloží prvek s max. velikostí maximum = 12 minimum=min(a) % do proměnné minimum se uloží nejmenší prvek minimum = -6 [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 12 index = 10 [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 = 14 b=sort(a) % setřídění prvků podle velikosti b = -6 -3 1 2 3 4 5 5 6 6 7 9 10 11 12 c=b(end:-1:1) % obrácení pořadí prvků ve vektoru b c = 12 11 10 9 7 6 6 5 5 4 3 2 1 -3 -6 prumer=mean(a) % průměr ze všech prvků ve vektoru prumer = 4.8 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ů nejblíže středu seřazeného vektoru 5 odch=std(a) % směrodatná odchylka odch = 4.9742 s=sum(a) % součet prvků ve vektoru s = 72 A % matice A zadána již dříve, zde pro připomenutí A = 5 4 3 2 1 10 2 4 6 8 10 0 15 12 9 6 3 30 4 8 12 16 20 0 25 20 15 10 5 50 1 2 3 4 5 6 F=sort(A) % setřídění prvků ve sloupcích matice A podle velikosti F = 1 2 3 2 1 0 2 4 3 4 3 0 4 4 6 6 5 6 5 8 9 8 5 10 15 12 12 10 10 30 25 20 15 16 20 50 [F,index]=sort(A) % do proměnné F se uloží seřazené prvky matice A podle velikosti ve sloupcích % do proměnné index se uloží jejich poloha v příslušném sloupci matice A F = 1 2 3 2 1 0 2 4 3 4 3 0 4 4 6 6 5 6 5 8 9 8 5 10 15 12 12 10 10 30 25 20 15 16 20 50 index = 6 6 1 1 1 2 2 1 6 6 3 4 4 2 2 3 5 6 1 4 3 2 6 1 3 3 4 5 2 3 5 5 5 4 4 5 G=sortrows(A) % setřídění řádků matice A podle velikosti 1. prvku G = 1 2 3 4 5 6 2 4 6 8 10 0 4 8 12 16 20 0 5 4 3 2 1 10 15 12 9 6 3 30 25 20 15 10 5 50 [G,ind]=sortrows(A) % do proměnné G se uloží seřazené řádky matice A podle velikosti 1. prvku % do proměnné ind se uloží jejich poloha v matici A G = 1 2 3 4 5 6 2 4 6 8 10 0 4 8 12 16 20 0 5 4 3 2 1 10 15 12 9 6 3 30 25 20 15 10 5 50 ind = 6 2 4 1 3 5 k=[5-i,4+3i,1-i,-3+4i] % zadání vektoru k s komplexními čísly k = 5 - 1i 4 + 3i 1 - 1i -3 + 4i velikost=abs(k) % absolutní hodnota, modul (prvků vektoru k) velikost = 5.099 5 1.4142 5 uhel=angle(k) % argument (úhel, fáze) v radiánech (prvků vektoru k) uhel = -0.1974 0.6435 -0.7854 2.2143 uhel_s=angle(k)*180/pi % argument (úhel, fáze) převedený na stupně uhel_s = -11.31 36.87 -45 126.87 [l,index]=sort(k) % do proměnné l se uloží prvky vektoru k setříděné podle velikosti % do proměnné index se uloží pozice ve vektoru k l = % pro komplexní čísla je třídění prováděno primárně dle absolutní hodnoty, sekundárně dle úhlu 1 - 1i 4 + 3i -3 + 4i 5 - 1i index = 3 2 4 1 [m,index]=sort(velikost)% do proměnné m se uloží prvky vektoru k setříděné podle velikosti modulu (abs. hodnoty) % do proměnné index se uloží pozice ve vektoru k m = % v proměnné index stejné pořadí jako při třídění komplexních čísel (vektor l) 1.4142 5 5 5.099 index = 3 2 4 1 [n,index]=sort(uhel_s) % do proměnné n se uloží prvky vektoru k setříděné podle velikosti úhlu % do proměnné index se uloží pozice ve vektoru k n = -45 -11.31 36.87 126.87 index = 3 1 2 4 %----------------------------------------------- % některé funkce např. sin, cos, exp, log, log10 % funkce se aplikují se na celý vektor (matici) %----------------------------------------------- x=[0:(2*pi/99):2*pi]; % zadání vektoru x od 0 do 2*pi ve 100 bodech, tj. s krokem 2*pi/99 x=linspace(0,2*pi,100); % jiný způsob zadání vektoru x od 0 do 2*pi ve 100 bodech y=sin(x); % v proměnné y je 100 hodnot funkce sin(x) plot(x,y) % vykreslení dvourozměrného grafu funkce sin(x) % viz obr.1. v Obr_k_5_cviceni plot(x,cos(x)) % vykreslení dvourozměrného grafu funkce cos(x) v=[-10,-1,0,1,10] % zadání vektoru v v = -10 -1 0 1 10 o=sqrt(v) % druhá odmocnina z prvků vktoru v o = 0 + 3.1623i 0 + 1.0000i 0 1.0000 3.1623 p=log(v) % přirozený logaritmus (v matematice ln) Warning: Log of zero. p = 2.3026 + 3.1416i 0 + 3.1416i -Inf 0 2.3026 q=log10(v) % logaritmus se základem 10 (v matematice log) Warning: Log of zero. q = 1.0000 + 1.3644i 0 + 1.3644i -Inf 0 1.0000 r=exp(v) % exponenciální funkce (v matematice e) r = 1.0e+004 * 0.0000 0.0000 0.0001 0.0003 2.2026 s=log(r) % přirozený logaritmus (v matematice ln) z prvků vektoru r s = % (výsledkem opět vektor v) -10 -1 0 1 10 %----------------------------------------------- % některé funkce pro komplexní čísla %----------------------------------------------- w=[1,i,3+4i] % zadání vektoru w s komplexními čísly w = 1.0000 0 + 1.0000i 3.0000 + 4.0000i real(w) % reálné části komplexních čísel (prvků vektoru w) ans = 1 0 3 imag(w) % imaginární části komplexních čísel (prvků vektoru w) ans = 0 1 4 abs(w) % absolutní hodnota, modul (prvků vektoru w) ans = 1 1 5 angle(w)*180/pi % argument (úhel, fáze) prvků vektoru w, převedený na stupně ans = 0 90.0000 53.1301 u=log(w) % přirozený logaritmus (i pro komplexní čísla) u = 0 0 + 1.5708i 1.6094 + 0.9273i exp(u) % exponenciální funkce (výsledkem opět vektor w) ans = 1 6.1232e-017 + 1i 3 + 4i %----------------------------------------------- % Polynomy %----------------------------------------------- p=[2,-5,4,3,-6,2] % zadání vektoru p % polynom 2*x^5 - 5*x^4 + 4*x^3 + 3*x^2 - 6*x + 2*x^0 p = 2 -5 4 3 -6 2 y=polyval(p,2) % vyčíslení polynomu p pro hodnotu 2 % tj. 2*2^5 - 5*2^4 + 4*2^3 + 3*2^2 - 6*2 + 2 = 18 y = 18 x=[-2:2] % zadání vektoru x x = -2 -1 0 1 2 y_x=polyval(p,x) % vyčíslení polynomu p pro všechny hodnoty x y_x = -150 0 2 0 18 % 2*(-2)^5 - 5*(-2)^4 + 4*(-2)^3 + 3*(-2)^2 - 6*(-2) + 2 = -150 % 2*(-1)^5 - 5*(-1)^4 + 4*(-1)^3 + 3*(-1)^2 - 6*(-1) + 2 = 0 % 2* 0^5 - 5* 0^4 + 4* 0^3 + 3* 0^2 - 6* 0 + 2 = 2 % 2* 1^5 - 5* 1^4 + 4* 1^3 + 3* 1^2 - 6* 1 + 2 = 0 % 2* 2^5 - 5* 2^4 + 4* 2^3 + 3* 2^2 - 6* 2 + 2 = 18 x=roots(p) % kořeny polynomu p x = % výpočet rovnice 2*x^5 - 5*x^4 + 4*x^3 + 3*x^2 - 6*x + 2 = 0 -1.0000 1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 0.5000 q=poly(x) % zjištění koeficientů polynomu z kořenů q = 1.0000 -2.5000 2.0000 1.5000 -3.0000 1.0000 % polynom pro dané kořeny je 1*x^5 - 2.5*x^4 + 2*x^3 + 1.5*x^2 - 3*x + 1 % vynásobením 2 získáme p 2*x^5 - 5*x^4 + 4*x^3 + 3*x^2 - 6*x + 2 x=roots(q) % kořeny polynomu q jsou stejné jako kořeny polynomu p x = -1.0000 1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 0.5000 r=[4,0,5,2] % zadání polynomu r, chybějící člen v polynomu je nahrazen 0 r = % polynom 4*x^3 - 5*x + 2 = 4*x^3 + 0*x^2 - 5*x + 2*x^0 4 0 5 2 s=conv(q,r) % násobení polynomů q,r s = 4.0000 -10.0000 13.0000 -4.5000 -7.0000 15.5000 -12.0000 -1.0000 2.0000 % (1*x^5 - 2.5*x^4 + 2*x^3 + 1.5*x^2 - 3*x + 1)*(4*x^3 - 5*x + 2)= % =4*x^8 - 10*x^7 + 13*x^6 - 4.5*x^5 - 7*x^4 + 15.5*x^3 - 12*x^2 - x + 2 t=[1,-5,6] % zadání polynomu t t = % polynom 1*x^2 - 5*x + 6*x^0 1 -5 6 x12=roots(t) % řešení kvadratické rovnice x^2 - 5*x + 6 = 0 x12 = 3.0000 2.0000 u=[1,-2,2] % zadání polynomu t u = % polynom 1*x^2 - 2*x + 2 1 -2 2 x12=roots(u) % řešení kvadratické rovnice x^2 - 2*x + 2 = 0 x12 = 1.0000 + 1.0000i 1.0000 - 1.0000i %------------------------------------------------------- % Proložení dat - bodů se souřadnicemi x,y (interpolace) %------------------------------------------------------- x=[1:7] % zadání vektoru x - x-ové souřadníce bodů x = 1 2 3 4 5 6 7 y=[-1,0,2,2,3,1,-2] % zadání vektoru y - y-ové souřadníce bodů y = -1 0 2 2 3 1 -2 plot(x,y,'*') % vykreslení dvourozměrného grafu x,y % body se souřadnicmi x,y zobrazeny jako * k=polyfit(x,y,2) % nalezení koeficientů polynomu 2.stupně pro proložení bodů x,y k = -0.4524 3.6190 -4.7143 % body budou proloženy polynomem y(x) = -0.4524*x^2 + 3.6190*x - 4.7143 xp=[1:0.1:7]; % zadání bodů, ve kterých bude počítána aproximace yk=polyval(k,xp); % vyčíslení polynomu k v pro všechny tyto body plot(xp,yk) % vykreslení dvourozměrného grafu - polynom 2.st. plot(x,y,'*',xp,yk) % vykreslení grafu - body a jejich proložení polynomem 2.st. l=polyfit(x,y,3) % nalezení koeficientů polynomu 3.stupně pro proložení bodů x,y l = -0.0833 0.5476 0.2024 -1.7143 % body budou proloženy polynomem y(x) = -0.0833*x^3 + 0.5476*x^2 + 0.2024*x - 1.7143 yl=polyval(l,xp); % vyčíslení polynomu l v pro všechny body vektoru xp plot(x,y,'*',xp,yk,xp,yl,'--') % vykreslení grafu - body a proložení polynomem 2. a 3.stupně yi=interp1(x,y,xp,'spline'); % body získané interpolací kubickými spline funkcemi plot(x,y,'*',xp,yk,xp,yl,'--',xp,yi,'-.') % vykreslení dvourozměrného grafu % body - zobrazeny jako * % proložení polynomem 2.stupně - zobrazeno plnou čarou % proložení polynomem 3.stupně - zobrazeno čárkovaně % proložení pomocí spline funkcí - zobrazeno čerchovaně % viz obr.2. v Obr_k_5_cviceni %------------------------------------------------------- % Proložení dat - bodů se souřadnicemi x,y (interpolace) %------------------------------------------------------- x=[1:9] % zadání x-ových souřadnic bodů (vektoru) x x = 1 2 3 4 5 6 7 8 9 y=[1:5,4:-1:1] % zadání y-ovýchsouřadnic bodů (vektoru) y y = 1 2 3 4 5 4 3 2 1 xx=[1:0.05:9]; % body, ve kterých bude počítána aproximace y1=polyval(polyfit(x,y,1),xx); % body získané polynomiální interpolací % (polynom 1. stupně) y2=polyval(polyfit(x,y,2),xx); % body získané polynomiální interpolací % (polynom 2. stupně) y5=polyval(polyfit(x,y,5),xx); % body získané polynomiální interpolací % (polynom 5. stupně) y9=polyval(polyfit(x,y,9),xx); % body získané polynomiální interpolací % (polynom 9. stupně) Warning: Polynomial is not unique; degree >= number of data points. In polyfit at 72 % proložení polynomem 9. stupně je pro tento případ nevhodné yi=interp1(x,y,xx,'spline'); % body získané splinovou interpolací plot(x,y,'p',xx,y1,xx,y2,xx,y5,xx,y9,xx,yi) % vykreslení dvourozměrného grafu legend('body','polynom 1.st (primka)','polynom 2.st (parabola)','polynom 5.st','polynom 9.st (nevhodne)','spline') % legenda ke grafu % viz obr.3. v Obr_k_5_cviceni