TANA19 NUMERISKA METODER

Relevanta dokument
LAB 3. INTERPOLATION. 1 Inledning. 2 Interpolation med polynom. 3 Splineinterpolation. 1.1 Innehåll. 3.1 Problembeskrivning

Interpolation. 8 december 2014 Sida 1 / 20

TANA09 Föreläsning 8. Kubiska splines. B-Splines. Approximerande Splines. B-splines. Minsta kvadrat anpassning. Design av kurvor och ytor.

Approximerande Splines. B-splines. Minsta kvadrat anpassning. Design av kurvor och ytor.

Interpolation Modellfunktioner som satisfierar givna punkter

f(x + h) f(x) h f(x) f(x h) h

LAB 1. FELANALYS. 1 Inledning. 2 Flyttal. 1.1 Innehåll. 2.1 Avrundningsenheten, µ, och maskinepsilon, ε M

Kurvanpassning. Kurvanpassning jfr lab. Kurvanpassning jfr lab

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 26 november 2015 Sida 1 / 28

LAB 4. ORDINÄRA DIFFERENTIALEKVATIONER. 1 Inledning. 2 Eulers metod och Runge-Kuttas metod

TANA19 NUMERISKA METODER

Laboration 4. Numerisk behandling av integraler och begynnelsevärdesproblem

TAIU07 Matematiska beräkningar med Matlab

Polynomanpassning i MATLAB

Lösningar till Tentamen i Beräkningsvetenskap II, 5.0 hp, Del A. 1. (a) ODE-systemet kan skrivas på formen

Föreläsning 5. Approximationsteori

DATORLABORATION FÖR KURSEN ENVARIABELANALYS 2

TANA17 Matematiska beräkningar med Matlab

Laboration 6. Ordinära differentialekvationer och glesa system

Laboration 4. Numerisk behandling av integraler och begynnelsevärdesproblem

TANA19 NUMERISKA METODER

Numerisk Analys, MMG410. Lecture 13. 1/58

TAIU07 Matematiska beräkningar med Matlab

NUMPROG, 2D1212, vt Föreläsning 1, Numme-delen. Linjära ekvationssystem Interpolation, Minstakvadratmetoden

Numerisk Analys, MMG410. Lecture 12. 1/24

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab

Sekantmetoden Beräkningsmatematik TANA21 Linköpings universitet Caroline Cornelius, Anja Hellander Ht 2018

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

Envariabelanalys 5B1147 MATLAB-laboration Derivator

Del I: Lösningsförslag till Numerisk analys,

OH till Föreläsning 5, Numme K2, Läsa mellan raderna. Allmän polynom-interpolation, S Ch 3.1.0

LABORATION cos (3x 2 ) dx I =

f(x) = x 2 g(x) = x3 100 h(x) = x 4 x x 2 x 3 100

2 Matrisfaktorisering och lösning till ekvationssystem

f(x) = x 2 g(x) = x3 100

LÖSNINGSFÖRSLAG TILL TENTAMEN 2 SF1664

Linjär Algebra och Numerisk Analys TMA 671, Extraexempel

Denna föreläsning. DN1212 Numeriska metoder och grundläggande programmering FN Felfortplantning och kondition

Rapportexempel, Datorer och datoranvändning

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

KTH 2D1240 OPEN vt 06 p. 1 (5) J.Oppelstrup

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

Parametriserade kurvor

Tentamen i Beräkningsvetenskap I och KF, 5.0 hp,

Introduktion till MATLAB

2D1212 NumProg för P1, VT2006 PROJEKTUPPGIFT

Uppsala Universitet Matematiska Institutionen Bo Styf. Genomgånget på föreläsningarna

OH till Föreläsning 5, Numme K2, GNM Kap 4-4.4A / GKN Kap 4.1A,(D),E Interpolation. Läsa mellan raderna. Allmän polynom-interpolation

LABORATION 2. Trapetsregeln, MATLAB-funktioner, ekvationer, numerisk derivering

Tillämpning: Bildinterpolation. Ekvationslösning. Integraler. Tillämpning: En båt. Räkning med polynom. Projekt. Tentamensinformation.

5 Om f (r) = 0 kan andraderivatan inte avgöra vilken typ av extrempunkt det handlar om. Återstår att avgöra punktens typ med teckenstudium.

Laboration 3. Funktioner, vektorer, integraler och felskattning

Teorifrågor. 6. Beräkna konditionstalet för en diagonalmatris med diagonalelementen 2/k, k = 1,2,...,20.

SF1513 NumProg för Bio3 HT2013 LABORATION 4. Ekvationslösning, interpolation och numerisk integration. Enkel Tredimensionell Design

Ordinära differentialekvationer,

Tentamen i Teknisk-Vetenskapliga Beräkningar

En vanlig uppgift är att bestämma max resp min för en trigonometrisk funktion och de x- värden för vilka dessa antas.

Modul 4 Tillämpningar av derivata

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 2 november 2015 Sida 1 / 23

3.6 De klassiska polynomens ortogonalitetsegenskaper.

SF1625 Envariabelanalys Lösningsförslag till tentamen

6 Derivata och grafer

TMA226 datorlaboration

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

9 Skissa grafer. 9.1 Dagens Teori

Konvergens för iterativa metoder

Uppgift 1 R-S. Uppgift 2 R-M. Namn:...

Lösningar och kommentarer till uppgifter i 3.1

0.31 = f(x 2 ) = b 1 + b 2 (x 3 x 1 ) + b 3 (x 3 x 1 )(x 3 x 2 ) = ( ) + b 3 ( )(

Laboration 3. Funktioner, vektorer, integraler och felskattning

Kurs 2D1213, Laboration 2: Att lösa ordinära differentialekvationer med finita differensmetoden

SF1669 Matematisk och numerisk analys II Lösningsförslag till tentamen DEL A. r cos t + (r cos t) 2 + (r sin t) 2) rdrdt.

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 18:e augusti klockan

SF1625 Envariabelanalys Lösningsförslag till tentamen DEL A

Numerisk lösning till den tidsberoende Schrödingerekvationen.

SF1625 Envariabelanalys Lösningsförslag till tentamen DEL A

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

LÖSNINGSFÖRSLAG TILL TENTAMEN 2 SF1664

Labb 3: Ekvationslösning med Matlab (v2)

Sidor i boken f(x) = a x 2 +b x+c

Datorövning 1 Fördelningar

a = a a a a a a ± ± ± ±500

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Laboration: Grunderna i MATLAB

4 Numerisk integration och av differentialekvationer

Laboration 4: Stora talens lag, Centrala gränsvärdessatsen och enkla punktskattningar

15 februari 2016 Sida 1 / 32

MATEMATIK Datum: Tid: förmiddag Hjälpmedel: inga. Mobiltelefoner är förbjudna. A.Heintz Telefonvakt: Christoffer Standar, Tel.

Akademin för utbildning, kultur och kommunikation MMA132 Numeriska Metoder Avdelningen för tillämpad matematik Datum: 2 juni 2014

Uppsala Universitet Matematiska Institutionen Bo Styf. Lösningar till kryssproblemen 1-5. Uppgifter till lektion 1: = 10 x. = x 10.

Tentamen i Beräkningsvetenskap I och KF, 5.0 hp,

Sammanfattning (Nummedelen)

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 13:e januari klockan

DN1212/numpp Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

UPPGIFTER KAPITEL 2 ÄNDRINGSKVOT OCH DERIVATA KAPITEL 3 DERIVERINGSREGLER

Transkript:

HT2/2016 LINJE+ÅK+KLASS : TANA19 NUMERISKA METODER Laboration 3. Interpolation Namn : Personnummer : E-post : @student.liu.se Namn : Personnummer : E-post : @student.liu.se Godkänd datum : Sign : Retur : 1

21 november 2016 LAB 3. INTERPOLATION 1 Inledning I den första delen av laborationen skall vi studera problemet att interpolera givna data med interpolation med ett polynom. Vi ska också använda en kubisk splinefunktion s(x), för att interpolera givna data. Vi skall t.ex. se hur valet av ändpunktsvillkor påverkar felet vid interpolationen. Vi kommer att begränsa oss till det ekvidistanta fallet där alltså x i+1 x i = h = konstant. Därför kommer antalet delintervall, n, att bestämma steglängden h = (b a)/n. Vi skall även undersöka hur felet vid splineinterpolation beror av steglängden h. Resultaten kommer att tillämpas i några exempel. 1.1 Att komma igång Öppna ett terminalfönster. Skriv: TANA79setup (vilket definierar kursbiblioteket och sökvägar) cp $kursbib/pol inter.m. (vilket kopierar matlabfunktionen pol inter.m till din egen area) matlab & (vilket gör att MATLAB startas i eget fönster) Gå över i MATLAB-fönstret och skriv: itlab3 (hämtar in aktuella funktioner f1, f2 och f3) 1.2 Mål Målet med denna laboration är att du skall få insikt i hur interpolerande splinefunktioner används. lära dig hur man praktiskt kan bestämma konvergensordningen p, då vi vet att R T h p. få förståelse för hur olika ändpunktsvillkor påverkar felfunktionen. jämföra polynominterpolation och splineinterpolation. få träning i att använda några av MATLAB:s inbyggda rutiner. 1.3 Förkunskaper Kapitel 5 (spec. kap 5.2, 5.8 och 5.10) i läroboken. Exempel 3.4, 3.8, 3.10 i exempelsamlingen. 2

1.4 Programvara på kursbiblioteket Programmet kubspline på kursbiblioteket beräknar en kubisk splinefunktion som interpolerar en given funktion i ekvidistanta punkter. Anrop med funktionen f1 sker genom: kubspline(f1,a,b,n,r,graf); Avsluta med ; så undviks onödig utskrift. Parametrarna förklaras i help kubspline, som finns listad i hjälpinformationen nedan. 1.4.1 Hjälpinformation för kubspline kubspline ; kubisk splineinterpolation av funktion Anrop: kubspline(f,a,b,n,r,graf); Programmet använder en kubisk splinefunktion för att interpolera en given funktion, f, i ekvidistanta noder. f funktion som skall interpoleras a startpunkt b slutpunkt n antal intervall r typ av ändpunktsvillkor: (0=naturliga, 1=rätta, 2=rätta andraderivator) graf val om grafen(=0) eller felkurvan(=1) ska ritas ut. 2 Polynominterpolation Vi skall använda några MATLAB-rutiner för att beräkna och plotta interpolationspolynomen. Till exempel skall kommandot polyfit användas för att anpassa ett polynom till givna data och kommandot polyval användas för att beräkna värdet av interpolationspolynomet. Exempelvis så kan ett andragradspolynom anpassas till data (x k,y k ), lagrade som två vektorer x och y, genom kommandot: >> p2=polyfit(x,y,2); Vi kan sedan beräkna polynomets värde för ett antal x värden lagrade i vektorn xx genom att skriva: >> yy=polyval(p2,xx); Förberedelseuppgift 2.1 Gradtal Antag att vi vill hitta ett polynom P(x) som interpolerar en funktion f(x) i n givna punkter x 1,...,x n. Vilket gradtal skall väljas för polynomet? 3

Uppgift 2.2 Välj ut data Låt f(x)=e x/5 +sin(x). Vi skall approximera f(1.3) genom linjär interpolation med hjälp av följande tabell. För att polyfit skall beräkna ett interpolerande polynom krävs att antalet datapunkter, dvs längden hos vektorerna x och y, stämmer överens med gradtalet hos polynomet. x k 1 1.5 2 f(x k ) 1.6602 1.7383 1.5796 Vilka två punkter ska användas vid den linjära interpolationen? Uppgift 2.3 Beräkna värdet Ange polynomets värde i punkten x=1.3, dvs P 1 (1.3). Matlabs rutin polyfit ger ingen uppskattning av trunkeringsfelet. Man kan dock utnyttja att P 2 (x) P 1 (x)+r T (x). Vi beräknar alltså ett polynom P 2 (x) som interpolerar f(x) i alla tre punkterna i tabellen ovan, genom att utnyttja MATLABs rutin polyfit, och uppskattar det trunkeringsfel som görs då f(x) approximeras med den räta linjen P 1 (x) med R T (x) P 2 (x) P 1 (x). Uppgift 2.4 Feluppskattning Gör en feluppskattning och uppskatta f(1.3) P 1 (1.3). Värdena i tabellen antas vara korrekt avrundade. R T R XF R T + R XF Jämför feluppskattningen med det verkliga felet. 4

3 Splineinterpolation 3.1 Olika ändpunktsvillkor För att entydigt bestämma en interpolerande splinefunktion krävs två ändpunktsvillkor. Vi ska mer i detalj undersöka två olika val av ändpunktsvillkor. s (a) = s (b) = 0 (naturliga ändpunktsvillkor). Detta motsvarar den mekaniska tillämpningen med en böjlig ribba (en så kallad ri på svenska eller spline på engelska) som går igenom de givna interpolationspunkterna. Ribban antar då en form som minimerar den potentiella energin. Man kan matematiskt visa att denna form approximativt överensstämmer med en kubisk spline med naturliga ändpunktsvillkor. s (a) och s (b) väljes fritt. Om vi känner derivatorna i x = a och x = b väljs förstås s (a) = f (a) och s (b) = f (b). Dessa kallas rätta ändpunktsvillkor. 3.2 Ändpunktsvillkorens inverkan Låt f(x) (finns i f1) vara den funktion som skall interpoleras. Vi skall undersöka felets beroende av de valda ändpunktsvillkoren. Som testfunktion användes polynomet Förberedelseuppgift 3.1 f(x) = 4 3 x4 4 3 x3 + 1 2 x2. Beräkna f (0) och f (1). Dessa värden behövs då rätta ändpunktsvillkor skall användas. Beräkna även f (0) och f (1). f (0) = f (1) = f (0) = f (1) = Uppgift 3.2 Datorexperiment Eftersom f är känd kan vi ju bestämma interpolationsfelet i en godtycklig punkt R T (x) = f(x) s(x). Interpolationen skall utföras mellan x 1 = 0 och x n+1 = 1 och med n = 10 (alltså med 10 delintervall och med steglängden h = 0.1). Använd programmet kubspline i nedanstående uppgifter. 1. Rita s(x) både med naturliga och rätta ändpunktsvillkor. Rita grafen för den ena kurvan (sista parametern=0), skriv hold on samt rita den andra kurvan. Detta ger båda kurvorna i samma bild. Avsluta med hold off. Kan man se någon skillnad på kurvorna? 2. För att tydligare se hur felet uppför sig, rita felkurvor (sista parametern = 1) med både naturliga och rätta ändpunktsvillkor i samma bild. Ta ut en papperskopia (print) och markera vilken kurva som är vilken. Avsluta med hold off. Lämna med figuren. 5

Uppgift 3.3 Studera felkurvorna Det syns tydligt att felen är noll i noderna, dvs i kanten på varje delintervall. Var i delintervallen är felen störst? Vilken typ av ändpunktsvillkor ger genomgående de största felen och i vilket intervall erhölls maximala absoluta felet? Betrakta splinefunktionen med naturliga randvillkor. Ge en förklaring till felens variation, dvs förklara varför felen blir störst i kanterna och varför vi får olika stora fel i början och i slutet? [Studera andraderivatan] 3.3 Steglängdens inverkan En annan faktor som påverkar felet är antalet interpolationspunkter, som motsvaras av en viss steglängd h. Ju mindre steg (fler delintervall) desto mindre bör felet bli. Men hur avtar felet med avtagande steg? Använd programmet kubspline för att utföra följande uppgifter. Uppgift 3.4 Datorexperiment med naturliga ändpunktsvillkor Använd naturliga ändpunktsvillkor och rita felkurvan med antalet delintervall lika med 10 (motsvarar h = 0.1). Titta speciellt på det första delintervallet, ett i mitten, samt det sista delintervallet. Fyll i beloppet av de maximala absoluta felen i tabellen. Använd hold on så att alla felkurvor kommer i samma diagram. Upprepa samma sak med antalet delintervall lika med 20 och 40. Avsluta med hold off Läs av värdena från TABELLEN, som skrivs ut i MATLAB-fönstret antal steglängd första centrala sista i intervall h i intervallet intervallet intervallet 1 10 2 20 3 40 Uppgift 3.5 Datorexperiment med rätta ändpunktsvillkor Upprepa ovanstående men använd rätta ändpunktsvillkor. antal steglängd första centrala sista i intervall h i intervallet intervallet intervallet 1 10 2 20 3 40 6

Uppgift 3.6 Tolkning av resultaten Med hjälp av resultaten ovan kan man experimentellt bestämma hur felet beror av steglängden h i de olika fallen. Felet, som är ett trunkeringsfel(eftersom beräkningsfelen kan försummas) är nämligen ungefär proportionellt mot h p, dvs R T ch p, där p bestämmer metodens konvergensordning och c är oberoende av steglängden, h, men beror på x och på funktionen. Vi kan bestämma p på ett enkelt sätt genom att bilda kvoterna nedan. Förkorta i uttrycket och utnyttja att vi halverat h. R T (h i ) R T (h i+1 ) chp i ch p i+1 = För in felkvoterna (fel med steg h i ) / (fel med steg h i+1 ) i tabellen nedan. ändpunktsvillkor i h i /h i+1 Naturliga 1 första centrala sista intervallet intervallet intervallet 2 Rätta 1 2 Bestäm nu p (heltal) och för in detta i tabellen. första centrala sista ändpunktsvillkor intervallet intervallet intervallet Naturliga Rätta Förberedelseuppgift 3.7 Teori Ange den teoretiska feluppskattningen (se formelsamlingen, sid. 5 längst ner). För vilken typ av ändpunktsvillkor är denna härledd? Efterbearbetning 3.8 Slutsatser För vilket (vilka) intervall och ändpunktsvillkor ger den praktiska undersökningen samma värde på p som teorin anger? 7

4 Exempel: Böjlig ribba En böjlig ribba skall på intervallet [0,1] styras upp i ett antal jämnt fördelade noder på sådant sätt att dess potentiella energi minimeras samtidigt som den beskriver en funktion e x2 (finns i f2) med en största tillåten avvikelse 10 6. Förberedelseuppgift 4.1 Val av ändpunktsvillkor Vilka ändpunktsvillkor ska man använda? Motivera valet. [Avsnitt 3.1] Uppgift 4.2 Steglängdsval Vilken steglängd skall man använda, då man vill ha det maximala trunkeringsfelet mindre än 10 6? Pröva först med en valfri steglängd och läs av det maximala trunkeringsfelet R T ch p där p nu är känt från Uppgift 3.6. Använd detta för att beräkna c. Beräkna sedan den steglängd som ger R T 10 6. Redovisa beräkningarna. h = vilket ger intervall. Uppgift 4.3 Testning Använd den framräknade steglängden för att kontrollera noggrannheten. Hur stort blir det maximala trunkeringsfelet och var inträffar det? 8

5 Jämförelse mellan splineinterpolation och polynominterpolation I detta avsnitt ska funktionen f(x) = 1+5 e 25x2 1+x 2 /25 användas. Funktionen finns i f3. Uppgift 5.1 Datorexperiment med spline Interpolera f(x) med en naturlig splinefunktion. Använd intervallet [ 0.4, 4.4]. Rita graferna för olika antal delintervall. Börja med n = 15 och öka n med steg om 5 tills splinefunktionen ger en för ögat helt acceptabel lösning? Hur många delintervall krävdes? Förberedelseuppgift 5.2 Gradtal vid polynominterpolation Vi ska nu försöka att interpolera med ett polynom. Funktionen pol inter som du har kopierat till din area är listad nedan. Funktionen utför beräkningarna, ritar ut f(x) och det sökta polynomet. Vilket gradtal ska polynomet ha om intervallet delas i n delintervall? function pol_inter(fkn, n) % dela intervallet i n delintervall och beräkna funktionsvärdena x = -0.4 : 4.8/n : 4.4; f = fkn(x); % skapa ett polynom som interpolerar funktionen p = polyfit(x, f,?); % dela intervallet i 10n delintervall xx = -0.4 : 4.8/(10*n) : 4.4; % plotta pylonomet och den ursprungliga funktionen plot(xx, polyval(p,xx)) hold on plot(xx, fkn(xx), : ) % plot(,, ) hold off Uppgift 5.3 Datorexperiment med polynominterpolation Byt ut? i programkoden. Komplettera det sista plot-kommandot så att programmet också ritar ut stjärnor i interpolationspunkterna. Kör programmet med n = 8 och kontrollera att polynomet går genom stjärnorna. Experimentera sedan med olika n. För vilket n fick du bästa lösningen? Blev det en godtagbar approximation (polynomet ska då följa ursprungsfunktionen i hela intervallet)? Jämför med splinen. Vilken av metoderna fungerar bäst i detta fall? 9

6 Exempel: Personliga kurvan Vi vill använda en kubisk splinefunktion för att interpolera ditt personnummer. Låt x anta heltalsvärdena 1 till 10. Lagra siffrorna i ditt personnummer i vektorn y = [y 1,y 2,...,y 10 ]. Vi ska börja med att använda rätta randvillkor. Då behöver vi beräkna en approximation till derivatorna i ändpunkterna, y (a) resp. y (b). Förberedelseuppgift 6.1 Formel för slutlutningen Välj startlutningen enligt formeln y (a) D a (h) = y(1+2h)+4y(1+h) 3y(1) 2h (Här är y(1+(i 1)h) = y i, i = 1,2,...,10.) = { då h = 1} = y 3 +4y 2 3y 1. 2 Vad blir motsvarande uttryck för slutlutningen D b (h)? (Byt h i uttrycket till h och 1 till 10.) Förberedelseuppgift 6.2 Teori Visa med hjälp av taylorutveckling 1 att D a (h) = y (1)+ch p. Ange c och p. Utför härledningen på sista sidan. c = p = Uppgift 6.3 Rätta ändpunktsvillkor. Här kan du använda MATLAB-funktionen csape, se instruktioner sist i labben, och anropa den med x och y samt rätta ändpunktsvillkor. Bilda en tät x-vektor: xx=1:0.1:10; och använd ppval för att räkna ut splinefunktionens värde i dessa punkter. Ange här dina värden på D a (h) och D b (h): Uppgift 6.4 Naturliga ändpunktsvillkor Rita din naturliga personkurva i samma figur som den rätta kurvan. Uppgift 6.5 Kontroll Studera kurvorna och kontrollera att dina uträknade värden på D a (h) och D b (h) verkar stämma. (Det är troligt att den naturliga kurvan och den rätta har samma tecken på lutningen i kanterna.) Skriv ut och lämna med figuren! Uppgift 6.6 Jämförelse Skiljer sig ditt naturliga jag från ditt rätta jag? Var i så fall? 1 y(x+h) = y(x)+hy (x)+ h2 2! y (x)+ h3 3! y (x)+ 10

7 Exempel: Dalälven Alla kurvor kan inte beskrivas med en funktion y = f(x). Vill vi till exempel rita en cirkel, är splinefunktioner klart mindre lämpliga. Istället går det bra att använda en splinekurva s(t) = (x(t), y(t)). Kurvan s(t) = (x(t), y(t)) är en splinekurva om både x(t) och y(t) är splinefunktioner. I detta avsnitt skall vi använda splinekurvor för att lösa följande intressanta problem. Österdalälven har en märklig krok vid Östenfors. Redan i forntiden har man ändrat Dalälvens lopp på denna plats. Idag är området ett kulturminne. Rester efter skvaltkvarnar och andra lämningar bevaras med stöd från EU. Man kan beräkna hur vattnet strömmar genom kroken. Strömningen uppfyller en differentialekvation. Ekvationen skall gälla inom det område som begränsas av Dalälvens strandlinjer. Östra strandlinjen anges endast som ett antal punkter. Med hjälp av dessa av dessa punkter skall en lämplig strandlinje definieras. Det räcker inte med linjär interpolation. Differentialekvationen som beskriver strömningen kräver att stranden är snällare. Vi skall därför konstruera en strandlinje utnyttjande en kubisk spline. 6 5 4 Östenfors 3 Dalälven 2 1 2 3 4 5 6 7 Figuren visar de fyra punkter (x,y) R 2 av strandlinjen, som är givna. Vi söker en splinekurva s(t) = (x(t), y(t)) genom de givna punkterna. Parametern t skall ange det ungefärliga avståndet till punkten (7, 3), mätt längs strandlinjen. Det är lämpligt att ta t [0, 5]. Vi väljer noder och funktionsvärden enligt följande tabell. t 0 2 3 5 x(t) 7 5 4 4 t 0 2 3 5 y(t) 3 3 4 6 11

Förberedelseuppgift 7.1 Randvärden Vi antar att Dalälven strömmar parallellt med x-axeln när x=7, och parallellt med y-axeln när y = 6. Det behövs tilläggsvillkor för splinefunktionen x(t). Ange lämpliga värden på x (0) och x (5). Gör detsamma även för y (0) och y (5). Rita Dalälven med kursbibliotekets program dalaelven. Skriv >> dalaelven Uppgift 7.2 Rita kurvan Bilda östra strandlinjen med en kubisk splinekurva (med rätta ändpunktsvillkor) som interpolerar de givna punkterna. Redovisa vilka kommandon du använder för att göra detta! Rita splinekurvan i samma figur som Dalälven. Redovisa genom att skissa resultatet i bilden på föregående sida. Blev du nöjd med resultatet? Ledning: Beräkna först funktionsvärdena x(t), 0 t 5, och lagra dem som en vektor xx. Beräkna sedan funktionsvärdena y(t), 0 t 5 och lagra dem som en vektor yy. Rita sedan splinekurvan med plot(xx, yy) Uppgift 7.3 Ändrade randvärden Byt tecken på x (0) och välj i övrigt samma tilläggsvillkor som tidigare. Bilda östra strandlinjen med en kubisk splinekurva som interpolerar de givna punkterna. Rita splinekurvan i samma figur som interpolationspunkterna. Skissa återigen resultatet i figuren på föregående sida. Hur ser du på figuren vilket tecken derivatan x (0) har? 12

8 S-kurvan Matematisk typografi, dvs matematisk beskrivning av formen hos bokstäver och siffror har en lång tradition. Donald Knuth har skrivit en intressant artikel i ämnet (finns i hans bok TEX och METAFONT från 1979). Enligt Knuth är bokstaven S den svåraste att forma. Uppgiften består i att formge bokstaven S med kubisk splineinterpolation. Uppgift 8.1 Handrita ett S Handrita först ett S på rutat papper. Välj ut 7 punkter från den handritade kurvan så att avståndet emellan dem längs S-kurvan är ungefär lika. Lagra punkternas x och y koordinater i två vektorer, x och y. Här måste parametriska splines användas, dvs x = x(t) och y = y(t) är funktioner av en monotont växande parameter t. Välj t = 1 i startpunkten och låt sedan t anta värdena 2,3,...,7. Uppgift 8.2 Bestäm en naturlig kubisk spline som interpolerar x-värdena och en som interpolerar y-värdena. Använd sedan en vektor tt=1:0.1:7 för att plotta resultatet. Kommandot axis equal skalar axlarna lika och måste anges efter varje plottning. Ändraev.indataochkörigentillsdublirnöjdmedresultatet.Plottaävendeutvalda 7 punkterna som stjärnor i figuren. Uppgift 8.3 Använd istället splineinterpolation med rätta randvillkor för att beräkna x(t) och y(t). Experimentera med olika start- och slut-lutningar hos kurvorna x(t) och y(t) så du får ett snyggt S. Plotta gärna tillsammans med det naturliga S:et. Redovisa dina data i tabellen: t 1 2 3 4 5 6 7 x(t) y(t) Snyggast blev det med x (1) = y (1) = x (7) = y (7) = 13

9 Information om programmet csape MATLAB-rutinen csape beräknar en kubisk splinefunktion som interpolerar givna x- och y-värden. En mängd olika ändpunktsvillkor kan väljas. Beskrivning av de två ändpunktsvillkor som ska användas i denna lab finns i hjälpinformationen nedan. MATLAB-rutinen ppval (se nedan) används sedan för att beräkna s(x), dvs splinefunktionensvärdeförettgivetx.ärxenvektorberäknass(x)förallaelementenivektorn. 9.1 Användbart utdrag från hjälpinformation för csape CSAPE Cubic spline interpolation with various end-conditions. pp = csape(x,y,conds) returns the cubic spline interpolant (in ppform) to the given data (x,y) using the end-conditions specified in CONDS. CONDS may be a *string* whose first character matches one of the following: complete or clamped, not-a-knot, periodic, second, variational, with the following meanings: complete : match endslopes to the slope of the cubic that matches the first four data at the respective end. variational : set end second derivatives equal to zero 9.2 Användbart utdrag från hjälpinformation för ppval PPVAL Evaluate piecewise polynomial. v = ppval(pp,xx) returns the value at the points xx of the piecewise polynomial contained in pp, as constructed by CSAPE. 9.3 Exempel En spline med rätta randvillkor kan beräknas med anropet pr=csape(x,y, complete,[yprima yprimb]) där yprima och yprimb är värden på randvärdena. En spline med naturliga randvillkor kan beräknas med anropet pn=csape(x,y, variational ) 14