Laboraionsillfälle 4 Numerisk lösning av ODE Målsäning vid labillfälle 4: Klara av laboraionsuppgif 3. Läs förs een om differensmeoder och gör övningarna. Läs avsnie Högre ordningens differenialekvaioner om du har id, annars spara de ill e senare illfälle. De frivilliga uppgiferna på slue bgger på dea avsni. Vi skall se på begnnelsevärdesproblem för försa ordningens ordinär differenialekvaion { = f(, ), a b (a) = c där f en given funkion och c en given konsan. Lösningen ill probleme är en funkion (). Eempel. I den vänsra figuren nedan har vi ria rikningsfäle ill { = () + sin() + cos(), 4 () = c och i den högra lösningskurvorna för några olika värden på c. - - - 3 4-3 4 Vi ser hur lösningskurvorna följer rikningsfäle. Med ode45 kan vi få fram en numerisk lösning. Vi beskriver högerlede i differenialekvaionen och beräknar sedan lösningen för.e. () =. >> mrslok=inline( -+sin()+cos(),, ) mrslok = Inline funcion: mrslok(,) = -+sin()+cos() >> =; [,]=ode45(mrslok,:.:4,); >> plo(,) I ode45-kommando är försa argumene funkionen f(, ), andra argumene är önska lösningsinervall [a b] (så kan de också skrivas in, så besämmer ode45 själv en seglängd) och de redje är begnnelsevärde (a). I sälle för en inline-funkion kan man ha en funkionsfil, en s k ode-fil. Den ska ha formen fun(,) även om bara den ena variabeln sns i funkionsurcke. Dea gäller också inline-funkionen, vilke åsadkoms på de sä som framgår av ovansåe eempel: inline(...,, ). Se även help ode45! Differensmeoder Vi skall approimera lösningen () ill differenialekvaionen på e nä n = a + nh för n =,,, N, med seglängden h = b a N. Lå n beeckna approimaionen av ( n ) och ersä ( n ) enlig Dea ger den s.k. Euler (framå)meoden ( n+ ) ( n ) h ( n ) = f( n, ( n )) ( n+ ) ( n ) + hf( n, ( n )) n+ = n + hf( n, n )
.4..8.6.4. Euler N=4 Euler N=8 Eak lösning.5.5 Geomerisk olkning: Ugåe från begnnelsevärde följer meoden rikningsfäle med kora seg. Övning. Ria rikningsfäle för differenialekvaionen i eempel. Använd sedan Eulers meod för a beräkna approimaioner av lösningar för några olika värden på c. Tag seglängden h så pass lien a ni får bra approimaioner. En förbäring av Eulers meod får man om man efer e provseg beräknar luningen i den erhållna punken, dvs f( n + h, n + hf( n, n )) och sedan använder medelvärde av denna och den föregåe f( n, n ) isälle för den sisnämnda. Denna meod kallas Heuns meod: n+ = n + h {k + k }, k = f( n, n ), k = f( n + h, n + hk ) Meoderna ovan är alla konvergena, dvs. ar vi illräcklig lien seglängd h kan vi få godcklig bra approimaion på e ändlig inervall. Övning. Använd Heuns meod för a approimera (.8), där () är lösningen ill = +, () =. Tag segen h =. och h =.. Jämför med vad du får med Eulers meod. Kan du se a Heun är mer nogrann än Euler? Noggrannare gäller (.8) =.9996546 (korrek avrunda). Vid konsan seglängd gäller a Eulers har e lokal fel (på varje seg) som är av sorleksordningen O(h ) och e global fel (på hela lösningsinervalle) O(h), medan Heuns meod ger e lokal fel O(h 3 ) och e global fel som är O(h ). Bra program för a lösa begnnelsevärdesproblem är adapiva, dvs. de varierar seglängden h för a bli effekiva. Dessa program ser ill a de lokala felen blir små, vilken bedelse dea får på de globala felen beror på differenialekvaionen och de får användaren av programme hålla reda på själv! Eempel på en adapiv lösare är ode45 i Malab. Högre ordningens differenialekvaioner Högre ordningens differenialekvaioner kan skrivas om som ssem av försa ordningen. Dessa ssem kan sedan lösas numerisk. Vissa problem ger naurlig e ssem av differenialekvaioner (se e Volerra-Lokas ekvaioner sis i denna laboraionshandledning). Eempel. Fasspänd bladfjäder som vi knäpper på. Vibraionen beskrivs av { = 3.5 () =, () = Om vi låer v = kan ekvaionen skrivas = v v = 3.5v () = v() = För a komma ill sandardformen låer vi = och = v och får = = 3.5 () = () =
Nu får vi sandardformen { = f(, ) () = c, = [ ] [, f(, ) = 3.5 ] [, c = ] Vi använder ode45 för a beräkna en approimaion av lösningen. >> f=inline( [(); -()^3-.5*()],, ); >> span=[ 5]; % Begnnelse- och sluid >> c=[; ]; % Begnnelsevärden >> [,]=ode45(f,span,c); % Lösningen Riar lösning (, ()) och fasporrä ((), ()) = ((), v()) >> plo(,(:,)) >> plo((:,),(:,)).5.5 -.5 -.5-5 5 - - Övning 3. Sriv om följande differenialekvaioner ill ssem av :a ordningen. (a). = + + (b). = + (c). = Lösningar ill övningsuppgifer. mrslok=inline( -+sin()+cos(),, ); s=.; for =:.4:4 for =-:.4: d=; d=mrslok(,); % I punken (,) riar vi e plo([,+s*d],[,+s*d]) % lie sreck i rikningen (, ). hold on for c=[- -] h=.; =:h:4; =zeros(size()); ()=c; for k=:lengh()- (k+)=(k)+h*mrslok((k),(k)); plo(,) 3 4 3
När vi lär oss lie mer linjär algebra (läsperiod 3) kan vi använda funkionen quiver för a enklare ria rikningsfäl. =linspace(,4,); =linspace(-,,); [T,Y]=meshgrid(,); DT=ones(size(T)); DY=mrslok(T,Y); quiver(t,y,dt,dy) Förklaring av funkionerna meshgrid och quiver vänar vi med.. f=inline( +*^,, ); eak=.9996546; c=; for h=[..] =:h:.8; =zeros(size()); z=zeros(size()); ()=c; z()=c; % =Euler framå, z=heun for k=:lengh()- (k+)=(k)+h*f((k),(k)); z(k+)=z(k)+h/*(f((k),z(k))+f((k+),z(k)+h*f((k),z(k)))); disp([ h=,numsr(h), Euler fel=,numsr(abs(()-eak)), Heun fel=,numsr(abs(z()-eak))]) Ger uskrifen h=. Euler fel=.649 Heun fel=.57 h=. Euler fel=.3459 Heun fel=.4334 Vi ser a fele i Euler är O(h) medan fele i Heun är O(h ). 3. (a). Lå =, =. (b). Lå =, =, 3 =. (c). Lå =, =, 3 =. { = = + + = = 3 3 = 3 + + = = 3 3 = 3 4
Laboraionsuppgif 3.. Skriv en funkionsfil euler.m som löser en ode av :a ordningen: = f(, ). Indaa skall vara f(,) ( e en fördefinerad inline-funkion), lösningsinervalle [a, b], begnnelsevärde (a) och seglängden h. Udaa skall vara marisen [ ] som ugör en värdeabell för lösningen. Om man skriver [ ] = euler(...) i kommandofönsre, kan man sedan ploa lösningen (vilke försås även kan begäras i funkionsfilen). Till skillnad från i övning ska du ine ria någo rikningsfäl. (a). Lös uppgif 9.6(a) och 9.6(b) i läroboken (Forsling/Nemark) med programme euler.m i inervalle [, ]. Tesa också a lösa probleme med ode45. (b). Lös uppgif 9.7 i e lämplig inervall [, c]. Välj själv konsaner, observera a a b! Välj inervalle så a kurvan hinner visa upp sig väl. Tillverka en serie lösningskurvor i samma figur (jfr sid 388 i läroboken), använd begnnelsevärden mellan a och b. Om du vill esa med ode45, kom ihåg a inlinefunkionen (eller mosvarande funkionsfil om du använder en sådan) ill formen måse ha variablerna och, även om bara ingår i funkionsurcke. Frivilliga uppgifer (redovisas ej).. En plan pel. En masspunk med massan m hänger i en viklös smal sav av längden L. Med beeckningarna i figuren och Newons andra lag får vi rörelseekvaionen θ = g sin θ kθ L Här är θ peluslage (radianer) och g är ngdacceleraionen ( m/s ). Termen kθ är en dämpningserm (k > ). Välj e värde på k och e värde på L. Vi vill besämma lösningen för olika begnnelseuslag θ då vi släpper peln från vila. θ L m mg Följ lösningskurvan med ode45 för några olika begnnelseuslag,.e. θ = 3, 5,,. Ria vå bilder som visar lösningarna (, θ()) och fasporräen (θ(), θ ()) för de olika begnnelseuslagen. 3. Volerra-Lokas ekvaioner för samspel mellan rovdjur och besdjur: = ( 5 ), = ( + ) är besdjur, e harar, är rovdjur, e rävar. Lå anale besdjur vid iden noll vara bedlig sörre än anale rovdjur. Pröva lie olika begnnelsevillkor, ploa i någo fall dels båda lösningskurvorna i samma plo, dels faskurvan i en n plo. Na kommandon och funkioner i Malab som vi använ vid dea labillfälle. ones ger en maris flld med eor. meshgrid ger mariser för användning i samband med.e quiver. quiver riar e fäl hold håller kvar grafik. ode45 beräknar approimaiv lösning ill e ssem av :a ordningens ode. 5