MattieT-tehtäväportaali


Yhteydenotot:

Heikki Apiola
Dept. of Math. Sci.
Aalto-yliopisto
heikki.apiola'at'aalto.fi

Juha Kuortti
Dept. of Math. Sci.
Aalto-yliopisto
juha.kuortti 'at' aalto.fi

Miika Oksman
Dept. of Math. Sci.
Aalto-yliopisto
miika.oksman 'at' aalto.fi

Matlab/Graphics, piirto, grafiikka

Käyttö: Kun löydät mieleisesi tehtävän, sen alapuolella on linkki tex-tiedostoon. Lataa tiedosto, ja liitä se harjoituspohjaan tai omaan Latex-pohjaasi

Ratkaisut : Jos tehtävässä on ratkaisulinkki, se avautuu tunnuksilla, joita voi tiedustella (opettajat). Jos tehtävässä on Demo-merkintä, ratkaisu on kaikille avoin.
Grafiikka-oppia

Sisällysluettelo


  1. mlGr01

    mlGr01 – Demo

    Piirrä samaan kuvaan funktioiden \(\cos\) ja \(\sin\) kuvaajat välillä \(\left[-2\pi,2\pi\right]\) Aloita tyyliin:

     x=linspace(-2*pi,2*pi); y1=cos(x); y2=sin(x);
     plot(...)

    Vihje
    Voit piirtää molemmat yhdellä plot-komennolla tai käyrän kerrallaan “jäädyttämällä” vanhan grafiikan hold on-komennolla.

    Jos haluat kuvat eri grafiikkaikkunoihin, voit käyttää figure-komentoa. Toisinaan on kätevää jakaa grafiikkaruutu osiin. Tämä onnistuu subplot:n avulla. Kokeile näitä vaihtoehtoisia tapoja (nyt tai myöhemmin).

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr01.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/html/mlGr01R.html Kauniissa html-muodossa
    ../mlteht/mlGraphics/ratkaisut/mlGr01R.m (m-tiedosto)
    Demo:
    ../mlteht/mlGraphics/demo/html/mlGr01D.html

    Avainsanat:Matlabgrafiikka,mlGraphics

    Matlabfunktioita: linspace, plot, hold on, figure, subplot,


  2. mlGr02

    mlGr02
    Piirrä

    1. \(x e^{-x^2}\) välillä \(\left[-2,2\right]\)

    2. \(1/(1+x^2)\) välillä \(\left[-4,4\right]\)

    Vihje: Muista pisteet laskutoimituksissa!

    Vaativuus: 1-
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr02.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/html/mlGr02R.html Publish -> html-muodossa
    ../mlteht/mlGraphics/ratkaisut/mlGr02R.m (m-tiedosto)

    Avainsanat:Matlabgrafiikka,mlGraphics

    Matlabfunktioita: linspace, plot .* .^ ./


  3. mlGr03

    mlGr03
    Piirrä \(\sin(2x)\) sinisellä ja \(cos(5x)\) punaisella, välillä \([-\pi,\pi]\) (samaan kuvaan). Merkitse vielä samaan kuvaan \(\sin(2x)\):n arvot o-merkeillä x-pisteissä \[-\pi, -\pi+h,\ldots -\pi+2h, \ldots, \pi, \textrm{kun}\, h=\pi/8.\]

    Vihje:
    Pane merkille tällaiset grafiikan ulkoasua säätelevät lisäkomennot (jotka voidaan antaa jälkikäteen): grid on/off, hold on/off, axis, xlim, ylim, figure, subplot, shg , close all Tutki toiminta help:stä ja oppaista. Aloita: help plot (tai klikkaa: plot).

    Suorita joitakin kokeiluja (mutta älä uuvuksiin asti tässä vaiheessa vielä).

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr03.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/html/mlGr03R.html html-muodossa
    ../mlteht/mlGraphics/ratkaisut/mlGr03R.m (m-tiedosto)

    Avainsanat:Matlabgrafiikka,mlGraphics

    Matlabfunktioita: plot, hold on, axis,shg, close all


  4. mlGr04

    mlGr04
    Piirrä samaan kuvaan funktioiden \(\sin\,k\,x\) kuvaajat välillä \(\left[0,2\pi\right]\), kun \(k=1\ldots 5\).

    1. Tee komentoikkunassa nuolinäppäintä ( \(\uparrow\) ) hyödyntäen (tai editorissa työskennellen) ja hold on-komentoa käyttäen.

    2. Kirjoita pieni for-silmukka.

    3. Muodosta 5-sarakkeinen matriisi, jonka \(k:s\) sarake on \(\sin\, k x\), missä \(x\) on “x-vektori” .

    Vihje:
    Muodosta ensin \(100\times 5\)-matriisi , jonka sarakkeet ovat \(k\, x,\ \ k=1\ldots 5.\) Kätevimmin matriisikertolaskulla x*K, missä \(x\) on (\(100\)-pituinen) sarakevektori ja \(K\) (\(5\)-pituinen) indeksi(rivi)vektori. Mieti huolellisesti, miksi! Toinen mahdollisuus on käyttää meshgrid-komentoa, jonka käyttöön rutinoidutaan 3d-grafiikan yhteydessä.

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr04.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/html/mlGr04R.html html-muodossa
    ../mlteht/mlGraphics/ratkaisut/mlGr04R.m (m-tiedosto)

    Avainsanat:Matlabgrafiikka,mlGraphics

    Matlabfunktioita: plot, for, ’ulkotulo’


  5. mlGr05

    mlGr05
    Funktio plot sovellettuna matriisiin piirtää matriisin sarakkeet rivi-indeksin funktiona.
    Varsin käyttökelpoinen muoto on plot(x,Y), jossa x on Y:n sarakkeiden pituinen argumenttivektori.

    Suorita seuraavat komennot:

      x=linspace(-1,1);
      V=vander(x);
      plot(x,V); shg

    Jatka tähän tapaan:

      figure   % Avaa uusi grafiikkaikkuna.
      V=fliplr(V);
      W=V(:,1:10);
      plot(x,W);shg

    Selitä, mitä näissä tapahtuu.

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr05.tex

    Avainsanat:Matlabgrafiikka,mlGraphics

    Matlabfunktioita: plot(x,A)


  6. mlGr06

    mlGr06
    Piirrä samaan kuvaan potenssit \( x^1, x^2, \ldots, x^n\), missä \(n\) on muuteltava parametri. Käytä m-tiedostoa (skriptiä) seuraavan ohjeen mukaisesti.
    Avaa uusi m-tiedosto ( FILE-valikosta open->new->script ) ja talleta se vaikkapa nimelle potenssipiirto.m .
    Tai kirjoita komentoikkunassa: >> edit 'potenssipiirto.m'
    Aloita tiedosto jotenkin näin:

       %%  potenssipiirto.m.    
       % Laatinut N.N. 
       close all % Grafiikkaruudun tyhjennys
       n=5;      % Muuteltava parametri
       ...

    Talleta ja kirjoita komentoikkunaan:

    >> potenssipiirto

    Tällöin tiedostossa olevat Matlab-komennot suorittuvat.

    Komennot suorittuvat myös editori-ikkunasta CTR-ENTER :llä. (Mac:ssä yleisesti CTR:n sijasta cmd.)

    (Vihreä nuoli tai F5 toimivat myös.)
    Suorita skripti muutamalla eri n:n arvolla

    1. Tee for-silmukka ja käytä hold on-komentoa uuden kuvan piirtämiseksi vanhan kaveriksi.

    2. Olkoon aluksi vaikka \(n=3, m=7\), missä \(m\) on \(x\)-vektorin pituus. Muodosta matriisit N ja X, missä N koostuu vakiosarakkeista \(1,2,3\) ja X saadaan latomalla kolme \(x\)-saraketta rinnakkain. Tällöin X.^N on matriisi, jonka sarakkeina ovat x-vektorin potenssit \(1,2,3\). Kuva saadaan nyt komennolla plot(x,X.^N). (Yleisesti: plot(x,Y) piirtää kunkin Y-matriisin sarakkeen x:n toimiessa x-akselina, kun x on Y:n sarakkeiden pituinen vektori. (Toimii myös riveittäin, jos x on rivien pituinen.)

      Miten saadaan helpoimmin matriisit X, N ? Standarditapa on tämä:

       >> nind=1:3;
       >> [N,X]=meshgrid(nind,x);

      Suorita ja selvitä itsellesi.

      Tee sitten esim. 100-pituinen x-vektori ja vaihtele myös n:ää ja piirrä sileitä kuvia.
      Lopuksi voit kokeilla, miltä näyttää mesh(nind,x,X.^N) .

      Huom! Tällainen meshgrid-komennon käyttö on rutiinitoimenpide 3d-grafiikan tekemisessä, sen toimintaperiaate on mukava ymmärtää, sitä tämä yrittää palvella.

    3. Helpoin tapa lienee Vandermonden matriisi vander. Siitäpä on eri tehtävä (05), mutta ei ole huonoa harjoitella tässäkin uudestaan.

    Vaativuus: 2-
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr06.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/html/mlGr06R.html Publish -> html-muodossa
    ../mlteht/mlGraphics/ratkaisut/mlGr06R.m (m-tiedosto)

    Avainsanat:Matlabgrafiikka,mlGraphics

    Matlabfunktioita: plot, for, meshgrid, repmat


  7. mlGr07

    mlGr07

    Aihe: 3D-grafiikkaa, korkeuskäyriä

    Olkoon

    \[f(x,y)=\sin(3\,y - x^2+1)+cos(2\,y^2-2\,x).\]

    Piirrä pintakuva ja korkeuskäyräpiirros, jälkimmäinen sekä contour että ezcontour-funktioilla. Tässä on mahdollisuus kokeilla korkeuskäyrien valitsemistapoja, myös clabel. Ota alueeksi vaikka [-2 2 -1 1] .

    Vihje
    Opiskele:
    http://math.aalto.fi/\(\sim\)apiola/matlab/opas/lyhyt/grafiikka.html#sec:3d
    Matlab-help: doc mesh, doc surf, doc contour

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr07.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/html/mlGr07R.pdf Publish -> pdf-muodossa
    ../mlteht/mlGraphics/ratkaisut/mlGr07R.m (m-tiedosto)

    Avainsanat:Matlabgrafiikka,mlGraphics

    Matlabfunktioita: plot, subplot, zoom


  8. mlGr08

    mlGr08.tex

    Olkoon

    \[f(x)=\left (\frac{1+\frac{x}{24}}{1-\frac{x}{12}+\frac{x^2}{384}}\right )^8\]

    Tämä on exp-funktion rationaaliapproksimaatio, ns. Pade-approksimaatio. Piirrä kuvaaja välillä [0,4].
    Piirrä samaan kuvaan exp-funktio eri värillä ja eri kuvaan erotus \(f(x)-exp(x)\) Aloita vaikka: x=linspace(0,4,200);

    Vihje:
    Tehtävässä harjoitellaan lausekkeen muodostamista pisteittäisin laskutoimituksin.
    Homma selkeytyy jakamalla pienempiin osiin, ainakin nyt tällaisiin:

    >> x=...;
    >> osoittaja=...;
    >> nimittaja=...;
    >> f=...;  % Huomaa: f on muuttuja (200-pituinen vektori), ei funktio.
    >>         % Tässä ei siten saa kirjoittaa: f(x) = ...

    Opettajalle: Tästä voisi tehdä jatkotehtävän tyyppiä: Vertaa Taylorin sarjaa ja Pade-approksimaatiota. Ja vielä: voisi vaikka opettaa, miten Pade-approksimaatioita muodostetaan.

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr08.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/mlGr08aR.m (m-tiedosto, vihjeen mukainen)
    ../mlteht/mlGraphics/ratkaisut/mlGr08bR.m (m-tiedosto, määritellään funktioksi isolla itseluottamuksella ilman välivaiheita)

    Avainsanat:Matlabgrafiikka,mlGraphics,pisteittäiset laskutoimitukset vektoreilla

    Matlabfunktioita: plot, .* .^ ./


  9. mlGr09

    mlGr09
    Olkoot \(c\) ja \(z_0\) kompleksilukuja. Tällöin rekursion \[z_n = z_{n-1}^2+c\] määräämä dynaaminen systeemi tunnetaan kvadraattisena kuvauksena. Valituille luvuille \(c\) ja \(z_0\) ylläoleva rekursio johtaa kompleksiseen lukujonoon \(z_1,z_2,z_3\ldots\). Tätä jonoa kutsutaan \(z_0\):n kiertoradaksi. Riippuen lukujen \(c\) ja \(z_0\) valinnasta ratojen muotoja on useita.

    Annetulle kiinteälle luvulle \(c\) useimmilla \(z_0\) rata lähestyy ääretöntä (eli \(|z_n|\) kasvaa rajatta kun \(n \rightarrow \infty \).) Joillakin \(c\) ja \(z_0\) rata kuitenkin suppenee kohti jotain periodista silmukkaa (eli arvot kiertävät \(z_0\) jollain tietyllä etäisyydellä \(|z_n|\)); joillakin alkuarvoilla rata on kaoottinen. Nämä alkuarvot \(z_0\) ovat kuvauksen Julia-joukko.

    Tässä harjoituksessa kirjoitetaan MATLAB-ohjelma, joka laskee ns. täytetyn Julia-joukon, joka koostuu niistä alkioista \(z_0\) joiden radat jollain annetulla arvolla \(c\) eivät kasva rajatta – tavallinen Julia-joukko on tämän joukon reuna.

    On näytetty, että jos \(|z_n|\) kasvaa isommaksi kuin 2 jollain arvolla \(n\), rekursio kasvaa rajatta. Arvoa \(n\) jolla tämä tapahtuu, kutsutaan tässä tehtävässä pisteen \(z_0\) ’’pakonopeudeksi.’’

    Aloita kirjoittamalla funktio n = escapeVelocity(z0,c,N), jossa \(N\) on jokin yläraja pakonopeuksille (erityisesti: jos \(|z_n|<2 \, \, \forall \,\, n<N\), funktion tulee palauttaa \(N\). Näin vältetään ikuiset silmukat).

    Luodaksesi Julia-joukon kirjoita funktio M=julia(zMax,c,N). Argumentti zMax määrää kompleksitasosta nelikulmion \(|Im(z)|<z_{max},|Re(z)|<z_{maz}\). \(c\) ja \(N\) ovat samat argumentit kuin edellä, palautettava matriisi \(\mathbf{M}\) koostuu määritetyn hilan pakonopeuksista.

    Aloita funktion julia kirjoittaminen määrittelemällä \(500\times500\) hila reaalitasossa, luo sen avulla vastaava hila \(\mathbf{Z}\) kompleksitasolle, ja aja funktio escapeVelocity jokaiselle matriisin \(\mathbf{Z}\) alkiolle.

    Vihje: Reaaliakselin väli \([a,b]\) määritellään MATLABissa komennolla I = linspace(a,b,n), missä n on haluttujen pisteiden määrä, kuten esim. 500. Hila reaalitasolle määritellään komennolla [x y] = meshgrid(t1,t2) , missä t1 ja t2 ovat välejä reaaliakselilta. Tästä luodaan kompleksitasoa peittävä hila komennolla z = x+i*y.

    Kompleksiluvun modulin saa selville itseisarvofunktiolla abs.

    Vaativuus: 2+
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr09.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/mlGr09R.m Funktio julia, talleta tiedostoon julia.m, aja (aluksi) ’help julia’-esimerkki

    Avainsanat:Matlabgrafiikka,mlGraphics, iteraatio, Julia-joukko, Julia-set, dynaaminen systeemi, fraktaali, fractal

    Matlabfunktioita: meshgrid, imagesc


  10. mlGr10

    mlGr10.tex

    Kirjan Anne Greenbaun - T.P. Chartier: Numerical Methods www-sivulla:
    http://academics.davidson.edu/math/chartier/Numerical/matlab.html
    on m-tiedosto plotTaylor.m

    Hae se sieltä tai ota tästä:

    %  Plot the first four Taylor polynomials for exp(x).
    
    x = [-3:.01:2];                   % Set x values
    fx = exp(x);
    p0 = ones(size(x));               % Compute Taylor polynomials
    p1 = p0 + x;
    p2 = p1 + (x.^2)/2;
    p3 = p2 + (x.^3)/6;
    subplot(2,2,1)                    % Plot results
    plot(x,fx,'--', x,p0,'-');
    legend('f(x)','P_0(x)')
    title('plot of P_0(x) and f(x)')
    subplot(2,2,2)
    plot(x,fx,'--',x,p1,'-');
    legend('f(x)','P_1(x)')
    title('plot of P_1(x) and f(x)')
    subplot(2,2,3)
    plot(x,fx,'--',x,p2,'-');
    legend('f(x)','P_2(x)')
    title('plot of P_2(x) and f(x)')
    subplot(2,2,4)
    plot(x,fx,'--',x,p3,'-');
    legend('f(x)','P_3(x)')
    title('plot of P_3(x) and f(x)')

    Leikkaa/liimaa Matlab- tai Octave-komentoikkunaan ja selvitä ja omaksu kunkin komennon merkitys.
    Täydennä komennot skriptiksi, joka piirtää lisäksi polynomit \(P_4\) ja \(P_5\). Anna subplot- komennot muodossa subplot(3,j,k).

    Vaativuus: 1

    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr10.tex

    Avainsanat, keywords: mlGraphics, Matlab graphics, grafiikkaa Matlab:lla, plot, subplot, legend, Taylor polynomial


  11. mlGr11

    mlGr11
    Kirjoita MATLAB-skripti, joka laskee ja piirtää seuraavat funktiot:

    1. \(y = 5\cos(3\pi x)\). Laske arvo 101:ssä tasavälisessä pisteessä välillä \(0\le x \le 1\).

    2. \(y = \frac{1}{1+x^2}\) välillä \(-5 \le x \le 5\) .

    3. \(y = \frac{\sin(7x) -\sin(5x) }{\cos(7x) + \cos(5x)} \). Laske arvo 200 tasavälisessä pisteessä välillä \(-\frac{\pi}{2} \le x \le \frac{\pi}{2}\). Käytä axis komentoa asettaaksesi näytettävät akselit väleille \(-2 \le x \le 2\) ja \(-10 \le y \le 10\).

    Vihje:
    Jako- ja kertolaskujen tapauksessa ole tarkkana: haluatko matriisioperaation vai alkioittaisen operaation? Alkioittaiset operaatiot erotetaan matriisioperaatioista operaattorin eteen sijoitettavalla 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.
    Huomaa (c)-kohdassa, että nimittäjällä on nollakohtia. Piirrä osoittajan ja nimittäjän kuvaajat erikseen samaan koordinaatistoon (eri väreillä). Mieti nyt sitäkin, miksei kuvaaja “räjähdä” kaikissa nimittäjän nollakohdissa.

    Vaativuus: 2-
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr11.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/html/mlGr11R.html Publish -> html-muodossa
    ../mlteht/mlGraphics/ratkaisut/mlGr11R.m (m-tiedosto)

    Avainsanat: Matlabgrafiikka,mlGraphics

    Matlabfunktioita: linspace, plot, axis, legend, find


  12. mlGr12

    mlGr12

    Lataa tältä, alla mainitun kirjan (AG-TC) webbisivulta skripti plotfunction1.m

    Skriptin ajo piirtää funktion \[f(x)=2\cos\, x - e^x, -6 \leq x \leq 3\] kuvaajan sanotulla välillä ja “näkee”, että funktiolla on 3 nollakohtaa ko. välillä. Lisää skriptiin grid on sopiviin kohtiin.
    Zoomaamalla kapeammalle välille saadaan tarkempi arvio. Tämä on tehty alempaan ‘’’subplot-ruutuun’’.

    Huomaa, että alemman ruudun zoomattu funktio näyttää melkein lineaariselta. (Tapahtuuko näin yleensä ?)

    1. Muokkaa skriptiä niin, että zoomattu ruutu keskittyy haarukoimaan vasemmanpuolimmaista juurta.

    2. Editoi skriptiä tutkiaksesi funktiota

      \[f(x)=\frac{4x \sin \, x -1}{2+x^2}, -1 \leq x \leq 4.\]

      Piirrä zoomattu kuva pienimmän positiivisen juuren ympärille. Määritä kuvasta juurelle likiarvo \(x_0\) 3:n numeron tarkkuudella ja laske funktion arvo \(f(x_0)\)
      Vihje: Arvon laskemiseksi voit joko toimia tähän tapaan:

      >> x0= ...
      >> % Editoi "copy/pastella" f:n lauseke ja suorita (esim. CTR-ENTER)
      >> % Tai kelaa nuolella komentoja, tai hae "command historysta"

      Toinen, elegantimpi tapa on määritellä f funktioksi tyyliin:
      f=@(x) 4*x./....

    Vaativuus: 2-
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr12.tex

    Aputiedostoja,viitteitä
    Anne Greenbaum Timothy P. Chartier. Numerical Methods. Princeton U.P., 2012.

    (AG-TC) Anne Greenbaum - Timothy P. Chartier: Numerical Methods, Princeton U.P. 2012
    Kirjan nettisivu: http://academics.davidson.edu/math/chartier/Numerical/matlab.html

    Avainsanat:Matlabgrafiikka,mlGraphics, nollakohta, zero

    Matlabfunktioita: plot, subplot, zoom


  13. mlGr13

    Funktion \(g(x)\) kiintopiste on piste \(x_0\), jolle pätee \(g(x_0)=x_0\). Kiintopisteen sijaintia voi hakea piirtämällä kuvaajat \(y=g(x)\) ja \(y=x\) samaan kuvaan ja arvioimalla käyrien leikkauspistettä graafisesti.

    Esitä arvio funktion \(g(x)= \cos(x)\) kiintopisteelle graafisen tarkastelun avulla.

    Vihje: Kaksi käyrää voidaan piirtää samaan kuvaan joko yhdellä plot käskyllä : plot(x1,y1,x2,y2), tai vaihtoehtoisesti voidaan käyttää MATLABin hold on optiota:

    plot(x1,y1);
    hold on 
    plot(x2,y2);
    hold off

    Grafiikkaikkunan zoomaus-valinnalla (tai zoom-komennolla) voit tarkentaa arviota. Pitemmälle pääset valitsemalla uuden, ahtaamman välin linspace-komennolle ja ajamalla piirtokomenno(n/t) uudestaan (nuolinäppäimellä komentoikkunassa tai editorissa CTR-ENTER).

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr13.tex

    Avainsanat:Matlabgrafiikka,mlGraphics, kiintopiste, fixed point

    Matlabfunktioita: linspace, plot,zoom


  14. mlGr15

    mlGr15

    Piirrä MATLABilla alla oleva kuva.

    image

    image

    Vihje: Selityslaatikko luodaan komennolla legend, akselikuvaukset komennoilla xlabel ja ylabel. \(\pm\) saadaan Latex-tyyliin \pm. Tutki help:sta yksityiskohdat.

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr15.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/html/mlGr15R.html
    ../mlteht/mlGraphics/ratkaisut/mlGr15R.m

    Avainsanat, keywords: mlGraphics, Matlab graphics, grafiikkaa Matlab:lla


  15. mlGr19

    Tässä tehtävässä tutkitaan kuvien, matriisien ja singulaariarvojen yhteyksiä.

    Matriisin \(\mathbf{A} \in \mathbb{R}^{m\times n}\) singulaariarvohajotelma on \[\mathbf{A} =\mathbf{U}\mathbf{S}\mathbf{V}^T,\] missä matriisi \(\mathbf{S}\) on diagonaalimatriisi, ja matriisit \(\mathbf{U}\) ja \(\mathbf{V}\) ovat ortogonaalisia neliömatriiseja. Matriisin sisältämää informaatiota voidaan tietyssä mielessä kompressoida tiputtamalla osia singulaariarvohajotelmasta pois; on todistettavissa että (MATLABilla ilmaistuna) U(:,1:k)*S(1:k,1:k)*V(:,1:k)’ on paras mahdollinen \(\mathrm{rank}(k)\)-approksimaatio matriisille \(\mathbf{A}\).

    Kuva voidaan ajatella \(m \times n\) matriisina, missä \(i,j\) alkio ilmaisee vastaavassa paikassa olevan pikselin väriarvon. Tutkitaan sitten kuinka singulaariarvoja voidaan käyttää hyväksi kuvien pakkaamisessa ja hahmontunnistuksessa.

    Lue haluamasi kuva sisään MATLABin imread komennolla. Komento luo (yleensä, mutta hieman kuvasta riippuen), \(m \times n \times 3\) matriisin. Tämä vastaa RGB-esitystä: ensimmäisessä kerroksessa on punaisen värin intensiteetit, toisessa vihreän ja kolmannessa sinisen. Muuta tämä matriisi harmaaskaalaan komennolla rgb2gray. Tämän jälkeen tee matriisille singulaariarvohajotelma komennolla [u s v] = svd(P), missä P on kuvasi matriisiesitys. Tutki sitten millä \(k\):n arvolla komentojono

    >> M = u(:,1:k)*s(1:k,1:k)*v(:,1:k)';
    >> image(M)

    tuottaa havaittavia tuloksia. Pitäisi myös päteä, että kuvan isommat hahmot alkavat erottua ensin, mikä tekee singulaariarvoista huomattavan tehokkaan työkalun hahmontunnistuksessa.

    Vihje: Kuvan ulottuvuuksien ei kannata olla kovin isoja: singulaariarvohajotelma on raskas laskettava. Jos haluat lisähaastetta, erottele kuvan värikerrokset, tee hajotelma niille erikseen, ja kokoa tulokset. Näin saat aikaan värikuvia.

    Vaativuus: 2+
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr19.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/mlGr19R.m Kutsuttava funktio “picturesque”.
    *** TEE ajoskripti ***

    Avainsanat:Matlabgrafiikka,mlGraphics,mlLinalg,kuvankasittely,singulaariarvohajotelma, singularvaluedecomposition, SVD, data compression, tiedon pakkaus

    Matlabfunktioita: imread, imshow,im2double, svd


  16. mlGr21

    Luo \(n \times n\) matriiseja \(\mathbf{A}\) jollakin sopivalla \(n\) (s.o. enemmän kuin kymmenen, vähemmän kuin sata), joiden alkiot ovat muotoa \[\mathbf{A}_{i,j} = \frac{1}{i-j+t}.\] Piirrä matriisin \(\mathbf{A}\) ominaisarvot tasoon, kun \(t\) vaihtelee välillä \([-1,1]\). Mitä havaitset? Voisivatko perättäisten ominaisarvojen radat esittää jotain?

    Vihje: Mieti miten matriisin voisi määritellä ilman silmukkaa. Matriisin ominaisarvot lasketaan komennolla eig – huomaa, että jos matriisi on kovin iso, niin laskeminen voi kestää kauan.

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr21.tex

    ../mlteht/mlGraphics/ratkaisut/mlGr21R.m Funktiotiedosto, kutsu: >>mlGr21R

    Avainsanat:Matlabgrafiikka,mlGraphics,mlLinalg, eigenvalues, ominaisarvot

    Matlabfunktioita: plot, eig


  17. mlGr23

    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). (** Vaatii tarkennuksen “edellä esiintyneisiin” **)
    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ä lineaarikuvaustehtävissä.

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr23.tex

    Avainsanat:Matlabgrafiikka,mlGraphics

    Matlabfunktioita: plot, axis equal, axis square


  18. mlGr24

    mlGr24
    Kirjoita skripti, jolla piirrät seuraavat kuvaajat.

    1. \(f(x)=|x-1|, -3 \leq x \leq 3. \) ( abs)

    2. \(f(x)=\sqrt{|x|}, -4 \leq x \leq 4. \) (sqrt)

    3. \(f(x)=e^{-x^2} , -4 \leq x \leq 4\). (exp)

    4. \(f(x)=\frac{1}{10x^2 +1}, -2 \leq x \leq 2\). (Muista piste, myös jakolaskussa.)

    Kun olet ensin piirtänyt kaikki, editoi jokaiseen kappaleeseen subplot-komento siten, että saat kaikkiaan \(2\times 2\)-grafiikkaruudukon, joissa kussakin asustaa yksi noista kuvista. Komenna jokaisessa grid on ja shg (show graphics).

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlGraphics/mlGr24.tex

    Ratkaisu:
    ../mlteht/mlGraphics/ratkaisut/html/mlGr24R.html publish -> html
    ../mlteht/mlGraphics/ratkaisut/mlGr24R.m (m-tiedosto)

    Aputiedostoja,viitteitä
    [AG-TC] Anne Greenbaum - Timothy P. Chartier: Numerical Methods, Princeton U.P. 2024
    Kirjan nettisivu: http://academics.davidson.edu/math/chartier/Numerical/matlab.html

    Avainsanat:Matlabgrafiikka,mlGraphics

    Matlabfunktioita: abs,sqrt,exp, plot, subplot, grid on, shg, figure