Matlab-juttuja

Matlab-harjoitustyö - Matemaattiset ohjelmistot, kevät 2000

Liukulukumatematiikkaa

Kone-epsilon? Mikä kumman kone-epsilon?

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.

Tarkkuuden menetystä, osa 1

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.

Tarkkuuden menetystä, osa 2

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.)

Nopeusvertailua

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.

Polynomien käsittely Matlabissa

Perusasioita

Vihje: lookfor poly

Funktion polynomiaproksimaatio

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.

Wilkinson - (surullisen)kuuluisa tapaus

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 ja pientä ohjelmointia

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öpari ja Gaussin eliminointi

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.

Tee tehtävä

Suunnittele Matlab-tehtävä esimerkiksi jonkin käymäsi matematiikan tai tilastotieteen kurssin aihepiiristä.

Palautetta

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.