P íklady k prvnímu testu - Scilab 24. b ezna 2014 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, histplot. P íkazy mean, variance. 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! Scilab 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. 1
x=u*v // vypocet disp (x) // vypise hodnoty 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 sloupcovy! x=x ^0.5 // odmocnina ze souctu d i s p ( x ) Druhá varianta: u =1:20 m = u.^2 // diky tecce se umocni kazda hodnota na 2 x= sum (m) // suma x = x ^0. 5 // odmocnina ze souctu disp (x) 53,57 Spo t te ve Scilabu 20 n=1 n2. n =1:20 m = n.^2 // diky tecce se umocni kazda hodnota na 2 x= sum (m) disp (x) 2870 Vezm me matici A = 1 1 1 0 1 1. 0 0 1 Nejprve ji transponujte, pak umocn te na t etí, pak její poloºky umocn te na druhou. 2
A =[1,1,1;0,1,1;0,0,1] A=A ' // apostrof A=A ^3 // bez tecky A=A.^2 // s teckou disp (A) 1 0 0 9 1 0 36 9 1 Skládání matic z kousk, zeros, ones, eye Umocn te na tvrtou matici A: A = 2 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 2 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,4) Q= zeros (4,4) R= ones (4,4); A =[2* P,Q;R,3* R] X=A ^4 disp (X) A = 16 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 16 0 0 0 0 2072 2072 2072 2072 5184 5184 5184 5184 2072 2072 2072 2072 5184 5184 5184 5184 2072 2072 2072 2072 5184 5184 5184 5184 2072 2072 2072 2072 5184 5184 5184 5184 3
Náhodné vektory a histogramy Vygenerujte tisíc ísel, která mají rovnom rné rozd lení mezi 5 a 10. Vykreslete histogram s 20 sloupci. X= rand (1,1000) // jeden radek, 1000 sloupcu ; rozmezi 0...1 X=X *5 // rozmezi 0...5 X=X +5 // rozmezi 5...10 histplot (20, X) // histogram, 20 sloupcu 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 histplot (20, X) 4
Simulujte deset hod poctivou mincí. Hody vypi²te. X = rand (1,10) //1 radek, 10 sloupcu ; rozmezi 0 az 1 X=X *2 // rozmezi 0 az 2 X= fix (X) // uriznuti desetinne casti ; 0,1 disp (X) // vypise hodnoty Výsledek nap.: X = 0 0 0 1 1 0 1 0 1 0 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 disp (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 5
Grafy Vykreslete funkci y = 1 1+x 4 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 MEZERY za 1 a tecek pred operacemi! plot ( X, Y," r - -") // vsimnete si apostrofu u tretiho parametru! // a dvou minusu! 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! 6
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í variance. u =1:500; StredniHodnota = mean (u) Rozptyl = variance (u) disp ( StredniHodnota ) disp ( Rozptyl ) 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) disp (A) // vypise A 7
A = 0.7391 Se t te siny p irozených ísel od 1 do 1000. Varianta 1: Soucet=0 // nezapomen n a s t a v i t v y c h o z i hodnotu!!! f o r N=1:1000 Soucet=Soucet+s i n (N) d i s p ( Soucet ) // v y p i s e Soucet Varianta 2 (rychlej²í): N =1:1000 S = sin ( N) // funkce automaticky pracuji po slozkach // i bez tecky Soucet = sum (S) // Suma disp ( Soucet ) // vypise Soucet 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 // doporucuji dusledne odsazovat if A >5 then // aby byl kod prehledny A=A /3 else A=A +2 disp (A) // vypise A 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. 8
Soucet =0 // nezapomen nastavit vychozi hodnotu!!! for N =1: 1000 S= sin (N) if S >0. 5 then // pokud je souc. > nez 0,5 Soucet = Soucet + S // soucet se zvetsi // jinak ne disp ( Soucet ) // vypise Soucet 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? Soucet =0 N =0 // musim dat 0, aby prvni pocitane // N bylo 1 while Soucet <=1. 95 // dokud Soucet <=1,95, N=N +1 // tak zvetsuje cisla Soucet = Soucet + sin (N) // a pricita disp (N) 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 then disp (" Dobre rano!") elseif A <=11 then disp (" Dobre dopoledne!") elseif A <=13 then 9
disp (" Dobre poledne!") elseif A <=17 then disp (" Dobre odpoledne!") elseif A <=22 then disp (" Dobry vecer!") else disp (" Proc nespis?!") 10