2 mars 2017 Matematisk analys för ingenjörer Matlabövning 3 Numerisk lösning av differentialekvationer Syftet med denna matlab-övning är att studera differentialekvationer och introducera hur man använder Matlabs rutiner för lösning av differentialekvationer. Läs igenom hela texten i detta pm! Varje uppgift innehåller några frågor, besvara dem! Samla kod i körbara script respektive funktionsfiler. Gör helst en scriptfil per uppgift. Skriv en kort rapport med svar på frågor och valda illustrationer i exv Word. Ladda upp filerna till en mapp Matlab3 i din inlämningsmapp/dropbox på kurssciosidan (MA123G VT15) som dokumentation. Numerisk lösning av ordinära differentialekvationer med begynnelsevärden För att lösa ett begynnelsevärdesproblem, dvs en ordinär differentialekvation (ode) eller ett system av ode tillsammans med begynnelsevärden, kan man i matlab använda en familj av ode-lösare, som har namnen ode45, ode23, ode15s, m fl. Dessa lösare kan handskas med en enda första ordningens ode, ställt på formen = F (t, y) där man vill bestämma y som en funktion av t, men också system av första ordningens ode, 1 = F 1(t, y 1,..., y n ) 2 = F 2(t, y 1,..., y n ). n = F n (t, y 1,..., y n ) där man vill bestämma var och en av y k som en funktion av t. 1
Den ode-lösare som vanligtvis används är ode45, men andra fungerar bättre för vissa typer av differentialekvationer. Ett anrop av ode45 kan göras på följande sätt: [t,y]=ode45(@mindiffekv,[t0 tmax],y0); där differentalekvationen, eller systemet av sådana, definieras i en funktionsfil mindiffekv.m (namnet kan vara vad som helst). [t0 tmax] anger intervallet som differentialekvationen skall beräknas på, och y0 begynnelsevärdena, en vektor med ett värde för var och en av komponenterna, om vi har ett system av differentialekvationer. Resultatet består av två matriser, t som består av ett urval värden för den oberoende variabeln och y vars kolonner är beräknade motsvarande värden för varje komponent. Vill vi rita graferna så kan vi köra plot(t,y) och vi får då en graf för varje komponent av y. Vi har i kurslitteraturen och på föreläsning introducerat Eulers stegmetod, en något primitivare metod för att beräkna approximativa lösningar till ordinära differentialekvationer. Följande kod, kan användas för att beräkna en lösning enligt Eulers stegmetod med steglängden h på intervallet från x0 till xe. t0=... % begynnelsevärde för t (byt ut...) te=... % slutvärde för t y0=... % begynnelsevärde för y h=... % steglängd t=[t0:h:te]; % vi skapar en vektor av alla x-värden y=y0; % vi initierar vektorn y med begynnelsevärdet for n=[1:(length(t)-1)] % Vi loopar igenom punkterna % I nästa rad ersätts F med namnet på den funktion vi definierat. y=[y,y(n)+h*f(t(n),y(n))]; % Vi utöker vektorn y med nästa beräknade värde. end Vi har nu en vektor y svarande mot vektorn t. Vi kan nu t ex rita upp de beräkna värdena som en kurva med plot(t,y, o- ). 2
En första differentialekvation Låt oss implementera detta på ekvationen eller på funktionsform, om y = f(t), = y3 + sin t, f (t) = (f(t)) 3 + sin t. Kopiera filen testdiff1.m från kurssajten på scio till din egen matlab-mapp, och sätt denna mapp som arbetsmapp (current directory) i matlab (om den inte redan är det). Ta en titt på filen med edit testdiff1 för att se vad den gör. För att med ode45 beräkna till exempel en lösning med begynnelsevärdet y(0) = 2 på intervallet [0, 20] för t. skriver vi i matlabfönstret [t y]=ode45(@testdiff1,[0,20],2); Vi kan sedan rita ut den beräknade funktionens graf med plot(t,y) Uppgift 1. Beräkna en lösning till ekvationen ovan på intervallet [0, 20], med begynnelsevärdet y 0 = f(0) = 2, med hjälp av Eulers stegmetod och två olika steglängder. Rita upp båda graferna i samma koordinatsystem och jämför. Redovisa kod och graf. Uppgift 2. Beräkna lösning till samma problem med hjälp av ode45. Rita grafen för denna lösning i samma koordinatsystem som lösningarna från förra uppgiften. En annan differentialekvation Spara nu en kopia av testdiff1.m under ett lämpligt namn. Modifiera filen för att istället lösa en logistisk differentialekvation = y(1 y) med några olika begynnelsevärden på y då t = 0. Pröva själv ut ett lämpligt intervall för t. Uppgift 3. Beräkna med ode45 lösning för några olika begynnelsevärden och rita graferna i samma koordinatsystem. Redovisa kod och graf. 3
Andra ordningens differentialekvationer dämpad fjädring ODE-lösarna i matlab handskas bara med första ordningens differentialekvationer, och system av sådana. Hur kan vi då använda dem för andra (och högre) ordningens differentialekvationer. Jo, vi kan överföra en andra ordningens differentialekvation till två första ordningens, genom att införa en ny variabel för förstaderivatan. Om vi exempelvis har differentialekvationen y (t) + g(t)y (t) + h(t)y(t) = u(t) y (t) = u(t) g(t)y (t) h(t)y(t) så kan vi införa v(t) = y (t) och får då systemet { y (t) = v(t) (denna ekvation definierar v som y.) v (t) = u(t) g(t)v(t) h(t)y(t) (notera att vi ersatt y med v och y med v,) Mer generellt, ett andra ordningens begynnelsevärdesproblem y = F (t, y, y ), y(0) = y 0, y (0) = v 0 är ekvivalent med ett system av två första ordningens ode med begynnelsevärden, y = v, v = F (t, y, v), y(0) = y 0, v(0) = v 0. Vi vill beskriva och beräkna följande system: En korg med viss massa m hänger fjädrat med stötdämpning från ett hjul som följer en bana med konstant hastighet horisontellt. Banans höjd är variabel, och beskrivs av funktionen p(t). Vi låter det vertikala läget för massans tyngdpunkt vid tiden t betecknas med y = y(t) Differentialekvationen som definierar systemet är y (t) = k m (q(t) q 0) + c m q (t) där q(t) = p(t) y(t) är avståndet mellan banan och massans tyngdpunkt, och q 0 är denna längd då systemet är i vila. Parametrarma k och m är en fjäderkoefficient respektive en dämpningskoefficient. 4
Vi kan skriva om systemet som y (t) = k m (p(t) y(t) q 0) + c m (p (t) y (t)) eller y (t) = c m y (t) k m y(t) + k m p(t) + c m p (t). Om vi beskriver banans form (dvs p(t) med hjälp av derivatan p (t) = g(t), och inför v(t) = y (t) har vi systemet v (t) = c m v(t) k m y(t) + k m (p(t) q 0) + c m g(t) y (t) = v(t) p (t) = g(t) där g(t) är en given funktion. Filen suspd.m innehåller en definition av p (t), och används av suspensioneq12.m som i sin tur definierar differentialekvationssystemet. Funktionen som definieras i den givna filen suspd.m är en styckvis konstant funktion. Uppgift 4. Simulera systemet under lämplig tidsperiod med hjälp av ode45. Observera att du behöver ge en vektor av begynnelsevärden bestående av tre komponenter, [v(0),y(0),p(0)]. Ett lämpligt val i detta fall kan vara [0,0,1]. Plotta korgens och hjulets höjd, y respektive p i samma koordinatsystem. (Om t är tidsvektorn och x är den beräknade lösningen från ode45, så kan man rita det med plot(t,x(:,1),t,x(:,3), eller med plot(t,x) då man också får med korgens vertikala hastighet.) Pröva några olika värden på dämpningskoefficienten (ändra i suspensioneq.m) och notera skillnader i systemets beteende, särskild vad gäller svängningar. Hur påverkar en ändring av fjäderkoefficienten systemets beteende? Om du har tid, experimentera gärna också med de andra parametrarna och med suspd för att ändra banprofilen. 5