Kontinuerliga system, Datorövning 1

Relevanta dokument
Kontinuerliga system, Datorövning 1

Funktionsteori Datorlaboration 2

Datorövning 1. - med hjälp av matlab kort repetera fourier-, sinus- och cosinus-serier och deras konvergensegenskaper,

Funktionsteori Datorlaboration 2

Datorlaboration 2. 1 Serier (kan göras från mitten av läsvecka 4)

Kontinuerliga system, Datorövning 1

Introduktion till MATLAB

Laboration: Grunderna i MATLAB

Matriser och Inbyggda funktioner i Matlab

Matriser och Inbyggda funktioner i Matlab

Matlabövning 1 Funktioner och grafer i Matlab

Matlabövning 1 Funktioner och grafer i Matlab

MMA132: Laboration 2 Matriser i MATLAB

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

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

Matlab har en enkel syntax. Inga deklarationer behövs och det finns i princip en enda 1 datatyp, nämligen matriser.

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

Instuderingsfrågor i Funktionsteori

Lab 1, Funktioner, funktionsfiler och grafer.

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.

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

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

Introduktion till Matlab

Euler-Mac Laurins summationsformel och Bernoulliska polynom

Laboration: Vektorer och matriser

STOCKHOLMS UNIVERSITET VT 2011 Avd. Matematisk statistik GB DATORLABORATION 1: TIDSSERIER.

Introduktion till Matlab

Mer om funktioner och grafik i Matlab

TEKNISKA HÖGSKOLAN Matematik Fredrik Abrahamsson. Introduktion till MATLAB

Laboration: Grunderna i Matlab

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

Mer om funktioner och grafik i Matlab

Linjär algebra med tillämpningar, lab 1

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

Datorövning 2. - Tag med lärobok och övningshäfte till övningen. - Fyll före övningenen i svaren på frågorna på sidan 5 i denna handledning.

MATLAB övningar, del1 Inledande Matematik

Approximation av funktioner

Laborationstillfälle 1 Lite mer om Matlab och matematik

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

Datorövningar i funktionalanalys och harmonisk analys

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

Instruktion för laboration 1

Introduktion till Matlab

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

Lägg märke till skillnaden, man ser det tydligare om man ritar kurvorna.

4 Numerisk integration och av differentialekvationer

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

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

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

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

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

TSBB14 Laboration: Intro till Matlab 1D

Matematisk Modellering

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

Fouriers metod, egenfunktionsutvecklingar.

1 Vektorer i koordinatsystem

Matriser och linjära ekvationssystem

TAIU07 Matematiska beräkningar med Matlab

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: 21:a April klockan

Numerisk lösning till den tidsberoende Schrödingerekvationen.

DATORLABORATION FÖR KURSEN ENVARIABELANALYS 2

FMNF15 HT18: Beräkningsprogrammering Numerisk Analys, Matematikcentrum

Kontinuitet och gränsvärden

Fourierserier: att bryta ner periodiska förlopp

Talmängder. Målet med första föreläsningen:

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

Beräkningsverktyg HT07

Lab 2, Funktioner, funktionsfiler och grafer.

Användarmanual till Maple

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

5 Linjär algebra. 5.1 Addition av matriser 5 LINJÄR ALGEBRA

TMV166 Linjär algebra för M. Datorlaboration 2: Matrisalgebra och en mekanisk tillämpning

Uppsala Universitet Matematiska Institutionen Bo Styf. Sammanfattning av föreläsningarna 11-14, 16/11-28/

Newtons metod och arsenik på lekplatser

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

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

Beräkningsvetenskap och Matlab. Vad är MATLAB? Vad är MATLAB? Användningsområden. Vad är MATLAB? Grunderna i Matlab. Beräkningsvetenskap == Matlab?

TAIU07 Matematiska beräkningar med Matlab

Linjär Algebra M/TD Läsvecka 2

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Grafik och Egna funktioner i Matlab

Matlabövning. Matlab har en enkel syntax och många av er har använt programmet tidigare. Inga deklarationer behövs.

Laboration 1: Linjär algebra

SF1625 Envariabelanalys

At=A' % ' transponerar en matris, dvs. kastar om rader och kolonner U' % Radvektorn U ger en kolonnvektor

Matematisk analys för ingenjörer Matlabövning 3 Numerisk lösning av differentialekvationer

Instruktion för laboration 1

Funktioner och grafritning i Matlab

Talmängder N = {0,1,2,3,...} C = {a+bi : a,b R}

TANA17 Matematiska beräkningar med Matlab

Moment 5.5 Övningsuppgifter I 5.60a. 5.60b, 5.60.c, 61

Modul 1 Mål och Sammanfattning

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

TANA17 Matematiska beräkningar med Matlab

M0043M Integralkalkyl och Linjär Algebra, H14, Matlab, Föreläsning 1

TANA17 Matematiska beräkningar med Matlab

Konvergens för iterativa metoder

Matematisk Modellering

Transkript:

Vårterminen 2001 Kontinuerliga system, Datorövning 1 Inledning Syftet med denna datorlaboration är att Du skall bli bekant med Matlab som räkne- och visualiseringshjälpmedel, experimentellt studera Fourier-, sinus- och cosinus-serier och deras konvergensegenskaper, experimentellt studera egenskaperna hos lösningar till endimensionella värmeledningsoch svängningsproblem, Hinner du inte med alla uppgifterna under den handledda övningen, så genomför de återstående momenten på egen hand, antingen på LTH:s datorer eller på egen. Övningarna kan köras på nästan valfritt operativsystem om man bara har en tillräckligt modern version av Matlab. Hjälpfiler som behövs för denna laboration kan närsomhelst hämtas från kursens hemsida, adress http://www.maths.lth.se/matematiklth/personal/annika/kontsys01/kontsys01.html. Studenter kan hämta hem Matlab och Maple (som kommer att användas vid senare laborationer) via ftp från en server hos Student i Lund. De studenter som inte har en snabb internetkoppling kan låna CD-skivor hos studentdatorrådgivarana. (Detta är hämtat från sidan http://ftp.lth.se/pgm/general.html) Del 1 av denna handledning innehåller en kort introduktion till Matlab. De som har erfarenhet av Matlab kan starta direkt på del 2. I texten nedan finns några rubriker Frågor att besvara. Tänk själv ut svaren på dessa, men be handledaren förklara om du inte känner dig säker på att du förstår poängen med frågan. Förberedelse: Läs igenom denna handledning samt avsnitt 3.1.2 (om Fourierserier) och exempel 3.1 och 3.2 i läroboken. 1 Om Matlab Allmänt Matlab, som är en förkortning av Matrix laboratory, är speciellt konstruerat för att räkna numeriskt med matriser, men har också en väl utvecklad grafik för att presentera resultaten. Det finns mer än 300 kommandon och funktioner i grundversionen av Matlab. Det går att skriva komplicerade program i Matlab, men vi skall huvudsakligen använda Matlab som en avancerad grafisk räknedosa. En utförligare introduktion till Matlab än den vi kan ge här är Pärt-Enander och Sjöberg, Användarhandledning för Matlab 5, Uppsala universitet. Start och avslutning av Matlab Matlab startas med kommandot matlab. Matlab svarar efter några sekunder med >> och därmed är det klart att köra. Pågående beräkningar kan avbrytas med Ctrl-C. Matlab avslutas med quit. Kör du under Windows görs motsvarande med hjälp av menuer. 1

Grundläggande operationer och kommandon Kontrollera att Matlab kan fungera som en vanlig räknedosa. Prova i tur och ordning att skriva 2-3*5, cos(pi), i^2, exp(i*pi/2) Matlab klarar tydligen att räkna med komplexa tal. Exponentialfunktionen med basen e betecknas exp. För information om andra elementära funktioner, gör help elfun. Observera att du kan kalla tillbaka gamla kommandon med pil-upp och pil-nertangenterna. Man kan sedan ändra i dessa. Matlab räknar internt med cirka 15 decimala siffror. Resultatet presenteras normalt med 5 siffror, fler siffror får man med kommandot format long. Återgång till 5 siffror görs med format short. Gör dig bekant med Matlabs hjälpfunktion genom att skriva help help, help *, och help inv. Observera att i texten i hjälpfilerna skrivs alla funktioner och kommandon med stora bokstäver, men i Matlab skall de skrivas med små bokstäver. Man skall alltså skriva sin(5), och inte SIN(5). Inmatning av matriser För att använda Matlab effektivt bör man arbeta så mycket som möjligt med matriser. Matlab utför matrisoperationer mycket snabbt, men är betydligt långsammare på tex for-loopar. Undersök hur Matlab representerar matriser genom att skriva a = [1 5-7], b = [1 2; 3 4] Du kommer att finna att a är en 1 3-radmatris och b en 2 2-matris. Inmatningar och operationer utförs då man gör en radframmatning (return), och resultatet visas på skärmen. Vill man slippa se detta, vilket man ofta vill, speciellt om det rör sig om stora matriser, avslutar man med ett semikolon, tex a = [1 5-7];. Enskilda element och hela rader eller kolonner i de inmatade matriserna är åtkomliga. Till exempel betyder b(1,2) matriselementet på plats 1 2 och b(:,2) den andra kolonnen. Redan definierade matriser kan lätt ändras. Till exempel kan en ny 3 2-matris skapas ur b genom b2 = [b ; 5 6]. De två första raderna överenstämmer med b medan den tredje är [5 6]. Gamla variabler kan man ta bort med kommandot clear. Kommandot 2:0.1:3 skapar vektorn (radmatrisen) [2.0 2.1... 2.9 3.0]. Här anger 2 första komponenten, 3 den sista, och 0.1 är differensen mellan de olika komponenterna. Skriver man inget i mitten så underförstås att differensen är 1, så att tex 1:3 ger [1 2 3]. Matrisoperationer Matrisoperationerna addition, subtraktion och multiplikation, + - *, är bara definierade för matriser av matchande storlekar. Prova med att bilda a+b, a*a, a*b och b*b, med de a och b som införts ovan. Multiplikation med skalär betecknas också med *, tex 2*b. Matlab har även en annan typ av operationer på matriser, betecknade.*./.^ som arbetar komponentvis. Skriver man tex b.*b så multipliceras matriselementen på samma plats med varandra, och i detta fall blir resultatet detsamma som b.^2. Skaffa dej ytterligare några matriser för experiment med matrisoperationer. Förslagsvis bildar du 2

c = [0 1; 2 3] och d = [2 ; 3] Prova några tillåtna och otillåtna matrisoperationer, tex b*c, b.*c, b./c, a*d, a.*d, d*a, a.^2, c./c Titta särskilt på b./c och c./c, där du kan se hur Matlab hanterar division med noll. Se help inf resp help nan. Givetvis kan Matlab transponera och invertera matriser och beräkna determinanter. Prova a, inv(c), inv(d), det(b), a*b och d *b Med tillgång till Matlab behöver man inte tycka att lineära ekvationsystem är jobbiga att lösa, åtminstone inte kvadratiska med entydig lösning. Ett sätt att lösa det lineära ekvationssy- b, vilket översatt till Matlab blir x=inv(a)*b. stemet Ax b är att använda formeln x A 1 (Detta är i allmänhet inte det mest effektiva sättet att lösa systemet, utan man skall hellre använda Matlabkommandot x = A\b, se help \.) Lös som övning ekvationsystemet x 2y 5 3x 4y 6 med Matlab, med båda de angivna metoderna. Grafik Matlab har omfattande grafiska möjligheter. Se till exempel på hjälpen till kommandona plot och mesh. sinx Låt oss rita grafen till y x i intervallet 10 x 10. Vi skaffar oss först ett antal x värden för vilka vi skall räkna ut funktionsvärdena, x = -10:0.1:10; För att slippa se alla talen skrivas ut på skärmen, har vi avslutat kommandot med ett semikolon. Motsvarande funktionsvärden får vi i vektorn y genom y = sin(x)./x; Grafen till funktionen ritas sedan i det grafiska fönstret genom plot(x,y) eller plot(x,sin(x)./x) Varför klagar Matlab då man räknar ut y? För att slippa skriva alla kommandon flera gånger kan man samla dem i en så kallad skriptfil. En sådan skapas med hjälp av någon editor, tex Emacs, och skall ha ett namn som slutar på.m. En skriptfil ritasinc.m som ritar funktionsgrafen ovan kan se ut så här: steg=input( steg= ) x = -10*pi:steg:10*pi; plot(x,sin(x)./x) Kommandona i m-filen ritasinc.m körs genom att man skriver ritasinc i Matlabfönstret (obs utan extensionen.m). På frågan steg=? skriver man 0.1 (eller önskad steglängd) och trycker på return. Det finns också en annan typ av.m-filer, så kallade funktionsfiler (se help function). 3

Utskrifter En bild som är ritad på skärmen kan skrivas ut på skrivare. Beroende på hur datorsystemet är uppsatt kan man använda antingen enbart print eller utskrift till en postscript-fil med print -dps filnamn, där sedan filen filnamn skickas till skrivaren. Texten på skärmen kan sparas i en fil filnamn om man skriver diary filnamn. Ur denna fil kan du tex hämta resultaten som varit utskrivna på skärmen sedan kommandot skrevs. Se help diary. 2 Fourierserier i Matlab Vi skall nu göra ett experimentellt studium av dels Fourierserier, dels så kallade halvperiodutvecklingar, som resulterar i cosinus- och sinus-serier. Hur dessa ser ut och hur koefficienterna beräknas genom integration finns beskrivet i boken och upprepas inte här. Vi påminner bara om beteckningen för den trigonometriska Fourierserien 1 0 2 a a k cos 2πkx L b k sin 2πkx L k 1 där a k 1 och b k 1 är reella talföljder. Om denna serie är konvergent så är summafunktionen periodisk med perioden L. I Matlab kommer vi att representera Fourierkoefficienter som vektorer akoeff resp bkoeff med ändlig (stor) längd. I detta avsnitt skall vi experimentellt studera hur Fourierseriers konvergensegenskaper och Fourierkoefficienternas storlek hänger samman med funktionens regularitet. Det gäller då att studera delsummor av Fourierserien med växande antal termer. Uppläggningen av laborationen illustreras av nedanstående figur. Som synes av denna skall du agera på tre sätt. Ett är att med givna Fourierkoefficienter studera konvergensen av Fourierserien. Koefficienterna kan tex vara erhållna genom handräkning på en given funktion ur övningshäftet. Du kommer också att för ett analytiskt givet funktionsuttryck numeriskt beräkna Fourierkoefficienterna med hjälp av ett skript koeff. En tredje väg är att definiera funktionen grafiskt, genom att rita densamma med skriptet funklick, och att sedan numeriskt beräkna Fourierkoefficienterna med koeff. I den del av laborationen som vi nu håller på med skall vi sedan studera delsummorna och deras konvergens med hjälp av skriptet delsum. I del 3 av laborationen skall vi låta funktionen och dess Fourierkoefficienter vara begynnelsevärden för värmelednings- och svängningsproblem, och lösa dessa med hjälp av scripten varme resp swing. Du kommer där också att animera lösningar med hjälp av skriptet filminsp. 4

delsummor delsum kända koefficienter känd funktion känd graf funklick Beräkna koefficienter koeff värmeledning varme vågekvationen swing Börja med att hämta m-filerna funklick.m, koeff.m, delsum.m, summera.m, varme.m, swing.m, filminsp.m från kursens hemsida (klicka med vänsterknappen) Förberedelser: Mata in följande parametervärden, som därefter inte får ändras under laborationen: n = 8 N=2^n K=1:(N/2-1) L=1 delta=l/(n-1) X=0:delta:(N-1)*delta; Här är den jämna 2-potensen N en parameter som kommer att beskriva antal av olika storheter. Komponenterna i vektorn K kommer att användas som index. L är intervallängd och delta anger längden av delintervall. Vektorn X innehåller indelningspunkter av intervallet 0 x L. 2.1 Givna koefficienter 1. Vi skall nu beräkna delsummor till funktionsserien Slå in >> anoll = 0 >> akoeff = zeros(size(k)) >> bkoeff = ones(size(k))./k sin 2πkx sin4πx sin6πx sin2πx k 1 k 2 3 5

Summera och plotta successivt genom att utföra >> s0 = anoll/2*ones(size(x)); plot(x,s0) >> s1 = s0+bkoeff(1)*sin(2*pi*x); plot(x,s1) >> s2 = s1+bkoeff(2)*sin(4*pi*x); plot(x,s2) >> s3 = s2+bkoeff(3)*sin(6*pi*x); plot(x,s3) och så vidare, tills du tröttnar. 2. Vill man slippa skriva in så mycket så kan man göra så här: >> s=anoll/2*ones(size(x)); >> for k=1:100; s=s+bkoeff(k)*sin(k*2*pi*x); plot(x,s), pause, end Tag reda på vad pause innebär innan du startar körningen. Det går att bryta med Ctrl-C, om alla 100 stegen tar för lång tid. Frågor att besvara: Vilken funktion tycks serien konvergera mot i intervallet 0 x 1 (rita grafen eller skriv gränsfunktionen med formler). Ange, genom att titta på seriens analytiska uttryck, hur seriens summa ser ut utanför intervallet 0 x 1. Vilken period har serien? Finns några andra symmetriegenskaper? Testa svaren genom att summera och plotta serien i ett större x-intervall. Skriv tex x=-l:0.005:2*l och byt ut X mot x i de två kommandoraderna ovan. 3. Det är ganska besvärligt att slå in raderna ovan rätt, speciellt om det måste göras upprepade gånger. De har därför samlats ihop i ett skript delsum.m som beräknar och visar upp delsumma efter delsumma, om koefficienterna är angivna som ovan. Skriptet innehåller lite mer, vilket föranleder en fråga är funktionen känd, som besvaras med n denna gång. Kör skriptet så länge du tycker det händer något. Tryck på valfri tangent (tex mellanslag) för att få nästa delsumma. Bryt sedan med Ctrl-C. Med hjälp av delsum kan man kontrollera och visualisera svar i övningshäftet där man använt sig av Fourier-, cosinus- eller sinus-utvecklingar. 4. Extrauppgift. (Gå tillbaka till denna när du är klar med allt annat.) Skriv in anoll och akoeff enligt ovan, och skriv in bkoeff som r=1; bkoeff = ones(size(k))./k.^r; Här kan r lätt ändras med hjälp av piltangenterna. Studera serien med hjälp av delsum för några olika r-värden, tex r=2; r=5; r=0.8; r=1.2; r=0.1; r=0; Frågor att besvara. För vilka r konvergerar serien likformigt? Vad händer för stora r? 6

2.2 Funktioner givna av analytiska uttryck 5. Vi skall nu arbeta med fallet då funktionen är känd genom sitt analytiska uttryck, och kommer att studera dess Fourier-, cosinus- och sinus-utvecklingar. Från föreläsningar och övningar vet vi hur koefficienterna i de olika utvecklingarna kan beräknas genom integration. För funktioner av övningsuppgiftstyp leder detta ofta till ett antal partialintegrationer. Här skall vi låta Matlab räkna ut koefficienterna. Detta sker med den numeriska metoden snabb Fouriertransformation, FFT. Det finns naturligtvis ett Matlabkommando som heter fft. Detta utnyttjas i m-filen koeff för att beräkna koefficienterna i den trigonometriska Fourierserien och i halvperiodsutvecklingar med cosinus- och sinus-serier. Valet mellan de tre alternativen sker genom att en fråga besvaras med f, c resp s. Det kommer också upp en Matlab-figur där akoeff och bkoeff är plottade. För att få några funktioner att experimentera med skall du skriva in funktion1 = max(sin(2*pi*x),0) ; funktion2 = (X <L/2) - (X > L/2) ; funktion3 = 3*X.*(X < L/4) + (L-X).*(X >= L/4) ; funktion4 = (X<L/4).*X - (X>2*L/3).*(X<3*L/4) ; Detta kräver en förklaring. Citationstecknen betyder att det som står innanför av Matlab uppfattas som en sträng. Man skall tänka på det som en funktionsbeskrivning med hjälp av en regel, utan att värden beräknas. Här är funktion1 en halvvågslikriktad sinusfunktion. Det uttryck (X > L/2) som förekommer i funktion2 är ett logiskt uttryck, som när man stoppar in en matris X skapar en matris av samma storlek som X där det står ettor på alla platser där matriselementet i X är L 2 och nollor för övrigt. Uttrycket (X > L/2) beskriver alltså den förskjutna Heavisidefunktionen θ L 2. Genom att tänka på sådana funktioner inser man att funktion2 beskriver en fyrkantvåg, att funktion3 beskriver en triangelvåg, och att funktion4 beskriver en mera komplicerad funktion. Undersök nu i tur och ordning dessa funktioner. De evalueras med hjälp av kommandot eval. Till exempel kommer f=eval(funktion1); att skapa en vektor som innehåller funktionsvärdena för funktion1 i de punkter som står som komponenter i vektorn X. För att se hur funktionen ser ut, skriv plot(x,f) För laborationens fortsättning är det viktigt att denna funktionsvärdesvektor heter f. Det är sedan lätt att definiera om den med hjälp av eval-kommandot. Kör nu koeff och delsum på de olika funktionerna, och prova de olika optionerna f, c och s. Denna gång är funktionen känd, och frågan från delsum besvaras med j. Studera koefficienternas uppträdande och seriernas konvergens i de olika fallen. Titta särskilt på överslängarna vid diskontinuitetspunkter eller i områden där funktionen växer kraftigt. Frågor att besvara: Vilken är perioden för utvecklingar med de respektive optionerna f, c och s? Vad är sambandet mellan de tre typerna av utvecklingar av en och samma funktion, och hur yttrar sig skillnaderna? Hur kan du ur en graf på grannens skärm se vilken option som valts? 7

Jämför antalet termer som behövs för att approximera de fyra funktionerna och ställ detta i relation till koefficienternas storlek. Denna framgår ur koefficientplotten från koeff. Vilka funktioner är svårast att approximera? I vilka punkter blir approximationen sämst? Hur är det med den punktvisa konvergensen utanför diskontinuitetspunkterna? Vad tycks hända med överslängarnas storlek då man tar med fler och fler termer? (Det fenomen som uppträder här kallas Gibbs fenomen.) Har man likformig konvergens i en omgivning av en diskontinuitetspunkt? I mån av tid: Titta också på filen koeff.m. Lägg märke till att index är förskjutna ett steg, eftersom Matlab indicerar vektorer med början på k 1. Vi låter koeff beräkna 2 8 256 koefficienter numeriskt (vilket svarar mot 128 termer i den trigonometriska Fourierserien). 2.3 Funktioner givna genom sina grafer 6. Vi skall nu definiera funktioner genom att rita dem med hjälp av ett skript funklick. Efter det att kommandot skrivits kan man flytta runt ett hårkors i ett koordinatsystem med hjälp av musen, och lägga in ett antal punkter genom att klicka med vänster musknapp. Lägg första punkten lite utanför vänstra kanten och lägg sista punkten lite utanför den högra. När man klickat in ett antal punkter avslutar man genom att klicka med högra musknappen. En kurva genom de markerade punkterna interpoleras fram med en så kallad splinemetod. Detta blir oftast ingen funktionsgraf. Skriptet modifierar kurvan så att där den går tillbaka så ersätts den med en lodrät linje. På detta sätt kan man lätt konstruera funktioner med språngdiskontinuiteter, vilka är lämpliga testobjekt när man studerar Fourierutvecklingar. Rita några stycken funktioner, av varierande snällhetsgrad, och kör för var och en av dem koeff och delsum på samma sätt som i föregående uppgift. Utveckla en och samma funktion i Fourier-, sinus- och cosinusserie, och konstatera hur olika graferna blir. Titta i de två senare fallen på de approximerande funktionernas halvperiods- och paritetsegenskaper. (Paritet = udda, jämn.) Det är intressant att studera hur delsummorna anpassar sig till funktionen när denna är komplicerad. Lägg återigen märke till hur koefficienternas avklingande beror av funktionens regularitet. 3 Värmeledningsekvationen och vågekvationen 3.1 Värmeledningsekvationen 7. Enligt Fouriers metod, eller variabelseparationsmetoden, gäller att ett värmeledningsproblem med Dirichletvillkor, har en lösning av formen u 2 u t x 2 0 0 x L t 0 u 0 t u L t 0 t 0 u x 0 f x 0 x L u x t 1 k b k e 2 π 2 t L 2 sinkπx L 8

där b k 1 är koefficienterna i sinusutvecklingen av begynnelsevärdesfunktionen f x. Lös nu detta problem för några olika val av begynnelsefunktion f, dels ritade med hjälp av funklick, dels analytiskt givna av funktion1,...,funktion4. Beräkna koefficienterna b k med hjälp av koeff. Vilken option f, c eller s skall användas? Lösningsformeln ovan är inlagd i skriptet varme, som beräknar lösningen vid en från t 0 växande följd av tidpunkter. Detta skript visar ej delsummorna av serien, utan summerar direkt 127 termer. Lägg särskilt märke till den kraftiga utjämningen hos lösningen med tiden, även från diskontinuerliga begynnelsedata. Lös värmeledningsproblemet med Neumannvillkor på samma sätt, genom att välja en lämplig option i koeff. Vilka är randvillkoren i detta fall, och hur skiljer sig lösningsformeln från den ovan? Allteftersom som man stegar sig fram i tiden lagras lösningen radvis i en matris losn. Man kan sedan åskådliggöra denna i en tredimensionell plot, genom att skriva mesh(losn). Använd även kommandot view för att ändra synvinkeln. Gör tex view(20,10), view(10,20) eller view(0,90), se help view. Frågor att besvara: Beskriv i ord vad som händer med temperaturen då tiden växer. Ange några skillnader mellan Dirichletfallet och i Neumannfallet, för exempelvis med funktion1 och funktion2. Vad händer för stora t i de olika fallen? I mån av tid: Titta på skriptet varme.m med hjälp av Emacs. Undersök vad som händer om man summerar färre termer. Ändra i scriptet på antalterm. Pröva då både begynnelsefunktioner med diskontinuteter och utan. Genom att kommentera bort raden pause (sätt ett %-tecken framför) kan se hur temperaturen ändras med tiden. Vill man följa utvecklingen ända fram till det stationära tillståndet kan man behöva ändra tidsteget (tidsteg). 3.2 Vågekvationen 8. På samma sätt visas med Fouriers metod att svängningsproblemet för en fast inspänd sträng, 2 u t 2 c 2 2 u x 2 0 0 x L t 0 har lösningen u 0 t u L t 0 t 0 u x 0 f x u t x 0 g x 0 x L u x t 1 b k cos kπct L c k sin kπct L sin kπx L där b k 1 är koefficienterna i sinusutvecklingen av begynnelselägesfunktionen f, och där c k kπc L är koefficienterna i sinusutvecklingen av begynnelsehastigheten g, k 1 2. Denna lösningsformel i fallet c 1 och g 0 finns programmerad i scriptet swing. Experimentera med några olika utseenden av begynnelselägesfunktionen f på samma sätt som i värmeledningsfallet. Låt till en början funktionerna vara kontinuerliga, och låt dem inte variera alltför kraftigt eller ha alltför många pucklar. Koefficienterna beräknas med hjälp av koeff, varefter man kör swing. Ett bra sätt att åskådliggöra lösningen i detta fall är som en animation, där man i en film ser hur strängens utböjning varierar med tiden. Genom att köra skriptet filminsp lagrar Matlab 9

de successiva plottarna från swing i en matris M. Genom att sedan köra movie(m,antal) så visas filmen så många gånger som antal anger. Man kan även påverka hastigheten i uppspelningen, se help movie. Undersök speciellt halvvågsfunktionen funktion1 och triangelvågen funktion3, jämför exempel 3.2 (gitarrsträngen) i läroboken. 9. Prova också med funktionerna f=sin(pi*x), f=sin(2*pi*x) och sin(3*pi*x) som begynnelseläge för en svängande sträng. Fråga: Vad kallas det fenomen man ser? Definera en funktion som består av en smal puckel, t ex funktion5 = sin(10*pi*x).*(x > 0.4*L).*(X<0.5*L) ; Använd denna som begynnelseläge och gör en film på samma sätt som ovan. Fråga: Beskriv i ord vad som händer. 10. Extrauppgift. Titta på skriptet swing.m med hjälp av Emacs. På de första raderna kan du utläsa hur långa och många tidssteg som tagits vid filminspelningen. Övertyga dig om att detta gör att filmen visar en tidsperiod av svängningsförloppet, dvs en tidsperiod för grundtonen. Detta gör att höga övertoner blir glest samplade, vilket är störande när man ser på animationen. Tyvärr räcker datorns minne inte till för att göra längre filmer, med kortare tidssteg. Släpp kravet att man skall se en hel period, och ändra tidsperioden på lämpligt sätt. Gör sedan en film med en krångligare begynnelsevärdesfunktion. 10