-
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ä.
-
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.
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\)).
Käytä polynomin arvon laskentaan polyval
-funktiota
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ä:
-
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
-
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
-
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
-
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
-
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
-
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]\)
Piirrä datapisteet.
Muodosta interpolaatiopolynomi ja piirrä samaan kuvaan.
Muodosta asteita 2,3,4 olevat PNS-polynomit ja piirrä samaan kuvaan
Sovita vielä splini ja piirrä samaan.
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’’
-
mlCF05
mlCF05
Piirrä suorat \(y = 0.2-0.5x, y =0.2 + 2x, y = -0.3 +1.5x \text{ ja } y=0.95x \).
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”
-
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”
-
mlCF09
mlCF09
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.
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”
-
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.
-
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
-
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
-
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
-
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
-
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
-
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]';
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.
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