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/Käyrän sovitus

Käyrän sovitus, curve fitting
  • Interpolaatio (polynomi-, splini-,muut kantafunktiot)
  • PNS-sovitus
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. mlCF000

    mlCF000.tex
    Interpolaatio ja pienimmän neliösumman sovitus, PNS, LSQ

    Lineaarialgebra-osioissa on aiheesta myös joitakin perustehtäviä.

    Tähän tiedostoon kootaan laskaripaperiin sopivia pikaohjeita ja mielen virkistyksiä.

    • .

    • ..

    • ...


  2. mlCF001

    mlCF001
    Johdatusta interpolaatioon.

    Eräässä (keskilännen) kaupungissa tilastoitiin \(3\):n eri viikon aikana alkoholin kokonaiskulutus ja rattijuopumuspidätykset seuraavan taulukon mukaisesti.

    Viikko | Alkoholin kulutus(litraa) | RJ-pidätykset
    1 400 000 237
    2 930 000 845
    3 1 704 000 1356

    Arvioi interpolaatiopolynomin avulla RJ-pidätysten lukumäärä viikolla, jolla kulutus olisi
    1 230 000 litraa.

    1. Olkoon \(p(x)=a x^2 + b x + c\). Muodosta annetun datan perusteella yhtälöryhmä, jossa tuntemattomina ovat kertoimet \(a,b,c\). Kirjoita yhtälöryhmä matriisimuotoon: \(A x = B\) ja ratkaise Matlab:n takakenolla (\(\backslash\)).

    2. Käytä polynomin arvon laskentaan polyval-funktiota

    3. Piirrä datapisteet ja interpolaatiopolynomin kuvaaja, sekä merkitse rinkulalla kysytty piste.

    Vihje: Vastaisuuden varalle voit tutustua myös funktiohin vander ja polyfit.

    Interpolaatiopolynomeja voidaan muodostaa tehokkaammin ja nokkelammin mm. Lagrangen ja Newtonin menetelmillä. Nämä voidaan helposti toteuttaa Matlab-ohjelmina. Palataan tuonnempana.

    Vaativuus 1+

    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF001.tex

    Avainsanat: mlCurvefit, interpolaatio, interpolation, lineaarinen yhtälöryhmä, Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF
    Matlabfunctions: “Takakeno” (\(\backslash\)) \(A\backslash b\), polyval, (polyfit)
    Viitteitä:


  3. mlCF017

    Oletetaan, että meille on annettu dataa muodossa \((x_k,y_k). k = 1 \ldots m\), johon muodustuu kaksi murtopisteen erottamaa lineaarista suuntausta. Esimerkiksi

    x=-2:0.1:4; y=0.2*sin(3*x);
    y(x<1)=y(x<1)+0.5*(x(x<1)-1);
    y(x>=1)=y(x>=1)+2*(x(x>=1)-1);

    muodostaa selvän murtopisteen kohtaan \(x=1\). Intuitiivisesti tuntuu selvältä, että tällaiseen dataan kannattaa sovittaa PNS-suoran sijaan paloittain lineaarinen funktio, ts. ’’suora murtopisteellä.’’

    Kirjoita ohjelma joka tekee tämän: ohjelman tulee valita murtopiste \((s,t)\) tasosta hiiren klikkauksen perusteella (kts. vihje) ja sovittaa paloittain lineaarisen funktion dataan tätä murtopistettä käyttäen, ts. sovittaa suoran \[y = k_1x+b_1 ,x<s\] pisteisiin \((x_k,y_k), x_k<s \) ja suoran \[y = k_2x+b_2 ,x>s\] pisteisiin \((x_k,y_k), x_k>s \).

    Vihje:
    Tehtävän keskeinen osa on murtopisteen valinta ja datapisteiden suodatus.

    Murtopisteen valintaan kannattaa käyttää ginput funktiota, joka valitsee klikatun pisteen kuvasta tyyliin

    [x y] = ginput(1);

    Datan suodatukseen kannattaa käyttää MATLABin loogista indeksointia: esimerkiksi valitaan kaikki vektorin \(\mathbb{b}\) pisteet, jotka ovat pienempiä kuin 5.

    a = b(b<5);

    Vaativuus: 2
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF017.tex

    Ratkaisu:
    ../mlteht/mlCurveFit/ratkaisut/html/mlCF017R.html (publish: m->html)
    ../mlteht/mlCurveFit/ratkaisut/mlCF017R.m (m-tiedosto)

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF

    Matlabfunktioita: polyfit, polyval


  4. mlCF01

    mlCF01.tex [Maple: ../../mplteht/mplCurveFit/mplCF01.tex]

    Opettajalle: Tehtävä soveltuu hyvin Maple-ratkaisutekniikan opetteluun. Matlabin kohdalla kyse on yhtälöryhmän muodostamisesta (käsin) ja ratkaisemisesta Matlab:lla.

    Hermiten interpolaatio: Interpolaatioehdoissa esiintyy myös derivaattoja.

    Huom: 5 ehtoa ja 5 tuntematonta kerrointa \(\implies\) järkevän tuntuinen tehtävä. Yleisesti “järkevälläkään” Hermiten interpolaatiotehtävällä ei aina ole yksikäsitteistä ratkaisua (kuten ei neliömatriisin määräämällä lineaarisella yhtälöryhmälläkään – siitähän on kyse). Pelkkiä funktion arvoja koskevalla interpolaatiotehtävällä aina on (koska “Vandermonden neliömatriisi” on aina ei-singulaarinen).
    Vihje:
    Kirjoita käsin yhtälöryhmä muotoon \(A x = B\). Tuntemattomina ovat siis etsittävän polynomin kertoimet.

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF01.tex

    Ratkaisu:
    ../mplteht/mplCurveFit/ratkaisut/mplCF01R.pdf (Tästä Maple-ratkaisusta näkyy oikea lopputulos.)

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF, lineaarinen yhtälöryhmä

    Matlabfunktioita: A\b “backslash” , polyval


  5. mlCF02

    mlCF02 (Perus-Matlabtekniikkaa polynomi-interpolaatiotehtävään)
    Muodosta interpolaatiopolynomi pisteistölle, joka saadaan laskemalla funktion \(f(x)=\cos(1+x^2)\) arvot tasavälisessä x-pisteistössä, jossa on \(7\) pistettä välillä \(\lbrack0,3\rbrack\). Piirrä samaan kuvaan funktio, datapisteet (rinkuloilla) ja interpolaatiopolynomi.

    Vihje
    help (tai doc) polyfit, polyval .
    Sinun on tiedettävä, mikä on polynomin asteluku.
    Tarkistus: Kulkeeko polynomi kaikkien datapisteiden kautta.

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF02.tex

    Ratkaisu:
    ../mlteht/mlCurveFit/ratkaisut/html/mlCF02R.html
    ../mlteht/mlCurveFit/ratkaisut/mlCF02R.m

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF

    Matlabfunktioita: polyfit, polyval


  6. mlCF03a

    mlCF03a
    Tee Vandermonden matriisi useallakin eri tavalla.

    ... Tarkennetaan tehtävää ...

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF03a.tex

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF, Vandermonden matriisi

    Matlabfunktioita: polyfit, polyval, vander


  7. mlCF03

    mlCF03 [Interpolaatiokertoimet lineaarisesta yhtälöryhmästä]
    Kirjoita funktio, jonka otsikko ja “help-kommentit” voisivat olla:

        function [kertoimet,condnr]=vandinterp(xdata,ydata)
        % Funktio laskee interpolaatiopolynomin kertoimet Vandermonden
        % systeemin ratkaisulla ja palauttaa my\"os cond-luvun.
        %  Esim:
        %  xdata=0:5; ydata=xdata.*sin(xdata);
        %  [c,cnr]=vandinterp(xdata,ydata);

    Laske vaikkapa kommenttiesimerkin tapaus ja vertaa polyfit-funktion antamiin kertoimiin. Piirrä data ja interpolaatiopolynomi. Käytä arvojen laskentaan polyval-funktiota.

    (Opettajalle: Helpotettu versio: Jätetään cond pois.)

    Vihje
    Olkoon \(p(x)=a_0 + a_1 x + \ldots + a_n x^n\) etsitty polynomi.
    Määrätään tuntemattomat kertoimet interpolaatioehtojen \(p(x_k)=y_k, k=x_0,\ldots x_n\) avulla saatavasta lineaarisesta yhtälösysteemistä ratkaisemalla.
    Huom: Matlab:ssa polynomi esitetään kerroinvektorina:
    \(\left[a_n, a_{n-1}, \ldots, a_0\right].\) Muista myös, että luku \(0\) ei kelpaa vektorin indeksiksi, toki tässä tehtävässä ei liene mitään tarvetta indeksointiin.

    Kirjoita yhtälöryhmä tässä yleisessä muodossa ja tee ensin Matlab-skripti tyyliin

    xd=...;
    yd=...;
    A=...;  % Yht.ryhman matriisi, help/doc vander
    a=      % Ratkaisuna saatava kerroinvektori, help slash (a=A\...)d
    x=linspace(alkup,loppup); % x-pisteet piirt. varten
    y=polyval(...);           % Polynomin arvot x-pisteissa
    ...
    plot(xd,yd,'o')
    hold on
    plot(x,y)
    grid on

    Tarkistus: Kulkeeko polynomi kaikkien datapisteiden kautta.
    Kun skripti toimii, tee sen pohjalta pyydetty funktio.

    Sovella funktiotasi johonkin tämän tehtäväkokoelman interpolaatiotehtävään.

    Vaativuus: 2
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF03.tex

    Ratkaisu:
    ../mlteht/mlCurveFit/ratkaisut/vandinterp.m Funktio vandinterp
    ../mlteht/mlCurveFit/ratkaisut/html/mlCF03R.html Ajotiedosto html-muodossa (publish)
    ../mlteht/mlCurveFit/ratkaisut/mlCF03R.m (Ajo-m-tiedosto)

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF, Lineaarinen yhtälöryhmä, Vandermonden matriisi

    Matlabfunktioita: A, “backslash”, polyval


  8. mlCF04

    mlCF04
    Eräs kemiallinen koe tuotti seuraavat datapisteet:

    tdata=[-1 -0.960 -0.86 -0.79 0.22 0.5 0.93];      % Aikapisteet
    ydata= [ -1 -0.151 0.894 0.986 0.895 0.5 -0.306]; % Reaktiotulokset

    Tarkoitus on estimoida reaktiotulosfunktion \(y(t)\) arvoja välillä \(\left[-1,1\right]\)

    1. Piirrä datapisteet.

    2. Muodosta interpolaatiopolynomi ja piirrä samaan kuvaan.

    3. Muodosta asteita 2,3,4 olevat PNS-polynomit ja piirrä samaan kuvaan

    4. Sovita vielä splini ja piirrä samaan.

    5. Asettele grafiikkaikkuna paremmaksi vaikka tyyliin:

            a=min(xdata)-0.1;b=max(xdata)+0.1;
            c=min(ydata)-0.1;d=max(ydata)+0.1;
            axis([a b c d])

    Käytä myös legend-komentoa ja kokeile grid on

    Vaativuus: 2-
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF04.tex

    Ratkaisu:
    ../mlteht/mlCurveFit/ratkaisut/html/mlCF04R.html (Publish: m-tied.-> html)
    ../mlteht/mlCurveFit/ratkaisut/mlCF04R.m (Matlab:n m-tiedosto)

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF

    Matlabfunktioita: polyfit, polyval,’’backslash’’


  9. mlCF05

    mlCF05

    1. Piirrä suorat \(y = 0.2-0.5x, y =0.2 + 2x, y = -0.3 +1.5x \text{ ja } y=0.95x \).

    2. Määritä tason piste \((x,y)\), joka on PNS-mielessä lähinnä suorien “leikkauspistettä”, ts. piste, jonka suorista laskettujen etäisyyksien neliösumma on minimaalinen.

    Vihje:
    Kirjoita suorien yhtälöt ensin muotoon \(a_i x + b_i = y\), \(i=1\ldots 4\). Muodosta \(4\times 2\) - matriisi A tuntemattomien \(x\) ja \(y\) kertoimista ja vektori \(b\) vakiotermeistä.
    Vaikealta kuullostava tehtävä muuttuu helpoksi, koska Matlabin “takakeno” on ohjelmoitu ratkaisemaan ylimääräytyvä yhtälösysteemi PNS-mielessä.

    Samaan kuvaan piirtäminen onnistuu komennolla hold on.
    Pisteen \(xy\) piirto punaisella rinkulalla menee näin (jos ratkaisusi on vektorissa \(xy\)):

    plot(xy(1),xy(2),'or')

    Vaativuus: 2
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF05.tex

    Ratkaisu:
    ../mlteht/mlCurveFit/ratkaisut/html/mlCF05R.html (Publish: m-tied.-> html)
    ../mlteht/mlCurveFit/ratkaisut/mlCF05R.m (Matlab:n m-tiedosto)

    Avainsanat: Käyrän sovitusta Matlab:lla, PNS-sovitus/LSQ-fit, CurveFit,mlCF

    Matlabfunktioita: “backslash”, “takakeno”


  10. mlCF07

    mlCF07.tex/mplCF07.tex // Matlab,Maple,[Mathematica]

    W.A Mozartin(1756-1791) sävellyksiä indeksoidaan Köchel-luvuilla, jotka ilmaisevat teosten sävellysjärjestyksen. Alla on eräitä Köchel-lukuja, ja vastaavien teosten sävellysvuosia.

         Number    Year
         1         1761
         75        1771
        155        1772
        219        1775
        271        1777
        351        1780
        425        1782
        503        1786
        575        1789
        626        1791

    Käyttäen tätä dataa, arvioi teoksen Sinfonia Concertanten sävellysvuosi, kun tiedetään, että sen Köchel-numero on 364.

    Vihje:
    Piirrä ensin datapisteet tasoon, ja päätä millaista menetelmää kannattaa käyttää. Epäilemättä sopivan asteista PNS-polynomia. Suorita joitakin sovituksia, ja tarkista sitten tulos vaikka Wikipediasta.

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF07.tex

    Ratkaisu:
    ../mlteht/mlCurveFit/ratkaisut/mlCF07R.pdf (Matlab:n m-tiedosto -> pdf (publish))
    ../mlteht/mlCurveFit/ratkaisut/mlCF07R.m (Matlab:n m-tiedosto)

    Avainsanat: Käyrän sovitusta Matlab:lla ,mlCurveFit,mlCF

    Matlabfunktioita: polyfit, polyval, “backslash”


  11. mlCF09

    mlCF09

    1. Luo dataa seuraavalla skriptillä:

      r = 0.5+0.5*rand(10,1);
      theta =2*pi*rand(10,1)
      x = 3*r.*cos(theta);
      y = 3*r.*sin(theta);

      ja piirrä data pisteittäin.

    2. Sovitamme dataan ympyrän muodossa \((x-c_1)^2 + (y-c_2)^2 = r^2\). Ympyrän sovituksessa etsitään kahta arvoa: ympyrän keskipistettä \((c_1,c_2)\), ja sen sädettä \(r\). Helpoimmin sovitus onnistuu huomaamalla, että \((x-c_1)^2 + (y-c_2)^2 = r^2 \Leftrightarrow 2xc_1 + 2yc_2 + (r^2 - c_1^2 - c_2^2) = x^2 + y^2\). Asettamalla \(c_3 = r^2 -c_1^2 - c_2^2\), saadaan yhtälö muotoon \[2xc_1 + 2yc_2 + c_3 = x^2 + y^2.\] Tälle yhtälölle voidaan tehdä vaadittu datan sovitus, ja ratkaista arvot \((c_1,c_2,c_3)\), jonka jälkeen \(c_3\)sta ratkaistaan \(r\).

    Vihje:
    Pisteittäinen piirtäminen onnistuu komennolla plot(x,y,’.’). Ympyrän, jonka keskipiste on \((x,y)\) ja säde \(r\), voi piirtää komennolla plot(x+r*cos(0:0.02:2*pi,y+r*sin(0:0.02:pi))).

    Vaativuus: 2
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF09.tex

    Ratkaisu:
    ../mlteht/mlCurveFit/ratkaisut/html/mlCF09R.html (Publish: m-tied.-> html)
    ../mlteht/mlCurveFit/ratkaisut/mlCF09R.m (Matlab:n m-tiedosto)

    Avainsanat: Käyrän sovitusta Matlab:lla PNS-sovitus/LSQ-fit, mlCurveFit,mlCF

    Matlabfunktioita: polyfit, polyval, “backslash”


  12. mlCF11

    mlCF11
    Maple tai Matlab
    Tutkitaan nk. Rungen ilmiötä. Laske funktion \(g(x) = 1/(1+x^2)\) arvoja tasaisin välein väliltä \([-5,5]\), ja tee näihin pisteisiin perustuva polynomi-interpolaatio. Piirrä sekä \(g(x)\) että \(P(x)\) samaan kuvaan. Mitä huomaat, kun valittujen datapisteiden määrää tihennetään?

    Kokeile interpolointia silloin, kun datapisteitä ei valita tasavälisesti, vaan ne valitaan Chebyshev-pisteiden \[x_j = 5 \cos(\frac{j \pi}{N}), j = 0\ldots N\] mukaan.

    Vihje:
    Polynomi-interpolaatio kannattaa tehdä MATLAB-funktiolla polyfit.
    Funktio \(g\) kannattaa määritellä funktiokahvan avulla: g = @(x)1./(1+x.^2).
    Tasavälisiä pisteistä saa funktiolla linspace
    Chebyshev-pisteet muodostat tietysti vektorikomennoin (for-silmukka ankarasti kielletty).

    Sopii aivan yhtä hyvin Maplelle.

    Vaativuus: 2
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF11.tex

    Ratkaisu:
    ../mlteht/mlCurveFit/ratkaisut/html/mlCF11R.html (Publish: m-tied.-> html)
    ../mlteht/mlCurveFit/ratkaisut/mlCF11R.m (Matlab:n m-tiedosto)

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF, Rungen ilmiö, Chebycheff/Tsebyseff-pisteet

    Matlabfunktioita: polyfit, polyval

    Opettajalle: Tästä voi myös tehdä pikku tutkielman, jossa dokumentointi tehdään viimeisen päälle. Kuvissa voi käyttää selventäviä komentoja, kuten legend, taustaa voi hakea vaikka Wikipediasta, jne.


  13. mlCF13a

    mlCF13a
    Lagrangen interpolaation ohjelmointi

    Kirjoita funktio L, joka implementoi Lagrangen kertojapolynomin, ja tee sitä apuna käyttäen funktio LagInterp, joka muodostaa Lagrangen interpolaatiopolynomin. Kutsu voisi olla:

    y=LagInterp(xdata,ydata,x), missä siis x on laskentapisteiden vektori.

    Tätä voidaan ohjeistaa lisää tarpeen mukaan.

    Vaativuus: 2+
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF13a.tex

    Ratkaisu:
    Hiukan liiankin elegantti ratkaisu on Molerin:
    ../mlteht/mlCurveFit/ratkaisut/polyinterp.m
    Helpommin vaheistettavia “omaleimaisia” ratkaisuja tulee (on jo, kunhan haetaan)

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF, Lagrangen interpolaatio, ohjelmointi

    Matlabfunktioita: Oma LagInterp, polyval


  14. mlCF13

    mlCF13.tex/mplCF13.tex
    H2T14.tex/ Matlab,Maple,[Mathematica]

    Yhdysvaltojen perustuslaki vaatii, että maassa suoritetaan joka kymmenes vuosi väestönlaskenta. Ohessa on väestönlaskennan tuloksia sadoissa miljoonissa asukkaissa viime vuosisadalta.

    1900 1910 1920 1930 1940 1950 1960 1970 1980 1990
    76 92 106 122 132 150 179 203 226 248



    (a) Tee polynomi-interpolointi datalle, ja ennusta väestön määrä vuonna 2010. Kuinka ennusteesi suhtautuu laskennan todelliseen tulokseen: 308,745,538 laskettua asukasta?

    Vihje: Tässä polyfit tuottaa liian paljon virhettä (johtuen ison Vandermonden matriisin häiriöalttiudesta), mikä näkyy heti kuvasta. (Miksiköhän?) Tehtävä on paremmin skaalattu, jos käytetään Lagrangen menetelmää. Tarvittava funktio polyfit on Molerin kokoelmassa: http://www.mathworks.se/moler/ncmfilelist.html ja myös tässä:
    ../mlteht/mlCurveFit/ratkaisut/polyinterp.m

    Opettajalle: Tähän kohtaan voidaan myös ottaa ihan itse tehty Lagrangen interpolaatio, hts. teht. mlCF13a.

    (b) Sovita eriasteisia PNS-polynomeja.

    Vaativuus: 2-
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF13.tex

    Ratkaisu:
    ../mlteht/mlCurveFit/ratkaisut/html/mlCF13R.html (Publish: m-tied.-> html)
    ../mlteht/mlCurveFit/ratkaisut/mlCF13R.m (Matlab:n m-tiedosto)
    ../mlteht/mlCurveFit/ratkaisut/polyinterp.m (Funktio “polyinterp”, lataa tästä)
    Viitteitä:
    Num. Comp. with Matlab, interpolation

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF, USA census, USA:n väestölaskenta

    Matlabfunktioita: polyfit, polyval


  15. mlCF15

    mlCF15.tex [Maple: ../../mplteht/mplCurveFit/mplCF03.tex]
    Opettajalle:
    (a)-kohta sopii ensitutustumiseen.
    (b)-kohta on sikäli huono, että virhetermin suuruusluokka on toisesta maailmasta (opettavaista kylläkin, mutta alkajaisiksi vaatii ainakin varoituksen).
    Lisää tehtävän opetuksia ratkaisutiedostoissa.

    (a) Muodosta interpolaatiopolynomi pisteistölle, joka saadaan laskemalla funktion \(\cos (1+x^2)\) arvot tasavälisessä x-pisteistössä, jossa on 7 pistettä välillä \([0,3]\).Piirrä samaan kuvaan funktio, datapisteet ja interpolaatiopolynomi.

    (b) Arvioi (Lagrangen) interpolaatiokaavan virhetermin avulla interpolaatiovirheen yläraja yo. välillä ja vertaa todelliseen.

    Lause Olkoot \(x_0,x_1,\ldots,x_n\) erilliset pisteet ja \(f\) \((n+1)\) kertaa jatkuvasti derivoituva funktio \(x_k-\)pisteet sisältävällä välillä. Jos \(p_n\) on (1-käs) dataan \((x_k,f(x_k))\) liittyvä interpolaatiopolynomi, niin \[f(x)-p_n(x) = \frac{f^{n+1}(\xi)}{(n+1)!}(x-x_0)(x-x_1) \cdots (x-x_n).\]

    Vihje:
    Tässä on mahdollista harrastaa Maplen ja Matlabin yhteistyötä. Virhekaavan derivaatta muodostetaan tietysti Maplella ja lauseke sievennetään. Itse asiassa piirtämällä ja poimimalla kuvasta maksimipisteen koordinaatit, saadaan riittävän hyvä arvio.
    Toinen mahdollisuus on käyttää Matlabin symbolic toolboxia.

    Tulotermin voisi hoitaa tehokkaimmin Matlabissa ottamalla tiheän diskretoinnin ja käyttämällä max-funktiota. Maplessakin on max-funktio, lakenta on Matlabissa tehokkaampaa.
    Miten tulotermi lasketaan Matlabissa? Vaikka tähän tapaan:
    1. x=linspace(....,N)
    2. Tedään matriisi X, jossa x-vektoreita allekkain n+1 kpl.
    3. Tehdään matriisi X0, jossa rivit

               x0 x0 ... x0   N kpl.
               x1 x1 ... x1   N kpl.
                ...
               xn xn ... xn   N kpl.
            

    Nämä syntyvät vaikka meshgrid-komennolla tai ulkotuloilemalla ykköspystyvektorilla.
    4. Vähennetään matriisit ja prod()). Sitten vain abs ja max kehiin.

    Tosi Matlabmaista! (Ei moitita, vaikka tekisit for-loopin, vain 8 kertaa käydään, mutta hyvä ymmärtää Matlabin hienoa matriisiajattelua, muistiahan ei nykyisin tarvitse säästellä.)

    Vaativuus: 2+
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF15.tex

    Ratkaisu:
    ../mlteht/mlCurveFit/ratkaisut/html/mlCF15R.html (Publish: m-tied.-> html)
    ../mlteht/mlCurveFit/ratkaisut/mlCF15R.m (Matlab:n m-tiedosto)

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF, interpolaatiovirhe, Lagrange

    Matlabfunktioita: polyfit, polyval


  16. mlCF16

    mlCF16.tex
    Kuvitteellinen koe tuotti seuraavat tulokset. Tulosten perusteella tehtiin hypoteesi, jonka mukaan pisteet noudattelevat paloittain vakiota funktiota, jolla on yksi murtopiste, toisin sanoin, funktio, joka koostuu kahdesta vakio-osasta . Testaa hypoteesi sovittamalla paloittain vakio funktio dataan käyttämällä pienimmän neliösumman menetemää.

    t b
    0.0 0.9
    0.1 1.01
    0.2 1.05
    0.3 0.97
    0.4 0.98
    0.5 0.95
    0.6 0.01
    0.7 -0.1
    0.8 0.02
    0.9 -0.1
    1.0 0.0


    Vihje: Tehtävä kannattaa aloittaa graafisella tarkkailulla, ja määritellä silmämääräinen murtopiste. Tämän jälkeen on helppo muodostaa minimoitavat yhtälöt.

    Vaativuus: 2
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF16.tex

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF

    Matlabfunktioita: polyfit, polyval


  17. mlCF21

    mlCF21.tex (Kirjasta Fröberg: Numerical Analysis 1985)
    Joulukuun 1–28 päivänä 1981 aurinko laski Lund:ssa klo 15.30:n ja 15.45:n välillä seuraavan taulukon mukaisesti, missä x tarkoittaa päivää (\(1 \leq x \leq 28\)) ja y minuuttimäärää klo 15.30:n jälkeen, jolloin aurinko laski.

         x     y     x     y
    
         1     8   19-21   3
         2     7   22-23   4
         3     6    24     5
        4-5    5    25     6
        6-7    4   26-27   7
        8-9    3    28     7
       10-18   2

    Data voidaan esittää varsin hyvin 2. asteen polynomilla. Määritä kertoimet \(a_0,a_1,a_2\), piirrä data ja polynomi. Minä päivänä auringonlaskuaika saavuttaa miniminsä mallin mukaan.

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF21.tex

    Avainsanat: Käyrän sovitusta/interpolaatiota Matlab:lla ,mlCurveFit,mlCF

    Matlabfunktioita: polyfit, polyval


  18. mlCF30

    mlCF30.tex [Moler NCM Exe 5.12 pp. 164-165]

    Planeetan rata, neliömuoto

    Tarkastellaan neliömuotoa:

    \[q(x,y)=a\,x^2+b\,x\,y+c\,y^2+d\,x+e\,y+f .\]

    Tason pistejoukko {\((x,y) \ \ | \ \ q(x,y)=0\)} on kartioleikkaus.

    Yhtälö voidaan normeerata jakamalla jollain nollasta poikkeavalla kertoimella.

    Kartioleikkaus voidaan piirtää tyyliin:

     >> x=linspace(xa,xb,M); y=linspace(ya,yb,N);
     >> [X,Y]=meshgrid(x,y);
     >> Z=a*X.^2 + b*X.*Y + ... ;
     >> contour(x,y,Z,[0 0])  % Kts. help contour, miksei yksi 0 toimi.

    Kartioleikkauksen tyyppi määräytyy diskriminantin \(b^2-4a c\) merkistä.

    (A)
    Piirrä kutakin kolmea tyyppiä oleva kartioleikkaus valitsemalla kertoimet sopivasti.

    (B)
    Planeetat kiertävät tunnetusti ellipsirataa. Tässä on suoraan Matlab-muodossa annettu planeetan tasossa mitatut koordinaattipisteet:

     >> x=[1.02 .95 .87 .77 .67 .56 .44 .30 .16 .01]':
     >> y=[.39 .32 .27 .22 .18 .15 .13 .12 .13 .15]';
    1. Määritä neliömuodon kertoimet PNS sovituksella annettuun dataan asettamalla yksi kerroin arvoon \(1\) ja ratkaisemalla \(10\times 5\) yhtälöryhmä PNS-mielessä.
      Piirrä neliömuoto ja datapisteet samaan kuvaan.

    2. Tämä tehtävä on lähellä singulaarista. Tutki, mitä pieni häiriö datassa vaikuttaa tulokseen lisäämällä pieni, välillä \(\left[-0.0005, 0.0005\right]\) tasajakautunut satunnaisvirhe datapisteisiin. Piirrä alkuperäinen rata ja häiritsemällä saatu rata samaan kuvaan.
      Kommenttisi kertoimien ja kuvan häiriintymisestä!

    Vihje:

    Vaativuus: 3 (sopii projektiteht.)
    Tehtävän Latex-koodi:
    ../mlteht/mlCurveFit/mlCF30.tex

    Avainsanat: Käyrän sovitusta Matlab:lla ,mlCurveFit,mlCF, neliomuoto, quadratic form, planetary orbit, planeetan rata, häiriöalttius

    Matlabfunktioita: polyfit, polyval, meshgrid