TMV156/TMV155E Inledande matematik E, 2009

Relevanta dokument
TANA17 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med Matlab

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

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

MMA132: Laboration 1 Introduktion till MATLAB

Introduktion till MATLAB

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

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

TSBB14 Laboration: Intro till Matlab 1D

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

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

MMA132: Laboration 1 & 2 Introduktion till MATLAB

TANA17 Matematiska beräkningar med Matlab

MMA132: Laboration 2 Matriser i MATLAB

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

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

TAIU07 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

Labb 3: Ekvationslösning med Matlab (v2)

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

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

Laboration: Grunderna i MATLAB

TANA17 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med Matlab

Beräkningsvetenskap föreläsning 2

TMV225 Inledande Matematik M

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

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

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

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

Matlabövning 1 Funktioner och grafer i Matlab

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

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

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

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

2 februari 2016 Sida 1 / 23

Variabler och konstanter

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

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

Matlabövning 1 Funktioner och grafer i Matlab

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

2. (a) Skissa grafen till funktionen f(x) = e x 2 x. Ange eventuella extremvärden, inflektionspunkter

Instruktion för laboration 1

x f (x) dx 1/8. Kan likhet gälla i sistnämnda relation. (Torgny Lindvall.) f är en kontinuerlig funktion på 1 x sådan att lim a

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

LABORATION cos (3x 2 ) dx I =

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

Fixpunktsiteration. Kapitel Fixpunktsekvation. 1. f(x) = x = g(x).

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

Matematisk Modellering

Lösningar och kommentarer till uppgifter i 3.1

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

MAA7 Derivatan. 2. Funktionens egenskaper. 2.1 Repetition av grundbegerepp

Beräkningsverktyg HT07

Användarhandledning Version 1.2

Newtons metod och arsenik på lekplatser

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

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

Introduktion till Matlab

KPP053, HT2016 MATLAB, Föreläsning 2. Vektorer Matriser Plotta i 2D Teckensträngar

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

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

6 Derivata och grafer

Kort om programmering i Matlab

TAIU07 Matematiska beräkningar med Matlab

TANA81: Simuleringar med Matlab

Laboration 3. Funktioner, vektorer, integraler och felskattning

Envariabelanalys 5B1147 MATLAB-laboration Derivator

Matlabföreläsningen. Lite mer och lite mindre!

En introduktion till MatLab

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

Grundläggande kommandon

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

Laboration 3. Funktioner, vektorer, integraler och felskattning

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Lösandet av ekvationer utgör ett centralt område inom matematiken, kanske främst den tillämpade.

Förkortning och förlängning av rationella uttryck (s. 29 Origo 3b)

Matriser och vektorer i Matlab

Introduktion till Matlab

Visual Basic, en snabbgenomgång

Föreläsning 3-4 Innehåll

Matematisk Modellering

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

Instruktion för laboration 1

Svar till vissa uppgifter från första veckan.

Uppgift 1 (grundläggande konstruktioner)

Block 5: Ickelineära. ekvationer? Läroboken. Löpsedel: Icke-lineära. ekvationer. Vad visade laborationen? Vad visade laborationen?

Ickelinjära ekvationer

Newtons metod. 1 Inledning. 2 Newtons metod. CTH/GU LABORATION 6 MVE /2013 Matematiska vetenskaper

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

4.3. Programmering i MATLAB

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

Studio 6: Dubbelintegral.

Lösningsförslag Tentamen i Beräkningsvetenskap I, 5.0 hp,

Newtons metod. 1 Inledning. CTH/GU LABORATION 3 MVE /2014 Matematiska vetenskaper

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 8 december 2015 Sida 1 / 22

SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2

Moment 1.15, 2.1, 2.4 Viktiga exempel 2.2, 2.3, 2.4 Övningsuppgifter Ö2.2ab, Ö2.3. Polynomekvationer. p 2 (x) = x 7 +1.

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

Transkript:

TMV156/TMV155E Inledande matematik E, 2009 DATORÖVNING 2 PÅ VÄG MOT PROGRAMMERING Instruktioner Skapa en ny filkatalog ( directory ) Lab2 för denna övning. Gör alltid uppgifterna i script-filer eller funktionsfiler. Lista gärna alla kommandon du använder under den här laborationen. Du kommer att ha nytta av samtliga i framtiden. 1. Uppgifter 1.1. Anrop av några matlabfunktioner. Försök koppla det här till de uppgifter du gjorde förra laborationen som handlade om att skriva funktionsfiler. Här ska du använda funktionsfiler som någon annan har skrivit. Ryggmärgsreflexen här är att skriva help funktionsnamn i kommandofönstret så fort en ny funktion dyker upp. Det gäller nu att du förstår hur det fungerar med invariabler/inargument och utvariabler/utargument. Det viktigaste här är alltså att lista ut hur en funktion du inte använt förut fungerar med hjälp av help-kommandot men funktionerna vi presenterar på vägen är också viktiga! 1.1.1. Matlabfunktion med en eller två utvariabler. Ett primitivt sätt att hitta minimum och maximum för en funktion är att generera en vektor med värden på det intervall [a, b] man är intresserad av att studera med tillräckligt hög upplösning genom att skriva x=a:dx:b; där dx är ett tillräckligt litet tal och sedan beräkna funktionsvärdena y=f(x) där f är ett funktionshandtag och sedan låta funktionerna max och min hitta det största respektive minsta värdet. Detta görs helt enkelt genom kommandot minimmum=min(y) och analogt för att hitta maximum. Då får du docka bara veta vad det minsta (största) värdet är och inte var det antas. Det kan du däremot göra om du beodrar min att returnera två variabler genom kommandoraden [minimum,ind]=min(y). Läs igenom hjälptexten för någon av dessa funktioner och fundera ut hur du nu får reda på vilket x-värde som ger detta minima/maxima. Skriv en script-fil som gör allt detta för funktionen f(x) = e x sin(x) på intervallet [010] säg. 1.1.2. Anrop av färdiga funktioner, hitta rötter till polynom. Att analytiskt hitta rötter till polynom av högre grad än två är svårt. Matlab har en färdig funktion för att göra detta numeriskt. Den heter roots.m. Läs igenom hjälpfilen och försök hitta rötterna till polynomet p(x) = x 3 6x 2 + 11x 6. Testa att skriva ut värdet på rötterna med full noggrannhet genom att skriva format long innan du anropar funktionen. Rötterna är 1, 2 och 3. Hur stort är felet? Försök samma sak med polynomet q(x) = x 3 3x 2 + 3x 1. Den som kan sin Pascals triangel ser att detta polynom har en trippelrot i x = 1. Hur stort är felet här? Det är ett allmänt fenomen att det är svårare att hitta multipla rötter än enkla. Plotta Date: 2009 10 07, Fredrik Lindgren, Matematiska vetenskaper, Chalmers tekniska högskola. 1

2 DATORÖVNING 2 PÅ VÄG MOT PROGRAMMERING polynomens grafer och fundera över varför det kan vara så! För att få polynomvärdena, använd funktionen polyval! 1.1.3. Anrop av färdiga funktioner, nollställen till generella funktioner. Funktionen roots ovan hittar bara nollställen till polynom. För att lösa f(x) = 0 för en mer generell funktion f så används fzero. Läs igenom hjälpfilen och använd funktionen på polynomen i föregåe uppgift. Jämför lösningarna. Det finns minst en viktig skillnad! Försök också med (den matematiska) funktionen g(x) = (x 2 1) exp(x). Var har g sina nollställen? 1.1.4. Anrop av färdiga funktioner, min- och maxvärden. I matlab finns två standardlösare för att minimera funktioner, fminsearch och fminbnd. Dessutom finns massa specialgrejer i Optimization Toolbox. Vad är skillnaden mellan ovan nämda funktioner? Testa båda på funktionen g(x) i uppgiften ovan. Funktionen g = g(x) (x 2 4) har flera lokala minima. Plotta funktionen och välj gränser respektive startvärde så att du hittar alla! Det krävs alltså en sökning per lokalt minimum. Hur gör man för att hitta ett maximum med hjälp av dessa Matlab-funktioner? 1.1.5. Lurad av grafen? Plotta funktionen f(x) = (x ln(x) + 3 sin(x) + 7x)/ x först på intervallet [0, 1] och sedan på [0, 5 10 5 ]. I den första plotten missar man tydligen ett globalt minimum. Försök hitta det med optimeringsfunktionerna från föregåe övning. Svårt, eller hur?! Testa med g(x) = 1000f(x/1000). Kan du med hjälp av lösningen till det problemet räkna ut ungefär vad lösningen är till det första? 1.2. for-loopen. For-loopen är en av de viktigaste programmeringskonstruktionerna och används så fort vi vill upprepa någon typ av operationer ett på förhande kännt antal gånger. Uppgifterna nedan syftar till att förstå hur den fungerar och till att visa några standardanvändningar. Tänk också noggrant igenom hur indexering av vektor och matriser fungerar om du känner dig osäker på det och giv akt på hur vi bygger ihop nya matriser av gamla nedan. 1.2.1. En första for-loop. Vad gör följande for-loop? N=100; for n=1:1:100 s=s+n; Vad är värdet på variabeln s när programmet körts klart? Det kan man enkelt räkna ut! 1.2.2. En andra for-loop. Vad gör följande for-loop? N=100; s=1:0.5:n; for x=s x 1.2.3. Summa. Man kan visa att summan (1) Σ N k=0x k = 1 xn+1 1 x och att om x < 1 så är Σ k=0x k := lim N ΣN k=0x k = 1 1 x. men om x 1 så är den divergent, gränsvärdet existerar inte. Skriv en funktionsfil summa.m med invariablerna x och N som beräknar summan i (1) genom att addera en term i taget. Ledning: s = s + x k. Jämför med format long inställt resulatet då N = 75 och N = 100.

DATORÖVNING 2 PÅ VÄG MOT PROGRAMMERING 3 1.2.4. Summera åt andra hållet! Då Matlab bara räknar med 16 värdesiffror så kommer kommer två tal a, b summera till a om a är mer än 16 storleksordningar större än b. Med andra ord blir a + b = a även om b är nollskilt. För att minska det här problemet så bör man summera summor genom att börja med de minsta talen, åtminstone om termerna har samma tecken. Kopiera filen summa.m till baksum.m och skriv om den så att den summerar åt andra hållet! Blir det någon skillnad? 1.2.5. Att bygga upp matriser och vektorer. Följande program skapar en vektor med N slumptal. Funktionen startar en tidtagning och toc stoppar den och returnerar tiden. Fundera noga över hur skapandet av vektorn fungerar i de fyra fallen! Varför tar de två första så oerhört mycket längre tid? N=1e5; %Ett stort nummer %Startar tidtagare x=[]; %Skapar en tom matris x=[x rand]; %Ett sätt att bygga upp matriser/vektorer tid(1)=toc; %Stannar tiden x=[]; x(k)=rand; tid(2)=toc; x=zeros(1,n); x(k)=rand; tid(3)=toc; %Ett sätt som fungerar likadant i praktiken %Det snabba sättet!!! x=rand(1,n); %I just det här fallet kan man göra så här=jättesnabbt! tid(4)=toc; Den första loopen använder sig av ett specialfall av matrisbyggande. Om A och B är två matriser med lika många rader (men eventuellt olika många kolumner) så kan vi deklarera en ny matris C=[A B]; Vad kan man, analogt, göra om A och B har lika många kolumner men olika många rader? 1.2.6. Vänd en vektor. Skriv en funktionsfil turn.m som tar emot en godtycklig vektor och returnerar en vänd version, dvs sätter det första talet sist och det sista först etc. Ledning:N = length(x gammal ), x ny (j) = x gammal (N + 1 j). Vändningen ska göras i en for-loop. 1.2.7. Ettor på diagonalen. Matlab-funktionen eye.m genererar en matris med ettor på huvuddiagonalen (diagonalen som löper från hörnet i nordväst till hörnet i sydost om matrisen är kvadratisk) och nollor på alla andra ställen. Skriv en funktion vandmatris.m som tar emot ett godtyckligt heltal N och returnerar en kvadratisk matris A med N rader och N kolumner och ettor på diagonalen från nordväst till nordost och nollor överallt annars. Börja med att skapa en matris med rätt storlek men med bara nollor. Det kan göras med funktionen zeros. Tag sedan samma vektor som i förra uppgiften och se till att den är en kolumnvektor: x_gammal(:,1)=x_gammal; Skriv sedan

4 DATORÖVNING 2 PÅ VÄG MOT PROGRAMMERING x_ny2=a*x_gammal; %Inte.* Jämför med resultatet från den förra uppgiften. Vektorerna x ny 2 och den vektor som turn.m returnerar ska vara samma. Magiskt! 1.2.8. Dubbel for-loop. För en godtycklig matris A så är A:s transponat, A T, den matris man får genom att sätta A:s första rad som A T :s första kolumn, A:s andra rad som A T :s andra kolumn osv. Om vi tittar på elementen så innebär det att A T (i, j) = A(j, i). Färdigställ följande program så att det räknar ut transponatet av en matris A. [N,M]=size(A); %Ger antalet rader (N) och kolumner (M) i A AT=zeros(M,N); for i=1:n for j=1:m Notera att Matlab har en färdig operation som gör detta snabbare AT=A ; men nu för tillfället tränar vi for-loopar. Annars skall användas! 1.3. Logiska satser, operatorer samt if och else. Ofta vill man att ett program ska uträtta olika saker beroe på vilket värde en eller variabler har eller beroe på relationen mellan två eller flera variabler. Ett viktigt fall är felhantering. Har användaren skickat in rätt variabler i en funktion? Rätt antal? I uppgifterna i det här stycket så tränar vi på formalismen som behövs för att hantera dessa saker. Begreppen logiska satser och logiska operatorer är centrala. Dess tydligaste användningsområde är if-else-satser. Även while-loopar bygger på det här begreppet, men vi väntar med dem till slutet. 1.3.1. De viktigaste logiska satserna. Sriv en funktionsfil som tar två inargumet A och B och returnerar sanningshalten i följande påståen: A==B A~=B A<=B A>=B A>B A<B Filen som du kan kalla jamforelse.m ska alltså returnera sex variabler. Fundera i förväg ut vad svaret blir om A = 1 ovh B = 2 respektive A = B = 3. 1.3.2. De logiska operatorerna. Skriv på samma sätt som ovan en funktionsfil logik.m som tar emot två invariabler A och B och returnerar sanningshalten i följande logiska operationer: A&B A~B A B AxorB A&(A<B) Fundera vad du får för svar om A = 1 och B = 2 respektive om A = 0 och B = 1. 1.3.3. Mera jämförelser. Här kommer en nestlad if-sats. Det är alltså en if-sats inuti en if-sats. Vad gör den? För att kunna köra detta måste man byta ut frågetecknen mot några värden. x=? y=? if isa(x, double ) & isa(y, double ) if x==y svar= x och y är lika stora ;

DATORÖVNING 2 PÅ VÄG MOT PROGRAMMERING 5 elseif x<y svar= y är större än x ; else svar= x är större än y else warning( x och y måste vara dubblar ) 1.3.4. Enkel if-sats. Skriv en funktionsfil som testar om variabeln f raga innehåller strängen hej. Låt den då sätta variabeln svar till strängen Hej!. Om den inte innehåller strängen hej så bör den testa om den innehåller strängen hej då. I detta fall bör svar tilldelas strängen Hej då!. Om fraga inte har något av dessa värden bör svar tilldelas värdet Jag förstår inte vad du säger! Hur många in- respektive utargument borde funktionen ha? 1.4. while-loopar. En while-loop upprepar sig själv så länge det logiska uttrycket som står efter ordet while i programkoden. Eftersom detta uttryck måste testas varje varv tar while-loopar längre tid än for-loopar så man bör alltid använda de senare om man kan. Vi bryter mot den regeln redan i den första uppgiften nedan. 1.4.1. Några första while-loopar. Det här är en nonsensloop men vad gör den? while s<10000 s=s+1; Hur skulle en for-loop som gör exakt samma sak se ut? I följande fall blir det motiverat med en while-loop. Varför? k=0; while abs(s)<100 k=k+1; %Räknare s=s+rand; 1.4.2. Ett betyder sant. (Inga kommentarer) while 1 Jag slutar aldrig snurra! 1.4.3. Summor igen. Summera summan i uppgift 1.2.3 i en while-loop och stoppa när bidraget av nästa term helt avrundas bort. Spara alla delsummor och jämför den sista med den föregåe. Avsluta när de är samma. Plotta alla delsummor! 1.4.4. Fixpunktsiteration. Blir du klar har du en viktig användning av while-loopen att bita i på följande webadress: http://www.math.chalmers.se/math/grundutb/cth/tmv225/0910/studio/studio4.pdf