Kungliga Tekniska högskolan Mekanik institutionen Rapport för kandidatexamensarbete (SA104X) Simulering av mekaniska system med Lagranges metod Av: Simon Velander Ruben Nilsson Handledare: Nicholas Apazidis Examinator: Mårten Olsson Maj 21, 2013
Referat Mekaniska system har länge varit av intresse för vetenskapen och vår förmåga att matematiskt beskriva dess dynamik är mycket god. Att effektivt kunna härleda de nödvändiga ekvationerna är dock inte trivialt och uttrycken som bildas är ofta icke-linjära differentialekvationer som ej leder till explicita lägesbeskrivningar av de rörliga komponenterna. Idag finns kraftfulla matematiska metoder och datorverktyg som möjliggör simulering av relativt komplicerade mekaniska system vilket denna rapport ägnats åt att undersöka med hjälp av exempelsystem. Två utvalda mekaniska systems beteenden med varierande begynnelsevillkor har undersökts med hjälp av datorsimuleringar. Det första systemet har bestått av två pendlar med en fjäder fastspänd mellan pendeländarna. Det andra systemet har bestått av en fritt rullande cylinder på horisontellt underlag med två pendlar fastspända på änden. Både konservativa och dissipativa system har modellerats. De konservativa systemens beteenden har genomgått enkel analys. Den matematiska metoden som använts är Lagranges metod [2] som utnyttjar systemets totala energi för att härleda rörelseekvationerna. Modellering, numerisk integrering, och grafisk simulering med animation har gjorts i programmet Maple, med tilläggspaketet Sophia [1]. Systemen har visualiserats framgångsrikt och analys av beteenden visade att båda systemen kan uppvisa periodiskt såväl som kaotiskt rörelsemönster beroende på energinivån i systemet.
Innehåll 1 Introduktion 1 1.1 Syfte.................................... 1 1.2 Problemformulering........................... 1 2 Teori 3 2.1 Lagranges metod............................. 3 2.1.1 Dissipativa krafter........................ 4 2.1.2 Konservativa system....................... 5 2.2 Grafisk visualisering........................... 6 3 Utförande 7 3.1 Fjädersystemet.............................. 7 3.2 Cylindersystemet............................. 8 3.3 Konservativa varianterna......................... 9 3.3.1 Animation............................. 9 4 Resultat 11 4.1 Fjädersystemet.............................. 11 4.1.1 Konservativa system....................... 11 4.1.2 Dissipativa system........................ 14 4.1.3 Animation............................. 15 4.2 Cylindersystemet............................. 16 4.2.1 Konservativa system....................... 16 4.2.2 Dissipativa system........................ 22 4.2.3 Animation............................. 24 5 Slutsats 25 Litteraturförteckning 27 A Animation 29 B Maple-kod till fjädersystemet 31 C Maple-kod till cylindersystemet 35
1. Introduktion Denna rapport är ett kandidatexamensarbete som ingår i civilingenjörsutbildningen vid Kungliga Tekniska Högskolan och är utförd vid mekanikinstitutionen. Arbetet genomfördes under vårterminen 2013 och omfattar 15 högskolepoäng. 1.1 Syfte Mekaniska system har länge varit av intresse för vetenskapen och vår förmåga att matematiskt kunna förutspå dess beteenden är mycket god. Att effektivt kunna härleda rörelseekvationerna är i sig är dock inte trivialt och uttrycken som bildas är ofta icke-linjära differentialekvationer som inte leder till explicita lägesbeskrivningar av de rörliga komponenterna. Idag finns kraftfulla matematiska metoder och datorverktyg som möjliggör simulering av relativt komplicerade mekaniska system vilket denna rapport ägnas åt att beskriva med hjälp av exempel. Programmet vi använt är Maple, tillsammans med tilläggspaketet Sophia. Målet är att framgångsrikt utnyttja Lagranges metod för att skapa matematiska modeller av komplicerade mekaniska system och generera grafiska representationer av dem, både i form av grafer och animationer. Därefter vill vi analysera deras beteenden och utföra enklare analyser av deras eventuella periodicitet. 1.2 Problemformulering Vi utgår från två system där vi kallar det första för fjädersystemet. Detta system består av ett stativ med två armar och pendlar orienterade enligt Figur 1.1. Pendlarna har massan m. En viktlös fjäder är monterad i pendlarnas ändpunkter och är ospänd i pendlarnas vertikala lägen. Vi antar att fjädern aldrig slaknar och vi tar inte hänsyn till att fjädern i denna uppsättning kan linda in sig i armarna vid höga energier. De dissipativa krafterna uppkommer i form av visköst motstånd och friktion i pendelfästena. 1
KAPITEL 1. INTRODUKTION Det andra systemet kallar vi för cylindersystemet. Detta system har geometrin enligt Figur 1.2. Cylindern med massa m 0 rullar på horisontellt underlag och vi antar att den inte kan glida. Pendlarna har massorna m. De dissipativa krafterna uppkommer i form av visköst motstånd och friktion i pendelfästena. Figur 1.1: Fjädersystemet. Figur 1.2: Cylindersystemet. För båda systemen gäller att bilda Lagranges rörelseekvationer, skapa uttryck för de generaliserade koordinaternas värden i tiden, och rita upp systemens rörelser grafiskt och med animation. Beteendet hos de konservativa varianterna av systemen ska analyseras. Analysen ska försöka identifiera periodiska och kaotiska beteenden samt undersöka eventuella faktorer, som energimängd och parameterval, som korrelerar till dessa. 2
2. Teori 2.1 Lagranges metod För enstaka partiklar kan dess rörelser förklaras med simpla kraftsamband [3]. Om flera stela komponenter är sammanlänkade på något vis är det dock nödvändigt att använda någon mer praktisk metod. Lagranges metod utnyttjar systemets energiuttryck, som generellt är enklare att hantera än kraftsambanden för stora system. Sambandet mellan kraft och rörelse ges av Newtons andra lag: p = F (2.1) Denna ekvation kan sedan multipliceras med partikelns lägesvektor r deriverat med avseende på varje generaliserad koordinat q i. En generaliserad koordinat är en godtycklig men lämpligt vald specificerad koordinat som beskriver partikelns position. Dessa faktorer representerar således tangentvektorerna till partikelns rörelse. r t p = r t F (2.2) Ekvation (2.2) projicerar ekvation (2.1) på de generaliserade basvektorerna och skalärprodukten bildar rörelseekvationer anpassade för varje generaliserad koordinat. Dessa ekvationer är emellertid besvärliga att hantera då flera sammanlänkade komponenter är involverade. Lagrange visade dock att vänsterledet kan formuleras med hjälp av systemets totala kinetiska energi T på följande vis. d T T = dt q i q i k F k r (2.3) q i Högerledet i (2.3) brukar kallas de generaliserade krafterna och betecknas Q i, således skrivs ekvationen: 3
KAPITEL 2. TEORI d T T = Q i (2.4) dt q i q i Ekvationen (2.4) är den mest generella formen av Lagranges rörelseekvationer och är till stor nytta för detta arbetes ändamål. Ur denna ekvation kan man lösa ut en generaliserad koordinats andraderivata med avseende på tiden, eller lösare sagt koordinatens acceleration. Denna omformulering av ekvationen kan vi betrakta som systemets rörelseekvation för denna generaliserade koordinat. Den resulterande ekvationen är en differentialekvation av andra ordningen och är endast i sällsynta specialfall linjär. Lösningen kan dock beräknas numeriskt med hjälp av Maple. Genom substitutionen: u = q (2.5) har vi gjort rörelseekvationen till ett tvåvariabelssystem. Varje generaliserad koordinats rörelseekvation behöver således denna substitutions ekvation för att kunna lösas helt. Vinsten med detta är att vi gjort om en differentialekvation av andra ordningen till två differentialekvationer av första ordningen. Ett sådant ekvationssystem kan lösas med Maples dsolve-funktion genom numerisk integrering av funktionerna. 2.1.1 Dissipativa krafter De dissipativa krafterna kan generellt sett behandlas enligt (2.3), där exempelvis luftmotstånd kan betraktas som en kraft som angriper på en rörlig punkt av komponenten med ett belopp som är proportionellt mot farten hos punkten. F kan därför skrivas som negativa hastighetsvektorn multiplicerat med en lämpligt vald konstant. Detta fungerar allmännt för viskös friktion. Friktion i leder uppkommer däremot av en motverkande momentkraft och kan inte behandlas enligt (2.3) då den är en storhet som inte har någon angreppspunkt. Om man undersöker arbetet U som den generaliserade kraften Q i uträttar fås sambandet: U i = Q i dq i (2.6) Momentarbete skrivs som: du = Mdθ (2.7) 4
2.1. LAGRANGES METOD Med hjälp av (2.6) och (2.7) kan vi konstatera att den generaliserade momentkraften kan i vårt fall skrivas som en lämpligt vald kraft som multiplicerat med den generaliserade koordinaten ger momentarbetet. Momentkraftens belopp kan likt anses vara proportionellt mot vinkelhastighetens belopp och kan därför skrivas som negativa vinkelhastigheten av pendeln multiplicerat med en lämpligt vald konstant. 2.1.2 Konservativa system För konservativa system med konservativa krafter gäller att integrationsvägen för partikeln inte spelar någon roll och arbetet alltid blir detsamma. Alltså är U = V (2.8) där V är den potentiella energin. Enligt (2.6) blir då den generaliserade kraften för det konservativa systemet: Q i = dv dq i (2.9) Vi kan substituera detta in i (2.4) och ersätta ännu ett led med ett mer lätthanterligt energiuttryck. Det eleganta sättet att skriva detta på är dock att bilda Lagrangefunktionen: L = T V (2.10) Detta reducerar (2.4) till Euler-Lagrange-ekvationerna : d dt ( L q i ) L q i = 0 (2.11) 5
KAPITEL 2. TEORI 2.2 Grafisk visualisering Att plotta de generaliserade koordinaternas värden mot tiden, eller mot sin ändringshastighet i ett fasrum, ger ofta en god representation av systemets beteenden om dessa är väl valda. För att åstadkomma detta kan man använda Maples odeplotfunktion som tar efterfrågade värden ur output-objektet genererat av dsolve-funktionen. För att skapa animationer tog vi procedurer skapade av N. Apazidis i ett extern grafikpaket gjort för Sophia. Dessa procedurer arbetar i två steg. Först tas partikelns läge i generaliserade koordinater som argument. Detta översätts till kartesiska koordinater och plottas i givet tidsintervall. Det andra steget skapar en sekvens av plottar från det första steget med bestämda små tidsintervall och visar dem i en snabb följd. Resultatet blir en serie streck som visar en partikels rörelse i rummet. För att visa objekt kan det första steget tillägga streck och cirklar med fästpunkter härledda ur de generaliserade koordinaternas värden. 6
3. Utförande De fullständiga koderna finns under bilagor. Denna del ägnas åt att kortfattat beskriva raderna för de dissipativa systemen, följt av vilka förenklingar som gjorts med Lagrangefunktionen i de konservativa fallen, följt av en förklaring av animeringsmetoderna. Observera att i koden läggs ett t till efter variabler istället för en prick som symbol för tidsderivata och därför görs likadant här, qt q. 3.1 Fjädersystemet Först deklareras de två nödvändiga generaliserade koordinaterna q 1 och q 2 och deras tidsderivator u 1 och u 2 som tidsberoende variabler. Lägesvektorer för pendlarnas lägen med avseende på dessa variabler måste skapas, så först deklareras koordinatsystemen A och B. Dessa koordinatsystem har origo i samma punkt som inertialsystemet N men roterar med vinklarna q 1 och q 2 enligt Figur 1.1 kring axel 1 respektive 2. Lägesvektorerna för pendeländarna r 1 och r 2 samt deras tyngdpunkter kan sedan enkelt bildas med hjälp av de anpassade koordinatsystemen. För att bilda det kinetiska energiuttrycket och de viskösa motstånden skapas även hastighetsvektorerna v 1 och v 2. Det kinetiska energiuttrycket T bildas som en summa av pendlarnas kinetiska energi. Varje pendels kinetiska energi har ban- och spinn-del enligt (3.1) T = 1 2 m v2 g + 1 2 I G (qt) 2 (3.1) vilket med tröghetsmomentet I G = 1 12 m l2 ger pendlarna de uttryck som de har i koden. På grund av hur Sophia hanterar tidsderivator användes skalärprodukt av hastigheterna istället för att skriva ut (l qt) 2 explicit då kvadrering orsakar buggar. 7
KAPITEL 3. UTFÖRANDE Vänsterledet i (2.3) är nu klart. För att skapa högerledet behövs kraftvektorerna och deras angreppspunkter deriverade med avseende på alla generaliserade koordinater. Vektorn rdist spänner sig mellan pendeländarna och har således samma riktning och längd som fjädern. Skalären rlangd är längden av rdist och rextend är hur långt fjädern blivit utsträckt, där negativt värde innebär ihoptryckning. Systemets krafter skapas sedan. F tyngd är tyngdkraften på pendlarna och är alltid nedåtriktad med beloppet m g. Vektorn F 1 är summan av den viskösa kraften och fjäderkraften på pendeln i armen a. Båda krafterna angriper på pendeländarna. Fjädern angriper med ett belopp proportionellt mot fjäderkonstanten k multiplicerat med rextend och med riktningen av negativa rdist, som i sin tur divideras med rlangd för att skapa enhetsvektorn. Motsvarande gäller för F 2. Angreppspunkternas lägesvektorer skapas i version för inertialsystemet N. Alla nödvändiga deriveringar med avseende på alla generaliserade koordinater görs sedan på dessa lägesvektorer. Därefter multipliceras de ihop med sina kraftvektorer och bildar de generaliserade krafterna Qi. Undantag för momentkrafterna Qf i som deklareras explicit, som beskrivet under 2.1.1 Dissipativa krafter. Nu återstår endast att bilda Lagranges rörelseekvationer (2.4) och lösa dem. Substitution med qt = u görs för att slippa andraderivator senare. Lagranges rörelseekvationer eq1 och eq2 bildas genom att stegvis derivera energiuttrycket T, addera ihop dem, och sätta likhet med summan av alla generaliserade krafter Qi. Differentialekvationerna för substitutionerna packas in i kde och rörelseekvationerna löses för ut. Alla dessa differentialekvationer av första ordningen ges begynnelsevärden, görs tidsberoende utanför Sophia, ges parametervärden, och löses sedan med dsolve. 3.2 Cylindersystemet Först deklareras de tre nödvändiga generaliserade koordinaterna q 0, q 1, och q 2 och deras tidsderivator u 0, u 1, och u 2 som tidsberoende variabler. Lägesvektorer för pendlarnas och cylinders lägen i rummet med avseende på dessa variabler måste skapas, så först deklareras koordinatsystemen A, B, och C. Dessa koordinatsystem roterar med vinklarna q 0, q 1, och q 2 enligt Figur 1.2 kring axel 3. Lägesvektorerna för cylinders mittpunkt r0 och pendeländarna r 1 och r 2 samt deras tyngdpunkter kan sedan enkelt bildas med hjälp av de anpassade koordinatsystemen. För att bilda det kinetiska energiuttrycket och de viskösa motstånden skapas även hastighetsvektorerna v 0, v 1, och v 2. Det kinetiska energiuttrycket T bildas som en summa av cylinderns och pend- 8
3.3. KONSERVATIVA VARIANTERNA larnas kinetiska energi. Varje komponents kinetiska energi har ban- och spinndel enligt (3.1). Pendlarna har tröghetsmomentet I G,1 = 1 12 m l2 och cylindern I G,2 = 1 2 m r2 vilket ger komponenterna de uttryck som de har i koden. Likt i fjärdersystemet användes skalärprodukten av hastigheterna istället för att skriva ut (l qt) 2 explicit då kvadrering orsakar buggar med Sophia. Vänsterledet i (2.3) är nu klart. För att skapa högerledet behövs kraftvektorerna och deras angreppspunkter deriverade med avseende på alla generaliserade koordinater. Först skapas systemets krafter. F tyngd är tyngdkraften på pendlarna och är alltid nedåtriktad med beloppet m g. Vektorerna F 0v, F 1v, och F 2v är de viskösa krafterna på cylindern respektive pendlarna. Angreppspunkternas lägesvektorer skapas i version för inertialsystemet N. Alla nödvändiga deriveringar med avseende på alla generaliserade koordinater görs sedan på dessa lägesvektorer. Därefter multipliceras de ihop med sina kraftvektorer och bildar de generaliserade krafterna Qi. Undantag för momentkrafterna Qf i som deklareras explicit, som beskrivet under 2.1.1 Dissipativa krafter. Momentkrafterna är proportionella mot pendlarnas vinkelhastigheter relativt cylindern, så vi måste kompensera för cylinderns egna vinkelhastighet. Nu återstår endast att bilda Lagranges rörelseekvationer (2.4) och lösa dem. Substitution med qt = u görs för att slippa andraderivator senare. Lagranges rörelseekvationer eq0, eq1, och eq2 bildas genom att stegvis derivera energiuttrycket T, addera ihop dem, och sätta likhet med summan av alla generaliserade krafter Qi. Differentialekvationerna för substitutionerna packas in i kde och rörelseekvationerna löses för ut. Alla dessa differentialekvationer av första ordningen ges begynnelsevärden, görs tidsberoende utanför Sophia, ges parametervärden, och löses sedan med dsolve. 3.3 Konservativa varianterna I det konservativa fallet utnyttjas Lagrangefunktionen (2.10) vilket förenklar modellerna avsevärt. Efter att alla relevanta vektorer skapats så deklareras det potentiella energiuttrycket V, som är en summa av pendlarnas lägesenergier, och även fjäderns lagrade potentiella energi i fjädersystemet. Därefter skapas Lagrangefunktionen som kan deriveras och sättas ihop till Euler-Lagrange-ekvationerna med avseende på de generaliserade koordinaterna på liknande sätt som i det allmänna dissipativa fallet. 9
KAPITEL 3. UTFÖRANDE 3.3.1 Animation Proceduren som skapar animationen är en modifierad version av den grundläggande versionen som enbart skapar streckade linjer för lägesvektorernas bana i rummet. I det första steget som kallas plotpath_3d skapas först kartesiska koordinater för båda partiklarna. När fig skapas från odeplot läggs också en serie streck till som enbart gestaltar en specifik uppsättning av systemet till hands. I fjädersystemet finns dels tre streck som representerar de statiska stängerna och ändrar således aldrig position. Dels finns tre streck som representerar pendlarna och fjädern mellan dem. I cylindersystemet genereras en cirkel med mittpunkt i r0. Två linjer mellan cylindern och r1 och r2 representerar pendlarna och mellan fästpunkterna genereras ett streck för att se rotationen hos cylindern. Streckens dynamiska fästpunkter i x y z-led som funktion av de generaliserade koordinaterna är taget manuellt från uttrycken i plotpath_3d och värdena på dem tas direkt från output-objektet f f genererat av dsolve-funktionen. 10
4. Resultat 4.1 Fjädersystemet 4.1.1 Konservativa system Medium begynnelseutslag, en radian, av pendel 1 med k=1 över 70 sekunder Figur 4.1 och Figur 4.2. Figur 4.1: Fasrum u1 mot q1 med k = 1 över tiden t = 70 sekunder. Figur 4.2: Vinkelutslag över tid. q1,q2 mot t där q1 är röd och q2 är blå. Medium begynnelseutslag, en radian, av pendel 1 med fjäderkonstanten k = 50 över 70 sekunder Figur 4.3 Figur 4.4. 11
KAPITEL 4. RESULTAT Figur 4.3: Fasrum u1 mot q1 med k = 50 över tiden t = 70 sekunder. Figur 4.4: Vinkelutslag över tid. q1,q2 mot t där q1 är röd och q2 är blå. Fasrummen då 700 sekunder förflutit med fjäderkonstanten k = 1 Figur 4.5 respektive fjäderkonstanten k = 50 Figur 4.6. Figur 4.5: Fasrum u1 mot q1 med k = 1 över tiden t = 700 sekunder. Figur 4.6: Fasrum u1 mot q1 med k = 50 över tiden t = 700 sekunder. Med k=50 får pendel 1 tillräckligt med energi för att slå runt vid begynnelsevinkelhastigheten 8,750 Figur 4.7 och en liten skillnad i begynnelsevinkelhastigheten ger ett helt anorlunda graf Figur 4.8. 12
4.1. FJÄDERSYSTEMET Figur 4.7: Vinkelutslag över tid. Begynnelsevärde u1 = 8, 750 q1,q2 mot t där q1 är röd och q2 är blå. Figur 4.8: Vinkelutslag över tid. Begynnelsevärde u1 = 8, 751 q1,q2 mot t där q1 är röd och q2 är blå. Då k = 50 är systemet helt periodiskt vid begynnelsevinkelhastigheten 6.5 rad/s och helt kaotisk vid 6.6 rad/s. Figur 4.9 illustrerar fasrummet då t < 100 och Figur 4.10 illustrerar fasrummet då t > 200 vid begynnelsevinkelhastigheten 6.525 rad/s. Figur 4.11 visar vinkelutslaget som funktion av tiden under hela detta förlopp. Figur 4.9: Fasrum u1 mot q1. Begynnelsehastighet u1(0) = 6.525, 0 < t < 100. Figur 4.10: Fasrum u1 mot q1. Begynnelsehastighet u1(0) = 6.525, 200 < t < 300. 13
KAPITEL 4. RESULTAT Figur 4.11: Vinkelutslag över tid. Begynnelsehastighet u1(0) = 6.525, 0 < t < 300 4.1.2 Dissipativa system I fjädersystemet har vi följande dissipativa krafter; viskös friktion c v samt friktion från momentet i infästningen c m. Exempel på en lägre energinivå där k = 50 och begynnelsevinkelhastigheten 5 rad/s illustreras i Figur 4.12. I Figur 4.13 har dissipativa krafter lagts till. Figur 4.12: k = 50, u1 = 5. Figur 4.13: k = 50, u1 = 5, c v = 0.03, c m = 0.03. 14
4.1. FJÄDERSYSTEMET 4.1.3 Animation För att se rörlig.gif-animation se bilaga A. En bild ur denna.gif-animation visas i Figur 4.14 Figur 4.14: En bild ur animationen av fjädersystemet 15
KAPITEL 4. RESULTAT 4.2 Cylindersystemet 4.2.1 Konservativa system Följande är konservativa system, friktionen har negligerats. Mycket litet begynnelseutslag på q1. Figur 4.15 visar hur fasrummet ändras och bildar en spiral. Figur 4.16 visar förloppet efter att spiralen genomfört två turer in och ut och har genomfört sin fulla period. Figur 4.15: Fasrum u1 mot q1 då en tur genomförts. Figur 4.16: Fasrum u1 mot q1 då fyra turer genomförts. Figur 4.17 och Figur 4.18 visar spåren efter pendeländarna i rummet. Ingen märkbar skillnad syns. Figur 4.17: Spår efter pendlarnas ändar vid begynnelsevillkor u0 = 4.00, u1 = 4.00, u2 = 4.00 rad/s. Figur 4.18: Spår efter pendlarnas ändar vid begynnelsevillkor u0 = 4.00, u1 = 4.01, u2 = 4.00 rad/s. Figur 4.19 och Figur 4.20 visar spåren efter pendeländarna i rummet. Spåren är lika i början men skilljer sig mot slutet. 16
4.2. CYLINDERSYSTEMET Figur 4.19: Spår efter pendlarnas ändar vid begynnelsevillkor u0 = 6.00, u1 = 6.00, u2 = 6.00 rad/s. Figur 4.20: Spår efter pendlarnas ändar vid begynnelsevillkor u0 = 6.00, u1 = 6.01, u2 = 6.00 rad/s. Denna avvikelse propagerar sedan för att ge ett totalt annorlunda förlopp. Vinkelutslagen efter längre tid visas i Figur 4.21 och Figur 4.22. Figur 4.21: Pendlarnas vinkelutslag q1 q2, över en längre tid vid begynnelsevillkor u0 = 6.00, u1 = 6.00, u2 = 6.00 rad/s. Figur 4.22: Pendlarnas vinkelutslag q1 q2, över en längre tid vid begynnelsevillkor u0 = 6.00, u1 = 6.01, u2 = 6.00 rad/s. 17
KAPITEL 4. RESULTAT Resultatet av en undersökning av övergången till detta kaotiska beteende illustreras i Figur 4.23-4.34. Där u0(0) är cylinderns begynnelsehastighet. Figur 4.23: Fasrum pendel 1. Begynnelsehastighet u0(0) = 3.5 rad/s. Figur 4.24: Fasrum pendel 2. Begynnelsehastighet u0(0) = 3.5 rad/s. Figur 4.25: Vinkelutslag över tid, q1,q2 mot t. Begynnelsehastighet u0(0) = 3.5 rad/s. 18
4.2. CYLINDERSYSTEMET Figur 4.26: Fasrum pendel 1. Begynnelsehastighet u0(0) = 3.55 rad/s. Figur 4.27: Fasrum pendel 2. Begynnelsehastighet u0(0) = 3.55 rad/s. Figur 4.28: Vinkelutslag över tid, q1,q2 mot t. Begynnelsehastighet u0(0) = 3.55 rad/s. 19
KAPITEL 4. RESULTAT Figur 4.29: Fasrum pendel 1. Begynnelsehastighet u0(0) = 3.75 rad/s. Figur 4.30: Fasrum pendel 2. Begynnelsehastighet u0(0) = 3.75 rad/s. Figur 4.31: Vinkelutslag över tid, q1,q2 mot t. Begynnelsehastighet u0(0) = 3.75 rad/s. 20
4.2. CYLINDERSYSTEMET Figur 4.32: Fasrum pendel 1. Begynnelsehastighet u0(0) = 3.9 rad/s. Figur 4.33: Fasrum pendel 2. Begynnelsehastighet u0(0) = 3.9 rad/s. Figur 4.34: Vinkelutslag över tid, q1,q2 mot t. Begynnelsehastighet u0(0) = 3.9 rad/s. 21
KAPITEL 4. RESULTAT 4.2.2 Dissipativa system I cylindersystemet har vi följande dissipativa krafter: viskös friktion c v, friktion från momentet i infästningen c m samt luftmotstånd på cylindern c l. Resultatet av en undersökning av dessa illustreras i Figur 4.35-4.42 där begynnelsehastigheten är u0(0) = 5, u1(0) = 7, u2(0) = 7. Figur 4.35: q0, q1, q2 mot t. c l = 0, c v = 0, c m = 0. Figur 4.36: q0, q1, q2 mot t. c l = 0.05, c v = 0, c m = 0. Figur 4.37: q0, q1, q2 mot t. c l = 0, c v = 0.05, c m = 0. Figur 4.38: q0, q1, q2 mot t. c l = 0, c v = 0, c m = 0.05. 22
4.2. CYLINDERSYSTEMET Figur 4.39: q0, q1, q2 mot t. c l = 0, c v = 0.05, c m = 0.05. Figur 4.40: q0, q1, q2 mot t. c l = 0.05, c v = 0, c m = 0.05. Figur 4.41: q0, q1, q2 mot t. c l = 0.05, c v = 0.05, c m = 0. Figur 4.42: q0, q1, q2 mot t. c l = 0.05, c v = 0.05, c m = 0.05. 23
KAPITEL 4. RESULTAT 4.2.3 Animation För att se rörlig.gif-animation se bilaga A. En bild ur denna.gif-animation visas i Figur 4.43 Figur 4.43: En bild ur animationen av cylindersystemet 24
5. Slutsats Lagranges metod är mycket effektiv för system av denna typ. Modellen för simulationerna kunde skapas snabbt och smidigt med Maple och Sophia som tillägg. De dissipativa krafterna mångdubblade komplexiteten i beräkningarna så om systemet i fråga inte har stora energiförluster bör Lagrangefunktionen användas direkt. Maple har inte många inbyggda hjälpmedel för att skapa animationer. Med Sophia och grafikpaketet till hjälp fanns någonting att börja med, men även med då krävdes mycket kod för att skräddarsy bilderna till det specifika systemet och det ledde också till mycket långsam rendering. Att kunna visualisera förloppen var ovärderligt för att kontrollera och förstå beteendet av systemen. Systemen uppvisade stor bredd av rörelsemönster trots deras enkla konstruktioner. Vid mycket låga energier dominerar de linjära termerna i rörelseekvationerna vilket gav fasrummen tydliga periodiska mönster. Längre körningar visar dock att fasrummen fylls, så perioderna är inte slutna. Det irrationella förhållandet mellan de naturliga oscillationerna av pendlarna och frekvenserna från de externa krafterna på dem gav upphov till dessa kvasiperiodiska beteenden i samtliga simulationer. Högre energier korrelerade till större influens från de icke-linjära termerna och mönstren blev mindre förutsägbara. I fjädersystemet var omslaget till ett helt kaotiskt system plötsligt och fasrummet hade ett distinkt turbulent utseende med ett komplext hoppande mellan två attraktorer. En exakt gräns mellan helt kvasiperiodiskt och helt kaotiskt beteende fanns inte. Istället fanns ett smalt intervall av begynnelsevillkor där systemet blev kaotiskt efter en viss tid. I cylindersystemet var övergången inte lika plötslig eller tydlig. I ett litet intervall var rörelsemönstret kaotiskt i helhet men nära origo fanns fortfarande spår av ordnade mönster. Denna oskarpa övergång berodde troligtvis på att energiutbytet med den massiva cylindern inte gav pendlarna lika fasta energinivåer som i fjädersystemet. 25
Litteraturförteckning [1] Nicholas Apazidis. Sophia. [2] Nicholas Apazidis. Mekanik II : partikelsystem, stel kropp och analytisk mekanik. Studentlitteratur AB, 2012. [3] Hanno Essén. Lagranges metod for en partikel. 27
A. Animation Länk till hemsida där animationerna finns: http://f.kth.se/~rubenn/ 29
B. Maple-kod till fjädersystemet > restart; read C:/Sophia/SophiaV6.txt ; read C:/Sophia/Graphics.txt ; with(plots); with(plottools); > dependstime(q1, u1, q2, u2); > &rot ([N, A, 1, q1]); > &rot ([N, B, 2, -q2]); > r1 := &++ ( &ev (N, [a, 0, 0]), &ev (A, [0, 0, -l])); r1tyngd := &++ ( &ev (N, [a, 0, 0]), &ev (A, [0, 0, -(1/2)*l])); > r2 := &++ ( &ev (N, [0, b, 0]), &ev (B, [0, 0, -l])); r2tyngd := &++ ( &ev (N, [0, b, 0]), &ev (B, [0, 0, -(1/2)*l])); > v1 := simplify( &fdt (N, r1)); > v2 := simplify( &fdt (N, r2)); > T := (1/6)*m* &o (v1, v1)+(1/6)*m* &o (v2, v2); > rdist := &-- (r1, r2); > rlangd := Emag(rdist); > rextend := rlangd-sqrt(a^2+b^2); > Ftyngd := &ev (N, [0, 0, -m*g]); > F1 := &-- ( &** (-k*rextend/rlangd, rdist), &** (c[v], v1)); > F2 := &-- ( &** (k*rextend/rlangd, rdist), &** (c[v], v2)); > rf1 := &to (N, r1); rf2 := &to (N, r2); rftyngd1 := &to (N, r1tyngd); rftyngd2 := &to (N, r2tyngd); > tf11 := [map(diff, rf1[1], q1), rf1[2]]; tf12 := [map(diff, rf1[1], q2), rf1[2]]; tf21 := [map(diff, rf2[1], q1), rf2[2]]; tf22 := [map(diff, rf2[1], q2), rf2[2]]; tft11 := [map(diff, rftyngd1[1], q1), rf1[2]]; tft12 := [map(diff, rftyngd1[1], q2), rf1[2]]; tft21 := [map(diff, rftyngd2[1], q1), rf1[2]]; tft22 := [map(diff, rftyngd2[1], q2), rf1[2]]; 31
BILAGA B. MAPLE-KOD TILL FJÄDERSYSTEMET > Q11 := simplify( &o (F1, tf11)); Q12 := simplify( &o (F1, tf12)); Q21 := simplify( &o (F2, tf21)); Q22 := simplify( &o (F2, tf22)); Qt11 := simplify( &o (Ftyngd, tft11)); Qt12 := simplify( &o (Ftyngd, tft12)); Qt21 := simplify( &o (Ftyngd, tft21)); Qt22 := simplify( &o (Ftyngd, tft22)); > Qf1 := -c[m]*q1t; Qf2 := -c[m]*q2t; > T := subs(q1t = u1, q2t = u2, T); > T_q1 := diff(t, q1); T_u1 := diff(t, u1); T_u1_t := &dt (T_u1); > eq1 := T_u1_t-T_q1 = Q11+Q21+Qt11+Qt21+Qf1; > eq1 := subs(q1t = u1, q2t = u2, eq1); > T_q2 := diff(t, q2); T_u2 := diff(t, u2); T_u2_t := &dt (T_u2); > eq2 := T_u2_t-T_q2 = Q12+Q22+Qt12+Qt22+Qf2; > eq2 := subs(q1t = u1, q2t = u2, eq2); > kde := {q1t = u1, q2t = u2}; > eq1 := {u1t = solve(eq1, u1t)}; > eq2 := {u2t = solve(eq2, u2t)}; > eqs := union ( union (eq1, eq2), kde); > InitCond := {q1(0) = 1, q2(0) = 0, u1(0) = 0, u2(0) = 0}; > eqst := subs(totimefunction, eqs); > param := {a =.5, b = 1.5, g = 9.8, k = 20, l = 1, m = 1, c[m] = 0, c[v] = 0}; eqst := subs(param, eqst); > ff := dsolve( union (eqst, InitCond), {q1(t), q2(t), u1(t), u2(t)}, type = numeric, maxfun = 500000); > odeplot(ff, [[t, q1(t)], [t, q2(t)]], 0.. 100, numpoints = 5000); > plotpath_3d := proc (int, radvect1, radvect2, curvepar, t0, t1, npoints_curve, clr, thick, framename) local x1, y1, z1, x2, y2, z2, fig; x1 := subs(curvepar, &c ( &to (framename, radvect1), 1)); x1 := subs(totimefunction, x1); x2 := subs(curvepar, &c ( &to (framename, radvect2), 1)); x2 := subs(totimefunction, x2); y1 := subs(curvepar, &c ( &to (framename, radvect1), 2)); y1 := subs(totimefunction, y1); y2 := subs(curvepar, &c ( &to (framename, radvect2), 2)); y2 := subs(totimefunction, y2); z1 := subs(curvepar, &c ( &to (framename, radvect1), 3)); z1 := subs(totimefunction, z1); 32
z2 := subs(curvepar, &c ( &to (framename, radvect2), 3)); z2 := subs(totimefunction, z2); fig := odeplot(int, [[x1, y1, z1], [x2, y2, z2]], t0.. t1, numpoints = npoints_curve, axes = FRAME, color = clr, thickness = thick, view = [-1.. 1, -1.. 1.5, -1.3...2]), line([.5, 0, 0], [.5, sin(rhs(ff(t1)[2])), -cos(rhs(ff(t1)[2]))]), line([0, 1.5, 0], [sin(rhs(ff(t1)[3])), 1.5, -cos(rhs(ff(t1)[3]))]), line([.5, sin(rhs(ff(t1)[2])), -cos(rhs(ff(t1)[2]))], [sin(rhs(ff(t1)[3])), 1.5, -cos(rhs(ff(t1)[3]))]), line([0, 0, 0], [0, 0, -1.3]), line([0, 0, 0], [.5, 0, 0]), line([0, 0, 0], [0, 1.5, 0]), color = black, thickness = 2; display(fig) end proc; > animatepath_3d := proc (int, radvect1, radvect2, curvepar, t0, t1, npoints_curve, nframes, clr, thick, framename) local x1, y1, z1, x2, y2, z2, del, t00, t11, fig, n, npoints_frame, figg; del := (t1-t0)/nframes; npoints_frame := npoints_curve/nframes; thickness = thick; t00 := t0; t11 := t0+del; fig := plotpath_3d(int, radvect1, radvect2, curvepar, t00, t11, npoints_frame, clr, thick, framename); for n to nframes do t00 := t00+del; t11 := t00+del; figg := plotpath_3d(int, radvect1, radvect2, curvepar, t00, t11, npoints_frame, clr, thick, framename); fig := fig, figg end do; display(fig, insequence = true) end proc; > animatepath_3d(ff, r1, r2, param, 0, 1, 1, 200, red, 2, N); 33
C. Maple-kod till cylindersystemet > restart; read C:/Sophia/SophiaV6.txt ; read C:/Sophia/Graphics.txt ; with(plots); with(plottools); > dependstime(q0, u0, q1, u1, q2, u2); > &rot ([N, O, 3, q0]); > &rot ([N, A, 3, -q2]); > &rot ([N, B, 3, q1]); > r0 := &ev (N, [-q0*r, 0, 0]); > r1 := &++ ( &++ (r0, &ev (O, [r, 0, 0])), &ev (B, [0, -l, 0])); r1tyngd := &++ ( &++ (r0, &ev (O, [r, 0, 0])), &ev (B, [0, -(1/2)*l, 0])); > r2 := &++ ( &++ (r0, &ev (O, [-r, 0, 0])), &ev (A, [0, -l, 0])); r2tyngd := &++ ( &++ (r0, &ev (O, [-r, 0, 0])), &ev (A, [0, -(1/2)*l, 0])); > v0 := simplify( &fdt (N, r0)); > v1 := simplify( &fdt (N, r1)); > v2 := simplify( &fdt (N, r2)); > T := (1/6)*m* &o (v1, v1)+(1/6)*m* &o (v2, v2)+3*m0* &o (v0, v0)*(1/4); > Ftyngd := &ev (N, [0, -m*g, 0]); > F0v := &** (-c[l], v0); > F1v := &** (-c[v], v1); > F2v := &** (-c[v], v2); > rf1 := &to (N, r1); rf2 := &to (N, r2); rftyngd1 := &to (N, r1tyngd); rftyngd2 := > tf00 := [map(diff, r0[1], q0), rf1[2]]; tf01 := [map(diff, r0[1], q1), rf1[2]]; tf02 := [map(diff, r0[1], q2), rf1[2]]; tf10 := [map(diff, rf1[1], q0), rf1[2]]; tf11 := [map(diff, rf1[1], q1), rf1[2]]; tf12 := [map(diff, rf1[1], q2), rf1[2]]; tf20 := [map(diff, rf2[1], q0), rf2[2]]; tf21 := [map(diff, rf2[1], q1), rf2[2]]; tf22 := [map(diff, rf2[1], q2), rf2[2]]; 35
BILAGA C. MAPLE-KOD TILL CYLINDERSYSTEMET tft10 := [map(diff, rftyngd1[1], q0), rf1[2]]; tft11 := [map(diff, rftyngd1[1], q1), rf1[2]]; tft12 := [map(diff, rftyngd1[1], q2), rf1[2]]; tft20 := [map(diff, rftyngd2[1], q0), rf1[2]]; tft21 := [map(diff, rftyngd2[1], q1), rf1[2]]; tft22 := [map(diff, rftyngd2[1], q2), rf1[2]]; > Q00 := simplify( &o (F0v, tf00)); Q01 := simplify( &o (F0v, tf01)); Q02 := simplify( &o (F0v, tf02)); Q10 := simplify( &o (F1v, tf10)); Q11 := simplify( &o (F1v, tf11)); Q12 := simplify( &o (F1v, tf12)); Q20 := simplify( &o (F2v, tf20)); Q21 := simplify( &o (F2v, tf21)); Q22 := simplify( &o (F2v, tf22)); Qt10 := simplify( &o (Ftyngd, tft10)); Qt11 := simplify( &o (Ftyngd, tft11)); Qt12 := simplify( &o (Ftyngd, tft12)); Qt20 := simplify( &o (Ftyngd, tft20)); Qt21 := simplify( &o (Ftyngd, tft21)); Qt22 := simplify( &o (Ftyngd, tft22)); > Qf0 := -c[m]*(2*q0t-q1t+q2t); Qf1 := -c[m]*(q1t-q0t); Qf2 := -c[m]*(q2t+q0t); > T := subs(q0t = u0, q1t = u1, q2t = u2, T); > T_q0 := diff(t, q0); T_u0 := diff(t, u0); T_u0_t := &dt (T_u0); > eq0 := T_u0_t-T_q0 = Q00+Q10+Q20+Qt10+Qt20+Qf0; > eq0 := subs(q0t = u0, q1t = u1, q2t = u2, eq0); > T_q1 := diff(t, q1); T_u1 := diff(t, u1); T_u1_t := &dt (T_u1); > eq1 := T_u1_t-T_q1 = Q01+Q11+Q21+Qt11+Qt21+Qf1; > eq1 := subs(q0t = u0, q1t = u1, q2t = u2, eq1); > T_q2 := diff(t, q2); T_u2 := diff(t, u2); T_u2_t := &dt (T_u2); > eq2 := T_u2_t-T_q2 = Q02+Q12+Q22+Qt12+Qt22+Qf2; > eq2 := subs(q0t = u0, q1t = u1, q2t = u2, eq2); > kde := {q0t = u0, q1t = u1, q2t = u2}; > eq0 := {u0t = solve(eq0, u0t)}; > eq1 := {u1t = solve(eq1, u1t)}; > eq2 := {u2t = solve(eq2, u2t)}; > eqs := union ( union ( union (eq0, eq1), eq2), kde); > InitCond := {q0(0) = 0, q1(0) = 0, q2(0) = 0, u0(0) = 6, u1(0) = 0, u2(0) = 0}; > eqst := subs(totimefunction, eqs); > param := {g = 9.8, l = 1, m = 1, m0 = 4, r =.5, c[l] = 0., c[m] = 0., c[v] = 0.1e-1}; eqst := subs(param, eqst); > ff := dsolve( union (eqst, InitCond), {q0(t), q1(t), q2(t), u0(t), u1(t), u2(t)}, type = numeric, maxfun = 50000); 36
> odeplot(ff, [[t, q0(t)], [t, q2(t)], [t, q1(t)]], 0.. 100, numpoints = 5000); > plotpath_2d := proc (int, radvect1, radvect2, curvepar, t0, t1, npoints_curve, clr, thick, framename) local x1, x2, y1, y2, fig; x1 := subs(curvepar, &c ( &to (framename, radvect1), 1)); x1 := subs(totimefunction, x1); x2 := subs(curvepar, &c ( &to (framename, radvect2), 1)); x2 := subs(totimefunction, x2); y1 := subs(curvepar, &c ( &to (framename, radvect1), 2)); y1 := subs(totimefunction, y1); y2 := subs(curvepar, &c ( &to (framename, radvect2), 2)); y2 := subs(totimefunction, y2); fig := odeplot(int, [[x1, y1], [x2, y2]], t0.. t1, numpoints = npoints_curve, axes = FRAME, view = [-12.. 1, -3.. 3], color = clr, thickness = thick), line([.5*(-rhs(ff(t1)[2])+cos(rhs(ff(t1)[2]))),.5*sin(rhs(ff(t1)[2]))], [(-1)*.5*rhs(ff(t1)[2])+sin(rhs(ff(t1)[3]))+.5*cos(rhs(ff(t1)[2])),.5*sin(rhs(ff(t1)[2]))-cos(rhs(ff(t1)[3]))]), line([(-1)*.5*(rhs(ff(t1)[2])+cos(rhs(ff(t1)[2]))), (-1)*.5*sin(rhs(ff(t1)[2]))], [(-1)*.5*rhs(ff(t1)[2])+(-1)*.5*cos(rhs(ff(t1)[2]))-sin(rhs(ff(t1)[4])), (-1)*.5*sin(rhs(ff(t1)[2]))-cos(rhs(ff(t1)[4]))]), circle([(-1)*.5*rhs(ff(t1)[2]), 0],.5), line([.5*(-rhs(ff(t1)[2])+cos(rhs(ff(t1)[2]))),.5*sin(rhs(ff(t1)[2]))], [(-1)*.5*(rhs(ff(t1)[2])+cos(rhs(ff(t1)[2]))), (-1)*.5*sin(rhs(ff(t1)[2]))]), color = black, thickness = 2; display(fig) end proc; > plotpath_2d(ff, r1, r2, param, 0, 0, 800, red, 0, N); > animatepath_2d := proc (int, radvect1, radvect2, curvepar, t0, t1, npoints_curve, nframes, clr, thick, framename) local x1, x2, y1, y2, del, t00, t11, fig, n, npoints_frame, figg; del := (t1-t0)/nframes; npoints_frame := npoints_curve/nframes; thickness = thick; t00 := t0; t11 := t0+del; fig := plotpath_2d(int, radvect1, radvect2, curvepar, t00, t11, npoints_frame, clr, thick, framename); for n to nframes do t00 := t00+del; t11 := t00+del; figg := plotpath_2d(int, radvect1, radvect2, curvepar, t00, t11, npoints_frame, clr, thick, framename); fig := fig, figg end do; display(fig, insequence = true) end proc; > animatepath_2d(ff, r1, r2, param, 0, 0., 1, 70, red, 2, N); 37