SCILAB Osa 6. Timo Mäkelä

Samankaltaiset tiedostot
y z = (x, y) Kuva 1: Euklidinen taso R 2

KOMPLEKSILUVUT C. Rationaaliluvut Q. Irrationaaliluvut

1.1 Vektorit. MS-A0004/A0006 Matriisilaskenta. 1.1 Vektorit. 1.1 Vektorit. Reaalinen n-ulotteinen avaruus on joukko. x 1. R n.

MS-A0102 Differentiaali- ja integraalilaskenta 1

Valitse ruudun yläosassa oleva painike Download Scilab.

Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006

1 Kompleksiluvut 1. y z = (x, y) Kuva 1: Euklidinen taso R 2

PERUSASIOITA ALGEBRASTA

Kompleksiluvut., 15. kesäkuuta /57

5 OMINAISARVOT JA OMINAISVEKTORIT

1 Matriisit ja lineaariset yhtälöryhmät

C = {(x,y) x,y R} joiden joukossa on määritelty yhteen- ja kertolasku seuraavasti

Testaa taitosi 1: Lauseen totuusarvo

Matriisilaskenta Laskuharjoitus 1 - Ratkaisut / vko 37

Johdatus matematiikkaan

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Valintakoe

Loogiset konnektiivit

Reaalilukuvälit, leikkaus ja unioni (1/2)

Lineaarialgebra ja matriisilaskenta II. LM2, Kesä /141

2 Yhtälöitä ja epäyhtälöitä

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

Matematiikan tukikurssi, kurssikerta 3

1 Ominaisarvot ja ominaisvektorit

Kompleksiluvut Kompleksitaso

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

1.1 Vektorit. MS-A0007 Matriisilaskenta. 1.1 Vektorit. 1.1 Vektorit. Reaalinen n-ulotteinen avaruus on joukko. x 1. R n. 1. Vektorit ja kompleksiluvut

1 Kompleksiluvut. Kompleksiluvut 10. syyskuuta 2005 sivu 1 / 7

3. Kirjoita seuraavat joukot luettelemalla niiden alkiot, jos mahdollista. Onko jokin joukoista tyhjä joukko?

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Kompleksiluvut 1/6 Sisältö ESITIEDOT: reaaliluvut

Tämän luvun tarkoituksena on antaa perustaidot kompleksiluvuilla laskemiseen sekä niiden geometriseen tulkintaan. { (a, b) a, b œ R }

a) z 1 + z 2, b) z 1 z 2, c) z 1 z 2, d) z 1 z 2 = 4+10i 4 = 10i 5 = 2i. 4 ( 1)

Tehtäväsarja I Seuraavissa tehtävissä harjoitellaan erilaisia todistustekniikoita. Luentokalvoista 11, sekä voi olla apua.

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 1 / vko 44

Ohjelman käynnistäminen

Numeeriset menetelmät TIEA381. Luento 3. Kirsi Valjus. Jyväskylän yliopisto. Luento 3 () Numeeriset menetelmät / 45

Lineaarialgebra ja matriisilaskenta I

MATEMATIIKAN KOE, PITKÄ OPPIMÄÄRÄ HYVÄN VASTAUKSEN PIIRTEITÄ

Predikaattilogiikkaa

k=0 saanto jokaisen kolmannen asteen polynomin. Tukipisteet on talloin valittu

MS-A0004/A0006 Matriisilaskenta

Numeeriset menetelmät

Algebra. 1. Ovatko alla olevat väittämät tosia? Perustele tai anna vastaesimerkki. 2. Laske. a) Luku 2 on luonnollinen luku.

5 Ominaisarvot ja ominaisvektorit

Insinöörimatematiikka D

1. Piirrä kompleksitasoon seuraavat matemaattiset objektit/alueet.

Johdatus tekoälyn taustalla olevaan matematiikkaan

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Kompleksilukujen kunnan konstruointi

w + x + y + z =4, wx + wy + wz + xy + xz + yz =2, wxy + wxz + wyz + xyz = 4, wxyz = 1.

Neliömatriisi A on ortogonaalinen (eli ortogonaalimatriisi), jos sen alkiot ovat reaalisia ja

MS-A0402 Diskreetin matematiikan perusteet

Kanta ja Kannan-vaihto

Ominaisarvo-hajoitelma ja diagonalisointi

MS-A0207 Differentiaali- ja integraalilaskenta 2 (Chem) Yhteenveto, osa I

Insinöörimatematiikka D

Matematiikan tukikurssi

-Matematiikka on aksiomaattinen järjestelmä. -uusi tieto voidaan perustella edellisten tietojen avulla, tätä kutsutaan todistamiseksi

Nimitys Symboli Merkitys Negaatio ei Konjuktio ja Disjunktio tai Implikaatio jos..., niin... Ekvivalenssi... jos ja vain jos...

Matematiikka B2 - TUDI

DIFFERENTIAALI- JA INTEGRAALILASKENTA

Numeeriset menetelmät

1 Peruslaskuvalmiudet

Matematiikan peruskurssi 2

1. Viikko. K. Tuominen MApu II 1/17 17

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

Matematiikka B2 - Avoin yliopisto

Insinöörimatematiikka D

Matriisit ja vektorit Matriisin käsite Matriisialgebra. Olkoon A = , B = Laske A + B, , 1 3 3

Numeeriset menetelmät

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 4 / vko 47

2. Polynomien jakamisesta tekijöihin

MS-C1340 Lineaarialgebra ja

Matematiikan tukikurssi

Differentiaali- ja integraalilaskenta 1 Ratkaisut 5. viikolle /

1.1. Määritelmiä ja nimityksiä

Kompleksiluvut. JYM, Syksy /99

FUNKTION KUVAAJAN PIIRTÄMINEN

Ratkaisu: Tutkitaan derivoituvuutta Cauchy-Riemannin yhtälöillä: f(x, y) = u(x, y) + iv(x, y) = 2x + ixy 2. 2 = 2xy xy = 1

1 Lineaariavaruus eli Vektoriavaruus

Matematiikan tukikurssi

Ville Turunen: Mat Matematiikan peruskurssi P1 1. välikokeen alueen teoriatiivistelmä 2007

HY / Avoin yliopisto Johdatus yliopistomatematiikkaan, kesä 2015 Harjoitus 5 Ratkaisuehdotuksia

1 Rationaalifunktio , a) Sijoitetaan nopeus 50 km/h vaihtoaikaa kuvaavan funktion lausekkeeseen.

Determinantti 1 / 30

BM20A0700, Matematiikka KoTiB2

Numeeriset menetelmät

Ominaisarvo ja ominaisvektori

Insinöörimatematiikka D

Python-ohjelmointi Harjoitus 2

Lineaarialgebra ja differentiaaliyhtälöt Laskuharjoitus 1 / vko 44

6 MATRIISIN DIAGONALISOINTI

plot(f(x), x=-5..5, y= )

Insinöörimatematiikka IA

NELIÖJUURI. Neliöjuuren laskusääntöjä

z 1+i (a) f (z) = 3z 4 5z 3 + 2z (b) f (z) = z 4z + 1 f (z) = 12z 3 15z 2 + 2

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

KOMPLEKSIANALYYSI I KURSSI SYKSY 2012

Transkriptio:

SCILAB Osa 6 Timo Mäkelä Sisällysluettelo 1. LOOGISET OPERAATIOT... 1.1 RELAATIO-OPERAATIOT... 1. LOOGISET OPERAATIOT...5 1..1 Perusoperaattorit...5 1.. Kvanttorit...8 1..3 Looginen indeksointi...9 1..4 Testaus...11 1..5 Matriisin puuttuvat arvot...13 1.3 JOUKOT...14. ERITYYPPISIÄ FUNKTIOITA...17.1 OSISTA KOOSTUVA FUNKTIO...17. FUNKTION JAKSOLLINEN JATKO...0 3. KOMPLEKSILUVUT...4 4. SYMBOLINEN LASKENTA...8 4.1 YHTÄLÖRYHMIEN RATKAISEMINEN...8 4. RATIONAALILAUSEKKEET...9 4..1 Perusteet...9 4.. Rationaalilausekkeiden käsittely...34 5. AJAN KÄSITTELY...39 5.1 PÄIVÄMÄÄRÄ...39 5. AIKAVÄLIN MITTAAMINEN...40

Scilab Osa 6 1. LOOGISET OPERAATIOT 1.1 Relaatio-operaatiot Scilabissa on käytettävissä seuraavat relaatio-operaattorit: Operaattori Merkitys < pienempi kuin <= pienempi tai yhtä suuri kuin > suurempi kuin >= suurempi tai yhtä suuri kuin = = yhtä suuri kuin ~= tai <> eri suuri kuin Relaatio-operaattoreilla voidaan verrata samaa kertalukua olevia matriiseja. Vertailu suoritetaan alkio kerrallaan. Tulokseksi saadaan samaa kertalukua oleva looginen matriisi, jonka alkiot ovat T tai F. Alkio on T, jos vertailun tulos on tosi F, jos vertailun tulos on epätosi. Matriisia voidaan verrata myös skalaariin. Tällöin jokaista matriisin alkiota erikseen verrataan skalaariin. ESIMERKKI. Muodostetaan satunnaismatriisit, joiden alkiot ovat kokonaislukuja välillä 0..9. -->A=floor(10*rand(,5)) A = 3.. 3. 5. 3. 9. 3.. 4. 5. -->B=floor(10*rand(,5)) B = 5.. 4. 0.. 4. 6. 9. 4. 4. Määritetään mitkä A:n alkiot ovat suurempia kuin B:n alkiot: -->A>B F F F T T T F F F T Määritetään mitkä B:n alkiot ovat 4: -->B==4 F F T F F T F F T T

3 Scilab Osa 9 Aritmeettisissa laskutoimituksissa loogisen matriisin 1 alkiota T vastaa arvo 1 F vastaa arvo 0. ESIMERKKI. (Jatkoa) Matriisin B luvusta 4 eroavat alkiot saadaan nollattua seuraavasti: -->B.*(B==4) 0. 0. 4. 0. 0. 4. 0. 0. 4. 4. ESIMERKKI. Puoliaaltotasasuuntaus. Funktion f x = { sin x, kun sin x 0 0, kun sin x 0 kuvaaja voidaan piirtää seuraavasti: -->x=0:0.01:5*%pi; -->y=sin(x); -->y=y.*(y>0); // Asetetaan negatiiviset arvot nolliksi -->plot(x,y) ESIMERKKI. Nollien poisto. Piirretään funktion -->x=-10:0.01:10; -->plotd(x,sin(x)./x)!--error 7 division by zero... sin x x kuvaaja välillä [ 10,10]. Kuvaajaa ei saada piirrettyä. Virheilmoitus, johtuu siitä, että kuvaa piirrettäessä lasketaan funktion arvo myös pisteessä 0, jolloin tulee nollalla jako. Tämä voidaan estää muuttamalla hieman piirtovälin alarajaa 1 Muunnos voidaan suorittaa myös komennolla bools: bools(a) muuntaa matriisi 0-1-matriisiksi. Komentoa käsitellään enemmän myöhemmin.

Scilab Osa 6 4 -->x=-9.9999:0.01:10; -->plotd(x,sin(x)./x) tai poistamalla nolla vektorista x -->x=-10:0.01:10; -->x=x+(x==0)*%eps; -->plotd(x,sin(x)./x) Edellä on käytetty komento -->x=x+(x==0)*%eps; korvaa vektorissa x esiintyvän nolla luvulla %eps, joka on tietokoneen liukulukujen esitystarkkuus. -->%eps %eps =.0D-16 1 sin x ESIMERKKI. Lasketaan integraali dx. Käytetään komentoa integrate: x 1 Komento -->integrate('sin(x)/x','x',-1,1) ei tuota tulosta, vaan saadaan virheilmoitus:!--error 7 Division by zero... at line of function %func called by : at line 70 of function integrate called by : integrate('sin(x)/x','x',-1,1) Virhe johtuu siitä, että ohjelma yrittää laskea integroitavan funktion arvon pisteessä 0. Tämä saadaan estettyä muuttamalla integroimisväli hieman epäsymmetriseksi origon suhteen: -->integrate('sin(x)/x','x',-1,1+%eps)

5 Scilab Osa 9 1.891661 Nollalla jako voidaan estää myös muuttamalla funktiota kun x on nolla: -->integrate('sin(x+(x==0)*%eps)/(x+(x==0)*%eps)','x',-1,1) 1.891661 1. Loogiset operaatiot 1..1 Perusoperaattorit Loogisella muuttujalla on kaksi totuusarvoa: epätosi tai tosi. Scilabissa muuttujan totuusarvo F on epätosi. Syötettäessä tämä merkitään %f tai %F. T on tosi. Syötettäessä tämä merkitään %t tai %T. Scilabissa on käytettävissä seuraavat loogiset operaattorit Operaattori Nimitys Merkitys negaatio ei & konjunktio ja disjunktio tai Näiden toiminta selvinnee seuraavasta totuustaulusta. A B A A&B A B F F T F F F T T F T T F F F T T T F T T Sanallisesti tämä voidaan ilmaista seuraavasti: { ~A = T, jos A on F F, jos A on T T, jos A ja B ovat T A & B = { F, jos A tai B tai molemmat on F { A B = T, jos A tai B tai molemmat on T F, jos A ja B ovat F

Scilab Osa 6 6 Logiikka-operaatioita voidaan soveltaa samaa kertalukua oleviin matriiseihin. Operaatio suoritetaan alkio kerrallaan. Tulokseksi saadaan samaa kertalukua oleva looginen matriisi. Toinen operandi voi olla myös skalaari. Tällöin jokainen matriisin alkio operoi erikseen skalaarin kanssa. Loogisten operaattoreiden operandeina voi olla myös lukuja. Nämä tulkitaan tällöin seuraavasti: Epätosi, jos luvun arvo on nolla Tosi, jos luvun arvo ei ole nolla. ESIMERKKI. -->a=[%f %f %t %t] a = F F T T -->b=[%f %t %f %t] b = F T F T -->~a T T F F // välilyönti ~:n jälkeen! -->a&b F F F T -->a b F T T T -->a=[0 4-5; -3 0] a = 0. 4. - 5.. - 3. 0. -->b=[0 0 ;-5 1 6] b = 0. 0.. - 5. 1. 6. -->~a T F F F F T -->a&b F F T T T F -->a b F T T T T T ESIMERKKI. Kertalukua m n oleva matriisi, jonka alkiot ovat satunnaisesti tosia tai epätosia voidaan muodostaa komennolla ~floor(*rand(m,n))

7 Scilab Osa 9 -->~floor(*rand(,5)) F T T F F T F T F F Komento bools(a) muuntaa loogisen tai reaalisen matriisin A matriisiksi, jonka alkiot ovat 0 tai 1. Alkio on 0: jos looginen arvo on F tai numeerinen arvo 0 1: jos looginen arvo on T tai numeerinen arvo ei ole nolla Aritmeettisissa laskutoimituksissa muunnosta ei tarvitse eksplisiittisesti suorittaa. ESIMERKKI. Vektorille x komento -->x=x+(x==0)*%eps; on sama kuin komento -->x=x+(~x)*%eps; Molemmat komennot korvaavat vektorissa x esiintyvän nolla luvulla %eps. -->x=-4:4 x = - 4. - 3. -. - 1. 0. 1.. 3. 4. -->x=x+(x==0)*%eps x = - 4. - 3. -. - 1..0D-16 1.. 3. 4. -->x=x+(~x)*%eps x = - 4. - 3. -. - 1..0D-16 1.. 3. 4. Komento ~~ A tai ~~bools(a) muuntaa reaalisen matriisin A loogiseksi matriisiksi, jonka alkiot ovat F tai T. Alkio on F: jos numeerinen arvo 0 T: jos numeerinen arvo ei ole nolla Loogiset operaattorit ovat operaattoreiden laskujärjestyksessä alimmalla tasolla, joten ne on syytä aina laittaa sulkujen sisään, muuten voi tulla vaikeasti selvitettäviä virheitä.

Scilab Osa 6 8 ESIMERKKI. Lauseke { x, kun 0 x 3 0, muulloin x, kun 0 < x < 3 0, muulloin voidaan toteuttaa seuraavasti: ((x>0)&(x<3))*x Toteutus (x>0)&(x<3)*x on virheellinen, kuten seuraavasta nähdään: -->x= x =. -->((x>0)&(x<3))*x,(x>0)&(x<3)*x. T 1.. Kvanttorit Kaikkikvanttori eli universaalikvanttori tarkoittaa ilmaisua "kaikilla". Sitä merkitään logiikassa symbolilla. Lause x p x luetaan "kaikilla x p x " tai "jokaisella x p x ". Lause x p x on tosi, jos jokainen perusjoukon 1 alkio toteuttaa avoimen lauseen p x. Scilabissa kaikkikvanttoria vastaa komento and(x), joka testaa ovatko kaikki alkiot tosia tai nollasta eroavia: arvo on T, jos kaikki matriisin X alkiot ovat tosia tai nollasta eroavia, muutoin arvo on F. Komennon muoto and(x, r ) suorittaa and-operaation matriisin X rivivektoreille ja esittää tuloksen rivivektorina. and(x, c ) suorittaa and-operaation matriisin X sarakevektoreille ja esittää tuloksen sarakevektorina. Olemassaolokvanttori eli eksistenssikvanttori tarkoittaa ilmaisua "on olemassa". Sitä merkitään logiikassa symbolilla. Lause x p x luetaan "on olemassa x, jolle p x " tai "jollakin x p x ". Lause x p x on tosi, jos ainakin yksi perusjoukon alkio toteuttaa avoimen lauseen p x. 1 Perusjoukko tarkoittaa sitä joukkoa, jossa muuttuja x liikkuu.

9 Scilab Osa 9 Scilabissa olemassaolokvanttoria vastaa komento or(x), joka testaa onko jokin alkio tosi tai nollasta eroava seuraavasti: arvo on T, jos jokin matriisin X alkio on nollasta eroava, muutoin arvo on F. Komennon muoto or(x, r ) suorittaa or-operaation matriisin X rivivektoreille ja esittää tuloksen rivivektorina. or(x, c ) suorittaa or-operaation matriisin X sarakevektoreille ja esittää tuloksen sarakevektorina. ESIMERKKI. Muodostetaan satunnaismatriisi X. -->X=floor(10*rand(3,10)) X = 6. 7. 8. 9. 8. 1. 5. 0.. 6. 9. 4. 0. 5. 0. 7. 9. 5. 6. 6. 0. 6. 8. 5. 5.. 7. 3. 1. 3. Testataan, ovatko kaikki alkiot suurempia kuin 5: -->and(x>5) F Testataan, onko jokin alkio suurempi kuin 5 -->or(x>5) T Kokeillaan vielä matriisilla -->A=floor(3*rand(,3)) A = 1. 1. 0. 1. 0.. -->and(a,'r') T F F -->and(a,'c') F F 1..3 Looginen indeksointi Loogista matriisia voidaan käyttää loogiseen indeksointiin seuraavasti: Olkoot numeerinen matriisi A ja looginen matriisi L samaa kertalukua. Tällöin A(L) on pystyvektori, joka sisältää pystyvektorin A(:) ne alkiot, joita vastaava matriisin L alkio on T.

Scilab Osa 6 10 ESIMERKKI. Matriisin A positiiviset alkiot saadaan selville komennolla A(A>0): -->A=floor(-9+19*rand(3,4)) A = - 4. - 1. - 5. 0. 3. 4. - 1. 0. - 8. 8. 9. 1. -->A(A>0) 3. 4. 8. 9. 1. Nollasta eroavien alkioiden 1 indeksit saadaan selville find-komennolla. Tarkemmin Vektorille a komento find(a) palauttaa vektorin, joka sisältää vektorin a ne indeksit, joita vastaava alkio ei ole nolla. Matriisille A komento find(a) käsittelee matriisia A pitkänä vektorina A(:), joka muodostetaan asettamalla matriisin A sarakkeet peräkkäin. Komento palauttaa vektorin, joka sisältää matriisin A(:) ne indeksit, joita vastaava alkio ei ole nolla. Matriisille A komento [i, j] = find(a) palauttaa vektorit i ja j, jotka sisältävät ne matriisin A indeksit, joita vastaavat alkiot eivät ole nollia. Vektori i ilmoittaa rivin ja vektori j ilmoittaa sarakkeen. Matriisin A nollasta eroavat alkiot saadaan siis selville seuraavilla komennoilla A(find(A)) A(A~=0) A(~~A) ESIMERKKI. Muodostetaan matriisi -->A = [0 1.3 3.4; 0 0 3.1; 4.7-3 0] A = -->A(:) 0. 1.3 3.4 0. 0. 3.1 4.7-3. 0. 1 tai loogisen matriisin tapauksessa totuusarvon tosi omaavien alkioiden

11 Scilab Osa 9 0. 0. 4.7 1.3 0. - 3. 3.4 3.1 0. Nollasta eroavien alkioiden indeksit -->find(a) 3. 4. 6. 7. 8. Nollasta eroavat alkiot -->A(~~A) 4.7 1.3-3. 3.4 3.1 Nollasta eroavien alkioiden rivi- ja sarakeindeksit -->[i,j]=find(a) j = 1... 3. 3. i = 3. 1. 3. 1.. TEHTÄVIÄ. 1. Nopan heitto. Muodosta satunnaislukugeneraattoria käyttäen vektori, jonka alkiot ovat tasan jakautuneita kokonaislukuja välillä 1 6. Laske lukujen 6 suhteellinen osuus vektorissa. Käytä riittävän pitkää vektoria. Toista koe useampaan kertaan. Mikä on ko. suhteellinen osuus? Ratkaisussa voit käyttää komentoja rand, floor, length. 1..4 Testaus Komennolla is* voidaan testata erilaisten asioiden paikkansa pitävyyttä. is*-komento palauttaa loogisen matriisin. Seuraavaan taulukkoon on koottu joitain is*-komentoja.

Scilab Osa 6 1 Komento isempty(a) Toiminto Arvo T, jos matriisi tai lista A on tyhjä 1. Muuten arvo F isequal(a,b) Arvo T, jos matriisit A ja B ovat samoja. Muuten arvo F. isinf(a) Arvo on samaa kertalukua oleva matriisi kuin A. Matriisin alkio on T, jos A:n vastaava alkio on +Inf tai Inf, muutoin alkio on F. isnan(a) Arvo on samaa kertalukua oleva matriisi kuin A. Matriisin alkio on T, jos A:n vastaava alkio on Nan, muutoin alkio on F. ESIMERKKEJÄ. -->A=floor(10*rand(1,8)) A = 5. 4. 7. 7. 9. 8. 4.. -->find(a==4). 7. -->find(a==6) [] -->isempty(find(a==6)) T Huomaa operaattorin = = ja komennon isequal ero: -->A = 4*eye(,) A = 4. 0. 0. 4. -->B = 4*eye(,) B = 4. 0. 0. 4. -->A==B T T T T -->isequal(a,b) T -->a=[, 4, %inf, -%inf]; -->isinf(a) F F T T ->a(~isinf(a)) //Poistetaan äärettömät alkiot 1 Matriisi on tyhjä, jos ainakin toinen sen dimensioista on 0. Esimerkiksi 0 0- tai 0 3-matriisit.

13 Scilab Osa 9. 4. Muodostetaan laskutoimituksella matriisi, jossa on Inf ja Nan. Tässä on muutettava poikkeuskäsittelyä komennolla 1 ieee() (ks. tarkemmin helpistä) -->A=[ 0; 1 4]./[ 0; 0 ]!--error 7 division by zero... -->ieee() -->A=[ 0; 1 4]./[ 0; 0 ] A = 1. Nan Inf. Kokeillaan komentoja isinf ja isnan. -->isinf(a) F F T F -->isnan(a) F T F F Sekä Inf että Nan voidaan poistaa seuraavasti: -->L=~(isinf(A) isnan(a)) L = T F F T -->A(L) 1.. 1..5 Matriisin puuttuvat arvot Joskus esiintyy tilanteita, joissa matriisissa on puuttuvia arvoja. Esimerkiksi tilastomateriaalista voivat jotkin arvot puuttua. Nämä arvot voidaan korvata arvolla Nan, Not-a-number, joka tarkoittaa epämääräistä numeerista arvoa. Arvo Nan syntyy myös eräiden laskutoimitusten tuloksena, jos komennolla ieee on poikkeuskäsittely asetettu sellaiseksi. Esimerkiksi laskutoimituksen 0/0 tulos on Nan. Scilab käsittelee arvoja Nan yhtenäisesti: jos laskutoimituksen osana on Nan, niin tulos on Nan. ESIMERKKI. Muodostetaan satunnaismatriisi, jonka yksi alkio NaN. -->A = floor(10*rand(3,3)); A(,3) = %nan A = 9. 3. 1. 1 Oletusarvo on ieee(0).

Scilab Osa 6 14 9. 9. Nan 3. 7. 3. Määritetään rivien keskiarvot: -->mean(a,'c') 4.3333333 Nan 4.3333333 Tilastollista analyysiä varten kaikki Nan:t on syytä poistaa. Komennolla find(~isnan(x)) määritetään ne vektorin x indeksit, joita vastaavat alkiot eivät ole Nan. Vektorista x voidaan poistaa Nan:t seuraavilla vaihtoehtoisilla komennoilla: x(~isnan(x)) x(find(~isnan(x))) x(isnan(x)) = []. Matriisista X poistetaan rivit, joilla on Nan komennolla X(and(x, c ), :) ESIMERKKI. Poistetaan edellisen matriisista rivit, joilla Nan. -->A(and(~isnan(A),'c'),:) 9. 3. 1. 3. 7. 3. Poistetaan Nan:t vektorista -->x = [1-3 4 %nan 5]; -->x(~isnan(x)) 1. - 3. 4. 5. 1.3 Joukot Kerrataan hieman joukko-oppia. Olkoot A ja B jonkin perusjoukon X osajoukkoja. Tällöin 1 joukko B on joukon A osajoukko, B A, jos jokainen joukon B alkio on myös joukon A alkio. joukkojen A ja B yhdiste A B={x X x A x B } koostuu niistä alkioista, jotka kuuluvat joukkoon A tai joukkoon B. 1 Tässä käytetään loogisia konnektiiveja ja, tai.

15 Scilab Osa 9 joukkojen A ja B leikkaus A B={x X x A x B } koostuu niistä alkioista, jotka kuuluvat joukkoon A ja joukkoon B. joukkojen A ja B erotus A B={x A x B} koostuu niistä alkioista, jotka kuuluvat joukkoon A mutta eivät joukkoon B. tyhjä joukko φ ei sisällä yhtään alkiota. Tietenkin A B A, A B A A B B ESIMERKKI. Olkoon A={1,,3,4,5} ja B={4,5,6,7} (perusjoukkona kokonaisluvut). Tällöin A B={1,,3,4,5,6,7} A B={4,5} A B={1,,3} Scilabissa voidaan käsitellä äärellisiä joukkoja. Joukko esitetään vektorina. Vektorin alkiot ovat joukon alkioita. Tyhjä joukko on [ ]. Seuraavaan taulukkoon on koottu joukko-operaatioita. Komento unique(s) union(a,b) intersect(a,b) setdiff(a,b) Toiminto Poistetaan saman alkion moninkertaiset esiintymät vektorista S. Lajitellaan alkiot kasvavaan suuruusjärjestykseen. Joukkojen A ja B yhdiste lajiteltuna suuruusjärjestykseen Joukkojen A ja B leikkaus lajiteltuna suuruusjärjestykseen Joukkojen A ja B erotus A\B lajiteltuna suuruusjärjestykseen ESIMERKKI. -->S = [4 5 4-1] S = 4. 5.. 4.. - 1. -->unique(s) - 1.. 4. 5. Joukon S alkioiden määrä saadaan selville seuraavalla komennolla length(unique(s)):

Scilab Osa 6 16 -->length(unique(s)) 4. ESIMERKKEJÄ. Muodostetaan joukot -->a=1:5 a = 1.. 3. 4. 5. -->b=4:7 b = 4. 5. 6. 7. ja muodostetaan joukko-operaatioita -->union(a,b) 1.. 3. 4. 5. 6. 7. -->intersect(a,b) 4. 5. -->setdiff(a,b) 1.. 3. Komento gsort(v) lajittelee vektorin alkiot alenevan järjestyksen mukaan. Jos v on matriisi lajitellaan pystyvektori v(:) ja tulos esitetään matriisin v kokoisena matriisina. Komennolla perms(v) muodostetaan vektorin v kaikki permutaatiot. ESIMERKKI. -->perms([1 3]) 3.. 1. 3. 1... 3. 1.. 1. 3. 1. 3.. 1.. 3.

17 Scilab Osa 9. ERITYYPPISIÄ FUNKTIOITA.1 Osista koostuva funktio Relaatio- ja loogisia operaattoreita käyttäen voidaan piirtää sellaisia funktioita, jotka on määritelty eri lausekkeilla eri väleillä. Tarkastellaan myös tällaisten funktioiden määrittelyä. Funktion määrittelyssä on otettava huomion, että funktion argumenttina voi olla myös vektori. ESIMERKKI. Piirretään funktion f x = { x, kun x x 6, kun x kuvaaja välillä [ 3,5]. -->x=-3:0.01:5; -->y= (x<=).*(x.^) + (x>).*(-x+6); -->plot(x,y) Huomaa kuinka vektorin y lausekkeessa käytetään taulukko-operaattoreita. Funktio voidaan määritellä seuraavasti: -->deff('y=f(x)','y=(x<=).*(x.^) + (x>).*(-x+6)') jolloin kuvaajan piirto voidaan suorittaa komennolla -->plot(x,f(x)) ESIMERKKI. Piirretään funktion { x 6, kun x f x = x, kun x x 6, kun x kuvaaja välillä [ 8,8] -->x=-8:0.01:8; -->y = (x<=-).*(x+6) + ((x>-)&(x<=)).*(x.^) + (x>).*(-x+6);

Scilab Osa 6 18 -->plot(x,y) Yksikköaskel u t = { 0, kun t 0 1, kun t 0 voidaan toteuttaa seuraavilla vaihtoehtoisilla tavoilla: -->deff('y=u(t)','y=1*(t>=0)') -->deff('y=u(t)','y=bools((t>=0))') Sakarapulssi s t = { A, kun a t b 0, muulloin voidaan yksikköaskelta käyttäen muodostaa seuraavasti: s t = A[u t a u t b ] Yksikköpenger p t = { 0, kun t 0 t, kun t 0 voidaan yksikköaskelta käyttäen esittää muodossa p t =t u t, jonka Scilab-toteutus on -->deff('y=p(t)','y=t.*(t>=0)')) ESIMERKKI Piirretään yksikköaskel -->x=-5:0.01:5; -->plotd(x,u(x),rect=[-5,-1,5,])

19 Scilab Osa 9 ja sakarapulssi -->clf -->plotd(x,5*(u(x+)-u(x-3)),rect=[-5,-1,5,6]) TEHTÄVIÄ 1. Piirrä seuraavat funktiot a) 1 1 1 3 6 t b) 1 1 1 4 6 t

Scilab Osa 6 0. Funktion jaksollinen jatko Tietyllä välillä määritellyn funktion jaksollinen jatko koko reaaliakselille voidaan muodostaa komennolla pmodulo. Komento 1 pmodulo(x, y) muodostaa reaalilukujen x ja y jakolaskun x/y jakojäännöksen, joka on samanmerkkinen kuin y. Jos a b, niin funktio j a,b x =a pmodulo x a,b a on jaksollinen funktio, jonka jakso on b a välillä [a,b] j a,b x =x. Toteutetaan tämä Scilabilla. -->deff('y=jj(x,a,b)','y=a+pmodulo(x-a,b-a)') ESIMERKKI. Piirretään tällaisten funktioiden kuvaajia. -->x=-10:0.01:10; -->plot(x,jj(x,-,3)) -->clf -->plot(x,jj(x,,6)) Välillä [a,b] määritellyn funktion f jaksollinen jatko reaaliakselille, on yhdistetty funktio f j a, b : f j a, b x = f j a,b x. 1 Komento on esitelty luvusssa 3.5.1.

1 Scilab Osa 9 ESIMERKKI. Piirretään funktio y=x x välillä [ 1,3]. -->x=-1:0.01:3; -->plot(x,x.^-*x) Jatketaan tämä funktio jaksollisesti koko reaaliakselille. Piirretään kuvaaja välillä [ 10,10]. -->x=-10:0.01:10; -->y=jj(x,-1,3); -->plot(x,y.^-*y) Jaksollinen jatko voidaan toteuttaa myös funktiota käyttäen. Jos määritellään -->deff('y=f(x)','y=x.^-*x') on jaksollinen jatko funktio f(jj(x,-1,3)). Siis edellinen kuvaaja saadaan myös piirtokomennolla -->plot(x,f(jj(x,-1,3))) ESIMERKKI. Kuvan pulssijono

Scilab Osa 6 voidaan muodostaa seuraavasti: -->x=-6:0.001:6; -->y=jj(x,0,3); -->z=5*(u(y)-u(y-)); -->plotd(x,z,rect=[-6,0,6,6]) ESIMERKKI. Kuvan pulssijono voidaan piirtää seuraavasti: -->x=-4:0.01:8; -->y=jj(x,0,4); -->z=(y<=).*y+(y>).*(-(y-4)); -->plotd(x,z) TEHTÄVIÄ 1. Piirrä seuraavat jaksolliset funktiot a) 1 1 b)

3 Scilab Osa 9 1-10 -5 5 10 15 - c) 4-4 -3 - -1 1 3 4 5 6 7 8 d) 3-10 -5 5 10 15-3

Scilab Osa 6 4 3. KOMPLEKSILUVUT Kompleksiluku on muotoa x y i oleva luku, missä x ja y ovat reaalilukuja ja i on imaginaariyksikkö. Imaginaariyksikölle i pätee i = 1. Kompleksiluvun z=x y i reaaliosa Re(z) = x imaginaariosa Im(z) = y liittoluku eli kompleksikonjugaatti z=x yi itseisarvo eli moduli z = x y Kompleksiluku x y i voidaan samaistaa lukuparin x, y eli xy-tason pisteen x, y kanssa: x y i= x, y. Näin päädytään kompleksitasoon. Kompleksitasossa reaaliluvut sijaitsevat x-akselilla: x= x,0. Kompleksitason x-akselia sanotaankin reaaliakseliksi. puhtaat imaginaariluvut sijaitsevat y-akselilla: yi= 0, y. Kompleksitason y-akselia sanotaankin imaginaariakseliksi. y y z z = x + yi Reaaliakseli ϕ x x Imaginaari akseli Kompleksiluku z=x yi voidaan samaistaa xy-tason pisteen x, y paikkavektorin kanssa. Tämän pituus r on kompleksiluvun z=x y i y itseisarvo z = x y. vaihekulma ϕ on kompleksiluvun z=x y i argumentti arg(z). Jos kompleksiluvun z itseisarvo on r ja argumentti on ϕ, niin kompleksiluku voidaan esittää y = r sin ϕ ϕ r x z = x + yi = r cos ϕ x

5 Scilab Osa 9 trigonometrisessä muodossa z=r cos i r sin eksponenttimuodossa z=r e i osoitinmuodossa z = r ϕ Scilabissa imaginaariyksikkö on %i ESIMERKKI. -->%i^ - 1. -->1/(+%i) 0.4-0.i -->(4+5*%i)/(3+%i) 1.7 + 1.1i Kompleksilukujen käsittelyyn on käytössä seuraavat komennot: Komento real(z) imag(z) conj(z) abs(z) Toiminto Kompleksimatriisin z alkioiden reaaliosa Kompleksimatriisin z alkioiden imaginaariosa Kompleksimatriisin z alkioiden liittoluku Kompleksimatriisin z alkioiden itseisarvo ESIMERKKEJÄ. -->z=[+5*%i,7-*%i] z =. + 5.i 7. -.i -->real(z). 7. -->imag(z) 5. -. -->conj(z). - 5.i 7. +.i

Scilab Osa 6 6 Kompleksiluvun argumentin 1 laskenta voidaan toteuttaa komentoa atan käyttäen seuraavana funktiona: function y=arg(z) y=atan(imag(z),real(z)) endfunction Funktion antama argumentti on radiaaneissa. Jos tulos halutaan asteissa, voidaan käyttää seuraavaa funktiota: function y=arg_deg(z) y=atan(imag(z),real(z))*180/%pi endfunction ESIMERKKEJÄ. -->z=[1+%i,+4*%i] z = 1. + i. + 4.i -->arg(z) 0.785398 1.1071487 -->arg_deg(z) 45. 63.434949 Jos kompleksiluvun z itseisarvo on r ja vaihekulma ϕ voidaan kompleksiluku kirjoittaa muodossa z = r * exp(%i*ϕ). Kääntäen, kompleksiluvun z itseisarvo r ja vaihekulma ϕ saadaan selville komennolla [r, ϕ] = polar(z). Edellä vaihekulma on radiaaneissa. Jos halutaan käyttää asteita, voidaan tehdä määritelmä deg = %pi/180 Tällöin voidaan laskea seuraavasti: ja z = r * exp(i*ϕ*deg) [r, ϕ] = polar(z). ϕ = ϕ/deg. Näitä komentoja varten voi tietenkin tehdä omat funktiot. ESIMERKKEJÄ. Lasketaan asteissa: -->deg=%pi/180; -->z=4.7*exp(%i*136*deg) 1 Kompleksiluvun argumentin laskentaan ei Scilabissa taida olla valmista komentoa.

7 Scilab Osa 9 z = - 3.395839 + 3.787875i -->[r,fii]=polar(z) fii =.3736478 + 1.388D-16i r = 4.7 -->clean(fii)/deg 136. Jos z on kompleksiarvoinen vektori, niin komento plotd(real(z), imag(z)) piirtää kompleksitasoon käyrän, joka kulkee vektorin z pisteiden kautta. 1 ESIMERKKI. Piirretään siirtofunktion G s = s 1 s s 3 piirretään kulmataajuuden ω funktiona käyrä G i. Nyquistin diagrammi eli -->s=%i*logspace(-,,1000); -->g=1../((s+1).*(s+).*(s+3)); // Huomaa 1.. -->plotd(real(g),imag(g)) -->xgrid(); -->xtitle('nyquistin diagrammi') TEHTÄVIÄ. 1. Piirrä siirtofunktion ( s) 3 G = Nyquistin diagrammi. ( s + 1)( s + 0,3s + 1)

Scilab Osa 6 8 4. SYMBOLINEN LASKENTA Scilab on numeerisen matematiikan ohjelma, mutta sillä voi suorittaa jonkin verran symbolista laskentaa. Symbolinen laskenta tarkoittaa muuttujia sisältävien lausekkeiden käsittelyä. Tässä luvussa selvitetään millaista symbolista lasketaan Scilabilla voidaan tehdä. 4.1 Yhtälöryhmien ratkaiseminen Scilabilla voidaan ratkaista symbolisesti sellaisia neliöllisiä lineaarisia yhtälöryhmiä, joiden kerroinmatriisi on yläkolmiomatriisi. Matriisimuotoisena esityksenä A x=b, annettu yhtälöryhmä ratkaistaan komennolla solve(a, b). Tässä A on yläkolmiomatriisi ja b pystyvektori. Matriisien A ja b alkiot ovat merkkijonoja. Siis lainausmerkkien välissä. Myös tulos on merkkijono. ESIMERKKI. Ratkaistaan yhtälöryhmä { a x 5 y z=5 a y z=0 3z=b -->A=['a', '5', '';'0','a','1';'0','0','-3'] A =!a 5!!!!0 a 1!!!!0 0-3! -->b=['5';'0';'b'] b =!5!!!!0!!!!b! -->x=solve(a,b) x =!a\(-*(-3\b)-5*(a\(3\b))+5)!!!!a\(3\b)!!!!-3\b! Lasketaan ratkaisu, kun a = 1 ja b = 3: -->a=1;b=-3; -->eval(x) 8. - 1. 1.

9 Scilab Osa 9 Yllä on käytetty komentoa 1 eval, joka evaluoi merkkijonon arvon eli sijoittaa muuttujilla arvot ja laskee merkkijonon arvon. ESIMERKKI. -->z='a^+b-sin(%pi/)' z = a^+b-sin(%pi/) -->a=4;b=0.5; -->z z = a^+b-sin(%pi/) -->eval(z) 15.5 4. Rationaalilausekkeet 4..1 Perusteet Scilabissa voidaan käsitellä symbolisesti yhden muuttujan polynomeja ja rationaalifunktioita. Tällaista lauseketta sanotaan tässä rationaalilausekkeeksi. Symbolisena muuttujana voidaan käyttää symbolia %s, jonka arvo on s symbolia %z, jonka arvo on z tai symbolinen muuttuja voidaan määritellä komennolla poly(0, tunnus ). Näillä on pieni ero, kuten seuraavasta esimerkistä nähdään. ESIMERKKI. -->%s %s = s -->a1=*%s^-5*%s+1 a1 = 1-5s + s // lauseke sijoitettu muuttujaan -->x=poly(0,'x') x = x -->a=*x^-5*x+1 a = 1-5x + x // lauseke sijoitettu muuttujaan 1 Komentoa on käsitelty monisteen Scilab Ohjelmointi luvussa 7.3.

Scilab Osa 6 30 Sijoitetaan muuttujille arvot: -->s=3;x=3; -->a1 a1 = 1-5s + s -->a a = 1-5x + x Mutta tässä ero (tietenkin!) -->*x^-5*x+1 4. -->*%s^-5*%s+1 1-5s + s Annetaan uudelleen poly-komento. -->x=poly(0,'x') x = x -->*x^-5*x+1 1-5x + x Yhteenvetona edellisestä esimerkistä voidaan todeta seuraavaa: Komennolla poly(0, tunnus ) muuttuja tunnus muuttuu symboliseksi. Jos muuttujalle annetaan numeerinen arvo, ei muuttuja ole enää symbolinen. Jos muuttujan sisältävä lauseke on sijoitettu johonkin muuttujaan ennen symbolin numeerista arvoa, säilyy lauseke symbolisena. Rationaalilausekkeita voidaan normaaliin tapaan laskea yhteen ja vähentää keskenään kertoa ja jakaa keskenään korottaa kokonaislukupotenssiin. Seuraavissa esimerkeissä symbolisena muuttujana on x: -->x=poly(0,'x') x = x ESIMERKKEJÄ.

31 Scilab Osa 9 -->(x+)+(-3*x+4) 6 - x -->(x+3)*(x-7) - 1-4x + x -->(x-)/(x^-3*x+1) - + x --------- 1-3x + x -->(x-5)^3 3-15 + 75x - 15x + x -->1/(x+1)+1/x 1 + x ------ x + x Rationaalilausekkeen P arvo, kun muuttujalla on arvo a lasketaan komennolla horner(p, a). Tässä a voi olla lukuarvo tai rationaalilauseke. -->P=x/(x+1) P = x ----- 1 + x -->horner(p,3) 0.75 -->horner(p,x^) x ----- 1 + x Rationaalilausekkeita käyttäen voidaan muodostaa rationaalimatriiseja, joilla voidaan operoida tuttuun tapaan. Ainakin seuraavat operaatiot toimivat normaalisti: matriisien yhteen- ja kertolasku. käänteismatriisin laskeminen

Scilab Osa 6 3 transpoosin muodostaminen determinantin laskenta taulukkolaskentaoperaatiot ESIMERKKEJÄ. -->A=[x, *x; 1/x,5+x] A = x x - --- 1 1 1 5 + x - ----- x 1 -->A' x 1 - - 1 x x 5 + x --- ----- 1 1 -->det(a) - + 5x + x ---------- 1 -->A^(-1) 5 + x - x --------- ---------- - + 5x + x - + 5x + x - 1 x ----------- --------- 3 - x + 5x + x - + 5x + x -->A*A^(-1) 1 0 - - 1 1 0 1 - - 1 1 -->b=[x;1/x] b = x - 1

33 Scilab Osa 9 1 - x -->A*b + x ----- 1 5 + x ------ x -->horner(a*b,) 6. 4.5 Yleinen polynomien muodostaja on komento poly, jonka muoto on missä Jos poly(v, x {, flag }), v on matriisi tai reaaliluku x on symbolisen muuttujan nimi flag on valinnainen parametri, jonka mahdolliset arvot ovat roots ja coeff. Näistä roots on oletusarvo. v on neliömatriisi A, komento antaa tulokseksi matriisin A karakteristisen polynomin det x I A v on vektori, niin komento o o poly(v, x, roots ) tulostaa polynomin, jonka juuret on vektorin v alkiot. poly(v, x, coeff ) tulostaa polynomin, jonka kertoimet ovat vektorin v alkiot siten, että v(1) on vakiotermi, v() on termin x kerroin jne. ESIMERKKI. Parametri v vektori -->v=[1,, 3] v = 1.. 3. -->p1=poly(v,'z') p1 = 3-6 + 11z - 6z + z -->horner(p1,v) 0. 0. 0. // Tarkistus: nollakohdat oikein -->poly(v,'z','coeff')

Scilab Osa 6 34 1 + z + 3z ESIMERKKI. Parametri v neliömatriisi -->A=[1 ;3 4] A = 1.. 3. 4. -->poly(a,'x') - - 5x + x Tarkistetaan muodostamalla karakteristinen polynomi määritelmän perusteella. -->x=poly(0,'x') x = x -->det(x*eye()-a) - - 5x + x 4.. Rationaalilausekkeiden käsittely Rationaalilausekkeilla ja rationaalimatriiseilla voidaan suorittaa seuraavia toimintoja Komento Toiminto numer(r) tai r.num Rationaalimatriisin r alkioiden osoittajat. denom(r), tai r.den Rationaalimatriisin r alkioiden nimittäjät. roots(p) Polynomin p juuret pystyvektorina. simp(r) Rationaalimatriisin r alkioiden sieventäminen derivat(r) Rationaalimatriisin r alkioiden derivaatta factors(r) Polynomin tai rationaalilausekkeen r tekijöihin jako. Seuraavissa esimerkeissä symbolisena muuttujana on x: -->x=poly(0,'x') x = x ESIMERKKEJÄ. -->A=[x/(x+1), *x; x^-*x+3,(5+x)/(x^-3)] A = x x ----- --- 1 + x 1

35 Scilab Osa 9 3 - x + x 5 + x ---------- ----- 1-3 + x -->A.num x x 3 - x + x 5 + x -->A.den 1 + x 1 1-3 + x -->A.num./A.den x x ----- --- 1 + x 1 3 - x + x 5 + x ---------- ----- 1-3 + x -->p=poly([,3,3],'x') p = 3-18 + 1x - 8x + x -->roots(p). 3. + 3.161D-08i 3. - 3.161D-08i -->derivat(3*x^5-*x^3+5*x+10) 4 5-6x + 15x -->(x+3)*(x-4)*(x+7)^ 3 4-588 - 17x + 3x + 13x + x -->factors(ans) ans(1) - 4 + x // Huomaa, että tulos ei ole tarkka!

Scilab Osa 6 36 ans() 3 + x ans(3) 6.9999999 + x ans(4) 7.0000001 + x Erityisesti polynomeihin tai polynomimatriiseihin liittyviä komentoja ovat Komento degree(p) gcd([p1,..,pn]) lcm([p1,..pn]) [r,q]=pdiv(p1,p) f = polfact(p) Toiminto Polynomimatriisin polynomien asteet. Polynomien tai kokonaislukujen p1 pn suurin yhteinen tekijä Polynomien tai kokonaislukujen p1 pn pienin yhteinen jaettava Polynomimatriisien alkioittainen jakolasku: p1 on polynomimatriisi p on polynomimatriisi tai polynomi q on osamäärämatriisi r on jakojäännösmatriisi Komennon tulos on sellainen että alkioittain pätee p1 p =q r eli p1= p q r p missä r:n aste on pienempi kuin p:n aste. Polynomin alkutekijöihin jako. Tulos on muotoa f= [f0, f1,, fn], missä f0 on vakio f1,, fn ovat polynomeja siten, että p = prod(f). ESIMERKKEJÄ (Jatkoa). -->degree(a.den) // Edellisen esimerkin matriisi A 1. 0. 0.. -->[^*3^3, ^3*3^,*3^*5] 108. 7. 90. -->gcd([108,7,90]) 1 // Väärin syötetty: luvut liukulukuja -->gcd(int3([108,7,90]))

37 Scilab Osa 9 18 -->*3^ 18. // Tarkistus -->lcm(int3([108,7,90])) 1080 -->^3*3^3*5 1080. // Tarkistus -->1080../[108,7,90] // Tarkistetaan vielä. Alkioittainen jako 10. 15. 1. -->p=[5*x^*(x+1),x^3-x,x*(x^3+1)] p = 3 3 4 5x + 5x - x + x x + x -->gcd(p) x + x -->lcm(p) 3 5 6-5x + 5x - 5x + 5x -->factors(x^3+1) // Tarkistetaan lcm ans(1) 1 - x + x ans() 1 + x -->5*x^*(x+1)*(x-1)*(1-x+x^) // lcm OK. 3 5 6-5x + 5x - 5x + 5x -->(x+3)*(x-4)*(x+7)^ 3 4-588 - 17x + 3x + 13x + x -->polfact(ans) // vrt. edell. esim. Factors-komento 1 7.0000001 + x 6.9999999 + x - 4 + x 3 + x Polynomien u x =x x 3 ja v x =4 x 5 x 6 tulo: -->u=x^+*x+3

Scilab Osa 6 38 u = 3 + x + x -->v=4*x^+5*x+6 v = 6 + 5x + 4x -->w=u*v w = 3 4 18 + 7x + 8x + 13x + 4x Tulo on siis w x =4 x 4 13 x 3 8 x 7 x 18 Suoritetaan jakolasku w x kahdella eri tavalla: u x -->w/u 6 + 5x + 4x ----------- 1 -->[r,q]=pdiv(w,u) q = 6 + 5x + 4x r = 0. Tulos on siis v x ja jakojäännös on nolla. Suoritetaan jakolasku -->p1=x^3+*x^-x+10 p1 = 3 10 - x + x + x -->p=x^+x p = x + x x3 x x 10 x x -->p1/p 3 10 - x + x + x --------------- x + x // Ei tulosta -->[r,q]=pdiv(p1,p) q = 1 + x r = 10 - x

39 Scilab Osa 9 Osamäärä on q x =x 1, jakojäännös on r x = x 10. Tarkistetaan p x q x r x =x 3 x x 10 : -->p*q+r 3 10 - x + x + x TEHTÄVIÄ 1. Ratkaise yhtälöt a) x x 1=0 b) x 3 x 8 x=0 c) x 3 3 x 7 x 5=0. Muodosta sellainen polynomi, jonka nollakohdat ovat luvut 1, 3, 7. 3. Laske tulo y 3 y 1 y 5 y 7 käyttäen laskussa muuttujaa y. 5. AJAN KÄSITTELY 5.1 Päivämäärä Scilabissa aika 1 esitetään lukuna, jossa kokonaisosat tarkoittavat vuorokausia ja desimaaliosat vuorokauden osia. Luku on juokseva numerointi, jolle 1.1.0000 on päivä numero 1. Komento date antaa nykyisen päivämäärän merkkijonona getdate antaa nykyisen ajanhetken vektorina, jonka pituus on 10. Vektorin aliot ovat seuraavat : dt(1): The year as a number (with the century) between 0000 and 9999. dt(): The month of the year as a number between 01 and 1. dt(3): The ISO 8601 week number as a number between 01 and 53. dt(4): The Julian day of the year as a number between 001 and 366. dt(5): Specifies the weekday as a decimal number [1,7], with 1 representing Sunday. dt(6): The day of the month as a number between 01 and 31. dt(7): The hour of the day is output as a number between 00 and 3. dt(8): The minute is output as a number between 00 and 59. dt(9): The second is output as a number between 00 and 59. dt(10): The millisecond is output as a number between 000 and 999. datenum muuntaa päivämäärän luvuksi. Komennon muotoja ovat datenum() nykyhetki lukuna datenum(y, M, D) datenum(y, M, D, H, MI, S) datevec(dt) esittää lukuna DT annetun päivämäärän muodossa [Y, M, D, H, MI, S] callendar() esittää nykyisen kuukauden kalenterin. Komennon muoto calendar(y,m) 1 Aika tarkoittaa tässä yhteydessä päivämäärää ja kellon aikaa. Kopioitu Scilabin helpistä.

Scilab Osa 6 40 esittää vuoden Y kuukauden M kalenterin. Edellä Y = vuosi, M = kuukausi, D = päivä, H = tunti, MI = minuutti, S = sekunti. Argumentit ovat samaa kertalukua olevia vektoreita tai skalaareja. ESIMERKKEJÄ. -->date 0-May-008 -->getdate 008. 5. 1. 141. 3. 0. 9. 0. 18. 706. -->datenum 733548.39 -->datevec(ans) 008. 5. 0. 9. 0. 3.000005 -->calendar(011,10) Oct 011 ans(1) ans() M Tu W Th F Sat Sun ans(3) 0. 0. 0. 0. 0. 1.. 3. 4. 5. 6. 7. 8. 9. 10. 11. 1. 13. 14. 15. 16. 17. 18. 19. 0. 1.. 3. 4. 5. 6. 7. 8. 9. 30. 31. 0. 0. 0. 0. 0. 0. 5. Aikavälin mittaaminen Tiettyjen komentojen suorittamiseen kulunut aika voidaan mitata tic-toc komentoparilla, missä tic() käynnistää kellon toc() pysäyttää kellon ja tulostaa kuluneen ajan sekunteina. Mittaus suoritetaan seuraavasti: tic() komentoja toc() Jos komennot annetaan näppäimistöltä on syytä käyttää muotoa tic(); komentoja; toc()

41 Scilab Osa 9 Komento etime(t,t1) laskee aikojen t1 ja t välisen aikaeron sekunteina. Ajat on syötettävä komennon datevec tai getdate tulostusmuodossa. Komennolla timer() saadaan selville edellisen timer()-komennon antamisen jälkeen kulunut keskusyksikköaika. ESIMERKKI. Seuraavassa skriptissä on mitattu käänteismatriisien muodostamisen kuluvaa aikaa. Skripti on kirjoitettu editorilla tiedostoon ja ajettu Scilabin valikkokomennolla File: Exec File Into Scilab. t=[]; for n=1:500 A=rand(n,n); tic(); inv(a); t(n)=toc(); end Tulos on piirretty komennolla -->plotd(t) ESIMERKKI. Komennon etime käyttö: -->t1=[007. 6. 4. 5. 57. 9.000004] t1 = 007. 6. 4. 5. 57. 9.000004

Scilab Osa 6 4 -->t=[007. 6. 7. 8. 0. 9] t = 007. 6. 7. 8. 0. 9. -->etime(t,t1) 66560. -->t-t1 // Tarkistus 0. 0. 3. 3. - 57. - 0.000004 -->ans*[0,0,4*60*60,60*60,60,1]' 66560.