DN1240, numo08 Stefan Knutas, Fredrik Båberg, B.10: Nalle-Maja gungar

Relevanta dokument
Tentamen del 1 SF1546, , , Numeriska metoder, grundkurs

Laboration 4. Numerisk behandling av integraler och begynnelsevärdesproblem

Numeriska metoder, grundkurs II. Dagens program. Gyllenesnittminimering, exempel Gyllenesnittetminimering. Övningsgrupp 1

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

Ordinära differentialekvationer,

DN1212 för M: Projektrapport. Krimskramsbollen. av Ninni Carlsund

Föreläsning 14: Exempel på randvärdesproblem. LU-faktorisering för att lösa linjära ekvationssystem.

Teorifrågor. 6. Beräkna konditionstalet för en diagonalmatris med diagonalelementen 2/k, k = 1,2,...,20.

Inlämningsuppgift 4 NUM131

Laboration 6. Ordinära differentialekvationer och glesa system

Laboration 1 Mekanik baskurs

2D1212 NumProg för P1, VT2006 PROJEKTUPPGIFT

Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering

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

TENTAMEN I GRUNDKURS I NUMERISKA METODER - DEL 20

k 1 B k 2 C ges av dx 1 /dt = k 1 x 1 x 1 (0) = 100 dx 2 /dt = k 1 x 1 k 2 x 2 x 2 (0) = 0 dx 3 /dt = k 2 x 2 x 3 (0) = 0

Laboration 4. Numerisk behandling av integraler och begynnelsevärdesproblem

Föreläsning 1. Numeriska metoder grundkurs II, DN1240. Carina Edlund Mottagningstid i rum 4516: onsdagar kl.

Kulstötning. Israt Jahan Martin Celander Andreas Svensson Jonathan Koitsalu

Tentamen i Mekanik SG1102, m. k OPEN m fl. Problemtentamen OBS: Inga hjälpmedel förutom rit- och skrivdon får användas!

Tentamen i Teknisk-Vetenskapliga Beräkningar

TANA17 Matematiska beräkningar med Matlab

SF1669 Matematisk och numerisk analys II Bedömningskriterier till tentamen Måndagen den 16 mars 2015

KTH 2D1240 OPEN vt 06 p. 1 (5) J.Oppelstrup

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

Numeriska metoder för ODE: Teori

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

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

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

Funktioner. Räta linjen

Denna föreläsning. DN1212 Numeriska metoder och grundläggande programmering FN Runge-Kuttas metoder. Repetition av FN6 (GNM kap 6.

Ordinära differentialekvationer,

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

2D1250 Tillämpade numeriska metoder II

TMA226 datorlaboration

Denna föreläsning. DN1212 Numeriska metoder och grundläggande programmering FN Differentialekvationer. Repetition av FN5 (GNM kap 6.

Bose-Einsteinkondensation. Lars Gislén, Malin Sjödahl, Patrik Sahlin

Sammanfattning (Nummedelen)

Uppgift 1. (SUBPLOT) (Läs gärna help, subplot innan du börjar med uppgiften.) 1 A) Testa och förklara hur nedanstående kommandon fungerar.

Tentamen i Beräkningsvetenskap II, 5.0 hp,

Laboration 2 Ordinära differentialekvationer

Inledning. Kapitel Bakgrund. 1.2 Syfte

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

SF1513 NumProg för Bio3 HT2013 LABORATION 4. Ekvationslösning, interpolation och numerisk integration. Enkel Tredimensionell Design

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

Den räta linjens ekvation

Ballistisk pendel laboration Mekanik II

Laboration 3. Funktioner, vektorer, integraler och felskattning

Tentamen i Beräkningsvetenskap II, 5.0 hp,

2D1212 NumProg för BD2, Bio2 & K2 Laboration 7 PROJEKTUPPGIFT - HT2005

de uppgifter i) Under m-filerna iv) Efter samlade i en mapp. Uppgift clear clc Sida 1 av 6

Sammanfattninga av kursens block inför tentan

Laboration 3. Funktioner, vektorer, integraler och felskattning

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

LABORATIONSHÄFTE NUMERISKA METODER GRUNDKURS 1, 2D1210 LÄSÅRET 03/04. Laboration 3 3. Torsionssvängningar i en drivaxel

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

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

Den räta linjens ekvation

Numeriska metoder, grundkurs II. Dagens program. Hur skriver man en funktion? Administrativt. Hur var det man gjorde?

Tentamen, del 2 Lösningar DN1240 Numeriska metoder gk II F och CL

Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering

AUTONOMA DIFFERENTIALEKVATIONER

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

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

Labb 3: Ekvationslösning med Matlab (v2)

Vetenskapsdagen 2016 SciLab för laborativa inslag i matematik eller fysik

MMA132: Laboration 2 Matriser i MATLAB

Omtentamen i DV & TDV

Numeriska metoder för ODE: Teori

Matlab övningsuppgifter

MMA127 Differential och integralkalkyl II

Lösa ekvationer på olika sätt

10 1 Felgraf. Fel Antal steg

DN1212 Numeriska Metoder och Grundläggande Programmering DN1214 Numeriska Metoder för S Lördag , kl 9-12

Tentamen i Mekanik - Partikeldynamik TMME08

Exempel ode45 parametrar Miniprojekt 1 Rapport. Problemlösning. Anastasia Kruchinina. Uppsala Universitet. Januari 2016

Kurs DN1215, Laboration 3 (Del 1): Randvärdesproblem för ordinära differentialekvationer

Fel- och störningsanalys

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

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

Ickelinjära ekvationer

Föreläsningen ger en introduktion till differentialekvationer och behandlar stoff från delkapitel 18.1, 18.3 och 7.9 i Adams. 18.

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

Projekt Finit Element-lösare

Laboration 1, M0039M, VT16

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

NUMPROG, 2D1212, vt Föreläsning 9, Numme-delen. Stabilitet vid numerisk behandling av diffekvationer Linjära och icke-linjära ekvationssystem

Monte Carlo-metoder. Bild från Monte Carlo

Lösningar till Tentamen i Beräkningsvetenskap II, 5.0 hp, Del A. 1. (a) ODE-systemet kan skrivas på formen

LABORATION cos (3x 2 ) dx I =

17 Trigonometri. triangeln är 20 cm. Bestäm vinkeln mellan dessa sidor. Lösning: Här är det dags för areasatsen. s1 s2 sin v 2

Tentamen i Mekanik SG1102, m. k OPEN. Problemtentamen

Denna föreläsning. DN1212 Numeriska metoder och grundläggande programmering FN Standardform för randvärdesproblem

Gemensamt projekt: Matematik, Beräkningsvetenskap, Elektromagnetism. Inledning. Fysikalisk bakgrund

Fel- och störningsanalys

Analys av elektriska nät med numeriska metoder i MATLAB

Tekniska beräkningar. Vad är tekn beräkningar? Vad är beräkningsvetenskap? Informationsteknologi. Informationsteknologi

Uppgift 1 R-S. Uppgift 2 R-M. Namn:...

) + γy = 0, y(0) = 1,

TAIU07 Matematiska beräkningar med Matlab

Transkript:

DN140, numo08 Stefan Knutas, 8811-0056 Fredrik Båberg, 88031-0511 3B.10: Nalle-Maja gungar

Sammanfattning Detta arbete är skrivet som en del av Numeriska Metoder, Grundkurs. Uppgiften vi valde gick ut på att simulera när Nalle-Maja gungar på en gunga och efter att fått upp farten hoppa så långt som möjligt. Nalle-Maja gungar är en uppgift som kräver att man kan lösa differentialekvationer, i det här fallet av högre ordning, numeriskt med hjälp av MATLAB. Vi använder här Runge-Kutta samt interpolation för beräkningarna. De resultat vi kommer fram till är att vinkeln för optimalt hopp ligger runt 35, och att man då kommer runt.4 meter, samt för att få ett högre resultat är det hastigheten som påverkar mest. Tillförlitligheten avgörs genom steghalvering, och vi utför även en störningsräkning för att se hur säkert programmet är för osäkerhet i indata. Våra resultat används sedan för att dra slutsatser om uppgiften, som att hastigheten är mycket viktig för att avgöra hur långt man kan hoppa. /6

Bakgrund Som en del i kursen DN140, Numeriska metoder grundkurs, ska en större labb genomföras, samt muntligt och skriftligt redovisas. Vi har fått välja mellan ett flertal uppgifter som samtliga handlade om differentialekvationer. Detta är rapporten på den labb vi valt. Problemställning Uppgiften var att simulera Nalle-Majas gungning och hopp, som vi delade upp i tre steg: 1. Gunga med bara dämpning. Ta fart i vändlägena 3. Hoppa från gungan Utöver detta skulle det längsta hoppet tas fram och hur detta kan uppnås. Givet var differentialekvationen för utslagsvinkeln och för luftfärden som då skulle omformuleras till system anpassat för MATLAB. Följande ekvationer var givna: d u dt k du m dt g sin u=0 Den dämpade svängningsrörelsen (ekv. 1) L dy Luftfärden i X-led (ekv. ) dt d x dx = dt dt dx dt d y dt = g dy dt dx dt dy dt Luftfärden i Y-led (ekv. 3) där k, m, g, L och κ är konstanter. L är längden på gungan (.0 meter), m är massan för systemet (17kg), g är gravitationskonstanten (9.81), k är en dämpningsfaktor. κ är luftmotståndskoefficienten. Som man ser i ekvationerna för luftfärden är den uppdelad i två komponenter, en i horisontellt led samt en i vertikalt. Den vertikala (ekv. 3) använder absolutbelopp på hastigheten, då den inte kommer att motverka fallet. Tillvägagång Det första vi gjorde var att analysera problemet, för att på det sättet avgöra vilken metod vi skulle använda. Eftersom det handlade om differentialekvationer, och vi senare i uppgiften skulle införa en diskkontinuitet, så valde vi fjärde ordningens Runge-Kutta där vi kan enkelt kan påverka värdena mellan varje beräkning. Vi började med att lösa själva dämpade gungningsrörelsen (fig. 1); genom att skriva om differentialekvationen i vektorform så att det blev av första ordningen kunde den enkelt användas 3/6

tillsammans med Runge-Kutta i MATLAB 1. Figur 1: Dämpningen syns tydligt på de två nedersta graferna. När vi hade skrivit koden för den dämpade rörelsen, utökade vi den med att Nalle-Maja skulle kunna ge lite extra fart i vändlägena. Vändlägena identifierades enkelt med hjälp av tecknet på hastigheten, så var gång det skiftade så kunde diskkontinuiteten implementeras. Värdet på diskkontinuitet var inte lika enkelt att välja, då det inte fanns något angivet i lydelsen. Efter att ha analyserat rörelsen ansåg vi att en diskkontinuitet på 0.7 såg relativt naturligt ut. Därefter lade vi till ytterligare ett villkor, att bara införa diskkontinuiteten om vinkeln var under 60, dvs. om hon kommer upp över 60 så får hon inte göra fart. Just 60 valdes inte utifrån några numeriska analyser utan är bara en uppskattning till en gräns för säker gungning. Att sedan införa själva hoppet var en större utmaning, då vi hade två differentialekvationer under luftfärden, en för acceleration i X-led, samt en i Y- led. Även systemet av dessa två ekvationer löstes på samma sätt som tidigare, genom vektorform och sedan Runge-Kutta. Denna gång behövdes inga extra ingripande under lösningen så de inbyggda lösningsmetoderna så som ode45 skulle kunna fungerat lika väl, men vi valde att fortsätta med samma. Beräkningen upprepades så länge Nalle-Maja var ovan X-axeln vilket gjorde att det sista värdet hade ett negativt Y-värde. För att korrigera detta använde vi linjär interpolation mellan de två sista punktera för att då få X-värdet precis då markytan nåddes (y=0). Begynnelsevärdena som användes var värdena från 1 Kapitel 8 Differentialekvationer i Numeriska algoritmer med MATLAB, Gerd Eriksson NADA, KTH Värdet får genom att ta det sista X-värdet multiplicerat med differensen mellan de två sista punkterna och subtrahera från det sista Y-värdet. 4/6

tidigare uträkning av vinkel och hastighet vid gungningen och för varje vinkel beräknades hoppet numeriskt. Därefter jämfördes alla hopp för att se vilket som var längst och vilken vinkel det utgick från (fig. ). När vi arbetade med den senare delen av uppgiften, att bestämma hur långt Nalle-Maja hoppar, så hamnade vi i tolkningsproblemet varifrån hoppet skulle räknas. Antingen räknar man från gungans position vid hoppet, eller från vilopunkten för gungan. När vi löste uppgiften valde vi det senare, då vi ansåg att detta var mer intressant. Figur : Optimalt hopp med begränsningen 60, i de två nedre graferna syns nu att vinkelhastigheten och vinkeln går mot en begränsning till följd av den valda diskkontinuiteten. Tillförlitlighet Fjärde ordningens Runge-Kutta som vi använder har ett globalt fel proportionellt mot steglängden höjd till 4, vilket ger en tillräckligt bra precision vid den numeriska beräkningen, då vi har en steglängd på 0.05. Genom att ändra noggrannheten och beräkna om kan vi få ut hur pålitlig vår beräkning är, efter en steglängdshalvering från 0.0 till 0.01 fick vi en skillnad på ~0.1 och ~0.05 meter. För själva resultatet anser vi att noggrannheten inte behöver vara större än ±½dm, vilket vi nått med steglängden 0.05. Felet vid linjär interpolation är obetydligt litet då interpoleringspunkterna ligger så pass nära varandra som i detta fall. 5/6

Vi utförde även störningsräkning, genom att störa vinkeln med 1% under hoppet. Detta medförde att det längsta hoppet varierade med ~0.05m vilket vi anser vara godtagbart. Resultat Genom de beräkningar vi gjort, har vi kommit fram till att den optimala vinkeln att hoppa från är omkring 35, eventuellt lite senare om man gungar mycket snabbt. Under dessa förhållanden kan man uppnå hopp på omkring.5 meter. Slutsatser Noggrannheten i våra resultat anser vi vara mer än tillräcklig, speciellt om man väger in de naturliga omständigheterna (en björn/människa hoppandes från en gunga). Att vi hade en begränsning i vinkeln på 60 spelade inte någon roll för beräkningen, då Nalle-Maja inte kom upp i tillräckligt hög hastighet. Det är först då man testar med högre hastigheter som detta börjar spela roll. Liknande fall är det för luftmotståndet som ökar med hastigheten, man skulle kunna tänka sig uppnå en kritisk hastighet då man skulle förlora mer energi av att åka fortare. Detta inträffar dock inte för det vi anser vara naturliga hastigheter att gunga med. 6/6

Bilaga 1 Kod för enbart gungning med dämpning close, clear, clc % Konstanter och värden på dessa L =.0; k = 1.0; m = 17; g = 9.81; h =.5; % Höjd till grenen % Funktioner fg = @(u) [u(), -(k/m)*u()-(g/l)*sin(u(1))]; % Vinkelhastighet och % acceleration vid gungning % Justera grafens egenskaper subplot(,1,1), axis([-l L 0 h]), axis equal, title('gungan') hold on, grid on % Startvärden tslut = 50; % Tid simuleringen ska köras dt = 0.05; % Steglängd n = tslut/dt; % Antal beräkningar y = [5*pi/36, 0]; % Vinkel och vinkelhastighet rikt = -1; % Gungar åt vänster från start phi = [y(1), zeros(1, n)]; % Startvinkel samt allokering phiprim = [y(), zeros(1, n)]; % Vinkelhastighet samt allokering for j = 1:n+1 % RK4 xl = L*sin(y(1)); yl = -L*cos(y(1))+h; plot([0 xl], [h yl], 'b-', xl, yl, 'ro') f1 = fg(y); f = fg(y+ dt*f1/); f3 = fg(y+ dt*f/); f4 = fg(y+ dt*f3); y = y + dt*(f1 + *(f+f3) + f4)/6; phi(j) = y(1); phiprim(j) = y(); xl = L*sin(y(1)); yl = -L*cos(y(1))+h; plot([0 xl], [h yl], 'y-', xl, yl, 'go') pause(dt) % Kommentera bort för att resultatet snabbt t = 0:dt:tslut; % Plot-variabel subplot(,,3), plot(t, phi, t, phiprim, ':') xlabel('tiden'), ylabel('vinkel, vinkelhastighet [r/s] (prickad)') subplot(,,4), plot(phi, phiprim) xlabel('vinkeln \phi'), ylabel('vinkelhastighet [r/s]') I/I

Bilaga Kod för gungning och hopp close, clear, clc % Konstanter och värden på dessa L =.0; k = 1.0; m = 17; g = 9.81; h =.5; % Höjd till grenen kappa = 0.15; % Funktioner fg = @(u) [u(), -(k/m)*u()-(g/l)*sin(u(1))]; % Vinkelhastighet och acceleration vid gungning fh = @(u) [u(), -kappa*u()*sqrt(u()^+u(4)^),... % Hastighet och % acceleration vid hoppet, X-led u(4), -g-kappa*abs(u(4))*sqrt(u()^+u(4)^)]; % Y-led % Justera grafens egenskaper subplot(,1,1), axis([-l L 0 h]), axis equal, title('gungan') hold on, grid on % Startvärden tslut = 50; % Tid simuleringen ska köras dt = 0.05; % Steglängd n = tslut/dt; % Antal beräkningar y = [5*pi/36, 0]; % Vinkel och vinkelhastighet rikt = -1; % Gungar åt vänster från start phi = [y(1), zeros(1, n)]; % Startvinkel samt allokering phiprim = [y(), zeros(1, n)]; % Vinkelhastighet samt allokering for j = 1:n+1 % RK4 xl = L*sin(y(1)); yl = -L*cos(y(1))+h; plot([0 xl], [h yl], 'b-', xl, yl, 'ro') f1 = fg(y); f = fg(y+ dt*f1/); f3 = fg(y+ dt*f/); f4 = fg(y+ dt*f3); y = y + dt*(f1 + *(f+f3) + f4)/6; phi(j) = y(1); phiprim(j) = y(); xl = L*sin(y(1)); yl = -L*cos(y(1))+h; plot([0 xl], [h yl], 'y-', xl, yl, 'go') if sign(y()) ~= rikt % Om hastigheten har byt tecken ska det adderas % hastighet if abs(phi(j)) < pi/3 % men bara om vinkel är under 60 grader. % Denna sats (med tillhörande ) tas bort % för obegränsad gungning y() = y()+0.7*sign(y()); % Får fart på 0.7 disp('tar fart'); % Används för att kunna se skillnad på när rikt = sign(y()); % fart inte tas vid en vändning I/II

pause(dt) % Kommentera bort för att resultatet snabbt t = 0:dt:tslut; % Plot-variabel subplot(,,3), plot(t, phi, t, phiprim, ':') xlabel('tiden'), ylabel('vinkel, vinkelhastighet [r/s] (prickad)') subplot(,,4), plot(phi, phiprim) xlabel('vinkeln \phi'), ylabel('vinkelhastighet [r/s]') % Simulera längd för hopp xmax = 0; % Längsta hoppet dt = 0.05; for j = 1:length(phi) % Beräkna för varje vinkel med respektive hastighet Vy = sin(phi(j))*phiprim(j)*l; % Hastighet i Y-led Vx = cos(phi(j))*phiprim(j)*l; % Hastighet i X-led Phopp = [L*sin(phi(j)), -L*cos(phi(j))+h]; % Positionen vid hoppet w = [Phopp(1), Vx, Phopp(), Vy]; % Position och hastighet wtemp = []; while w(3) > 0 % RK4 % För given vinkel % beräkna hoppet så länge w(3)(y) är över 0 f1 = fh(w); f = fh(w+ dt*f1/); f3 = fh(w+ dt*f/); f4 = fh(w+ dt*f3); w = w + dt* (f1 + *(f+f3) + f4)/6; wtemp = [wtemp; w]; % Spara punkterna så att de kan % ritas ut efter % Interpolerar värdet (linjärt), för att få x då y=0 xtemp = wtemp(,1) - wtemp(,3)*(wtemp(,1)-wtemp(-1,1)) / (wtemp(,3)- wtemp(-1,3)); if abs(xtemp) > abs(xmax); optimalphi = phi(j); wmax = wtemp; xmax = xtemp; % Kontrollerar om det är längsta % hoppet hittills optimalphigrad = optimalphi*180/pi; disp(strcat('längsta hoppets nerslag [m]:', numstr(xmax))) disp(strcat('längsta hoppets vinkel [grader]:', numstr(optimalphigrad))) % Rita ut längsta hoppet och skriv in värdena subplot(,1,1), plot(wmax(:,1), wmax(:,3), 'k:') text(xmax, 0.4, strcat(numstr(xmax), 'm')) text(wmax(1,1), 0.4, strcat(numstr(optimalphigrad), '\circ')) II/II