SCILAB Osa 1. Timo Mäkelä

Samankaltaiset tiedostot
MATLAB - Osa 1. Timo Mäkelä

BL40A0000 Säätötekniikan ja signaalinkäsittelyn

Matriiseista. Emmi Koljonen

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

Opiskelijan pikaopas STACK-tehtäviin. Lassi Korhonen, Oulun yliopisto

Matemaattiset ohjelmistot A. Osa 2: MATLAB

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

Ohjelman käynnistäminen

Valitse ruudun yläosassa oleva painike Download Scilab.

Matlab-perusteet. Jukka Jauhiainen. OAMK / Tekniikan yksikkö. Hyvinvointiteknologian koulutusohjelma

Matriisit, kertausta. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

Matriisit, L20. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

Matriisit, L20. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

1 Matriisit ja lineaariset yhtälöryhmät

Matriisilaskenta Laskuharjoitus 1 - Ratkaisut / vko 37

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 1 / vko 44

1.1. Määritelmiä ja nimityksiä

Harjoitus 10: Mathematica

BM20A0700, Matematiikka KoTiB2

Luvuilla laskeminen. Esim. 1 Laske

ATK tähtitieteessä. Osa 2 - IDL perusominaisuudet. 12. syyskuuta 2014

Fortran 90/95. + sopii erityisesti numeriikkaan:

Matlabperusteita, osa 1. Heikki Apiola Matlab-perusteita, osa 1. Heikki Apiola. 12. maaliskuuta 2012

Johdatus tekoälyn taustalla olevaan matematiikkaan

Talousmatematiikan perusteet: Luento 9. Matriisien peruskäsitteet Yksinkertaiset laskutoimitukset Transponointi Matriisitulo

Hannu Mäkiö. kertolasku * jakolasku / potenssiin korotus ^ Syöte Geogebran vastaus

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ä

Heikki Apiola, Juha Kuortti, Miika Oksman. 5. lokakuuta Matlabperusteita, osa 1

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

KAAVAT. Sisällysluettelo

Harjoitus 1 -- Ratkaisut

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

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

Talousmatematiikan perusteet: Luento 10. Matriisien peruskäsitteet Yksinkertaiset laskutoimitukset Matriisitulo Determinantti

DIFFERENTIAALI- JA INTEGRAALILASKENTA

Matlab-perusteet Harjoitustehtävien ratkaisut

9 Matriisit. 9.1 Matriisien laskutoimituksia

Insinöörimatematiikka D

0. Kertausta. Luvut, lukujoukot (tavalliset) Osajoukot: Yhtälöt ja niiden ratkaisu: N, luonnolliset luvut (1,2,3,... ) Z, kokonaisluvut

Insinöörimatematiikka D

Ortogonaalinen ja ortonormaali kanta

Talousmatematiikan perusteet: Luento 11. Lineaarikuvaus Matriisin aste Käänteismatriisi

FUNKTION KUVAAJAN PIIRTÄMINEN

Insinöörimatematiikka D

Kurssin loppuosassa tutustutaan matriiseihin ja niiden käyttöön yhtälöryhmien ratkaisemisessa.

Käänteismatriisin ominaisuuksia

Lineaarialgebra ja matriisilaskenta I

Numeeriset menetelmät

Java-kielen perusteet

Matemaattiset ohjelmistot 1-2 ov, 2-3 op

Yhteenlaskun ja skalaarilla kertomisen ominaisuuksia

1 Peruslaskuvalmiudet

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 3

Ohjelmoinnin perusteet Y Python

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Harjoitus 1 -- Ratkaisut

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Insinöörimatematiikka D

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Kompleksiluvut., 15. kesäkuuta /57

Tieto- ja tallennusrakenteet

Ohjelmoinnin perusteet Y Python

Scilab ohjelman alkeisohjeet

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python

811120P Diskreetit rakenteet

Vektorit. Vektorin luominen Vektorin tuominen näyttöön Vektorin koon ja alkioiden muokkaaminen Vektorin poistaminen...

TAULUKON TEKEMINEN. Sisällysluettelo

T Sovellusohjelmat Matlab osa 4: Skriptit, funktiot ja kontrollirakenteet

Algoritmit C++ Kauko Kolehmainen

Matlab- ja Maple- ohjelmointi

Ohjelmoinnin perusteet Y Python

Harjoitus 3 (viikko 39)

Ennakkotehtävän ratkaisu

Numeeriset menetelmät

Talousmatematiikan perusteet: Luento 10. Lineaarikuvaus Matriisin aste Determinantti Käänteismatriisi

2.8. Kannanvaihto R n :ssä

Seuraavassa on esitetty seuraavien laskutoimitusten suoritukset eri laskinmalleilla

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Numeeriset menetelmät

Matriisi-vektori-kertolasku, lineaariset yhtälöryhmät

Luento 4. Timo Savola. 21. huhtikuuta 2006

3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä.

A = a b B = c d. d e f. g h i determinantti on det(c) = a(ei fh) b(di fg) + c(dh eg). Matriisin determinanttia voi merkitä myös pystyviivojen avulla:

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Lineaarinen yhtälöryhmä

Algoritmit 2. Luento 3 Ti Timo Männikkö

Geogebra -koulutus. Ohjelmistojen pedagoginen hyödyntäminen

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Differentiaali- ja integraalilaskenta 1. Tietokoneharjoitus: ratkaisut

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

Matematiikka B2 - TUDI

Matriisipotenssi. Koska matriisikertolasku on liitännäinen (sulkuja ei tarvita; ks. lause 2), voidaan asettaa seuraava määritelmä: ja A 0 = I n.

Algoritmit 2. Luento 3 Ti Timo Männikkö

Kieliteknologian ATK-ympäristö Kolmas luento

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 5 / vko 48

Liukulukulaskenta. Pekka Hotokka

Transkriptio:

SCILAB Osa 1 Timo Mäkelä Sisällysluettelo 1. KÄYTTÖLIITTYMÄ...2 1.1 YLEISTÄ...2 1.2 PERUSIKKUNAT...2 1.2.1 Komentoikkuna...2 1.2.2 Helppi...2 1.2.3 Editori...3 1.3 KOMENNOT...4 1.4 MUITA IKKUNOITA...6 1.4.1 Komentohistoria...6 1.4.2 Muuttujaselain...6 1.4.3 Telakointi...7 1.5 YLEISIÄ KOMENTOJA...8 2. SKALAARIT...9 2.1 LASKUTOIMITUKSET...9 2.2 YLEISIÄ VAKIOITA...11 2.3 PERUSFUNKTIOT...14 3. MATRIISIT...17 3.1 MATRIISIEN SYÖTTÖ...17 3.2 VEKTORIEN SYÖTTÖ...21 3.3 SATUNNAISMATRIISIT...23 3.4 OSAMATRIISIT JA LOHKOMATRIISIT...24 3.5 MATRIISIOPERAATIOT...27 3.6 TAULUKKO-OPERAATIOT...30 3.7 TAULUKKOFUNKTIOT...32 4. TIETOTYYPPEJÄ...36 4.1 LISTAT...37 4.2 LUKUJEN ESITYSMUODOT...40 4.2.1 Liukuluvut...40 4.2.2 Kokonaisluvut...41 4.2.3 Rationaaliluvut...45 5. FUNKTIOT JA SKRIPTIT...47

Scilab Osa 1 2 1. KÄYTTÖLIITTYMÄ 1.1 Yleistä Scilab on avoimen lähdekoodin matematiikkaohjelma, jolla voi suorittaa numeerista laskentaa havainnollistaa asioita kuvaajilla tehdä ohjelmia. Scilab sisältää myös simulaattorin Xcos, jolla voi graafisesti lohkokaavioita käyttäen rakentaa järjestelmiä. Scilabin www-kotisivu on http://www.scilab.org/. Sieltä voi ladata ohjelman. Sieltä löytyy myös ohjelman käyttöoppaita ja hyödyllisiä linkkejä. Scilabia voidaan laajentaa moduleilla, jotka ovat käyttäjien tekemiä ohjelmapaketteja. Modulit löytyvät ohjelman kotisivulta. Tässä tekstissä esitellään Scilabin peruskäyttöä (versio: Scilab 5.3 1 ). Ohjelmointia ja Xcosia käsitellään muissa teksteissä. 1.2 Perusikkunat 1.2.1 Komentoikkuna Kun Scilab-ohjelma käynnistetään, aukeaa komentoikkuna Scilab Console. Scilab on komentopohjainen ohjelma, jossa komennot kirjoitetaan komentoikkunaan. Ohjelman valikostoja esitellään myöhemmin eri yhteyksissä. Valikkokomennolla Preferences: Show/Hide Toolbar saa painikerivistön näkyville tai pois näkyvistä. Scilabin tiedosto-operaatiot käyttävät lähtökohtanaan nykyistä hakemistoa. Valikkokomennolla File: Display Current Director tulostuu nykyinen hakemisto komentoikkunaan. File: Change Current Directory voi vaihtaa nykyistä hakemistoa Komennolla clc tyhjennetään komentoikkuna. 1.2.2 Helppi Scilabin help-toiminto käynnistyy painikkeella tai komennolla help. 1 Oikeastaan Scilab 5.3.0-beta-4

3 Scilab Osa 1 Scilabin help-ikkuna koostuu kahdesta osasta: Vasemmassa ikkunassa on hakemisto- tai hakutoiminto. Ikkunan toiminnon voi vaihtaa vasemmassa yläreunassa olevilla painikkeilla. o Painike : selataan toimintoja hakemistoikkunan kautta o Painike : etsitään toimintoja kirjoittamalla toimintoon liittyvää tekstiä. Oikeassa ikkuna on tietoa valitusta toiminnosta. Haluamastaan Scilabin komennosta saa tietoa komennolla help komento. -->help sin Komennosta voi etsiä tietoa myös help-ikkunaa käyttäen. ESIMERKKI Komennolla -->help symbols aukeaa helppi-ikkuna, jossa on Scilabin operaattorit ja niiden nimet, joita voidaan käyttää helpkomennossa. Esimerkiksi komennolla -->help colon aukeaa help-ikkuna operaattorista kaksoispiste. 1.2.3 Editori Valikkokomennolla Applications: SciNotes, painikkeella tai komennolla editor aukeaa editori SciNotes, jota käyttäen on kätevä kirjoittaa pidempiä komentojonoja tai tehdä ohjelmia. Editori tuntee Scilabin syntaksin.

Scilab Osa 1 4 Editorissa voi olla useita tiedostoja, joista välilehtipainikkeella voi valita haluamansa tiedoston. Tehdyt komennot tai ohjelmat voidaan tallentaa tiedostoon komennolla File: Save (Ctrl+s). Tiedoston tyyppi on oltava.sce tai.sci. Ohjelma tai komentojono 1 saadaan ladattua Scilabiin SciNoten valikkokomennolla Execute: file with no echo: Tiedoston komennot suoritetaan tai ohjelma ladataan Scilabiin. Tiedoston tai ohjelman komentoja ei näytetä Scilabin komentoikkunassa. Tiedosto on tallennettava ennen komennon suorittamista. Execute: file with echo: Tiedoston komennot suoritetaan tai ohjelma ladataan Scilabiin. Tiedoston tai ohjelman komennot näytetään Scilabin komentoikkunassa. Tiedostoa ei tarvitse tallentaa ennen komennon suorittamista. Execute: the selection with echo: Valitut komennot suoritetaan ja näytetään Scilabin komentoikkunassa. Komentoja ei tarvitse tallentaa. Scilabiin ladattu ohjelma voidaan ajaa omalla kutsukomennollaan. Editoriin voi tietenkin ladata aiemmin tehtyjä tiedostoja SciNoten painikkeella valikkokomennolla File: Open (Ctrl+o). Scilabin painikkeella tai valikkokomennolla File: Open a file 1.3 Komennot Komennot kirjoitetaan komentoikkunaan komentokehotteen --> perään komentoikkunaan Scilab Console. Komennot päätetään painamalla Enter-näppäintä. Tällöin komennon tulos tulee näytölle. Jos komennon perässä on puolipiste, niin komennon tulos ei tule näytölle. Tätä kannattaa käyttää varsinkin suurissa matriiseissa. Samalle riville voi kirjoittaa useita komentoja erottamalla ne pilkulla: kaikki komennot tulevat näkyviin näytölle puolipisteellä: viimeinen komento tule näkyviin näytölle. Jos viimeisen komennon perässä on puolipiste, ei sekään tule näkyviin. Jos komento ei mahdu yhdelle riville se voidaan jatkaa seuraavalla riville kirjoittamalla.. ja painamalla Enteriä: -->s=1+2+3+4+5+6+8+9+10+.. -->11+12+13+14+15+16+17+18+19+20 s = 203. 1 Näitä asioita käsitellään tarkemmin Osan 1 luvussa 5 Funktiot ja skriptit sekä tekstissä Scilab Ohjelmointi.

5 Scilab Osa 1 Komentoja annettaessa voi käyttää komennon täydennystä: kirjoitetaan komennon, muuttujan tai funktion alkuosa ja painetaan tabulaattoria. Tällöin Scilab täydentää tai antaa valikon, josta voi täydentää komentoa. Tätä kannattaa käyttää varsinkin pitkiä komentoja tai muuttujanimiä kirjoitettaessa. Scilabissa isot ja pienet kirjaimet ovat eri kirjaimia. Kommentit aloitetaan kahdella kauttaviivalla // ja ne jatkuvat rivin loppuun. Ohjelman ajon voi keskeyttää näppäimillä Ctrl+c ja antamalla sen jälkeen komento abort. Aikaisempia komentoja voi kopioida normaaliin Windows-ohjelmien tapaan. Lisäksi komentoja voi selata kätevästi näppäimillä: Näppäily Home End Toiminto edellinen komento seuraava komento oikealle vasemmalle rivin alkuun rivin loppuun Komennolla alku saadaan edellinen komento, joka alkaa merkeillä alku. Komennolla diary( tiedoston_nimi ) aloitetaan Scilabin komentojen tallentaminen nykyisessä hakemistossa sijaitsevaan tiedostoon. Tallennus lopetetaan komennolla diary(0). ESIMERKKI. Suoritetaan seuraavat Scilabin komennot. -->diary('istunto'); -->A=rand(2,2) A = 0.6653811 0.8497452 0.6283918 0.6857310 -->A^-1-8.8253142 10.936167 8.087362-8.5634121 -->diary(0)

Scilab Osa 1 6 Tämä tallentuu samanlaisena (ensimmäistä diary-komentoa lukuunottamatta) tekstitiedostoon 'istunto', josta se voidaan tekstieditorilla lukea. 1.4 Muita ikkunoita 1.4.1 Komentohistoria Valikkokomennolla Applications: Command History aukeaa komentohistoriaikkuna. Komentohistoriaikkunassa voi selata aiempia komentoja. Sieltä voi mm. valita yhden tai useamman komennon suoritukseen. kopioida komentoja editoriin SciNotes. Komennot annetaan joko valikosta Edit tai putkahdusvalikkoa käyttäen. 1.4.2 Muuttujaselain Valikkokomennolla Applications: Variable Browser aukeaa muuttujaselain. Muuttujaselaimessa voi tutkia muuttujia, niiden tyyppiä, kokoa. Kaksoisklikkaamalla muuttujan nimeä aukeaa muuttujaeditori, jossa voi tutkia muuttujien arvoja ja halutessaan muuttaa niitä.

7 Scilab Osa 1 1.4.3 Telakointi Scilabissa on mahdollista telakoida ikkunoita: Tämä tarkoittaa sitä, että useampi ikkuna on saman ikkunan sisällä. Telakointi tapahtuu vetämällä hiirellä otsikkorivistä ikkuna kohdeikkunan päälle. Kohdeikkunassa oleva viivoitus näyttää mihin kohtaan ikkuna tulee. Telakoidun ikkunan kokoa voi tietenkin muuttaa tuttuun Windows-tyyliin. Telakoinnin voi purkaa ikkunan oikeassa yläkulmassa olevalla vinonuolella. Jos ikkunat ovat päällekkäin, tulee ikkunan vasempaan alakulmaan painikkeet, jolla voi valita näkyvissä olevan ikkunan. Seuraavassa kuvassa on telakoitu komentoikkunaan Scilab Console editori-ikkuna SciNotes ja komentohistoriaikkuna Command History.

Scilab Osa 1 8 1.5 Yleisiä komentoja Seuraavaan taulukkoon on koottu joitain hyödyllisiä yleiskomentoja. Komento who_user clear clear a b clc clf scf() dir Merkitys Tulostaa työtilassa olevien käyttäjän muuttujien ja funktioiden nimet Poistaa kaikki suojaamattomat muuttujat työtilasta Poistaa muuttujat a ja b työtilasta Tyhjentää komentoikkunan Tyhjentää nykyisen grafiikkaikkunan Avataan uusi grafiikkaikkuna Tulostaa työhakemiston sisällön ESIMERKKEJÄ. -->who_user User variables are: B A x y C help home Using 551 elements ouf of 4965183 -->clear C -->who_user User variables are:

9 Scilab Osa 1 B A x y help home Using 543 elements ouf of 4965185 -->clear x y -->who_user User variables are: B A help home Using 537 elements ouf of 4965189 -->clear -->who_user User variables are: home Using 20 elements ouf of 4965197 2. SKALAARIT Scilabin keskeinen tietoalkio on matriisi. Skalaari eli luku on 1 1-matriisi: matriisi jossa on yksi rivi ja yksi sarake. Normaalisti luvut ovat liukuluja. Desimaalierotin on desimaalipiste. Itseisarvoltaan suuria ja pieniä lukuja voidaan kirjoittaa e- tai d-merkintää käyttäen: kirjaimen e tai d perässä on kokonaisluku, joka tarkoittaa luvun 10 potenssia. ESIMERKKEJÄ. -->123 123. -->3.456e4 34560. -->3.456e-4 0.0003456 -->3.456d-4 0.0003456 2.1 Laskutoimitukset Skalaareilla laskenta tapahtuu normaaliin tapaan. Laskentaoperaattorit ovat luonnolliset:

Scilab Osa 1 10 Operaatio Operandi Huomautus Yhteenlasku + Vähennyslasku Kertolasku * Kertomerkki on aina laitettava. Jakolasku / Potenssin korotus ^ tai ** -->2007+1993 4000. Monta komentoa voidaan antaa samalla rivillä erottamalla ne pilkulla: -->2^10, 2**10, 5*(3+2), (6+2)/7 1024. 1024. 25. 1.1428571 Myös puolipistettä voidaan käyttää erottimena. Tällöin vain viimeisen komennon tulos tulee näytölle eikä sekään, jos viimeinen komento päätetään puolipisteeseen. Muuttujiin voidaan tallentaa arvoja sijoituskäskyllä, jonka operaattori on =. Jos tulosta ei tallenneta muuttujaan, Scilab tallentaa tuloksen muuttujaan ans. -->5+6 11. -->7*ans 77. -->x=-15 x = - 15. -->y=7*x y = - 105. Yhdellä komennolla voi tallentaa arvoja useampaan muuttujaan: -->[x,y,z]=(1,4,7) z = 7. y = 4. x = 1. Tällaista komentoa käyttäen on helppo vaihtaa muuttujien arvot.

11 Scilab Osa 1 -->[x,y]=(y,x) y = 1. x = 4. Muuttujan tai funktion nimen on alettava kirjaimella 1 tai merkillä %, _, #,!, $,?. Seuraavat merkit voivat olla kirjaimia, numeroita tai merkkejä _, #,!, $,?. Nimi voi olla kuinka pitkä tahansa, mutta vain 24 ensimmäistä merkkiä otetaan huomioon. Isot ja pienet kirjaimet ovat eri kirjaimia. -->#1kokeilu?=5 #1kokeilu? = 5. Laskentajärjestys on normaali matematiikan laskentajärjestys. Laskentajärjestystä voidaan ohjata kaarisuluilla ( ). -->(5.2^4+7.8^3)/(5.9^2*22.1) 1.5672846 2.2 Yleisiä vakioita Scilabin vakioiden nimet alkavat %-merkillä. Seuraava taulukko sisältää yleisimmät vakiot. Vakio Merkitys %pi π %e Napierin luku e %i Imaginaariyksikkö i %eps Tietokoneen lukujen esitystarkkuus. %inf Ääretön %nan Ei luku (not a number) %t Tosi %f Epätosi %s Symbolinen muuttuja s %z Symbolinen muuttuja z -->%pi, %e %pi = 3.1415927 %e = 2.7182818 Jos imaginaariyksikkö kerrotaan luvulla, on käytettävä kertomerkkiä! -->%i^2 1 Tässä yhteydessä ääkkönen ei ole kirjain.

Scilab Osa 1 12-1. -->1/(2+%i) 0.4-0.2i -->(2+4*%i)/(3+2*%i) 1.0769231 + 0.6153846i Scilabissa reaalilukuja käsitellään kaksoistarkkuuden liukulukuina. Tämä esitysmuoto on tietokoneesta riippuva. Koska liukulukuesityksessä reaaliluvut esitetään äärellisellä määrällä bittejä, voi itseisarvoltaan tarpeeksi pienillä luvuilla a olla 1 a=1 : mutta ja -->(1+10^(-12))-1 1.000D-12 -->(1+10^-13)-1 9.992D-14 -->(1+10^-14)-1 9.992D-15 -->(1+10^-15)-1 1.110D-15 -->(1+10^(-16))-1 0. Vakio %eps ilmoittaa tietokoneen lukujen esitystarkkuuden. Se on suurin luku a, jolle 1 a 2 =1 : -->%eps %eps = 2.220D-16 -->(1+%eps)-1 2.220D-16 -->(1+%eps/2)-1 0. Vakio %inf ei ole matemaattisesti ääretön. Jossain tapauksissa kuitenkin on tarkoituksenmukaista laskea ääretöntä käyttäen. Seuraavat laskutoimitukset antavat normaalisti virheilmoituksen:

13 Scilab Osa 1 Sen sijaan -->1/0!--error 27 division by zero... -->0/0!--error 27 division by zero... -->1/%inf 0. Virheilmoitukset johtuivat poikkeuskäsittelyn muodosta, johon voidaan vaikuttaa komennolla 1 ieee. Äskeinen asetus oli -->mod=ieee() mod = 0. Muutetaan se -->ieee(2) ja lasketaan 2 -->1/0 Inf -->-1/0 -Inf Seuraava muoto ei tietenkään ole luku. -->0/0 Nan Palautetaan oletusarvo -->ieee(mod) Vakiot %t ja %f ovat loogisia vakioita, joita käsitellään myöhemmin. Symbolisia muuttujia %s ja %z käsitellään luvussa 24.2 Rationaalilausekkeet (Osa 10). ESIMERKKI. Lasketaan suoran ympyrälieriön tilavuus kaavalla V = r 2 h, missä r on pohjaympyrän säde ja h on ympyrälieriön korkeus. 1 Komennosta saa tietoa helpistä esim. antamalla komento help ieee. Tämä huomautus pätee tietenkin muihinkin käsiteltäviin komentoihin. 2 Näiden kanssa on syytä olla varovainen, sillä lausekkeen raja-arvo 0:ssa riippuu siitä, mistä päin 0:aa lähestytään. 1 x

Scilab Osa 1 14 Annetaan muuttujille arvot (päätetään komennot puolipisteellä, jolloin tulos ei tule näytölle) -->r=1.2; h=0.35; Tallennetaan tilavuus muuttujaan V: -->V=%pi*r^2*h V = 1.5833627 Muuta muuttujien r ja h arvoja ja laske uusi tilavuus. Käytä komentojen selailuun nuoli-näppäimiä. TEHTÄVIÄ 1. Laske katkaistun ympyräkartion tilavuus käyttäen kaavaa V = h a2 a b b 2 3, kun - kartion korkeus h = 0,92 m - pohjan säde a = 1,26 m - kannen säde b = 0,83 m. Sijoita arvot muuttujiin ja laske kaavaa käyttäen. Laskennan jälkeen muuta lähtöarvoja. Käytä selaamiseen nuolinäppäimiä. 2.3 Perusfunktiot Scilabissa on käytettävissä tutut matematiikan perusfunktiot. Näissä on kuitenkin joitain merkintäeroja normaaliin käytäntöön nähden. Funktio sqrt(x) exp(x) log(x), log10(x), log2(x) sin(x), cos(x), tan(x), cotg(x) asin(x), acos(x), atan(x), acot(x) sinh(x), cosh(x), tanh(x), coth(x) asinh(x), acosh(x), atanh(x), acoth(x) Merkitys neliöjuuri e-kantainen eksponenttifunktio luonnollinen logaritmi, 10-kantainen logaritmi, 2-kantainen logaritmi trigonometriset funktiot arkusfunktiot hyperboliset funktiot areafunktiot Edellä esiteltyjen trigonometristen funktioiden argumentti ja arkusfunktioiden arvot ovat radiaaneissa. ESIMERKKEJÄ. -->sqrt(2) 1.4142136

15 Scilab Osa 1 -->log(%e) 1. -->sin(%pi/2) 1. -->atan(1) 0.7853982 Koska on 180 = π rad, 1 = 180 rad. Siis, jos haluaa laskea asteissa, voi määritellä Tällöin -->deg=%pi/180; muuttujalla deg kertominen muuntaa asteet radiaaneiksi muuttujalla deg jakaminen muuntaa radiaanit asteiksi -->sin(45*deg) 0.7071068 -->cos(60*deg) 0.5 -->atan(1)/deg 45. Scilabista löytyy myös trigonometriset funktiot ja niiden käänteisfunktiot, joissa laskenta tapahtuu asteissa. Niiden nimet eroavat edellä esiteltyjen trigonometristen funktioiden nimistä siten, nimen perään on lisätty d : sind, cosd, tand, cotd, asind, acosd, atand, acotd. Nämä funktiot on tehty siten, että joissain tilanteissa ne laskevat arvot tarkasti: ->sin(180*deg) 1.225D-16 -->sind(180) 0. Seuraava taulukko sisältää lisää perusfunktioita:

Scilab Osa 1 16 Funktio abs(x) sign(x) atan(y,x) real(z), imag(z) Merkitys itseisarvo etumerkki pisteen (x, y) paikkavektorin vaihekulma. Huom. järjestys! kompleksiluvun z reaaliosa, imaginaariosa ESIMERKKEJÄ (jatkoa). -->sign(3),sign(-15) 1. - 1. -->atan(4,3)/deg 53.130102 -->z=3+4*%i; -->real(z), imag(z) 3. 4. Oikeastaan sign(x) on lausekkeen x x arvo: -->sign(z) 0.6 + 0.8i -->z/abs(z) 0.6 + 0.8i Kuitenkin -->sign(0) 0. Lukujen kokonaisluvuksi pyöristämiseen on käytettävissä seuraavia funktioita: Funktio Merkitys round(x) Pyöristäminen lähimpään kokonaislukuun 1 fix(x) tai int(x) floor(x) ceil(x) Kokonaisluvuksi pyöristäminen kohti nollaa eli desimaaliluvun kokonaisosa. Lattiafunktio: alaspäin kokonaisluvuksi pyöristäminen Kattofunktio: ylöspäin kokonaisluvuksi pyöristäminen 1 Desimaaliin.5 päättyvä luku pyöristetään siten, että luvun itseisarvo pyöristyy ylöspäin.

17 Scilab Osa 1 ESIMERKKEJÄ. -->round(-2.7), round(2.7) - 3. 3. -->fix(-2.7), fix(2.7) - 2. 2. -->floor(-2.7), floor(2.7) - 3. 2. -->ceil(-2.7), ceil(2.7) - 2. 3. TEHTÄVIÄ 1. Laske lausekkeiden arvot: 33,2 33,3 3 e 2,05 sin(30) sin(30 ) 2,3 4,2 arccos 3 2 (esitä tulos asteina) 3. MATRIISIT Matriisi on suorakulmion muotoinen lukutaulukko. Jos matriisissa on m riviä ja n saraketta, matriisin sanotaan olevan kertalukua m n. Puhutaan myös m n-matriisista. Erityisesti luvut eli skalaarit ovat 1 1-matriiseja. vaakavektorit ovat matriiseja, joissa on yksi rivi. pystyvektorit ovat matriiseja, joissa on yksi sarake. Matriisin alkiot a ij indeksoidaan siten, että ensimmäinen indeksi i ilmoittaa rivin toinen indeksi j ilmoittaa sarakkeen. Indeksointi alkaa luvusta 1. 3.1 Matriisien syöttö Matriisit syötetään hakasulkujen väliin vaakariveittäin seuraavasti: rivin alkiot erotetaan toisistaan välilyönnillä tai pilkulla rivit erotetaan toisistaan Enterin painalluksella tai puolipisteellä.

Scilab Osa 1 18 -->A=[1 2 3 -->4 5 6 -->7 8 9] A = 1. 2. 3. 4. 5. 6. 7. 8. 9. -->B=[-3,0,2;5,-1,7] B = - 3. 0. 2. 5. - 1. 7. Syötetään vielä vaaka- ja pystyvektorit -->u=[2 0-3] u = 2. 0. - 3. -->v=[1;-4;6] v = 1. - 4. 6. Matriisin alkioita syötettäessä lausekkeissa ei saa olla ylimääräisiä välilyöntejä, koska matriisin alkiot voidaan erottaa toisistaan myös välilyönnillä. -->C=[2+%e 2+3*%i] // Ei ylimääräisiä välilyöntejä C = 4.7182818 2. + 3.i -->C=[2 + %e 2 + 3*%i] // Operaattorit erotettu välilyönneillä: oikein C = 4.7182818 2. + 3.i -->C=[2 +%e 2 +3*%i] // Ylimääräisiä välilyöntejä: väärin! C = 2. 2.7182818 2. 3.i Merkintä [ ] tarkoittaa tyhjää matriisia, jossa ei ole yhtään alkiota. Scilabissa voidaan määritellä tyhjä matriisi, jota voidaan täydentää myöhemmin. Määrittelemällä matriisi tyhjäksi matriisiksi, tyhjennetään matriisin sisältö ja vapautetaan matriisin vaatima tila. -->C=[] C = [] Matriisin alkioihin viitataan ilmoittamalla suluissa pilkulla erotettuna rivi ja sarake, jolla alkio sijaitsee. Matriisin A 2. rivin 1. alkio: -->A(2,1) 4. Vektorin alkioihin voidaan viitata yhdellä indeksillä: -->u(3)

19 Scilab Osa 1-3. Matriisin riveihin ja sarakkeisiin viitataan seuraavasti: A(i, :) matriisin A i:s rivi A(:, j) matriisin A j:s sarake Matriisin A 2. rivi ja 3. sarake: -->A(2,:) 4. 5. 6. -->A(:,3) 3. 6. 9. Sisäisesti matriisi on tallennettu pystyvektorina asettamalla sarakkeet peräkkäin. Matriisin alkioihin voidaan siis aina viitata myös yhdellä indeksillä. Komento A(:) tulostaa matriisin pystyvektorina. -->A A = 1. 2. 3. 4. 5. 6. 7. 8. 9. -->A(:) 1. 4. 7. 2. 5. 8. 3. 6. 9. -->A(6) 8. Matriisin kertaluku saadaan selville komennolla size. Komento antaa tulokseksi 1 2-matriisin, jonka alkiot sisältävät matriisin kertaluvun. -->size(b) 2. 3. Vektorin dimensio saadaan selville komennolla length: -->length(v) 3. -->length(a)

Scilab Osa 1 20 9. Seuraava komento tallentaa matriisin rivien määrän muuttujaan m ja sarakkeiden määrän muuttujaan n. -->[m,n]=size(b) n = 3. m = 2. Komennolla tai matrix(v, m, n) matrix(v, [m, n]) muutetaan matriisi tai vektori, jossa on m n alkiota m n-matriisiksi. Muunnos tehdään sarakkeittain. -->v=[1,2,3,4,5,6] v = 1. 2. 3. 4. 5. 6. -->matrix(v,2,3) 1. 3. 5. 2. 4. 6. -->matrix(v,[3,2]) 1. 4. 2. 5. 3. 6. Seuraavassa taulukossa on esitetty joidenkin erikoismatriisien luontikomentoja: Komento eye(m,n) eye(a) eye() zeros(m,n) zeros(a) ones(m,n) ones(a) Toiminto m n-yksikkömatriisi: matriisi, jonka lävistäjällä on ykkösiä, muualla nollia yksikkömatriisi, jolla on sama kertaluku kuin matriisilla A yksikkömatriisi, jolla on sama kertaluku kuin siihen lisättävällä matriisilla m n-matriisi, jonka alkiot ovat nollia nollamatriisi, jolla on sama kertaluku kuin matriisilla A m n-matriisi, jonka alkiot ovat ykkösiä matriisi, jonka alkiot ovat ykkösiä ja jolla on sama kertaluku kuin A:lla ESIMERKKEJÄ. -->eye(3,3) 1. 0. 0.

21 Scilab Osa 1 0. 1. 0. 0. 0. 1. -->ones(2,2)-eye() 0. 1. 1. 0. -->x=[1,4,-1,5]; zeros(x) 0. 0. 0. 0. -->17*ones(1,9) 17. 17. 17. 17. 17. 17. 17. 17. 17. Saman skalaarimuuttujan toisto voidaan muodostaa komentoa ones käyttäen: -->ones(1,10) 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. -->a=7; -->a(ones(1,10)) 7. 7. 7. 7. 7. 7. 7. 7. 7. 7. -->s='einstein' s = Einstein //Tämä on merkkijono -->s(ones(3,5)) //Merkkijonomatriisi!Einstein Einstein Einstein Einstein Einstein!!!!Einstein Einstein Einstein Einstein Einstein!!!!Einstein Einstein Einstein Einstein Einstein! TEHTÄVIÄ. 1. Muodosta 15 7-matriisi, jonka kaikki alkiot ovat lukuja 3. 3.2 Vektorien syöttö Scilabissa kaksoispisteellä on tärkeä merkitys. Edellä oli jo esillä kuinka matriisin rivi- ja sarakevektorit muodostetaan kaksoispistettä käyttäen. Myös vektoreiden muodostamisessa voidaan käyttää kaksoispistettä. Vaakavektoreita voidaan luoda seuraavasti: a:b on vektori, jonka koordinaatit muodostavat lukujonon a,a 1,a 2, lukuun b asti. Tuloksena on tyhjä matriisi [ ], jos a b. a: :b on vektori, jonka koordinaatit muodostavat lukujonon a,a, a 2, lukuun b asti. Tuloksena on tyhjä matriisi [ ], jos lisäys on rajoihin nähden vääränmerkkinen.

Scilab Osa 1 22 linspace(a,b) on vektori, joka koostuu 100:sta välillä [a, b] tasavälisesti olevasta luvusta 1, joista ensimmäinen on a ja viimeinen on b. linspace(a,b,n) on vektori, joka koostuu n:sta välillä [a, b] tasavälisesti olevasta luvusta. Pystyvektori saadaan transponoimalla vaakavektori: jos v on vaakavektori, niin v on pystyvektori 2. ESIMERKKEJÄ. -->v1=3:9 v1 = 3. 4. 5. 6. 7. 8. 9. -->v2=9:-1:3 v2 = 9. 8. 7. 6. 5. 4. 3. -->v1+v2 12. 12. 12. 12. 12. 12. 12. -->2.1:8.9 2.1 3.1 4.1 5.1 6.1 7.1 8.1 -->1.2:0.5:4.1 1.2 1.7 2.2 2.7 3.2 3.7 -->linspace(-1.7,2.8,6) - 1.7-0.8 0.1 1. 1.9 2.8 -->(0:3:12)' 0. 3. 6. 9. 12. TEHTÄVIÄ. 1. Muodosta vaakavektori, jonka alkiot ovat nousevassa järjestyksessä välillä [ 2, ] luvun 0,3 välein. 2. Muodosta vaakavektori, jonka alkiot ovat laskevassa järjestyksessä välillä [ 2, ] luvun 0,3 välein. 3. Muodosta pystyvektori, jonka alkioiden määrä on 20 ja alkiot ovat tasavälisesti välillä [1, 3]. 1 Logaritmisesti tasan jakautuneita lukuja voidaan luoda logspace-komennolla (ks. luku 6.3, Osa 2) 2 Transpoosia käsitellään tarkemmin myöhemmin.

23 Scilab Osa 1 3.3 Satunnaismatriisit Satunnaislukujen ja satunnaismatriisien muodostamiseen voidaan käyttää komentoa rand. rand() antaa satunnaisluvun rand(m,n) antaa m n-satunnaismatriisin rand(a) antaa satunnaismatriisin, jolla on sama kertaluku kuin matriisilla A. Satunnaisluvut ovat oletusarvoisesti tasan jakautuneita välillä [, 1] rand(, normal ) antaa (0,1)-normaalijakauteita satunnaislukuja 0. Komennon muoto ESIMERKKEJÄ. Muodostetaan 3 5-matriisi, jonka alkiot ovat tasan jakautuneet välillä [ 10,10]. -->a=-10; b=10; -->x=a+(b-a)*rand(3,5) //Skalaarin lisääminen ks. luku 3.4 x = - 3.3934582 6.9949047-8.6325193 4.5270135-5.3585042 3.3076221 3.7146204 1.2169721-6.0297123-5.3755256 2.5678358 7.5643296 3.2471387 0.8851463-5.6707347 Muodostetaan 2 7-satunnaismatriisi, jonka alkiot ovat tasan jakautuneita kokonaislukuja välillä 0..9: -->floor(10*rand(2,7)) 2. 4. 0. 2. 2. 7. 1. 6. 9. 4. 4. 1. 2. 6. Muodostetaan satunnaisvektori, jonka alkiot ovat tasan jakautuneita kokonaislukuja välillä 5..12. Koska komento 5+(13-5)*rand tuottaa välillä [5,13] tasan jakautuneita satunnaislukuja, saadaan välillä 5..12 tasan jakautuneita kokonaislukuja komennolla floor(5+8*rand). Muodostetaan 7-vektori: -->floor(5+8*rand(1,7)) 6. 10. 11. 8. 8. 12. 5. Satunnaislukugeneraattori lähtee aina samasta siemenarvosta 0 liikkeelle. Siemenarvon voi muuttaa komennolla rand( seed,n), missä n on kokonaisluku. Komento rand( seed ) antaa tulokseksi nykyisen siemenarvon. Satunnaislukugeneraattorin voi alustaa satunnaiseen tilaan komennolla 1 -->rand('seed',getdate('s')) ESIMERKKEJÄ. Muodostetaan samat satunnaisluvut kahteen kertaan 1 Komento getdate('s') antaa ajan sekunteina 1.1.1970 alkaen. Satunnaislukugeneraattorin alustusta ohjelmasilmukassa on syytä välttää ks. monisteen Ohjelmointi lukua 3.1.2.

Scilab Osa 1 24 -->n=rand('seed'); -->rand(1,5) 0.9378157 0.3820527 0.4479732 0.0429794 0.3488491 -->rand('seed',n); -->rand(1,5) 0.9378157 0.3820527 0.4479732 0.0429794 0.3488491 TEHTÄVIÄ 1. Muodosta 3 4-matriisi, jonka alkiot ovat tasan jakautuneet välillä [2,5]. 2. Muodosta 1 9-satunnaismatriisi, jonka alkiot ovat tasan jakautuneita kokonaislukuja välillä 4..10. 3. Toteuta Scilabilla lottoarvonta. Lotossa arvotaan 7 lukua väliltä 1 39: Muodosta satunnainen 7-vektori, jonka alkiot ovat satunnaisia lottonumeroita. Jos joukossa on samoja lukuja suorita arvonta uudestaan. Lajittele luvut nousevaan suuruusjärjestykseen komennolla gsort(vektori,'g','i') (ks. helppi). Lottoarvonnassa on tietenkin syytä alussa alustaa satunnaislukugeneraattori satunnaiseen tilaan. 4. Toteuta Scilabilla veikkausarvonta. Veikkauksessa on 12 kohdetta, joissa kussakin jokin merkinnöistä 1, x, 2. Toteuta tämä Scilabilla korvaamalla x luvulla 0. Muodosta siis satunainen 12-pystyvektori, jonka alkiot ovat satunnaislukuja 0, 1, 2. Tässäkin on tietenkin syytä alussa alustaa satunnaislukugeneraattori satunnaiseen tilaan. 3.4 Osamatriisit ja lohkomatriisit Matriisin A osamatriisilla tarkoitetaan matriisia, joka on muodostettu matriisin A alkioista. Matriisin A alimatriisi on osamatriisi, jossa alkioiden järjestys on sama kuin matriisissa A. Seuraavaan taulukkoon on koottu m n-matriisin A osamatriisin muodostuskomentoja. Osa näistä on ollut esillä jo aiemmin. Komento A(i,j) A(i,:) A(:,j) A(i:k,:) A(:,j:k) Toiminto i:nnen rivin ja j:nnen sarakkeen alkio i:s rivi j:s sarake Alimatriisi, joka koostuu riveistä i, i+1,, k Alimatriisi, joka koostuu sarakkeista j, j+1,, k A(i:k,j:p) Alimatriisi, joka koostuu riveistä i k ja sarakkeista j p. A(:) A(j:k) A([i1,i2, ],:) A(:,[j1,j2, ]) A([i1,i2, ],[j1,j2, ]) Pystyvektori, jossa matriisin A sarakkeet ovat peräkkäin. Pystyvektori, joka koostuu vektorin A(:) alkioista j k. Osamatriisi, joka koostuu riveistä i1, i2, Osamatriisi, joka koostuu sarakkeista j1, j2, Osamatriisi, joka koostuu riveistä 1 i1, i2, ja sarakkeista j1, j2, 1 Sama rivi-indeksi tai sarake-indeksi voi esiintyä useampaan kertaan...

25 Scilab Osa 1 ESIMERKKEJÄ. -->A=matrix(1:9,[3,3]) A = 1. 4. 7. 2. 5. 8. 3. 6. 9. -->A(2:3,:) 2. 5. 8. 3. 6. 9. -->A([3,2],1:2) 3. 6. 2. 5. Merkintä $ tarkoittaa indeksin viimeistä arvoa, $ 1 viimeistä edellistä jne. -->A($,:) 3. 6. 9. -->A(:,$-1) 4. 5. 6. Vektorin alkioiden järjestys voidaan kääntää seuraavalla tavalla: -->v=floor(10*rand(1,9)) v = 7. 2. 1. 4. 6. 0. 6. 6. 3. -->v($:-1:1) 3. 6. 6. 0. 6. 4. 1. 2. 7. Matriisista A poistetaan i:s rivi komennolla A(i,:) = [ ] j:s sarake komennolla A(:,j) = [ ] -->A(2,:)=[] A = 1. 4. 7. 3. 6. 9. Matriisin osa voidaan muuttaa toiseksi sijoituskäskyllä. Sijoituskäskyllä voidaan myös muuttaa matriisin kokoa. Tällöin määrittelemättömät alkiot saavat arvon nolla. -->A=[1:4;5:8] A = 1. 2. 3. 4. 5. 6. 7. 8.

Scilab Osa 1 26 -->A(:,3:4)=eye(2,2) A = 1. 2. 1. 0. 5. 6. 0. 1. -->A(3,6)=-3 A = 1. 2. 1. 0. 0. 0. 5. 6. 0. 1. 0. 0. 0. 0. 0. 0. 0. - 3. Lohkomatriisi on matriisi, jonka alkiot ovat matriiseja. Alkioina olevien matriisien on oltava kertaluvultaan yhteen sopivia. Näin muodostuu isompi matriisi, jonka alimatriiseja lohkot ovat. Lohkomatriiseja muodostetaan samaan tapaan kuin tavallisia matriiseja. -->B=[1 2; 3 4] B = 1. 2. 3. 4. -->[B, zeros(b); eye(b), 10*B] 1. 2. 0. 0. 3. 4. 0. 0. 1. 0. 10. 20. 0. 1. 30. 40. Sopivaa kertalukua olevia matriiseja voidaan asettaa päällekkäin käyttäen operaattorina rivinvaihtomerkkiä ; peräkkäin käyttäen operaattorina välilyöntiä tai, Kyseessä on siis lohkomatriisin muodostaminen. -->A=rand(2,3) A = 0.9745474 0.6320922 0.5891891 0.8040996 0.5161199 0.1245722 -->B=ones(A) B = 1. 1. 1. 1. 1. 1. -->C=[A;B] C = 0.9745474 0.6320922 0.5891891 0.8040996 0.5161199 0.1245722 1. 1. 1. 1. 1. 1. -->D=[A,B] D = 0.9745474 0.6320922 0.5891891 1. 1. 1. 0.8040996 0.5161199 0.1245722 1. 1. 1. Tyhjän matriisin [ ] alle tai perään voidaan asettaa millainen matriisi tahansa: -->[[],D] 0.9745474 0.6320922 0.5891891 1. 1. 1.

27 Scilab Osa 1 TEHTÄVIÄ. 0.8040996 0.5161199 0.1245722 1. 1. 1. 1. Muodosta lohkomatriiseja käyttäen kuvan kaltainen matriisi 1 0 0 5 5 5 0 1 0 5 5 5 0 0 1 5 5 5 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 jonka lohkot ovat kertalukua 7 7. 2. Muodosta komento, joka a) kääntää matriisin sarakevektorit vastakkaiseen järjestykseen. b) kääntää matriisin rivivektorit vastakkaiseen järjestykseen Testaa tulos satunnaismatriisilla. 3.5 Matriisioperaatiot Seuraavassa esitellään matriisilaskennan perusoperaatiot yhteenlasku, kertolasku ja transpoosi. Esimerkeissä käytetään seuraavia matriiseja: -->A=[1 2 3; 4 5 6; 7 8 9] A = 1. 2. 3. 4. 5. 6. 7. 8. 9. -->B=[3-2 -1; 4 5-2; 1 10 4] B = 3. - 2. - 1. 4. 5. - 2. 1. 10. 4. Matriisien yhteenlasku ja vähennyslasku on määritelty, jos matriiseilla on sama kertaluku. Yhteenlaskussa vastinalkiot lasketaan yhteen; vähennyslaskussa vastinalkiot vähennetään. -->A+B 4. 0. 2. 8. 10. 4. 8. 18. 13. Yhteenlaskun erikoistapauksena on skalaarin lisääminen tai vähentäminen. Tällöin skalaari lisätään jokaiseen alkioon tai vähennetään jokaisesta alkiosta. -->A+10 11. 12. 13. 14. 15. 16. 17. 18. 19.

Scilab Osa 1 28 Matriisin kertolasku on määritelty, jos kertojassa on yhtä monta saraketta kuin kerrottavassa rivejä. Tulon AB i:nnen rivin ja j:nnen sarakkeen alkio on A:n i:nnen rivin ja B:n j:nnen sarakkeen vastinalkioiden tulojen summa. Tulossa AB on yhtä monta riviä kuin matriisissa A yhtä monta saraketta kuin matriisissa B Kertolaskun merkkinä on *. -->A*B 14. 38. 7. 38. 77. 10. 62. 116. 13. Kertolaskun erikoistapaus on skalaarilla kertominen tai jakaminen. Tällöin matriisin jokainen alkio kerrotaan tai jaetaan skalaarilla. -->-10*A - 10. - 20. - 30. - 40. - 50. - 60. - 70. - 80. - 90. -->A/5 0.2 0.4 0.6 0.8 1. 1.2 1.4 1.6 1.8 Neliömatriisin positiivisella kokonaislukupotenssilla tarkoitetaan neliömatriisin kertomista itsellään seuraavasti: A k = k kpl. Potenssiin korotuksen merkkinä on ^ tai **. A A A -->A^3 468. 576. 684. 1062. 1305. 1548. 1656. 2034. 2412. -->A*A*A 468. 576. 684. 1062. 1305. 1548. 1656. 2034. 2412. Scilabissa on kaksi matriisien jakolaskua: oikealta jako / ja vasemmalta jako \. Oikealta jako A/B on määritelty, jos matriisien A ja B sarakkeiden määrä on sama. Tuloksena on sellainen matriisi X, joka toteuttaa yhtälön 1 XB=A. Jos matriisilla B on käänteismatriisi, on A/B = A B 1. Vasemmalta jako 2 A\B on määritelty, jos matriisien A ja B rivien määrä on sama. Tuloksena on sellainen matriisi X, joka toteuttaa yhtälön AX=B. Jos matriisilla A on käänteismatriisi, on 1 mikäli mahdollista. En täsmälleen tiedä, mikä ratkaisu matemaattisesti on. 2 Vasemmalta jakoa käsitellään tarkemmin Luvussa 15 Yhtälöryhmän ratkaiseminen (Osa 4)

29 Scilab Osa 1 A\B = A 1 B, muuten tulos on yhtälön pienimmän neliösumman ratkaisu. -->A=[1 2 3; 5 6 7] A = 1. 2. 3. 5. 6. 7. -->B=[3 6; 1-5] B = 3. 6. 1. - 5. -->X=A\B X = - 2.25-7.125 0. 0. 1.75 4.375 -->A*X // Tarkistus 3. 6. 1. - 5. Matriisin transpoosissa muutetaan rivit sarakkeiksi (tai sarakkeet riveiksi). Reaalialkioisen matriisin A transpoosi on A : -->A=[-3,0,4;5,1,-2] A = - 3. 0. 4. 5. 1. - 2. -->A' - 3. 5. 0. 1. 4. - 2. Matriisi, jonka sarakkeina ovat annetut vektorit: -->C=[1:4;5:8;9:12]' C = 1. 5. 9. 2. 6. 10. 3. 7. 11. 4. 8. 12. Oikeastaan A muodostaa matriisin A alkioista myös kompleksikonjugaatit. Pelkkä transpoosi muodostetaan seuraavalla komennolla A. : -->A=[-%i, 2+5*%i; 7+2*%i,4] A = - i 2. + 5.i 7. + 2.i 4. -->A' i 7. - 2.i 2. - 5.i 4.

Scilab Osa 1 30 -->A.' - i 7. + 2.i 2. + 5.i 4. Reaalialkioisille matriiseille nämä ovat tietenkin samat. 3.6 Taulukko-operaatiot Aritmeettisia operaatioita, jotka suoritetaan kahden matriisin vastinalkioiden kesken sanotaan taulukko-operaatioiksi tai alkioittaisiksi operaatioiksi. Ne vastaavat taulukkolaskennassa käytettyjä operaatioita. Taulukko-operaatioissa matriisien kertalukujen on oltava samoja. Taulukkooperaatio saadaan laittamalla piste operaattorin eteen. Esimerkeissä käytetään seuraavia matriiseja: -->A=[1 2;3 4] A = 1. 2. 3. 4. -->B=[5 6;2-3] B = 5. 6. 2. - 3. Matriisien yhteen- ja vähennyslasku ovat myös taulukko-operaatioita. Alkioittaisessa tulossa lasketaan vastinalkioiden tulo. Operaatiota merkitään.* -->A.*B 5. 12. 6. - 12. Alkioittaisessa jakolaskussa lasketaan vastinalkioiden osamäärä. Alkioittaisia jakolaskuja on kaksi: jako oikealta./ ja jako vasemmalta.\ -->A./B 0.2 0.3333333 1.5-1.3333333 -->A.\B 5. 3. 0.6666667-0.75 Alkioittaisen jakolaskun erikoistapaus on skalaarin jakaminen matriisilla: tuloksena on jakajamatriisin kokoinen matriisi, joka saadaan jakamalla skalaari alkioittain jakajamatriisilla. Jos kokonaisluku jaetaan alkioittain vektorilla tai matriisilla on luku päätettävä desimaalipisteeseen, jolloin jakomerkin eteen tulee kaksi pistettä (../) tai laitettava välilyönti ennen jakolaskuoperaattoria./ Tämä johtuu siitä, että muuten operaatiolla on yhtälöryhmän ratkaisemiseen liittyvä tulkinta. -->x=1:5

31 Scilab Osa 1 x = 1. 2. 3. 4. 5. -->1./x 0.0181818 0.0363636 0.0545455 0.0727273 0.0909091 // Väärin tässä yhteydessä! -->1../x // Oikein 1. 0.5 0.3333333 0.25 0.2 -->1./x // Oikein 1. 0.5 0.3333333 0.25 0.2 -->a=1 a = 1. -->a./x 1. 0.5 0.3333333 0.25 0.2 Alkioittaisessa potenssiin korotuksessa korotetaan kantamatriisi alkioittain eksponenttimatriisin osoittamaan potenssiin. Operaatiota merkitään.^ -->A.^B 1. 64. 9. 0.015625 Alkioittaiseen potenssiin korottamisen erikoistapauksia on kaksi: eksponentti on skalaari. Tällöin matriisin jokainen alkio korotetaan skalaarin osoittamaan potenssiin. kantamatriisi on skalaari. Tällöin tuloksena on eksponenttimatriisin kokoinen matriisi, joka saadaan korottamalla kantaluku alkioittain eksponenttimatriisin osoittamaan potenssiin. -->A.^2 1. 4. 9. 16. -->2.^A 2. 4. 8. 16. //Välilyönti ^-merkin jälkeen! TEHTÄVIÄ. 1. Muodosta vektori x, joka koostuu välillä 1 10 olevista luvuista 0,5:n välein. Luvut ovat siis 1; 1,5; 2; 2,5;, 10. Laske seuraavien funktioiden arvot vektorin x alkioilla. a) 1 x b) x 2 c) x sin x d) 5 x 3 2 x 2 e x

Scilab Osa 1 32 3.7 Taulukkofunktiot Taulukkofunktio on funktio, joka operoi matriisiin alkioittain. Tällaisia ovat luvussa 2.3 esitellyt matematiikan perusfunktiot. -->A=[1 2;3 4] A = 1. 2. 3. 4. -->sqrt(a) 1. 1.4142136 1.7320508 2. -->exp(a) 2.7182818 7.3890561 20.085537 54.59815 -->floor(ans) 2. 7. 20. 54. -->sin([%pi,0; %pi/2,-%pi/4]) 1.225D-16 0. 1. - 0.7071068 Esitetään vielä muutama taulukkolaskennan tyyppinen funktio: Funktio sum(a) prod(a) max(a), min(a) mean(a) stdev(x) cumsum(a) gsort(a) Toiminto matriisin A alkioiden summa matriisin A alkioiden tulo matriisin A suurin, pienin alkio matriisin A alkioiden keskiarvo matriisin A alkioiden keskihajonta matriisin A alkioiden kumuloituva summa vektorina. matriisin A alkioiden lajittelu laskevaan suuruusjärjestykseen. Tulos esitetään sarakkeittain. Vektorille x kumuloituva summa cumsum(x) tarkoittaa seuraavaa vektoria cumsum(x) = [x(1), x(1)+x(2), x(1)+x(2)+x(3), ]. Matriisille kumuloituva summa lasketaan sarakkeittain edeten. Tuloksena on samaa kertalukua oleva matriisi. ESIMERKKEJÄ. Käytetään esimerkeissä satunnaismatriiseja, joissa alkiot ovat välillä -9 9. -->x=floor(-9+19*rand(1,10)) x =

33 Scilab Osa 1 Komento 1. 9. 5. - 9. 2. - 4. - 5. 2. - 7. 2. -->sum(x) - 4. -->max(x) 9. -->cumsum(x) 1. 10. 15. 6. 8. 4. - 1. 1. - 6. - 4. -->A=matrix(x,[2,5]) A = 1. 5. 2. - 5. - 7. 9. - 9. - 4. 2. 2. -->cumsum(a) 1. 15. 8. - 1. - 6. 10. 6. 4. 1. - 4. -->cumsum(a(:))' 1. 10. 15. 6. 8. 4. - 1. 1. - 6. - 4. -->gsort(a) 9. 2. 2. - 4. - 7. 5. 2. 1. - 5. - 9. sum(a, r ) laskee matriisin A kunkin sarakevektorin alkioiden summan ja esittää tuloksen rivivektorina. sum(a, c ) laskee matriisin A kunkin rivivektorin alkioiden summan ja esittää tuloksen sarakevektorina. Vastaavaa komennon muotoa voidaan käyttää myös muille taulukon funktioille. ESIMERKKEJÄ. Edellisen esimerkin matriisille A: -->sum(a,'r') 10. - 4. - 2. - 3. - 5. -->max(a,'r') 9. 5. 2. 2. 2. -->gsort(a,'c') 5. 2. 1. - 5. - 7. 9. 2. 2. - 4. - 9.

Scilab Osa 1 34 Komento gsort(a, g, i ) lajittelee matriisin A alkiot nousevaan suuruusjärjestykseen. -->gsort(a,'g','i') - 9. - 5. 1. 2. 5. - 7. - 4. 2. 2. 9. Kertomafunktio n! voidaan laskea tulona prod(1:n) tai komennoilla factorial(n) tai gamma(n+1) Komento -->prod(1:11) 39916800. -->factorial(11) 39916800. -->gamma(12) 39916800. modulo(m, n) muodostaa lukujen m ja n jakolaskun m/n jakojäännöksen, jonka tulos on samanmerkkinen kuin m. Komento pmodulo(m, n) muodostaa jakojäännöksen, jonka tulos on samanmerkkinen kuin n. Näissä komennoissa m ja n voivat olla myös samaa kertalukua olevia matriiseja tai n luku. ESIMERKKEJÄ. -->m=[12,-12,12,-12]; -->n=[5,5,-5,-5]; -->modulo(m,n) 2. - 2. 2. - 2. -->pmodulo(m,n) 2. 3. - 3. - 2. -->modulo(12.4,5.1) 2.2 -->m=[34,56.2;52,9.3] m = 34. 56.2 52. 9.3 -->n=[7,8;3.4,5]

35 Scilab Osa 1 n = 7. 8. 3.4 5. -->modulo(m,n) 6. 0.2 1. 4.3 -->modulo(100:110,5) 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 0. ESIMERKKI. Komennolla testmatrix voidaan muodostaa tiettyjä erikoismatriiseja. Esimerkiksi komento testmatrix( magi,n) tulostaa taikaneliön. Tämä on matriisi, jossa lukujen summa on sama joka vaaka- ja pystyriveillä. Myös neliön lävistäjien summa on sama. Muodostetaan 5 5-taikaneliö ja tarkistetaan, että se todella on taikaneliö. Tarkistuksessa käytetään komentoa diag, joka määrittää matriisin lävistäjäalkiot. -->A=testmatrix('magi',5) A = 17. 24. 1. 8. 15. 23. 5. 7. 14. 16. 4. 6. 13. 20. 22. 10. 12. 19. 21. 3. 11. 18. 25. 2. 9. -->sum(a,'r') // Sarakkeiden summat 65. 65. 65. 65. 65. -->sum(a,'c') 65. 65. 65. 65. 65. -->sum(diag(a)) 65. // Rivien summat // Lävistäjän alkioiden summa -->sum(diag(a(:,$:-1:1))) // Antilävistäjän alkioiden summa 65. TEHTÄVIÄ 1. Muodosta 7 7-satunnaismatriisi, jonka alkiot ovat kokonaislukuja välillä 0 16. Määritä matriisin sarakkeiden ja rivien keskiarvot. Määritä myös matriisin kaikkien alkioiden keskiarvo. Tarkista tämä laskemalla kaikkien alkioiden summa ja jakamalla se matriisin alkioiden määrällä.

Scilab Osa 1 36 2. Selvitä kokeilemalla, mikä on suurin luku, jonka kertoma voidaan laskea Scilabilla? 4. TIETOTYYPPEJÄ Päätietotyyppi Scilabissa on matriisi. Tämän lisäksi Scilabissa on monia muita tietotyyppejä. Komennolla type(x) saadaan objektin x tyyppi selville. Komento antaa tulokseksi kokonaisluvun, joka ilmoittaa objektin tyypin seuraavasti: 1 : real or complex constant matrix. 2 : polynomial matrix. 4 : boolean matrix. 5 : sparse matrix. 6 : sparse boolean matrix. 7 : Matlab sparse matrix. 8 : matrix of integers stored on 1 2 or 4 bytes. 9 : matrix of graphic handles. 10 : matrix of character strings. 11 : un-compiled function (Scilab code). 13 : compiled function (Scilab code). 14 : function library. 15 : list. 16 : typed list (tlist). 17 : matrix oriented typed list (mlist). 128 : pointer. 129 : size implicit polynomial used for indexing. 130 : Scilab intrinsic (C or Fortran code). Tämä luettelo sisältänee Scilabin tietotyypit. Komento typeof(x) tulostaa objektin x tyypin merkkijonona. Vaihtoehdot ovat seuraavat: "constant" if object is a real or complex constant matrix. "polynomial" if object is a polynomial matrix. "function" if object is a function (Scilab code). "handle" if object is an handle. "string" if object is a matrix made of character strings. "boolean" if object is a boolean matrix. "list" if object is a list. "rational" if object is a rational matrix (transfer matrix). "state-space" if object is a state-space model. "sparse" if object is a (real) sparse matrix. "boolean sparse" if object is a boolean sparse matrix. "hypermat" if object is an hypermatrix (N-dimension array with N >=3). "st" if object is a structure array. "ce" if object is a cell array. the first string in the first list entry if object is a tlist or mlist. "fptr" if object is a Scilab intrinsic (C or Fortran code). "pointer" if object is a pointer. "size implicit" if object is a size implicit polynom used for indexing. "library" if object is function library. "int8" or "uint8" or "int16" or "uint16" or "int32" or "uint32" if object is a matrix of [unsigned] integers stored on 8, 16 or 32 bits. See int8)

37 Scilab Osa 1 ESIMERKKI. -->A=rand(2,3); -->type(a) 1. -->typeof(a) constant 4.1 Listat Monet Scilabin objektit on muodostettu listoina. Scilabissa listat ovat tietorakenteita, jotka voivat sisältää erilaisia objekteja. Listoja on kolmea eri tyyppiä: list. Listan alkioihin voidaan viitata indeksillä tlist. Listarakenne on dynaaminen ja listan alkioihin voidaan viitata nimillä ja indekseillä. mlist. Listarakenne on dynaaminen ja listan alkioihin voidaan viitata nimillä. Nimellä tapahtuva viittaus käyttää operaattoria piste (.) seuraavan esimerkin mukaisesti. ESIMERKKI. Seuraavassa on lista x luotu dynaamisesti. -->clear x // Poistetaan mahdollinen muuttuja x -->x.tyyppi='kolmio'; -->x.ala=11.3; -->x.sivut=[3.4,6.7,7.1]; -->x x = tyyppi: "kolmio" ala: 11.3 sivut: [3.4,6.7,7.1] Lista x on mlist: -->type(x) 17. Alkioihin voidaan viitata nimellä: -->x.tyyppi kolmio -->x.sivut 3.4 6.7 7.1 Viittaaminen indeksiä käyttäen ei käy: -->x(1)

Scilab Osa 1 38 tyyppi: "kolmio" ala: 11.3 sivut: [3.4,6.7,7.1] -->x(2)!--error 21 invalid index at line 90 of function %st_e called by : x(2) Seuraavassa on esitetty joitain listaoperaatioita. Tyhjä lista luodaan komennolla list(). -->L=list() L = () // Tyhjä lista -->L(2)=rand(2,2) // Luodaan alkio L = L(1) Undefined L(2) 0.2320748 0.2164633 0.2312237 0.8833888 Listan alkioon viitataan indeksiä käyttäen: -->L(2) 0.2320748 0.2164633 0.2312237 0.8833888 Listan indeksointi alkaa ykkösestä. Listan alkuun voidaan lisätä alkio sijoituskäskyllä L(0) = Samalla seuraavien indeksi kasvaa yhdellä: -->L(0)=55 L = L(1) 55. L(2) Undefined L(3) 0.2320748 0.2164633 0.2312237 0.8833888 Listan loppuun voidaan lisätä alkio sijoituskäskyllä L($+1) = : -->L($+1)=100 L = L(1) 55. L(2) Undefined L(3) 0.2320748 0.2164633 0.2312237 0.8833888 L(4)

39 Scilab Osa 1 100. Sijoituskäsky L(i) = null() poistaa alkion i: -->L(2)=null() L = L(1) 55. L(2) 0.2320748 0.2164633 0.2312237 0.8833888 L(3) 100. Listasta voidaan poimia alkioita seuraavaan tapaan: -->[a,b]=l([1,3]) b = 100. a = 55. Komento list(a1, a2, ) luo listan, jonka alkiot ovat a1, a2, -->L1=list('la','su') L1 = L1(1) la L1(2) Su Listoja voidaan asettaa peräkkäin komennolla lstcat(l1, L2): -->L2=lstcat(L,L1) L2 = L2(1) 55. L2(2) 0.2320748 0.2164633 0.2312237 0.8833888 L2(3) 100. L2(4) la L2(5) su Listan pituus saadaan selville komennolla size tai length. -->size(l2) 5. Lista L2 on list: -->type(l2) 15.

Scilab Osa 1 40 4.2 Lukujen esitysmuodot 4.2.1 Liukuluvut Scilabin laskenta suoritetaan pääasiassa kaksoistarkkuuden (64 bitin) liukuluvuilla. Tällöin laskentatarkkuus on noin 16 numeroa. Lukujen esitysmuoto ei vaikuta laskennan tarkkuuteen. Liukulukujen tyyppi on 1. Lukujen esitysmuotoon voidaan vaikuttaa komennolla format, jonka muoto on format( v, luku) tai format(luku): muuttuva esitysmuoto, jossa numeroiden maksimimäärä on luku format( e, luku): eksponenttiesitys, jos numeroiden maksimimäärä on luku. Oletusarvoinen esitysmuoto on format( v,10). Esitysmuodon saa selville komennolla format. Komento antaa tulokseksi vaakavektorin [m, n], missä m = 1 tarkoittaa esitysmuotoa v ja m = 0 tarkoittaa esitysmuotoa e. Luku n ilmoittaa numeroiden maksimimäärän. ESIMERKKEJÄ. -->format 1. 10. -->sqrt(2) 1.4142136 -->10^(-5)*sqrt(2) 0.0000141 -->10^(-7)*sqrt(2) 0.0000001 -->10^(-8)*sqrt(2) 1.414D-08 -->10^10*sqrt(2) 1.414D+10 -->format("e",14) -->format 0.0000000D+00 -->sqrt(2) 1.4142136D+00 1.4000000D+01 -->10^(-7)*sqrt(2) 1.4142136D-07 -->10^10*sqrt(2) 1.4142136D+10

41 Scilab Osa 1 -->format("v",10) -->format 1. 10. Lukujen esittäminen liukulukuina ei ole tarkkaa, joten laskenta liukuluvuilla ei myöskään ole tarkkaa. ESIMERKKEJÄ Seuraavassa funktio int pyöristää kokonaisluvuksi kohti nollaa. -->int(10*0.1) 1. -->int(10*(1-0.9)) 0. Ero johtuu siitä, että lukua 0,9 ei voida esittää tarkasti liukulukuna. -->format(25) // Enemmän numeroita -->0.9 0.9000000000000000222045 -->10*(1-0.9) 0.9999999999999997779554 Komento clean(a, {tol}) asettaa nolliksi ne matriisin alkiot, joiden itseisarvo on pienempi noin kuin tol. Oletusarvona on 10 10. -->A=10^(-5:-2:-13).*rand(1,5) A = 1.0D-10 * 291.66327 899.34706 8.3879272 0.0434375 0.0007768 -->clean(a) 1.0D-08 * 2.9166327 8.9934706 0.0838793 0. 0. -->clean(a,1d-8) 2.917D-08 8.993D-08 0. 0. 0. 4.2.2 Kokonaisluvut Kokonaisluvut voidaan tallentaa 1, 2 tai 4 tavuun omilla komennoillaan. Esimerkiksi komento int32(x)

Scilab Osa 1 42 tallentaa luvun x kokonaisluvuksi 4 tavuun. Kokonaisluku on tällöin välillä 2 31.. 2 31 1 eli välillä 2 147 483 648.. 2 147 483 647. Komento uint32(x) tallentaa luvun x ei-negatiiviseksi kokonaisluvuksi 4 tavuun. Tämä luku on välillä välillä 0 4 294 967 295. 0.. 2 32 1 eli Kokonaisluvut ovat tyyppiä 8. Kokonaislukujen peruslaskutoimitukset 1 tuottavat tulokseksi kokonaislukuja. Tässä on erityisesti huomattava, että jakolaskun tulos on kokonaisluku kokonaisluvun ja liukuluvun summa ja tulo ovat kokonaislukuja. Laskennassa käytetään liukuluvun kokonaisosaa. ylivuoto tapahtuu jos tulos menee kyseisen kokonaislukualueen ulkopuolelle. Scilabissa ylivuoto on sirkulaarinen eli luku pyörähtää ympäri (ks Esimerkkejä). Komento double(x) muuttaa kokonaisluvun x liukuluvuksi. Komentoikkunaan luvut tulostuvat seuraavasti: kokonaisluvussa ei ole desimaalipistettä liukuluvussa on desimaalipiste. ESIMERKKEJÄ. -->x=267 x = 267. // Liukuluku -->type(x) 1. -->m=int32(267) m = 267 // Kokonaisluku -->type(m) 8. -->double(m) 267. // Liukuluku -->type(ans) 1. -->67*m 17889 -->type(ans) 1 Yhteen-, vähennys-, kerto-, jakolasku ja positiiviseen kokonaislukuun korottaminen.

43 Scilab Osa 1 8. -->67.31*m 17889 -->67.31*double(m) 17971.77 // Tulo kokonaisluku! // Oikea arvo -->67*267 // Liukuluvusta otetaan kokonaisosa. 17889. -->-0.98*m 0 -->m/7 38 -->double(m)/7 38.142857 // Osamäärä kokonaisluku // Oikea arvo -->m^3 19034163 -->m^4 // Ylivuoto -2147483648 -->double(m)^4 // Oikea arvo 5.082D+09 ESIMERKKI: Sirkulaarinen ylivuoto. Komento int8(x) tuottaa kokonaisluvun, joka on välillä 2 7.. 2 7 1 eli välillä 128.. 127. Kokeillaan laskentaa arvoalueen rajoilla. -->x=int8(127) x = 127 -->x+1,x+2-128 -127 -->-x-1,-x-2-128 127

Scilab Osa 1 44 Kokonaisluvut voidaan tietenkin tallentaa liukukuina, mutta jos kokonaisluvun itseisarvo on liian suuri, se ei ole tarkka. Scilabissa kokonaislukujen liukulukulaskenta on tarkkaa, jos kokonaisluvut ja niiden laskennan kaikki välitulokset ovat välillä 2 52.. 2 25 eli välillä 4503599627370496.. 4503599627370496. ESIMERKKEJÄ. -->format(20) // Tuloksen esitystarkkuus suurempi Laskenta oikein: -->2^51 2251799813685248. -->2^51+1 2251799813685249. Laskenta väärin 1 : -->2^53 9007199254740992. -->2^53+1 9007199254740992. -->2^53+2 Kokeillaan vielä: 9007199254740994. -->(2^52+1)-2^52 1. -->(2^53+1)-2^53 0. Huom. Jos matriisin alkioiden sarake- ja rivi-indeksit ovat liukulukuja, pyöristää Scilab ne ennen laskentaa kokonaisluvuiksi alaspäin funktiota int käyttäen. Tämä saattaa johtaa yllättäviin virheisiin. 1 Tämä ei tietenkään ole Scilabin vika, vaan virhe johtuu siitä, että liukulukuesityksessä luku esitetään tietyssä muodossa 64:llä bitillä. Tällöin luvun esitysmuoto ei välttämättä ole tarkka.

45 Scilab Osa 1 ESIMERKKEJÄ mutta -->A=[1:3;4:6] A = 1. 2. 3. 4. 5. 6. -->A(2,[1., 1.2, 1.]) 4. 4. 4. -->A(2,(1-0.9)*10)!--error 21 Invalid index. Virhe johtuu siitä, että Scilabissa luku (1-0.9)*10) ei olekaan tarkasti 1, vaan -->format(20) // Suurempi esitystarkkuus -->(1-0.9)*10 0.99999999999999978 ja alaspäin pyöristettäessä 0 ->int((1-0.9)*10) 0 4.2.3 Rationaaliluvut Rationaaliluvuilla laskentaa Scilabissa ei taida olla. Kuitenkin komennolla rat voidaan muodostaa liukuluvun rationaaliapproksimaatio. Komennon muoto on [n, d] = rat(x, {tol}), missä sisäänmenoparametrit ovat x on liukulukumatriisi tol suhteellinen toleranssi ja ulostuloparametrit ovat n on rationaaliapproksimaation osoittajamatriisi d on rationaaliapproksimaation nimittäjämatriisi Parametrin tol oletusarvo on 10 6. Luvut n ja d ovat liukulukumuotoisia kokonaislukumatriiseja siten, että matriisi n./d on matriisin x likiarvo toleranssin tol ilmoittamalla suhteellisella tarkkuudella. ESIMERKKEJÄ. -->x=2/3 x =

Scilab Osa 1 46 0.6666667 -->[n,d]=rat(x) d = 3. n = 2. -->[n,d]=rat(x+1e-6) d = 333331. n = 222221. -->[n,d]=rat(x+1e-7) d = 3. n = 2. -->[n,d]=rat(%pi) d = 113. n = 355. -->n/d-%pi 0.0000003 -->A=[sqrt(2), 2^(1/3);%e, 5] A = 1.4142136 1.259921 2.7182818 5. -->[n,d]=rat(a) d = 408. 504. 465. 1. n = 577. 635. 1264. 5. -->n./d 1.4142157 1.2599206 2.7182796 5. -->[n,d]=rat(a,1d-10) d = 33461. 71691. 18089. 1. n = 47321. 90325. 49171. 5. -->n./d 1.4142136 1.2599211 2.7182818 5.

47 Scilab Osa 1 5. FUNKTIOT JA SKRIPTIT Scilabia käytettäessä kirjoitetaan usein monia komentoja peräkkäin. Tällaiset komennot voidaan tehdä editorilla SciNotes erilliseen tiedostoon joko skripteiksi eli komentojonoiksi tai funktioiksi eli ohjelmiksi Skripti on jono komentoja, joita käytetään automatisoimaan laskentaa. Skriptin muuttujat ovat yleisiä komentoikkunan muuttujia. Skriptin komentojen tulos tulostuu komentoikkunaan, ellei komentoja päätetä puolipisteellä. Funktio on ohjelma, jonka liittyminen ulkomaailmaan tapahtuu sisäänmeno- ja ulostuloparametrien kautta 1. Funktion muuttujat ovat funktion sisäisiä muuttujia, joten ne eivät sotkeudu komentoikkunan muuttujiin. Funktio tehdään yleensä erilliseen tiedostoon. Yksinkertaisen funktion voi tehdä myös komentoikkunaan. Funktiota voidaan käyttää laajentamaan Scilabin ominaisuuksia. Editoriin voi tietenkin ladata aiemmin tehtyjä tiedostoja SciNoten painikkeella valikkokomennolla File: Open (Ctrl+o). Scilabin painikkeella tai valikkokomennolla File: Open a file Scilabin funktiot ja skriptit tehdään editorilla, joka käynnistetään valikkokomennolla Applications: SciNotes, painikkeella tai komennolla editor. Editori tuntee Scilabin syntaksin. Tehdyt komennot tai ohjelmat voidaan tallentaa tiedostoon komennolla File: Save (Ctrl+s). Tiedoston tyyppi on oltava.sce tai.sci. Ohjelma tai komentojono saadaan ladattua Scilabiin SciNoten valikkokomennolla Execute: file with no echo: Tiedoston komennot suoritetaan tai ohjelma ladataan Scilabiin. Tiedoston tai ohjelman komentoja ei näytetä Scilabin komentoikkunassa. Tiedosto on tallennettava ennen komennon suorittamista. Execute: file with echo: Tiedoston komennot suoritetaan tai ohjelma ladataan Scilabiin. Tiedoston tai ohjelman komennot näytetään Scilabin komentoikkunassa. Tiedostoa ei tarvitse tallentaa ennen komennon suorittamista. Execute: the selection with echo: Valitut komennot suoritetaan ja näytetään Scilabin komentoikkunassa. Komentoja ei tarvitse tallentaa. Editorin SciNotes komennolla Execute: until the caret, with echo suoritetaan editorissa olevat komennot kohdistimen sijaintikohtaan asti. Scilabiin ladattu ohjelma ajetaan omalla kutsukomennollaan. Editoriin voi tietenkin ladata aiemmin tehtyjä tiedostoja SciNoten painikkeella valikkokomennolla File: Open (Ctrl+o). Scilabin painikkeella tai valikkokomennolla File: Open a file Yksinkertaisen 2 funktion rakenne on seuraava: 1 Funktiossa voi tietenkin olla myös luku- ja tulostuskäskyjä. 2 Ohjelmointia käsitellään tarkemmin tekstissä Scilab - Ohjelmointi; tässä otetaan esille vain joitain perusasioita