Příklady k prvnímu testu - Matlab
March 13, 2013 Instrukce: Projděte si všechny příklady. Každý příklad se snažte pochopit. Pak vymyslete a naprogramujte příklad podobný. Tím se ujistíte, že příkladu rozumíte. Další příklady najdete na stránkách Ivana Nagye.
Učivo: Zápis vektorů a matic. Základní operace, násobení, mocnění, transponování, tečková, dvojtečková konvence. Příkazy rand, zeros, ones, eye. Skládání matic z kusů. Příkazy if, for, while. Příkazy plot, hist. Příkazy mean, var. Načtení proměnné - input. Výpis - proměnná bez středníku, příkaz disp.
Vektory, matice, operace Spočtěte skalární součin vektorů u a v, kde: u = (1, 2, . . . 20) v = (20, 19, . . . 1)
Otevřu si editor! Matlab násobí maticově. Proto nevynásobí dva řádkové vektory. Abych dostal skalární součin, musím řádek násobit sloupcem!
u =1:20; v =20: -1:1;
% krok -1
v =v ’;
% transpozice - udelam z radk . vektoru sloupc .
x=u*v
% absence stredniku zpusobi vypsani hodnoty x 1
Výsledek: 1540
Spočtěte velikost vektoru u: u = (1, 2, . . . 20)
Velikost vektoru spočtu jako odmocninu ze skalárního součinu vektoru se sebou samým. První varianta: u=1:20; x=u∗u ’ ;
%radkovy v e k t o r k r a t s l o u p c o v y !
x=x ^ 0 . 5
%odmocnina z e s o u c t u
Druhá varianta:
u =1:20; m = u .^2; x = sum ( m );
% diky tecce se umocni kazda hodnota na 2 % suma
x = x ^0.5
% odmocnina ze souctu
Výsledek: 53,57 Spočtěte v Matlabu
P20
n=1
n2 .
n =1:20; m = n .^2;
% diky tecce se umocni kazda hodnota na 2
x = sum ( m )
% absence stredniku zpusobi vypsani hodnoty x
Výsledek: 2870
1
1
Vezměme matici A = 0
1
1
1 . 0 0 1 Nejprve ji transponujte, pak umocněte na třetí, pak její položky umocněte na druhou.
A =[1 ,1 ,1;0 ,1 ,1;0 ,0 ,1]; A =A ’;
% apostrof
A = A ^3;
% bez tecky
A = A .^2
% s teckou ; absence stredniku zpusobi vypsani 2
1
0
0
Výsledek: 9 1 0 36 9 1
Skládání matic z kousků, zeros, ones, eye Umocněte na čtvrtou matici A:
2
0
0
0
0
0
0
0
A=
0 0
2 0
0 2
0 0
0 0
0 0
0 0
0 0
0
0
0
2
0
0
0
0
1
1
1
1
3
3
3
3
1
1
1
1
3
3
3
3
1
1
1
1
3
3
3
3
1
1
1
1
3
3
3
3
Složím matici z kousků.
P = eye (4);
%1 param . znamena , ze radky i sloupce budou 4
Q = zeros (4 ,4); R = ones (4 ,4); A =[2* P , Q ;R ,3* R ]; X = A ^4
% absence stredniku zpusobi vypsani matice X
Výsledek:
16
0 0 0 A= 2072 2072 2072 2072
0
0
0
0
0
0
16
0
0
0
0
0
0
16
0
0
0
0
0
0
16
0
0
0
2072
2072
2072
5184
5184
5184
2072
2072
2072
5184
5184
5184
2072
2072
2072
5184
5184
5184
2072
2072
2072
5184
5184
5184
0
0 0 5184 5184 5184 5184 0
Náhodné vektory a histogramy Vygenerujte tisíc čísel, která mají rovnoměrné rozdělení mezi 5 a 10. Vykreslete histogram s 20 sloupci.
3
X = rand (1 ,1000);
% jeden radek , 1000 sloupcu ; rozmezi 0...1
X = X *5;
% rozmezi 0...5
X = X +5;
% rozmezi 5...10
hist (X ,20);
% histogram , 20 sloupcu
Výsledek:
Vygenerujte dva náhodné vektory u a v po 1000 složkách. Jejich rozdělení nechť je rovnoměrné mezi 0 a 1. Vektor X je dán součiny patřičných složek u a v. Vykreslete histogram X s 20 sloupci.
u = rand (1 ,1000);
% jeden radek , 1000 sloupcu ; rozmezi 0...1
v = rand (1 ,1000);
% jeden radek , 1000 sloupcu ; rozmezi 0...1
X = u .* v ;
% dulezita je tecka , aby se nasobily slozky
hist ( X ); Výsledek:
Simulujte deset hodů poctivou mincí. Hody vypište. 4
X = rand (1 ,10);
%1 radek , 10 sloupcu ; rozmezi 0 az 1
X = X *2; X = fix ( X );
% rozmezi 0 az 2 % uriznuti desetinne casti ; 0 ,1
X
% vypise hodnoty
Výsledek např.: X= Columns 1 through 15 000110101011100 Columns 16 through 30 001011110011010
Simulujte třicet hodů poctivou dvanáctistěnnou kostkou. Hody vypište.
X = rand (1 ,30);
%1 radek , 30 sloupcu ; rozmezi 0 az 1
X = X *12;
% rozmezi 0 az 12
X = fix ( X );
% uriznuti desetinne casti ; 0 ,1 ,2 ,...11
X = X +1;
% generuje cisla 1 ,2 ,...12
X
% vypise hodnoty
Výsledek např.: X= Columns 1 through 15 5 4 12 9 5 2 9 8 1 2 12 6 1 1 2 Columns 16 through 30 11 6 7 6 1 11 4 4 8 6 5 8 12 8 4
Grafy Vykreslete funkci y =
1 1+x4
v rozmezí -3 až 3 s krokem jedna setina. Graf vykreslete červeně
čárkovaně.
X = -3:0.01:3; Y =1./(1+ X .^4);
% vsimnete si tecek pred operacemi !
plot (X ,Y , ’r - - ’);
% vsimnete si apostrofu u tretiho parametru ! % a dvou minusu ! 5
Výsledek:
Vykreslete funkci y = sin (x) v rozmezí -5 až 5 s krokem jedna desetina. Graf vykreslete černě tečkovaně.
X = -5:0.1:5; Y = sin ( X ); plot (X ,Y , ’ k . ’);
% vsimnete si apostrofu u tretiho parametru !
Výsledek:
Střední hodnoty a rozptyly Máme vektor u = (1, 2, 3, . . . 500). Spočtěte a vypište střední hodnotu a rozptyl tohoto vektoru.
Střední hodnotu spočtu funkcí mean. Rozptyl funkcí var. 6
u =1:500; StredniHodnota = mean ( u )
% chybi strednik
Rozptyl = var ( u )
% chybi strednik
Výsledek: StredniHodnota =250.5000 Rozptyl =20875
if, for, while Začneme s číslem A = 10. Nové číslo spočteme jako kosinus předchozího. Tento krok zopakujeme tisíckrát. Jaké je výsledné číslo po tisíci krocích?
A =10; for N =1:1000
% probehne vypocet pro N =1 az 1000
A = cos ( A ); end ;
% musi byt strednik
A
% vypise A
Výsledek: A = 0.7391 Sečtěte siny přirozených čísel od 1 do 1000.
Varianta 1: S o u c e t =0;
%nezapomen n a s t a v i t v y c h o z i hodnotu ! ! !
f o r N=1:1000 S o u c e t=S o u c e t+s i n (N ) ; end ;
%za end musi byt s t r e d n i k
Soucet
%v y p i s e S o u c e t
Varianta 2 (rychlejší):
N =1:1000; S = sin ( N );
% funkce automaticky pracuji po slozkach % i bez tecky
Soucet = sum ( S )
% vypise Soucet
7
Výsledek: Soucet =0.8140 - (Siny jsou kladné i záporné, proto se téměř vyruší.) Začneme s číslem A = 1. Pokud je číslo A větší než 5, vydělme jej 3. Jinak k němu přičtěme 2. Tento krok zopakujme tisíckrát. Jaké je výsledné číslo po tisíci krocích?
A =1; for N =1:1000 if A >5
% doporucuji dusledne odsazovat % aby byl kod prehledny
A = A /3; else A = A +2; end ; end ; A
% vypise A
Výsledek: A=2 Sečtěte siny přirozených čísel od 1 do 1000. Uvažujte však pouze siny větší než 0,5.
Soucet =0;
% nezapomen nastavit vychozi hodnotu !!!
for N =1:1000 S = sin ( N ); if S >0.5 Soucet = Soucet + S ; end ;
% pokud je soucet vetsi nez 0 ,5 % soucet se zvetsi % jinak ne
end ;
% za end musi byt strednik
Soucet
% vypise Soucet
Výsledek: Soucet = 275.2155 Sčítám siny přirozených čísel počínaje od jedné. Kolik jich musím sečíst, aby součet poprvé překročil číslo 1,95?
8
Soucet =0; N =0;
% musim dat 0 , aby prvni pocitane % N bylo 1
while Soucet <=10 N = N +1;
% dokud Soucet <=10 , % tak zvetsuje cisla
Soucet = Soucet + sin ( N ); % a pricita end ; N Výsledek: N=9 Napište program, který se vás zeptá, kolik je hodin. Pokud zadáte do osmi, pozdraví vás „Dobré ráno!”, do jedenácti „Dobré dopoledne!”, do třinácti „Dobré poledne!”, do sedmnácti „Dobré odpoledne!”, do dvacetidvou „Dobrý večer!”, jinak „Proč nespíš?”.
A = input ( ’ Kolik je hodin ? ’); if A <=8 disp ( ’ Dobre rano ! ’); elseif A <=11 disp ( ’ Dobre dopoledne ! ’); elseif A <=13 disp ( ’ Dobre poledne ! ’); elseif A <=17 disp ( ’ Dobre odpoledne ! ’); elseif A <=22 disp ( ’ Dobry vecer ! ’); else disp ( ’ Proc nespis ?! ’); end ;
9