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

Relevanta dokument
Robotarm och algebra

TAIU07 Matematiska beräkningar med Matlab

kl Tentaupplägg

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

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

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

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

Uppgift 1 (grundläggande konstruktioner)

Uttryck, satser och strömhantering

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

Laboration: Grunderna i MATLAB

kl Tentaupplägg

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

Uppgift 1a (Aktiekurser utan poster)

Tentaupplägg denna gång

Uppgift 1 ( Betyg 3 uppgift )

Introduktion till Matlab

Introduktion till MATLAB

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

Laboration: Grunderna i Matlab

Uppgift 1 (vadå sortering?)

TAIU07 Matematiska beräkningar med Matlab

Uppgift 1 ( Betyg 3 uppgift )

TDDC74 Programmering, abstraktion och modellering DUGGA 1

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

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift )

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

Matlabövning 1 Funktioner och grafer i Matlab

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Tentaupplägg denna gång

CTH/GU LABORATION 1 MVE /2013 Matematiska vetenskaper. Mer om grafritning

Matlabövning 1 Funktioner och grafer i Matlab

kl Tentaupplägg

TSBB14 Laboration: Intro till Matlab 1D

Miniprojekt: Vattenledningsnäten i Lutorp och Vingby 1

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

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

kl Tentaupplägg

Uppgift 1 (Sorterade heltal som är OK)

Instruktion för laboration 1

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

kl Tentaupplägg

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

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

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

Tentaupplägg denna gång

Konvergens för iterativa metoder

Tentaupplägg denna gång

kl Tentaupplägg

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

Introduktion till Matlab

DUGGA Tentaupplägg

kl Tentaupplägg

Tentaupplägg denna gång

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

kl Tentaupplägg

Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen Arv och polymorfi

Introduktion till Matlab

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Introduktion till Matlab

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

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

TANA17 Matematiska beräkningar med Matlab

Introduktion till Matlab

Laboration 3. Funktioner, vektorer, integraler och felskattning

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

Laboration 3. Funktioner, vektorer, integraler och felskattning

Introduktion till Matlab

2 februari 2016 Sida 1 / 23

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Miniprojekt: Vattenledningsnäten i Lutorp och Vingby 1

Rapportexempel, Datorer och datoranvändning

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Numeriska metoder för ODE: Teori

Funktioner och grafritning i Matlab

TANA17 Matematiska beräkningar med Matlab

kl Tentaupplägg

3 Man kan derivera i Matlab genom att approximera derivator med differenskvoter. Funktionen cosinus deriveras för x-värdena på följande sätt.

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration

TAIU07 Matematiska beräkningar med Matlab

Mer om funktioner och grafik i Matlab

Fallstudie: numerisk integration Baserad på läroboken, Case Study 19.9

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

Envariabelanalys 5B1147 MATLAB-laboration Derivator

Mer om funktioner och grafik i Matlab

Laboration 3: Stora talens lag, centrala gränsvärdessatsen och enkla punktskattningar

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

kl Tentaupplägg

Instruktion för laboration 1

5B1147. Envariabelanalys. MATLAB Laboration. Laboration 1. Gränsvärden och Summor

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

TMV156 Inledande matematik E, 2010 DATORÖVNING 2 ANONYMA FUNKTIONER, FUNKTIONSGRAFER OCH LITE OPTIMERING

DUGGA Tentaupplägg

TANA19 NUMERISKA METODER

Laboration 2: 1 Syfte. 2 Väntevärde och varians hos en s.v. X med fördelningen F X (x) MATEMATISK STATISTIK, AK FÖR BYGG, FMS 601, HT-08

Newtons metod och arsenik på lekplatser

Datorövning 1: Fördelningar

kl Tentaupplägg

Transkript:

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson 2010-11-19 Plot och rekursion I denna laboration skall du lära dig lite om hur plot i MatLab fungerar samt använda rekursion i vissa uppgifter. Tidsåtgång Denna laboration beräknas ta ca 6 timmar i anspråk (2 timmar bokade med assistent). Mål Du ska efter denna laboration känna till hur plot fungerar i dess enklaste form när man behöver använda hold-kommandot vad figure är för något hur rekursion ser ut i MatLab hur man lägger flera funktioner i samma fil vilken räckvidd olika delar får i ett program (lokala/globala variabler/funktioner m.m.) Uppgift 1 (ca 30 min) Skriv en funktion som ritar ut hur en matematisk funktion ser ut. Indata till denna funktion skall vara den matematiska funktionen, start- och slutvärde samt steglängd på x (d.v.s. 4 parametrar). Ett exempel på hur det ser ut när man kör din utritningsfunktion (vi antar att du kallat den plot_function) och ritar ut funktionen sind i intervallet [0, 360] med steglängd 10: >> plot_function(@sind, 0, 360, 10) Sida 1

Uppgift 2 (ca 45 min) Skriv ett program som låter användaren mata in ett värde på x (där x skall ligga i intervallet [1, 7]) och sen beräknar resultatet enligt följande formler: f ( 0) = 1 f ( 1) = 1 Samt för x > 1: f ( j 1) + f ( x j) ) ------------------------------------------------- x j j = 1 f ( x) = i + ------------------------------------------------------------------ i i = 1 Körexempel 1: Ange värdet på x: 2 Resultatet blir : 6.50 Körexempel 2: Ange värdet på x: 3 Resultatet blir : 21.4167 Körexempel 3: Ange värdet på x: 5 Resultatet blir : 185.4417 Körexempel 4: Ange värdet på x: 7 Resultatet blir : 1660.8183 Krav: Funktionen f(x) skall vara rekursiv. Beräkningen av summorna bör dock inte vara rekursiva. Tips: Tänk *inte för mycket* på vad som händer. i Följande körexempel skulle vi kunna åstadkomma, men vi rekommederar er inte att köra dessa. De tar längre tid än nödvändigt. Ange värdet på x: 9 Resultatet blir : 16734.2009 Ange värdet på x: 10 Resultatet blir : 55497.835 Sida 2

Uppgift 3 (ca 2 tim) För att skriva en egen funktion my_sin(x) som approximerar den inbyggda sin(x) använder man sig t.ex. av Taylorutvecklingen för sin(x) som ser ut på följande sätt: sin( x) = x x ---- 3 3! x 5 x 7 + ---- ---- + 5! 7! Kuriosa: Felet i summan är alltid mindre än absolutbeloppet av den första utelämnade termen i serien. Skulle man t.ex. vilja ha ett resultat som har ett mindre fel än 10-6 skall man alltså avsluta när man hittar den första termen som har ett absolutbelopp som är mindre än just detta värde. Använd Taylorutvecklingen ovan och beräkna sin(x) rekursivt på två olika sätt. Variant 1 där man beräknar summan framifrån (de stora termerna först) och variant 2 där man beräknar summan bakifrån (de små termerna först). Det är givet att ni bara behöver summera de första 6 termerna i serien beskriven ovan. I huvudprogrammet skall ni anropa de två varianterna (kalla dem för my_sin_1(x) respektive my_sin_2(x) för att kunna skilja dem åt) och beräkna differensen. Utskriften från programmet skall vara de båda sinusvärdena, den inbyggda sinusfunktionens sinusvärde samt differensen mellan dessa tre enligt exemplet nedan. Det är lämpligt att användaren får mata in vilket värde på x som skall testas. Krav: Du skall dessutom visa att du förstår hur man har flera funktioner i samma fil och dessutom att du anropar det som går i denna fil från en funktion i en separat fil. Tips: Det finns behov av en underfunktion till era sinusfunktioner. Underfunktionen är rekursiv. Själva my_sin_n(x) är inte rekursiv utan anropar underfunktionen med lämpliga data. Du kan även testa dina funktioner med plot_function som du gjorde tidigare om du lägger dem i separata filer. Körexempel 1: Körexempel 2: >> test_my_sin(0.1) >> test_my_sin(0.25) A=sin(x) = 0.099833 A=sin(x) = 0.2474 B=my_sin_1(x) = 0.099833 B=my_sin_1(x) = 0.2474 C=my_sin_2(x) = 0.099833 C=my_sin_2(x) = 0.2474 B-A = 0 B-A = 0 C-A = 1.3878e-17 C-A = 0 B-C = -1.3878e-17 B-C = 0 Körexempel 3: Körexempel 4 (detta skall man reagera på!): >> test_my_sin(1.4) >> test_my_sin(6.28) A=sin(x) = 0.98545 A=sin(x) = -0.0031853 B=my_sin_1(x) = 0.98545 B=my_sin_1(x) = -3.1778 C=my_sin_2(x) = 0.98545 C=my_sin_2(x) = -3.1778 B-A = -1.2628e-08 B-A = -3.1746 C-A = -1.2628e-08 C-A = -3.1746 B-C = -1.1102e-16 B-C = 8.8818e-16 Sida 3

Uppgift 4 (ca 2 tim) Skriv funktionen plot_heart som ritar ut ett hjärta enligt figurerna nedan. Till funktionen skall du skicka in storleken på hjärtat (en multipel av 0.1). För att rita ut hjärtat krävs fyra delar. Två halvcirklar (som man ritar ut position för position) samt två raka streck (som också ritas punkt för punkt). De olika positionerna som ritas ut skall vara små röda cirklar. De två figurerna nedan har storlek 0.5 respektive 2.0 och det man direkt ser är att det är fler småcirklar i den andra figuren samt att graderingen på axlarna är olika (detta justeras i MatLab, som ni märkt, automatiskt). Antalet cirklar skall bero av storleken (detta för att man skall kunna rita två olika storlekar i samma figur, men ändå inte får tätare mellan cirklarna i det mindre hjärtat). Tips1 : Se i figuren och mät för att få fram hur avstånd m.m. förhåller sig till storleken som matats in. Tips 2: Det kan vara bra att tänka på i vilken riktning man utför olika saker. Det kan i vissa fall ge olika resultat om man börjar från fel håll. Krav: Om man anropar plot_heart flera gånger skall tidigare hjärtan ligga kvar. Man ser då tydligt avståndsskillnaderna i olka storlekar om man gjort galet. Sida 4

Uppgift 5 (ca 45 min) Skriv funktionen fill_heart som ritar ut ett fyllt hjärta enligt figuren nedan. Till din hjälp antar jag att du kan använda plot_heart som du redan skapat. Även denna figur skall ritas ut givet en storlek som parameter (på samma sätt som föregående uppgift). I denna figur ser man varför det är rimligt att ha samma avstånd mellan de olika cirklarna som används för att rita figuren. Krav 1: Ditt program skall rita ut figuren med fördröjning så att man ser hur hjärtat ritas ut. Åtminstone en ram i taget. Behöver inte vara per cirkel. Krav 2: Funktionen fill_heart skall vara rekursiv. Avbryt när storleken är 0.1. Tips: Följande inbyggda kommandon kan vara bra att kolla in: clf, figure Denna figur är ritad för storlek 2. Sida 5

Sida 6