Aalto-yliopisto, Matematiikan ja Systeemianalyysin laitos Apiola/Kuortti Mat-1.C Matemaattiset ohjelmistot Harjoitus 1 12-14.3.2012 LT 1. Olkoon z = [0 -1 2 4 -2 1 5 3], ja J = [5 2 1 6 3 8 4 7]. Mitä syntyy seuraavilla Matlab-komennoilla (sijoitetaan tilan säästämiseksi useita samalle riville.) >> x = z', A = x*x', s = x'*x, w = x*J, >> length(x), length(z) >> size(A), size(x), size(z), size(s) Vihje: Suorita doc length, doc size, tai etsi Matlabin Help index:n avulla (lisä)tietoa komennoista.

LT 2. Määrittele vektorit x = [1 2 3 4 5] y = [0 2 4 6] z = [-4 -2 0 2 4 ] Kokeile seuraavia laskutoimituksia/komentoja (kirjoita mieluummin omille riveil- leen), ja selvitä virheelliset. x.*z, x*z' ,x*z x.^2, x^2 s1=sqrt(x*x') s2=sqrt(sum(x.^2)) s3=norm(x) [s1 s2 s3] % helppo verrata help norm HT 3. Määrittele matriisit u = [ \begin{matrix}3 \\ 4 \\ 5 \\ 6 \end{matrix} ] v = [ \begin{matrix}0 \\ 2 \\ 4 \\ 6 \end{matrix} ] C = [ \begin{matrix}1 & 2 & 3 \\ 1 & 3 & 6 \\ 1 & 4 & 9 \end{matrix} ] A = [ \begin{matrix}1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 & 11 & 12 \end{matrix} ] B = [ \begin{matrix}3 & 4 & 5 & 6 \\ 2 & 1 & 0 & −1 \\ 5 & 4 & 2 & 0 \\ 1 & 2 & 1 & 1 \end{matrix} ] Selvitä (ilman Matlabia), mitkä seuraavista laskutoimituksista on määritelty, ja ker- ro sanallisesti, mitä ne tekevät. Tarkista Matlab:lla. A*C C*A C^2 C.^2 A^2 A.^2 HT 4. Kirjoita MATLAB-skripti, joka laskee ja piirtää seuraavat funktiot: a) y = 5 cos(3πx). Laske arvo 101:ssä tasavälisessä pisteessä välillä 0 ≤ x ≤ 1. b) y = \frac{1}{1+x^{2}} välillä −5 ≤ x ≤ 5 . c) y = \frac{sin(7x)−sin(5x)}{cos(7x)+cos(5x)} . Laske arvo 200 tasavälisessä pisteessä välillä −\frac{π}{2} ≤ x ≤ \frac{π}{2}. Käytä axis komentoa asettaaksesi näytettävät akselit väleille −2 ≤ x ≤ 2 ja −10 ≤ x ≤ 10. Vihje: Jako- ja kertolaskujen tapauksessa ole tarkkana: haluatko matriisioperaation vai alkioit- taisen operaation? Alkioittaiset operaatiot erotetaan matriisioperaatioista operaattorin eteen sijoi- tettavalla pisteellä. Esimerkiksi .* on alkioittainen kertolasku, * matriisien kertolasku. Trigonometriset funktiot toimivat MATLABissa alkioittain, ja löytyvät loogisilla nimillä. (cos, acos, sin jne.) Tasavälisiä pistejoukkoja luodaan komennolla linspace, tai vaihtoehtoisesti MATLABin kaksoispiste-notaatiolla. Tutustu kummankin dokumentaatioon, ja päätä kumpaa kannattaa tässä tilanteessa käyttää.

HT 5. HT a) Ratkaise lineaarinen yhtälöryhmä ja tarkista tulos kertolaskulla. \{ \begin{matrix}4x − 5y = 11 \\ 2x + y = 9 \end{matrix} Vihje: Matlab: "Matriisijako": A\b Maple: LinearSolve (ei tarvitse ekalla viikolla) b) Tiedetään, että Celsius-asteiden ja Fahrenheit-asteiden välillä on lineaarinen yhteys: C = aF + b. Lisäksi tiedetään, että vesi jäätyy 32 F:ssa ja -40 on sama kummassakin asteikossa. Johda kaava. Tarkoitus on kirjoittaa kertoimien a ja b määrää- miseksi lineaarinen yhtälösysteemi, joka ratkaistaan Matlab:n takakenolla (\). c) Muodosta matriisi, jonka 1. sarake on C-asteet −50:sta 5:n asteen välein 100 :aan ja toinen sisältää vastaavat F-asteet. Vihje: Tarkan rationaalilukukaavan saat komentamalla format rat. Tee m- tiedosto kommentteineen. Huomaa, että taulukkoa ei ole mukavaa katsoa koknaisuutena, esim. 10 ekaa riviä näet näin: taulukko(1:10,:) (eikö vain?). Hivelevää on myös mennä “Workspace-ikkunaan” ja kaksoisklikata taulukko-ikonia. Kokeile sen ajamista myös pdf:ksi publish(Fahrenheit,pdf)-komennolla (jos skripti on Fahrenheit.m), kunhan ensin testailet sen kuntoon.

Doku 6. DokuT Kirjoita skripti, jolla vertaat inv(A)*b:n ja A\b:n tehokkuus- ja tarkkuuseroja. Tee välillä [0, 10] olevista satunnaisista kokonaisluvuista koostuva matriisi n × n-matriisi A, ja muodosta sen rivisummista koostuva sarakevektori b. Olkoon u=ones(n,1) . Mieti, miksi u on yhtälön Ax = b ratkaisu. Vahvista tämä Matlab-laskulla: %% n=5 A=floor(10*rand(n)) b=sum(...) b=b' u=ones(n,1) [A*u b] x=A\b %% Jatka nyt skriptiäsi (copy/paste) ja aloita n = 200. Muista päättää puolipisteeseen (;) [muuten kärsit]. Suorita ajanmittausta varten: tic,x=A\b;toc tic,y=inv(A)*b;toc Vertaa suoritusaikoja. Virheiden vertaamiseksi laske max_{i} |x_{i} − u_{i}| ja max_{i} |y_{i} − u_{i}| Voit myös käyttää norm-funktiota (help norm) Kokeile vielä arvoja n = 500 ja n = 1000. (Ja muista puolipisteet!!) Kir- joita muutaman virkkeen yhteenveto skriptiisi ja aja vielä pdf:ksi komennolla publish('tamaskripti','pdf'). (Voit toki käyttää FILE-valikon publish-valintaa, joka oletusarvoisesti tekee html:ää. Harjoitusdokuja varten pdf on parempi (kaikki yhdessä tiedostossa).)

HT 7. Monikulmio voidaan esittää 2-rivisenä matriisina, jonka sarakkeet edustavat koor- dinaattipisteitä. Esim. Kolmio, jonka kärjet ovat pisteissä (0, 0), (1, 1), (1, −1) voi- taisiin esittää matriisina T = [ \begin{matrix}0 & 1 & 1 & 0 \\ 0 & 1 & −1 & 0 \end{matrix} ] . >> plot(T(1,:),T(2,:)) piirtää kärkipisteet ja yhdistää ne janoilla tässä järjestyksessä. (Seuraavassa tehtävässä hiukan enemmän selitystä lineerikuvausperiaatteesta.) Jos tähän sovelletaan lineaarikuvausta, eli kerrotaan matriisilla A, saadaan kuvan kärkipisteet S = AT . Muodosta jokin/joitakin 2×2-matriiseja A. Piirrä kolmio T ja sen kuva S eri ruutui- hin. Voit kokeilla myös rinnakkain (subplot) ja päällekkäin hold on ja myös alueen täyttöä fill » S=A*T; plot(S(1,:),S(2,:)). Jos haluaisit iteroida, voisit tehdä komentoikkunassa ↑-tyyliin: >> S=T; » S=A*S; plot(S(1,:),S(2,:)) % ja tätä riviä ↑-toistaen. HT 8. HT Muodosta seuraava matriisi, jonka sarakkeet edustavat tason pisteitä. Piirrä pisteet yhdistysjanoineen: T=[0 0 -1 6 13 12 12 3 3 6 6 0;0 9 8 15 8 9 0 0 5 5 0 0] plot(T(1,:),T(2,:) Olkoon A 2×2-matriisi. Tason piste (pystyvektori) kuvautuu matriisilla kerrottaessa pisteeksi y = Ax. Näin matriisi A määrää tason lineaarikuvauksen. Pistejoukko voidaan kuvata kokoamalla pisteet sarakkeiksi matriisiin (kuten T yllä) ja kertomalla se kuvausmatriisilla A. Niinpä talon nurkkapisteiden kuvat saadaan suoraan kertomalla "talomatriisi"T A:lla, ts. S = AT. Lineaarisuuden nojalla yhdis- tysjanat kuvautuvat yhdistysjanoille. Kerro näillä matriiseilla ja piirr¨(ja kerro, mitä näet). A_{1} = [ \begin{matrix}1 & 0 \\ 0 & 2 \end{matrix} ], A_{2} = [ \begin{matrix}1 & 0 \\ 0 & −1 \end{matrix} ], A_{3} = [ \begin{matrix}0 & 1 \\ 1 & 0 \end{matrix} ] A_{4} = [ \begin{matrix}1 & 3 \\ 0 & 1 \end{matrix} ] Miten kuvailisit vastaavia kuvauksia ? (A_{4} on engl. nimeltään “horisontal shear”. )

LT 9. Muodosta Matlab:lla polynomien p(x) = x^{3} + 2x − 1 ja q(x) = 2x^{5} + 3 summa. Määritä p(x), q(x) ja (p + q)(x) vektorin x=[-2 -1 0 1 2] pisteissä. Lado nämä arvot 3-sarakkeiseksi matriisiksi P QS. Miten voit kätevästi tarkistaa, että laskut menivät oikein? Vihje: polyval arvon laskemiseen. HT 10. a) Muodosta Matlab-lauseke, joka laskee kahden polynomin p ja q summan p+q. Oletetaan, että p:n asteluku = n ja q:n asteluku = m ja m ≤ n. b) Tee sitten yleispätevästi, tarvitsematta tietää mitään asteluvuista. c) Kirjoita funktiotiedosto polysum.m, jolle annetaan argumentteinä polynomi- vektorit ja joka palauttaa summapolynomi(vektorin). Kirjoita alkukommentit, joissa käyttötarkoitus, ohje ja käyttöesimerkki. Se siis tulee näkyviin komen- tamalla >> help polysum . Testaile! Vihje: b): np=length(p);nq=length(q);m=max(np,nq); Muodosta 2×m nollamatriisi, jonka 1. riville viet p:n “loppuun kiinnittäen” ja 2. riville vastaavasti q:n. (Muista end.) Sitten vaan muodostat sarakesummat sum-funktiolla, siinäpä se! c): Ohjelmankehitys kannattaa tehdä skriptitiedostossa, ja kun se toimii, kirjoitetaan siitä funktio.

HT 11. HT Esitä yhden rivin Matlab-komento, jolla saat selville vektorin tai matriisin niiden alkioiden lukumäärän, jotka ovat > 5. Testaa ainakin näille: a) A=1:10 b) B=[1 2 3;4 5 6;7 8 9] c) C=10*rand(6,6) d) D=ones(4,4)

HT 12. HT a) Piirrä funktiot cos t ja sin t samaan kuvaan eri väreillä. b) Piirrä toiseen kuvaan yksikköympyrä ja säännöllinen n−kulmio esim. arvolla n = 10. Järjestä sopivilla axis-komennoilla skaalat yhtäsuuriksi, jotta ympyrä näkyy ympyränä. c) Piirrä yksikköympyrän kuva joillain edellä esiintyneillä lineaarikuvauksilla(tai muilla keksimilläsi). Vihje: Uusi grafiikkaikkuna: figure Muistathan ympyrän luonnollisen parametriesityksen. Ympyrän data koostuu oikeasti säännöllisesen n-kulmion nurkkapisteistä, missä esim. n = 100 (linspace:n oletus). Ympyrän kuvan piirtäminen on siten sama homma kuin edellisissä lineaari- kuvaustehtävissä.

DokuT 13. Palautettava teht. Huom: Tehtävänanto on siksi pitkä, että suurin osa on ohjetta. Ratkaisu lyhyt. Tutkitaan heitetyn pallon lentorataa MATLABilla. Aloita luomalla m-tiedosto johon kirjoitat tarvittavat komennot. 1. Teemme seuraavat lähtöoletukset: i Pallon korkeus h heittohetkellä on 1.5m ii Putoamiskiihtyvyys g on 9.8m/s^{2} iii Pallon vauhti v heittohetkellä on 4m/s iv Pallon etenemisvektorin suunta θ on 45^{o} Kirjoita oletukset skriptiisi. 2. Luo vektori t, jossa on 1000 tasaisin välein valittua arvoa väliltä [0, 1]. 3. Kuvataan muuttujalla x pallon etäisyyttä heittäjästä (mitattuna maan pinnal- la) ja muuttujalla y pallon korkeutta, seuraavat yhtälöt kuvaavat muuttujien riippuvuutta ajasta ja oletetuista parametreista. (a) x(t) = v cos( θ\frac{π}{180}) t.Muunnetaan kulma radiaaneiksi (b) y(t) = h + v sin( θ\frac{π}{180}) t − \frac{1}{2}gt^{2}. Kirjoita annettujen yhtälöiden ja määrittelemiesi arvojen avulla vektorit x ja y. 4. Arvioidaan hetkeä jolloin pallo putoaa maahan, ja sen lentämää matkaa: et- si ensimmäinen indeksi, jolla pallon korkeus y muuttuu negatiiviseksi (käytä funktiota find). Pallon lentämä etäisyys on vektorin x arvo tässä indeksissä, lentoaika on vektorin t arvo tässä indeksissä. Tulosta sekä lentomatka että -aika näkyviin ruudulle. 5. Piirretään pallon lentorata: piirrä kuva, jossa pisteiden x-koordinaatit ovat vektorissa x, ja y-koordinaatit vektorissa y. Tämän jälkeen piirrä nolla-taso näkyviin katkoviivalla.