Kuinka suuri kone-epsilon on käyttämässämme Matlabin versiossa? Paljonko on 1+eps-1? Paljonko on 2+eps-2?
Piirrä funktion f(x)=x+1016-1016 kuvaaja välillä 0..10. Mitä tapahtuu? Miksi?
Selitä näiden perusteella mikä on kone-epsilon.
Ohjelmoi funktiot f1 ja f2 seuraavasti:

Funktioiden pitäisi olla täsmälleen yhtäsuuria. Tarkista tämä joko piirtämällä kuvaaja tai laskemalla funktioiden arvoja muutamissa pisteissä. Eroa syntyy, kun x on itseisarvoltaan hyvin pieni. Tutki mitä tapahtuu ja piirrä kuvaaja, jossa molempien funktioiden arvo näkyy samassa kuvaajassa.
Varianssi on hajonnan mittayksikkö, se on siis sitä suurempi, mitä enemmän tutkittavat lukuarvot eroavat toisistaan. Varianssi on jakauman sijainnista riippumaton, eli lukujen 3,4 ja 6 varianssi on sama kuin lukujen 103, 104 ja 106 varianssi. Varianssin käsitteen pitäisi olla lukion kursseista tuttu.
Peruskaava varianssin laskemiseen on laskea keskiarvo lukujen keskiarvosta
poikkeamien neliöistä, siis
Peruskaavassa pitää luvut käydä ensin kerran läpi ja laskea keskiarvo
ja varianssin laskemiseksi luvut käydään läpi toisen kerran. On olemassa
myös nopeampi tapa, jossa ei jouduta ensin laskemaan keskiarvoa. Tässä
lukujen neliöiden keskiarvosta vähennetään keskiarvon neliö, siis
Ohjelmoi molemmat tavat käyttäen for-silmukkaa. Testaa
ohjelmiasi joillakin sopivilla testivektoreilla. Tuloksen pitäisi
olla melko tarkkaan sama.
Laske seuraavaksi varianssi luvuista 0,1,2,3,...,9 molemmilla kaavoilla. Kokeile tämän jälkeen lukuja 10,11,12,...,19, sitten lukuja 100,101,102,...,109, sitten 1000,1001,1002,...1009. Jatka tätä, kunnes kaavat antavat eri vastauksen. Selitä tulos.
Varianssihan on keskihajonnan neliö, ja keskihajonnan saat Matlabin
komennolla std. Kumpaa kaavaa std käyttää.
(Miten niin outo tulos? Katso help std.)
Edellisessä varianssitehtävässä käskettiin tahallisesti käyttää silmukkaa.
Näin ei kuitenkaan yleensä pidä tehdä. Ohjelmoi molemmat edellä olevat
kaavat käyttäen Matlabin sum-funktiota. Testaa funktioita
jollain isommalla (10000-100000 alkiota) vektorilla, jonka alkiot ovat
satunnaislukuja. Saatko samoja tuloksia? Vertaile neljän eri kaavan
nopeutta tic- ja toc-funktioiden avulla. Mikä
on tarinan opetus?
Satunnaisluvuista saat lisätietoa komennolla lookfor random.
Vihje: lookfor poly
Approksimoi funktiota 1/(x2+1) välillä [-5, 5] polynomilla. Piirrä kuvaaja alkuperäisestä funktiosta ja approksimoivasta polynomista. Kasvata polynomin astelukua, eli lisää pisteitä, joiden kauttaa polynomi kulkee, ja katso miten funktio käyttäytyy.
Wilkinsonin polynomiksi sanotaan polynomia, jonka nollakohtina ovat
luvut 1, 2, 3,...,20. Muodosta tämä polynomi Matlabilla ja etsi sen
nollakohdat. Löytyvätkö oikein? Tämän polynomin 19. asteen termin
kerroin on -210. Vähennä arvosta 2-23 ja tutki, miten polynomin
nollakohdat siirtyvät piirtämällä samaan kompleksitason kuvaan sekä
alkuperäisen että muutetun polynomin nollakohdat. Piirrä myös molempien
polynomien kuvaajat. Tee vielä selityslaatikko kuviin (help
legend).
Olen tehnyt ohjelman, jolla voidaan mallintaa puiden runkokäyriä ensimmäisen, toisen tai kolmannen asteen polynomeilla. Ohjelmaa esitellessä pitää joskus vastata kysymykseen siitä, miksei käytetä korkeamman asteen polynomeja. Miten vastaisit tähän edellisen tehtävän perusteella?
Kuutiojuuri luvusta a on sama asia kuin yhtälön x3=a ratkaisu. Yhtälön ratkaisemiseen taas on olemassa monia eri tapoja, joista tässä tutkitaan puolitushakua ja Newtonin iterointia.
Ohjelmoi puolitushaku kyseiselle funktiolle. Kannattaa aloittaa miettimällä ensin paperilla miten ratkaisisi tehtävän laskemalla funktion arvon kahden päätepisteen puolivälissä ja ottamalla puolivälin toiseksi päätepisteeksi sen mukaan, oliko funktion arvo kyseisessä pisteessä positiivinen vai negatiivinen.
Tällaisissa hakutehtävissä kannattaa tehdä silmukka, joka loppuu kun riittävän lähellä nollaa oleva arvo löytyy tai väli, jolla nollakohta on tulee riittävän pieneksi. Varmuuden vuoksi kannattaa tehdä kierroslaskuri ja lopettaa jos laskuri kasvaa liian suureksi. Tämä estää ikuisten silmukoiden syntymisen ongelmatilanteissa.
Newtonin iteraation pitäisi olla lukiosta tuttu, mutta kertauksen vuoksi: Valitaan jokin alkupiste x, lasketaan uusi piste kaavalla x-f(x)/f'(x) ja toistetaan tätä, kunnes funktion arvo on riittävän lähellä nollaa tai pisteen paikka ei muutu.
Newtonin iteraatiossakaan et voi olettaa nollakohtaa löytyvän, teoriassa koska laskenta ei pääty koskaan vaan tarkentuu ikuisesti ja käytännössä koska pyöristysvirheiden vuoksi tarkkaa nollakohtaa ei välttämättä ole, joten tässäkin pitää miettiä mikä on "riittävän" lähellä nollaa.
Tehtävän helpottamiseksi voit olettaa luvun a olevan välillä nollasta miljardiin, eli haettava luku x löytyy lukuväliltä nollasta tuhanteen.
Yhtälöparien

ja
ratkaisu on selvästi pystyvektori (1 1)'. Tee funktio, joka saa syötteenään 2x2 -matriisin A ja 2-alkioisen pystyvektorin b ja ratkaisee yhtälön Ax=b Gaussin eliminoinnilla. Testaa tekemääsi funktiota molemmilla esimerkkitehtävillä, kun vakion e arvo on vaikkapa kolme. Millä vakion e arvoilla saattaa tulla ongelmia? Testaa funktiotasi näillä vakion e arvoilla. Matlab osaa toki ratkaista yhtälöryhmän, oikea komento on A\b . Testaa tätäkin samoilla vakion e arvoilla ja vertaa tuloksia.
Suunnittele Matlab-tehtävä esimerkiksi jonkin käymäsi matematiikan tai tilastotieteen kurssin aihepiiristä.
Kirjoita raportin viimeiseksi luvuksi palautetta kurssista. Olivatko tekniset järjestelyt onnistuneet? Olivatko tehtävän liian helppoja vai vaikeita? Oliko luentoja liikaa vai liian vähän suhteessa mikroluokkaharjoituksiin?
Kiitokset Riitta Niemistölle, jonka viime vuonna pitämän vastaavan kurssin harjoitustyöhön nämä tehtävät suurelta osin perustuvat.