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/Basic

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

Sisällysluettelo


  1. mlBas000

    mlBas000

    Matlab-pikaohje

    1. Matlab-työ aloitetaan pienimuotoisilla kokeiluilla antamalla komentoikkunassa komentoja tyyliin
      >> v=1:10;

    2. Skripti: Vakavampi Matlab-työ tehdään kirjoittamalla editorilla tiedostoon, esim. ajo.m. Tiedosto kannattaa rakentaa muotoon:

        %% Otsikko
        %
        %% Kappale 1
        % Selitystä
        % ...         
        komento       % Kappaleen 1 SUORITUS: CTR-ENTER
        komento
         ...
        %% Kappale 2
        %
        komento       % Kappaleen 2 SUORITUS: CTR-ENTER
        komento
         ...
        %%

      Julkaisu: publish

    3. Komennon suorittama tulos tulee ruudulle ENTER-painalluksen jälkeen (kuvat erilliseen ikkunaan). Jos haluat estää tulostuksen, päätä komento puolipisteeseen. Jos myöhemmin haluat katsoa muuttujan sisällön, kirjoita sen nimi (ilman puolipistettä). Jos muuttuja on suuri matriisi, kannattaa ensin katsoa sen koko size(A) tai sen jotain osaa, esim. A(1:10,1:10). Tai klikkaa “workspace”-ikkunan muuttujaikonia.

    4. Edellisen komennon tulos on muuttujassa ans. Yleensä on suositeltavaa antaa tulokselle oma nimi tyyliin nimi= ...

    5. Nuoliylös-näppäimellä (\(\uparrow\)) voi selata aikaisempia komentoja. Huomaa myös Command history.
      Käytä ahkerasti komentoja help, doc.

    6. format long : Tulostetaan enemmän numeroita (n. 16). Laskutarkkuuteen tämä ei vaikuta.
      format rational laskee rationaaliluvuilla.
      format short: Paluu oletustulostukseen.

    7. Matriisi saadaan aikaan tyyliin: A=[2 4 3;0 1 -1;3 5 7]. Vektori saadaan näin:
      v=[1 2 3]. Pystyvektorissa käytetään erottimena puolipistettä (tietysti, vrt. matriisi A yllä). Matriisikertolaskun merkki on *

    8. Matriisin A transpoosi: A’ (reaalisessa tapauksessa).

    9. Kokonaislukuvektori: Esim 1:10 tai 1:2:20. Myös linspace. Pystyvektoriksi transponoimalla.

    10. A(i,j) A:n alkio (i,j).
      A(2,:) A:n 2. rivi
      A(:,3) A:n 3. sarake
      A(1:4,1:4) osamatriisi
      Matriisin osaa voi päivittää, vaikkapa:
      A(1:4,1:4)=ones(4,4) tai
      A(2,:)=A(2,:)-2*A(:,1) (Gaussin rivioperaatio).

    11. Matriisien liittäminen: Jos \(A\):lla ja \(B\):llä on yhtä monta riviä, ne voidaan liittää peräkkäin: [A b]
      (tai [A, b]). Jos yhtä monta saraketta, niin allekkain: [A;B]

    12. Laskutoimitukset tarkoittavat matriisilaskua. Siis esim.
      A*B, A^p (jälkimmäinen mahdollinen vain neliömatriisille)

    13. Vektorien ja matriisien (samankokoisten) pisteittäinen eli alkioittainen laskenta tapahtuu lisäämällä eteen piste. Esim: u=[1 2 3], v=[-2 -2 -2], u.*v.
      Toinen operandi voi olla skalaari. Siten esim. vektorin \(u\) kaikki komponentit voidaan korottaa toiseen komennolla u.^2
      (Ei siis tarvitse tehdä: u.^(2*ones(size(u))), joka tietysti toimii.)

    14. Piirtämistä varten muodostetaan \(x\)-vektori, joka edustaa diskretoitua \(x\)-akselia ja lasketaan a.o. funktion arvo vektoriin \(y\).
      Piirtoesim:
      x=linspace(-pi,pi); y=sin(x); plot(x,y)
      Huom! Matlab-funktioita voi yleensä soveltaa vektoriin ja tulokseksi saadaan funktion arvojen muodostama vektori. Laskutoimitukset \(+,-\) operoivat vastinalkioittain ("pisteittäin"). Koska kerto- ja jakolasku sekä potenssiin korotus ^ on varattu matriisilaskutoimituksille, on "pisteittäin" operoitaessa lisättävä piste (.) ao. laskutoimitusmerkin eteen. (\(+,-\)) merkkien eteen ei saa lisätä, ne ovat jo valmiiksi pisteittäisiä.)
      Jos haluamme muodostaa vaikkapa funktion \(x^2\) arvot annetun \(x\)-vektorin pisteissä ja \(x\)-vektorina olkoon välin [-1,1] diskretointi \(60\):een osaan, voimme laskea ja piirtää näin:
      x=linspace(-1,1,60); y=x.^2; plot(x,y) . Toinen tapa diskretoida on (:), esim: x=a:h:b;
      jossa siis annetaan askeleen pituus h (askelten lukumäärän sijasta).

      Kts. help plot, help :, help colon

    15. Yhden rivin funktion määritys, funktiokahva

       >> f=@(x) x.*exp(x) % Määrittely
       >> f(-1:.1:1)       % Käyttö
       >> g=@(x,y) x.^2 + y.^2   % Määrittely
       >> x=[.1 .2 .3]; y=1:3; g(x,y)  % Käyttö
    16. Lineaarisen yhtälösysteemin ratkaisu
      Yhtälösysteemi: \(A\, x = b\)

       >> A=rand(3,3);
       >> b=ones(3,1);
       >> x=A\b
       >> [A*x b]       % Tarkistus
    17. 3d-piirto: Pintojen ja korkeuskäyrien piirtämiseksi tarvitaan korkeusarvojen matriisi xy-tason pistehilan päällä. Se aikaansaadaan helpoimmin (ja rutiininomaisesti) meshgrid-komennolla. Jos haluaisimme piirtää vaikkapa funktiopinnan \(f(x,y)=\sin\,x \cos\,y\) neliössä \(\left[-\pi,\pi\right]\times\left[-2\pi,2\pi\right]\), ja hilapisteitä olisi x-suunassa \(25\) ja y-suunnassa \(50\) kpl., tehtäisiin näin:

       >> x=linspace(-pi,pi,25);
       >> y=linspace(-2*pi,2*pi,50);
       >> [X,Y]=meshgrid(x,y);
       >> Z=sin(X).*cos(Y);
       >> mesh(x,y,Z)    % Rautalankakuva 
       >> surf(x,y,Z)    % Kaunis pintakuva (myos surfl, surfc, colorbar,...)
       >> contour(x,y,Z) % Korkeusk. piirros 

      Lue myös Lyhyen Matlab-oppaan kohdasta:

      http://math.aalto.fi/ apiola/matlab/opas/lyhyt/grafiikka.html#surf

    Tiedoston Latex-koodi:
    ../mlteht/mlBasic/mlBas000.tex

    Avainsanat: Matlab perusteet, harjoitus-pikaohje, harjoitusohje


  2. mlBas001

    mlBas001

    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)

    Suorita doc length, doc size, tai etsi Matlabin Help index:n avulla (lisä)tietoa komennoista.

    Vaativuus: 1-
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas001.tex

    Ratkaisu:
    m-tiedosto

    Avainsanat:Matlabperusteet,mlBasic, vektoriperusteet,sisätulo,ulkotulo
    Matlabfunktioita: *, length,size


  3. mlBas002

    mlBas002
    Muodosta vektori, joka koostuu parillisista kokonaisluvuista välillä \(\left[21, 66\right]\).

    Vaativuus: 1-
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas002.tex

    Ratkaisu:
    pdf-muodossa
    m-tiedosto

    Avainsanat:Matlabperusteet,mlBasic, vektoriperusteet
    Matlabfunktioita: help colon (:)


  4. mlBas003

    mlBas003.tex
    Olkoon x=[2 5 1 6 7 4 3 2 1 11].

    1. Lisää jokaiseen alkioon luku 12

    2. Lisää 3 parittomien indeksien osoittamiin alkioihin.

    3. Laske vektorin alkioiden neliöjuuri.

    4. Laske vektorin alkioiden neliöt ja neliösumma.

    Vihje:
    Helppo tapa vektorin v indeksivektorin muodostamiseen:
    ind = 1:length(v)
    Miten siis parittomat indeksit?
    Summaus sujuu helposti: help sum

    Vaativuus: 1-
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas003.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas003R.m (m-tiedosto)

    Avainsanat:Matlabperusteet,mlBasic, vektoriperusteet, indeksointi, vektorien muodostus,vektorioperaatiot
    Matlabfunktioita: help colon (:),length,sqrt


  5. mlBas004

    mlBas004

    Olkoon x = [3 2 6 8 0 -1]’ ja y=[4 1 3 5 0 0]’

    1. Lisää vektorin x alkioiden summa vektoriin y

    2. Korota vektorin x alkiot vektorin y vastinalkioiden osoittamiin potensseihin.

    3. Jaa y:n jokainen alkio vektorin x vastinalkiolla.

    4. Kerro x:n jokainen alkio y:n vastaavalla alkiolla ja talleta tulos muuttujaan z

    Vihje: Tässä harjoitellaan aritmetiikkaa vektorilausekkeilla. Muista piste (.) laskuoperaation edessä (paitsi \(+,-\)). Summaukseen: help sum
    Lue: help NaN ja help inf .
    Huomaa: Matlab:lle \(0^0 = 1\) (eikä NaN)

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas004.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas004R.m (m-tiedosto)

    Avainsanat:Matlabperusteet,mlBasic, vektoriperusteet, indeksointi, vektorien muodostus,vektorioperaatiot
    Matlabfunktioita: help colon (:),length,sqrt


  6. mlBas005

    mlBas005
    Muodosta vektori x, joka koostuu alkioista:

    1. \( 2, 4, 6, 8,\ldots,20\)

    2. \( 10, 8, 6, 4, 2, 0, -2 ,-4,\ldots,-10\)

    3. \( 1, 1/2, 1/3, 1/4, 1/5,\ldots,1/10\)

    4. \( 0, 1/2, 1/3, 1/4, 1/5,\ldots,1/10\)

    Vihje: (c) ja (d): Muista pisteittäinen jakolasku: skalaari./vektori. Voit selkeyttää komentamalla:
    format rational
    Paluu oletusformaattiin: format

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas005.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas005R.m (m-tiedosto)

    Avainsanat:Matlabperusteet,mlBasic, vektoriperusteet, indeksointi, vektorien muodostus,vektoriaritmetiikka
    Matlabfunktioita: help colon (:), help format


  7. mlBas006

    mlBas006
    Määrittele vektorit

      x = [1 2 3 4 5]
      y = [0 2 4 6]
      z = [-4 -2 0 2 4 ]

    Kokeile seuraavia laskutoimituksia/komentoja:

       x.*z 
       x*z'  
       x*z               % Miksi virhe ?
    
       x.^2              % Mika vektori?
       x^2               % Miksi virhe ?
    
       sqrt(x*x')
       sqrt(sum(x.^2))   % Miksi sama tulos kuin edella?
       norm(x)              

    Vihje: (c) ja (d): Muista pisteittäinen jakolasku: skalaari./vektori. Voit selkeyttää komentamalla:
    format rational
    Paluu oletusformaattiin: format

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas006.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas006R.m (m-tiedosto)
    ../mlteht/mlBasic/ratkaisut/mlBas006R.txt (m-tiedoston kopio .txt [että kaikki selaimet ymmärtää])

    Avainsanat:Matlabperusteet,mlBasic, vektoriperusteet, indeksointi, vektorien muodostus,vektoriaritmetiikka, matriisitulo, vektorinormi
    Matlabfunktioita: sqrt, (.*), (*), norm


  8. mlBas007

    mlBas007
    Määrittele matriisit

    \[u=\left[ \begin {array}{c} 3\\ 4\\ 5\\ 6\end {array} \right] \ \ v= \left[ \begin {array}{c} 0\\ 2\\ 4\\ 6\end {array} \right] \ \ C= \left[ \begin {array}{ccc} 1&2&3\\ 1&3&6 \\ 1&4&9\end {array} \right] \ \ A= \left[ \begin {array}{cccc} 1&2&3&4\\ 5&6&7&8 \\ 9&10&11&12\end {array} \right] \ \ B= \left[ \begin {array}{cccc} 3&4&5&6\\ 2&1&0&-1 \\ 5&4&2&0 \\ 1&2&1&1 \end {array} \right]\] Selvitä (ilman Matlabia), mitkä seuraavista laskutoimituksista on määritelty, ja kerro sanallisesti, mitä ne tekevät. Tarkista Matlab:lla.

       A*C   C*A    C^2    C.^2   A^2    A.^2  

    Vihje Tee skripti, jossa kukin laskutoimitus on omana %%-merkeillä erotettuna lohkonaan tyyliin:

    %%
    A*C % Lyhyt selitys  
    %%
    C*A % Lyhyt selitys
    %%
    ...

    Vie kursori kuhunkin lohkoon vuorollaan ja CTR-ENTER, ja seuraa Matlab-komentoikkunan tapahtumaa.

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas007.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas007R.m (m-tiedosto)

    Avainsanat:Matlabperusteet,mlBasic,taulukko-operaatiot, matriisitulo, vektorinormi
    Matlabfunktioita: (.*), (*)


  9. mlBas0081

    mlBas0081

    Olkoot

    \(A=\left[ \begin {array}{cc} 10&-3\\ 4&2 \\ \end {array} \right]\), \(B=\left[ \begin {array}{cc} 1&0\\ -1&2\\ \end{array} \right] \), \(v=\left[ \begin {array}{c} 1\\2\\ \end{array} \right] \), \(w=\left[ \begin {array}{c} 1\\2\\ \end{array} \right] \)

    Laske sekä käsin (ainakin nyt joku) että Matlabilla:

    (a) \(v^T w\), (b) \(v\,w^T\), (c) \(A\,v\), (d) \(A^T v\)
    (e) \(AB - BA\), (f) Vektori x, jolle \(A x = v\)

    Vihje Tee skripti, jossa kukin laskutoimitus on omana %%-merkeillä erotettuna lohkonaan tyyliin:

    %% Matriisien muodostus
    A =[..;..], B=...
    %% (a)
     
    %% (b)
    ...
    
    %%
    ...

    Vie kursori kuhunkin lohkoon vuorollaan ja CTR-ENTER, ja seuraa Matlab-komentoikkunan tapahtumaa.

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas0081.tex

    Ratkaisu: (Tuskin tarpeen)

    Avainsanat:Matlabperusteet,mlBasic,taulukko-operaatiot, matriisitulo
    Matlabfunktioita: (.*), (*), Lineaarinen yhtälöryhmä (\)


  10. mlBas008

    mlBas008

    Edellisen tehtävän lyhennetty versio.

    Määrittele matriisit

    \(A=\left[ \begin {array}{ccc} 1&2&3\\ 1&3&6 \\ 1&4&9\end {array} \right]\) \(B=\left[ \begin {array}{cccc} 1&2&3&4\\ 5&6&7&8 \\ 9&10&11&12\end {array} \right] \),

    Kokeile ja selitä:

          A*B  B*A  A^2  A.^2  B^2  B.^2 

    Vihje Tee skripti, jossa kukin laskutoimitus on omana %%-merkeillä erotettuna lohkonaan tyyliin:

    %%
    A*C % Lyhyt selitys  
    %%
    C*A % Lyhyt selitys
    %%
    ...

    Vie kursori kuhunkin lohkoon vuorollaan ja CTR-ENTER, ja seuraa Matlab-komentoikkunan tapahtumaa.

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas008.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas008R.m (m-tiedosto)

    Avainsanat:Matlabperusteet,mlBasic,taulukko-operaatiot, matriisitulo
    Matlabfunktioita: (.*), (*)


  11. mlBas009

    mlBas009
    Vrt. opas:
    http://math.tkk.fi/apiola/matlab/opas/mini/vektgraf.html#alkulukuskripti

    1. Avaa uusi m-tiedosto (skripti) vaikkapa alkulukuja.m . Kirjoita siihen komennot, joilla saat selville kaikkien korkeintaan N:n suuruisten alkulukujen lukumäärän ja summan. Laske lisäksi lukumäärän suhde kaikken lukujen \(\leq N\) lukumäärään, ja myös sama summille.

    2. Tee edellisen pohjalta funktio tiedostoon alkulukulasku.m :

        function [summa, lkm]=alkulukulasku(N)
        ...
        summa =... ;
        lkm =...;
        end

    Vihje (a): Aloita tiedosto näin:

       %% Selita, mita skripti tekee ja vaikka oma nimi, pvm. ym.
       N = 100  
       alkuluvut= ...
       lkm = ...
       summa= ...  
       ...

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas009.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas009R.m (m-tiedosto)

    Avainsanat:Matlabperusteet,mlBasic,skripti, funktiotiedosto,m-tiedosto, alkuluvut, primes
    Matlabfunktioita: primes, sum


  12. mlBas010

    mlBas010.tex

    1. Miten kääntäisit vektorin v alkiot vastakkaiseen järjestykseen kaksoispisteen (:) avulla?

    2. Entä matriisin A sarakkeet, vastaavasti rivit?

    3. Miten limität (“merge”) kaksi samanpituista vektoria \(u\) ja \(v\)?
      Tarkoitus on siis muodostaa vektori \(w=\left[u_1,v_1,u_2,v_2,\ldots\right]\)

    Vihje (a-b) Voit verrata Matlabfunktioin: fliplr, flipud "LeftRight, UpDown" (Mieti ensin itse!)
    (c) Liitä vektorit allekkain ja jonouta näin saatu 2-rivinen matriisi sarakkeittain (ovelaa). (Sarakkeittain jonoutus matriisille \(A\) saadaan näin: A(:).)
    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas010.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas010R.m (m-tiedosto)

    Avainsanat:Matlabperusteet,mlBasic,fliplr,flipud, kaksoispiste (:), kaanteinen jarjestys, matriisin jonoutus, “merge”, limitys
    Matlabfunktioita: fliplr,flipud, kaksoispiste, colon (:)


  13. mlBas011

    mlBas011
    Matriisin kokoaminen osista, lohkomatriisit, skriptit

    Tutustu helpin avulla funktioihin: eye, ones, zeros, diag, size.
    Aloita sitten hommat avaamalla uusi skripti-tiedosto, jonne kirjoitat kommentit ja komennot.

    Olkoot \(Y_{n\times k}\) ja \(N_{n\times k}\) ykkösistä ja vastaavasti nollista koostuvia \(n\times k\)-matriiseja ja olkoon \(I_{n\times n}\) yksikkömatriisi. Muodosta seuraavat (lohko)-matriisit esim. arvoilla \(n=4, k=3.\) Rakenna skripti siten, että näitä on helppo muutella.

    \[A=\left[ \begin {array}{cc} I_{n\times n}&Y_{n\times k}\\ N_{k\times n}&I_{k\times k}\end {array} \right] , \ \ \ B=\left[ \begin {array}{cc} N_{n\times n}&I_{n\times n}\\ -I_{n\times n}&N_{n\times n}\end {array} \right]\]

    1. Poimi \(A:\)n pää- ja sivulävistäjä. Neuvo: Jälkimmäisessä on hyötyä vaikkapa fliplr-komennosta.

    2. Poimi B:n “alalävistäjät”, jotka alkavat 4:n askeleen päässä päälävistäjästä 1. vaaka- ja 2. pystysuunnassa. (Edelleen: help diag).

    Lopuksi voit käyttää publish-komentoa dokkarin aikaansaamiseksi.

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas011.tex

    Avainsanat: Matlabperusteet,mlBasic,diag, fliplr,flipud,Lohkomatriisit, skriptit


    Matlabfunktioita: diag, fliplr,flipud, kaksoispiste, colon (:)


  14. mlBas012

    mlBas012.tex
    Taikaneliön saa komennolla magic(n) . Muodosta muutamalla pienehköllä n:n arvolla matriisin M=magic(n) rivisummat, sarakesummat, lävistäjäsumma ja sivulävistäjäsumma. Taikaneliöillä on mielenkiintoinen historia. Ne tunnettiin Kiinassa 2000 vuotta e.a.a.
    http://www.mathworks.com/moler/intro.pdf Kts. Molerin kirjan introsta s. 18 alk. Myös Matlab:n dokumentaatiosta.

    Vaativuus: 1-
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas012.tex

    Avainsanat: Matlabperusteet,mlBasic,taikanelio, magic, rivisummat, sarakesummat,diag
    Matlabfunktioita: diag,magic )


  15. mlBas013a

    mlBas013a [Vrt. mlBas013, ota tarvittaessa ensin. ]

    Kun Newtonin menetelmää sovelletaan yhtälöön \(x^2-a=0\), saadaan iteraatiojono \[x_0=1, x_{n+1} = \frac{1}{2}(x_n+\frac{a}{x_n}),\] joka suppenee kohti lukua \(\sqrt{a}\).

    Kirjoita funktio newtsqrt, joka palauttaa Newtonin menetelmällä lasketun likiarvon syötteenä annetulle luvulle \(a\). Käytä while-rakennetta ja lopetusehtoa, joka vertaa uutta iteraatiojonon arvoa edelliseen. (Ei siis vertailua Matlabilla laskettuun lukuun \(\sqrt{a}\), jota toki kannattaa käyttää tarkistukseen.) Alkuarvona voit tässä tapauksessa käyttää vaikka lukua \(a\).

    Vihje

     function x=newtsqrt(a)
     % Lasketaan neliöjuuri a Newtonin menetelmällä.
     % Lopetusehto: Peräkk. termien suhteellinen ero <= 10*eps.
     x=a;
     xuusi=...; % Hiukan epäelegantisti tehdään yksi erillinen iteraatio.
                % Saat keksiä elegantimman tavan.
     tol=10*eps; % Toleranssi hiukan (dekaadin) päälle kone-epsilonin
     while abs(xuusi-x)/x ... 
       x=xuusi;
       xuusi=...;
     end;
     end

    Ohjelmankehityksessä kannattaa sijoittaa aluksi kommentiksi otsikkorivi ja sopivat muut rivit ja ajaa kommentoimattomia komentoja skriptinä. Voit jakaa %%-merkeillä osa-alueisiin. (Tämä siltä varalta, ettet ensikirjoittamalla saisi funktiotasi virheettömäksi.) Toki debuggeri on myös käytössä, mutta skriptikehittely lienee useimmille mieluisampaa.

    Vaativuus 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas013a.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas013aR.m (m-tiedosto)
    ../mlteht/mlBasic/ratkaisut/newtsqrt.m (m-tiedosto, sama koodi kuin edellä, luonnollinen nimi ja sopivin help-tekstein täydennettynä)

    Avainsanat:Matlabperusteet,mlBasic,iteraatio, iteration, while-rakenne, Newtonin menetelma neliojuuren laskentaan
    Matlabfunktioita: while, sqrt


  16. mlBas013

    mlBas013
    Kun Newtonin menetelmää sovelletaan yhtälöön \(x^2-a=0\), saadaan iteraatiojono \[x_0=1, x_{n+1} = \frac{1}{2}(x_n+\frac{a}{x_n}),\] joka suppenee kohti lukua \(\sqrt{a}\). Kirjoita MATLAB-skripti, jolla voit tarkastella tätä suppenemista, kun \(a=5\). Alkuarvona voit tässä tapauksessa käyttää vaikka lukua \(1\).
    Anna tuloksena taulukko T, jossa on sarakkeet (vain numeeriset, ei otsikoita): \[\begin{array}{ccc} n & x(n) & \text{virhe} \\ 0 & 1 & \sqrt{a}-1\\ 1 & x(1) & \sqrt{a}-x(1)\\ \vdots & \vdots & \vdots \\ N & x(N) & \sqrt{a}-x(N) \end{array}\]

    Vihje
    Suppenemisen tutkimisessa kannattaa käyttää for -luuppia. Se toimii syntaksilla

    for k = 1:N-1
        x(k+1)=...
        virhe(k+1)=...
    end

    Oikean lopetusehdon muodostamiseen while-rakenne olisi parempi, mutta tämä nyt ensi harjoitteluun etenkin, kun suppeneminen on hyvin nopeaa.

    Vrt. teht. mlBas013a, jossa pyydetään while-ratkaisua.

    1. Laske vain x-vektori for-luupissa ja muodosta taulukko T liittämällä 3 saraketta vierekkäin. (Yksinkertaisempi ja “Matlabmaisempi” tapa)

    2. Rakenna taulukko T rivi riviltä suoraan for-silmukassa. (Tämäkin on opettavaista, hiukan joudut “indeksishiftaukseen” erityisesti, koska 0 on kielletty indeksi matriiseissa.)

    Jatkovihje

    (a)-tapauksessa kannattaa alustaa (pysty)vektori:
    x=zeros(N+1,1)

    (b)-tapauksessa kannattaa alustaa matriisi:T=zeros(N+1,3);

    Matlab ei alustusta vaadi, mutta isoilla datoilla alustaminen tehostaa huomattavasti, koska muuten tulkki joutuisi allokoimaan uutta muistitilaa joka kierroksella.

    Tulostustarkkuuden säätö: format long (ei vaikuta laskentatarkkuuteen).

    Huom: Indeksointi alkaa 1:stä

    Vaativuus 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas013.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas013R.m (m-tiedosto)
    ../mlteht/mlBasic/ratkaisut/mlBas013R.txt (m-tiedoston kopio .txt-tyyppisenä)

    Avainsanat:Matlabperusteet,mlBasic,iteraatio, iteration, for-loop, Newtonin menetelma neliojuuren laskentaan
    Matlabfunktioita: for, ones, sqrt


  17. mlBas014

    mlBas014 (Matlab), mplBas014 (Maple)
    Maple [Mathematica] , Matlab (erityisesti b)-kohta).
    Tarkastellaan funktiota

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

    1. Maple:
      Määrittele f lausekkeeksi, laske f:n arvo pisteessä \(x=-2.0\) ja piirrä kuvaaja välillä \(\left[-5,5\right]\).

      Matlab:
      Tee vastaava asia Matlabilla, kirjoita skripti. Huomaa, että Matlabissa täytyy ensin antaa x:lle numeerinen (vektori)arvo. (Tai käyttää symbolic toolboxia, jolloin komennetaan ensin: syms x.)

    2. Tee samat asiat, mutta nyt määrittelemällä f funktioksi.

    Vihje

    a)

       Maple                               Matlab:
      
    > f:=1-...                            >> x=...
    > subs...                             >> f=...
    > plot                                >> plot

    b)

        Maple                             Matlab
    
    > f:=x->1-...                        >> f:=@(x) 1-...

    2mm

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas014.tex

    Ratkaisut:

    Matlab: ../mlteht/mlBasic/ratkaisut/mlBas014R.pdf pdf-muodossa
    ../mlteht/mlBasic/ratkaisut/mlBas014R.m (m-tiedosto)

    Maple: ../mplteht/mplBasic/ratkaisut/mplBas014R.pdf pdf-muodossa
    ../mplteht/mplBasic/ratkaisut/mplBas014R.mw (mw-tiedosto)

    Avainsanat:Matlabperusteet,mlBasic,Mapleperusteet,mplBasic, lauseke, funktio
    Matlabfunktioita: (syms)
    Maplefunktioita: subs, eval


  18. mlBas016

    mlBas016
    Avaa Matlabin FILE-valikosta uusi m-tiedosto ja valitse “skripti”. Talleta nimelle cossinplot.m.
    Kirjoita tai kopioi tiedostoon täällä oleva teksti
    http://www.cs.cornell.edu/cv/Books/SCMV/Mfiles/chap1.htm#SinePlot
    Voit kopioda sen myös tästä:

    %% Script File: SinePlot
    % Displays increasingly smooth plots of sin(2*pi*x).
    close all   % Suljetaan mahd. avatut grafiikkaikkunat.
    for n = [4 8 12 16 20 50 100 200 400]
       x = linspace(0,1,n);
       y = sin(2*pi*x);
       plot(x,y)
       title(sprintf('Plot of sin(2*pi*x) based upon n = %3.0f points.',n))
       pause(1)
    end

    Suorita komennot

    • copy/paste:lla istuntoon tai

    • editorin vihreällä nuolella tai F5:llä tai CTR-ENTER tai

    • kirjoittamalla Matlab-istuntoon tiedoston nimi: cossinplot

    Muuta pause-komento muotoon pause(), jolloin komentojono jää odottamaan ENTER-painallusta. Voit kirjoittaa ennen pause- komentoa kehoituksen tyyliin disp(’Paina ENTER:iä jatkaaksesi’). Samalla voit editoida n-vektoria loppupäästä lyhyemmäksi.

    Näin pääset hallitummin katsomaan tilannetta.

    Vaativuus: 1-
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas016.tex

    Avainsanat:Matlabperusteet,mlBasic,Skripti, komentotiedosto, kuva, piirto,plot
    Matlabfunktioita: plot, linspace

    Lähde: [CvL] C. van Loan: Introduction to Scientific computing with Matlab.


  19. mlBas017

    mlBas017
    Vahvista numeerisesti uskoasi matemaattiseen totuuten siitä, että summa \[p(n) = \sum_{k=0}^{n} \frac{1}{16^k} \bigg( \frac{4}{8k+1}-\frac{2}{8k+4}-\frac{1}{8k+5}-\frac{1}{8k+6} \bigg)\] suppenee kohti arvoa \(\pi\) kun \(n \rightarrow \infty\).

    1. Suorita tehtävä vektoroidusti muodostamalla vektori k kaksoispiste (:) - operaattorilla. Muodosta pisteittäistä vektoriaritmetiikkaa käyttäen ensin termien jono: termivektori ja laske summa funktiolla sum.
      Muodosta myös kumulatiivinen summa, jolloin voit tarkkailla suppenemista, funktio on cumsum. Tee taulukko, jossa on indeksisarake ja osasummasarake.

    2. Voit harjoitella myös “epämatlabmaista” skalaariohjelmointia ja for-luuppia

    3. Ohjausrakenteiden harjoittelemiseksi voit tehdä saman myös while-rakenteella, joka sopii yleensä parhaiten iteratiivisiin algoritmeihin. Lopetusehto saadaan virhetoleranssista, eikä kokeilemalla, kuten for-silmukassa.

    Kirjoita skriptiksi, jossa voit vaihdella parametria n, tottakai!

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas017.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas017Rvekt.m
    ../mlteht/mlBasic/ratkaisut/mlBas017Rfor.m
    while-versio puuttuu, teepä itse!

    Avainsanat:Matlabperusteet,mlBasic, vektoriaritmetiikka, kaksoispiste (:), pisteittäinen, pointwise, sum, cumsum, for, while
    Matlabfunktioita: sum, cumsum, for, while, kaksoispiste, colon (:)


  20. mlBas018

    mlBas018
    Huom: Tehtävä on varsin tarkkaan neuvottu. Pituus ei merkitse vaikeutta.

    Tutkitaan heitetyn pallon lentorataa MATLABilla. Aloita luomalla m-tiedosto johon kirjoitat tarvittavat komennot.

    1. Teemme seuraavat lähtöoletukset:

      1. Pallon korkeus \(h\) heittohetkellä on \(1.5m\)

      2. Putoamiskiihtyvyys \(g\) on \(9.8 m/s^2\)

      3. Pallon vauhti \(v\) heittohetkellä on \(4m/s\)

      4. Pallon etenemisvektorin suunta \(\theta\) 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 pinnalla) ja muuttujalla \(y\) pallon korkeutta, seuraavat yhtälöt kuvaavat muuttujien riippuvuutta ajasta ja oletetuista parametreista.

      1. \[x(t) = v \cos\bigg(\theta \frac{\pi}{180}\bigg)t. \text{Muunnetaan kulma radiaaneiksi}\]

      2. \[y(t) = h + v\sin\bigg(\theta \frac{\pi}{180}\bigg) 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: etsi 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.

    Vihje

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas018.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/html/mlBas018R.html
    ../mlteht/mlBasic/ratkaisut/html/mlBas018R.pdf
    ../mlteht/mlBasic/ratkaisut/mlBas018R.m

    Avainsanat:Matlabperusteet,mlBasic,find
    Matlabfunktioita: find, linspace, plot


  21. mlBas019

    mlBas019

    Olkoon \[g(x)= \begin{cases} 0, x \leq 0\\ x, x>0 \end{cases}\]

    Määrittele funktio g Matlab-funktioksi (m-tiedostoon).

    Vihje Voit käyttää funktioita zeros ja max .

    Ehkä vieläkin elegantimmin näin:
    Mieti, millä saat aikaan yksikköaskelfunktion (Heavisiden funktion), joka saa negatiivisilla arvon 0 ja positiivisilla 1. (Tähän riittää 3 merkkiä.) Sillä kerrot funktion \(y=x\).

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas019.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/mlBas019R.html
    ../mlteht/mlBasic/ratkaisut/mlBas019R.m (m-tiedosto)

    Avainsanat: Matlabperusteet,mlBasic, ramppifunktio, paloittain määrittely, zeros, max Matlabfunktioita: zeros, max


  22. mlBas020

    mlBas020
    (Maple ja Matlab)

    Määritä seuraavat summat: \[\sum_{k=1}^{1000} k \ \ \mathrm{ja} \ \ \sum_{k=1}^\infty \frac{1}{k^2} .\]

    Vihje Maple: Kokeile edelliseen sekä sum että add - komentoja, jälkimmäiseen vain sum.

    Matlab: Muodosta vektori 1,2,…1000 ja sitten vain sum. Jälkimmäisessä voit laskea muutamalla, toinen toistaan suuremmalla arvolla. (Numeerisesti et tietenkään voi summata äärettömyyksiin.)

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas020.tex

    Avainsanat:Matlabperusteet,mlBasic, kaksoispiste (:), sum, cumsum
    Matlabfunktioita: sum, cumsum
    Maplefunktioita: sum, add


  23. mlBas021

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

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlBasic/mlBas021.tex

    Ratkaisu:
    ../mlteht/mlBasic/ratkaisut/html/mlBas021R.html
    ../mlteht/mlBasic/ratkaisut/mlBas021R.m (m-tiedosto)

    Avainsanat:Matlabperusteet,mlBasic, >
    Matlabfunktioita: >, colon (:)


  24. mlBas022

    On esitetty, että jatkuva funktio \(f:[0,\infty) \rightarrow [0,\infty)\), joka toteuttaa ehdot

    1. \(f(2x)=2f(x)\), and

    2. \(f(1)=c\)

    on aina muotoa \(f(x)= cx\). Tälle on kuitenkin esitetty seuraava vastaesimerkki: \[f(x) = 2^{-n}x^2+2^{n+1}, x \in [2^n,2^{n+1}),\] \(n = \ldots, -2,-1,0,1,2,\ldots\). Kirjoita funktio \(f\) MATLABissa ja piirrä sen kuvaaja.

    Tehtävän tarkoitus on opastaa MATLABin katto- ja lattiafunktioiden käytössä. Nämä ovat nimeltään floor ja ceil - katso tarkempia tietoja MATLABin helpistä.