%------------------------------------- % 4. cvičení z předmětu PPEL - MATLAB %------------------------------------- % Lenka Šroubová, ZČU, FEL, KTE % e-mail: lsroubov@kte.zcu.cz %------------------------------------- X=round(20.*rand(5,7)) X = sum(x) 19 15 12 8 1 4 0 5 9 16 19 7 4 15 12 0 18 18 16 12 9 10 16 15 8 0 5 19 18 9 4 18 3 4 9 64 49 65 71 27 29 52 % součet prvku v jednotlivých % sloupcích matice X sum(sum(x)) % součet prvku v matici X % je to součet součtu prvku ze sloupců matice X, tj. součet % předchozího vektoru ans 357 max(x) % vyhledání prvku s max. velikostí v jednotlivých sloupcích matice X 19 16 18 19 16 12 19 max(max(x)) % vyhledání maxima, tj. prvku s max. velikostí z celé matice X % vyhledání maxima z maxim z jednotlivých sloupců matice X, tj. maximum % z předchozího vektoru ans 19 x=linspace(-pi, pi,100); % zadání vektoru x od -pi do pi ve 100 bodech y=(sin(x)).^2; plot(x,y) % v proměnné y je 100 hodnot funkce (sin(x)).^2 % odpovídá operaci sin(x).*sin(x) % jedná se o umocnění vektoru - nematicová operace.^ % násobí se stejnolehlé prvky ve vektorech s prvky sin(x) % vykreslení dvourozměrného grafu funkce (sin(x)).^2 x=linspace(-pi,pi,100); y=sin(x.^2); plot(x,y) % zadání vektoru x od -pi do pi % v proměnné y je 100 hodnot funkce sin(x.^2) % odpovídá operaci sin(x.*x) % jedná se o umocnění vektoru - nematicová operace.^ % násobí se stejnolehlé prvky ve vektorech x % vykreslení dvourozměrného grafu funkce y=sin(x.^2) %-------------------------------------------------------------------- % 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 % (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) %-------------------------------------------------------------------- graf a=5; b=2; c=a+b % skript graf.m % vykreslí průběh funkce sin x 2 % secte hodnoty v proměnných a,b 7 secti % skript secti.m % sečte 2 čísla daná v m-file a=5; b=2; % proměnné vytvořené v rámci provádění skriptu zůstanou zachovány % viz Workspace po provedeni skriptu obsahuje a,b,c 7 whos % vypíše seznam existujících proměnných Name Size Bytes Class a 1x1 8 double array b 1x1 8 double array c 1x1 8 double array Grand total is 3 elements using 24 bytes soucet % funkce soucet.m % sečte 2 čísla daná v m-file a=5; b=2; % hlavička je ve tvaru function nazev % proměnné a,b,c po skončení posledního příkazu funkce zaniknou % viz Workspace po provedeni funkce neobsahuje a,b,c 7 whos % vypíše seznam existujících proměnných % neobjeví se nic, proměnné a,b,c po skončení funkce zanikly a=6; b=-1; soucet_vst(a,b) % funkce soucet_vst.m
% hlavička je ve tvaru function nazev(vstup1,vstup2) % funkce se vstupními parametry a,b % sečte zadané proměnné a=6; b=-1; 5 k=3;l=-4; soucet_vst(k,l) % funkce soucet_vst.m % hlavička je ve tvaru function nazev(vstup1,vstup2) % funkce se vstupními parametry k,l % sečte zadané proměnné k=3;l=-4; -1 soucet_vst(3,5) % funkce soucet_vst.m % hlavička je ve tvaru function nazev(vstup1,vstup2) % funkce se vstupními parametry 3,5 % sečte čísla 3,5 8 m=[1,2]; n=[3,4]; soucet_vst(m,n) 4 6 % funkce soucet_vst.m % hlavička je ve tvaru function nazev(vstup1,vstup2) % funkce se vstupními parametry m,n % sečte vektory m=[1,2]; n=[3,4]; soucet_vst_strednik(9,5) % funkce soucet_vst_strednik.m % hlavička je ve tvaru function nazev(vstup1,vstup2) % funkce se vstupními parametry 9,5 % funkce proběhne, ale výsledek se nezobrazí, v m-file % je za proměnnou c středník, zabraňuje výpisu na % obrazovku soucet_vst_vyst(9,5) % funkce soucet_vst_vyst.m % hlavička je ve tvaru function výstup=nazev(vstupy) % funkce se vstupními parametry 9,5 a výstupem % výsledek se uloží do proměnné ans % výstupní proměnná zůstává zachována (viz Workspace) 14
whos % vypíše seznam právě existujících proměnných Name Size Bytes Class ans 1x1 8 double array y=soucet_vst_vyst(9,5) y = % funkce soucet_vst_vyst.m % hlavička je ve tvaru function výstup=nazev(vstupy) % funkce se vstupními parametry 9,5 a výstupem y % výsledek se uloží do proměnné y % výstupní proměnná zůstává zachována (viz Workspace) 14 whos % vypíše seznam právě existujících proměnných Name Size Bytes Class ans 1x1 8 double array y 1x1 8 double array u=8; v=-7; y=soucet_vst_vyst(u,v) y = % funkce soucet_vst_vyst.m % hlavička je ve tvaru function výstup=nazev(vstupy) % funkce se vstupními parametry u,v a výstupem y % výsledek se uloží do proměnné y % výstupní proměnná zůstává zachována (viz Workspace) 1 z=soucet_vst_vyst(5,3); % funkce soucet_vst_vyst.m % hlavička je ve tvaru function výstup=nazev(vstupy) % funkce se vstupními parametry 5,3 a výstupem z % výstupní proměnná zůstává zachována (viz Workspace) % výsledek se uloží do proměnné z, ale nezobrazí se na % obrazovku, za příkazem je středník whos % vypíše seznam právě existujících proměnných Name Size Bytes Class z 1x1 8 double array Grand total is 1 element using 8 bytes %----------------------------------------------- % 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 polyval(p,2) % vyčíslení polynomu p pro hodnotu 2 % tj. y=2*2^5-5*2^4 + 4*2^3 + 3*2^2-6*2 + 2 = 18 18 v=[-2:2] v = % zadání vektoru v
-2-1 0 1 2 w=polyval(p,v) % vyčíslení polynomu p pro všechny hodnoty z vektoru v w = -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 % výpočet rovnice % 2*x^5-5*x^4 + 4*x^3 + 3*x^2-6*x + 2 = 0 x = -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 % polynom 4*x^3 + 5*x + 2 = 4*x^3 + 0*x^2 + 5*x + 2*x^0 r = 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] t = 1-5 6 % zadání polynomu t % polynom 1*x^2-5*x + 6*x^0 x12=roots(t) % řešení kvadratické rovnice x^2-5*x + 6 = 0 x12 = 3.0000 2.0000 u=[1,-2,2] u = 1-2 2 % zadání polynomu t % polynom 1*x^2-2*x + 2
x12=roots(u) % řešení kvadratické rovnice x^2-2*x + 2 = 0 x12 = 1.0000 + 1.0000i 1.0000-1.0000i %------------------------------------------------------- % Graf - bod se souřadnicemi x,y %------------------------------------------------------- plot(3,5) % bod o souřadnicích x=3, y=5 (vykreslen jako modrá tečka) plot(3,5,'*') % bod o souřadnicích x=3, y=5 zobrazen jako hvězdička * plot(3,5,'o') % bod o souřadnicích x=3, y=5 zobrazen jako kolečko o plot(3,5,'x') % bod o souřadnicích x=3, y=5 zobrazen jako křížek x plot(3,5,'^') % bod o souřadnicích x=3, y=5 zobrazen jako trojúhelníček %------------------------------------------------------- % 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 % polynom 2.stupně - křivka - parabola xp=[1:0.1:7]; y2=polyval(k,xp); plot(xp,y2) plot(x,y,'*',xp,y2) % zadání bodů, ve kterých bude počítána aproximace % jemnější dělení osy x pro zobrazení křivky % vyčíslení polynomu k pro všechny tyto body % vykreslení dvourozměrného grafu - polynom 2.st. % vykreslení grafu - body (zobrazeny jako *) a jejich % proložení polynomem 2.st. (parabolou)
k3=polyfit(x,y,3) % nalezení koeficientů polynomu 3.stupně % pro proložení bodů x,y k3 = -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 y3=polyval(k3,xp); % vyčíslení polynomu k3 pro všechny body vektoru xp plot(x,y,'*',xp,y2,xp,y3) % vykreslení dvourozměrného grafu % body - zobrazeny jako modré * % proložení polynomem 2.stupně - zobrazeno zeleně % proložení polynomem 3.stupně - zobrazeno červeně k5=polyfit(x,y,5) % nalezení koeficientů polynomu 5.stupně % pro proložení bodů x,y k5 = -0.0000 0.0038-0.1439 0.8750-0.4773-1.2857 % body budou proloženy polynomem % y(x) = 0.0000*x^5 + 0.0038*x^4-0.1439*x^3 + 0.8750*x^2-0.4773*x - 1.2857 % první člen polynomu je nulový, v podstatě se jedná o polynom 4.st. y5=polyval(k5,xp); % vyčíslení polynomu k5 pro všechny body vektoru xp plot(x,y,'*',xp,y2,xp,y3,xp,y5) % vykreslení dvourozměrného grafu % body - zobrazeny jako modré * % proložení polynomem 2.stupně - zobrazeno zeleně % proložení polynomem 3.stupně - zobrazeno červeně % proložení polynomem 5.stupně - zobrazeno modrozeleně legend('body','polynom 2.st (parabola)','polynom 3.st','polynom 5.st') % zobrazení legendy ke grafu
% křivka daná polynomem 3.stupně téměř splývá % s křivkou 5.stupně => vhodné je proložení bodů % polynomem 3. stupně (5.st. je zbytečný) %------------------------------------------------------------------------------ % totéž proložení bodů, pokud není potřeba znát koeficienty polynomů, % nezavádí se proměnná, do které by se koeficienty polynomů ukládaly x=[1:7]; % zadání vektoru x - x-ové souřadníce bodů y=[-1,0,2,2,3,1,-2] % zadání vektoru y - y-ové souřadníce bodů xp=[1:0.1:7]; % zadání bodů, ve kterých bude počítána aproximace % jemnější dělení osy x pro zobrazení křivky y2=polyval(polyfit(x,y,2),xp); % vyčíslení polynomu 2.stupně pro všechny body xp y3=polyval(polyfit(x,y,3),xp); % vyčíslení polynomu 3.stupně pro všechny body xp y5=polyval(polyfit(x,y,5),xp); % vyčíslení polynomu 5.stupně pro všechny body xp plot(x,y,'*',xp,y2,xp,y3,xp,y5) % vykreslení dvourozměrného grafu % body - zobrazeny jako modré * % proložení polynomem 2.stupně - zobrazeno zeleně % proložení polynomem 3.stupně - zobrazeno červeně % proložení polynomem 5.stupně - zobrazeno modrozeleně legend('body','polynom 2.st (parabola)','polynom 3.st','polynom 5.st') % zobrazení legendy ke grafu diary off % přeruší ukládání do textového souboru