Obligatorisk oppgave nr 3 FYS-13 Lars Kristian Henriksen UiO 11. februar 15
Diskusjonsoppgaver 1 Fjerde ordens Runge-Kutta fungerer ofte bedre enn Euler fordi den tar for seg flere punkter og stigningstall og lager et vektet snitt av alle disse. Vi får da en metode som sikrer oss bedre nøyaktighet, så lenge tidsstegene velges fornuftig. 11 I det første tilfellet ser vi en bevegelse som kan anses for å være en dempet svingning, der amplituden avtar med tiden. I den andre bevegelsen kan det se ut til at det er snakk om en påtrykt kraft som slutter å virke like etter tid = 3.
Oppgave X x 1 1 6 6 6 8 1 1 Figur 1: Ved tidssteg N=, åpenbart ingen god tilnærming x 1 31 1.5 1.5.5 1 1.5 6 8 1 1 Figur : Ved tidssteg N=, heller ingen god tilnærming.1.5.5.1 6 8 1 1 Figur 3: Ved tidssteg N=, ser at tilnærmingen begynner å bli bra a) Vi ser fra disse figurene, at vi må opp på et tidssteg av størrelsesorden 1 for å få en god tilnærming. Det foreligger ingen øvre begrensning slik jeg ser det. Det er ikke laget et eget script til alle disse kjøringene. Har her kun endret N i programkoden. Se MATLAB-tillegg. Ved videre kjøring er det brukt N=. 3
For å finne den analytiske løsningen, må det gjøres en liten jobb. Vi har fra kompendiet at formelen for underkritisk dempning kan skrives: z(t) = e γt A cos(ω t + φ) γ = b m =.5 s 1, z() = A cos(φ) =.1 ω ω γ = 9.9875 ż(t) = A e γt ( ω sin(ω t + φ) γ cos(ω t + φ)) ż() = A ( ω sin(φ) γ cos(φ)) =. Siden A ikke kan være null (fra z()) ( ω sin(φ) γ cos(φ)) = φ = tan 1 ( γ ω ) ( = tan 1.5 ) =.5 9.9875 Dette resultatet settes inn i uttrykket for z() =.1 og løser for A z() = A cos(φ) =.1 A = = A cos(.5) =.1.1 cos(.5) =.11 Det analytiske uttrykket for svingningen er da gitt ved z(t) = e.5t.11 cos(9.9875t.5).1.5.5.1 Analytisk løsning Numerisk løsning 6 8 1 1 Figur : Analytisk og numerisk løsning plottet sammen Fra Figur ser vi at den numeriske metoden fungerer godt til å gjenskape resultatene gitt av den analytiske løsningen.
b) Her har jeg ikke egentlig klart å lage et program som kan plotte de tre grafene samtidig, men heller laget tre separate script som hver bruker forskjellige b-verdier, og plottet disse i samme plot. Det blir derfor ikke lagt ved noe MATLAB-kode for denne oppgaven, da den er tilnærmet lik som i oppgave a). Når det velges friksjonskoeffisienter b, brukes det at en kritisk dempet svingning har γ = ω, overkritisk har γ > ω og underkritisk γ < ω. Med ω = 1 kan vi ved å se på verdien for kritisk dempning, finne noen passende b-verdier. γ = b/m = ω gir at vi ved kritisk dempning får b =. Dermed vil b < gi underkritisk dempning, og b > gi overkritisk dempning..1 Kritist dempning b= Overkritisk dempning b=1 Underkritisk dempning b=.5.5.5.1 1 3 5 6 Figur 5: Kritisk, underkritisk og overkritisk dempning med tilhørende friksjons-koeffisienter b. c ).5..15.1.5.5.1.15..5 5 1 15 5 3 35 5 5 Figur 6: Tvungen svingning med masse m =.1kg, friksjonskoeffisient b =.kg/s, fjærkonstant k = 1N/m og påtrykkt kraft F =.1N. Den påtrykkte kraften varer halve tiden. 5
.7.6.5 Energi..3..1 8 8.5 9 9.5 1 1.5 11 11.5 1 Vinkelfrekvens i Hz Figur 7: Plot av vinkelfrekvens ω mot energi E = A d) Vi kan fra denne figuren lett finne f ved å se på frekvensbredden i E/..7.6 E tot.6.5. Energi.3 ω =. E tot /=.311..1 8 8. 8. 8.6 8.8 9 9. 9. 9.6 9.8 1 1. 1. 1.6 1.8 11 11. 11. 11.6 11.8 1 Vinkelfrekvens i Hz Figur 8: Plot med hjelpelinjer for oppgave d) Vi ser fra Figur 8 at ω., som tilsvarer en frekvens f =./π.67hz. Når vi vet at f = ω/π = 1/π = 1.6Hz, kan vi bruke at Q = f f = 1.6 Hz.67 Hz = 3.88 6
Denne delen ble gjort før forrige del av oppgaven, så selv om den nå er overflødig, føles det så trist å slette denne delen, da den faktisk tok ganske lang tid den også. Så for å se om grafen fra oppgave c) kan gi oss informasjon nok til å se ut en Q-verdi, tegnes noen hjelpelinjer inn i grafen:.5..15.1.5.5.1.15..5 delta t 5 1 15 5 3 35 5 5 Figur 9: Hjelpefuigur til oppgave d) Den øverste av de røde linjene indikerer tilnærmet verdi for maks utslag etter lang tids påtrykt kraft. Vi kan bruke dette til å utlede en verdi for maks amplitude A maks /e =.5/e 1 =.919. Den nederste av de røde strekene indikerer nettop denne verdien. Tiden det tar for systemet å gå fra maks utslag til A maks /e kalles t. Det viser seg dog at ved følgende formel for Q fra kompendiet, må vi bruke halve den nå avleste t for å finne Q-verdien, slik at t = t / Q = ω t = 1.5 = 5 Uten større problem, kan vi da finne frekvensresponsen til systemet ved Q = f / f, hvor f = ω/π = 1.6 Hz. f = f 1.6 Hz = =.6 Hz Q 5 Vi ser at svarene i de to forskjellige fremgangsmåtene avviker noe, men såpass lite at de tas for god fisk, begge to. 7
MATLAB-koder Selve programmet som kjører både rkr.m og dempet.m i oppgave a), b), hvor store deler er hentet fra kompendiet. 1 function dempsving15 3 global param; 5 %Konstanter m.m. 6 7 m =.1; % kg 8 k = 1.; % N/m 9 b =.1; % kg/s 1 tid = 13; % s 11 1 % Parametre for rk.m og dempet.m 13 param.a = b/m; 1 param.b = k/m; 15 param.fn = 'dempet'; 16 17 N = ; % Antal step 18 _t = tid/n; % Tidssteg i beregningene 19 y = zeros(1,n); 1 v = zeros(1,n); t = zeros(1,n); 3 z = zeros(1,n); y(1) =.1; % m 5 v(1) =.; % m/s 6 t(1) =.; % s 7 z(1) =.1; 8 9 %Lokken 3 for j = 1:N 31 [y(j+1), v(j+1), t(j+1)] = rkr(y(j),v(j),t(j), _t,param); 3 z(j+1) = exp(-(b/(*m))* t(j+1))*.11*cos((sqrt((k/m)-.5^) * t(j+1)) -.5); 33 end; 3 35 36 %plot 37 hold 'on' 38 plot(t,z,'--b') 39 plot(t,y,'-r') maks = max(y); 1 xlabel(''); ylabel(''); 3 legend('analytisk losning','numerisk losning') axis([-. tid -maks*1. maks*1.]); 5 6 return 8
Selve Runge-Kutta funksjonen. Mer eller mindre kopiert fra kompendiet. 1 function [xp,vp,tp] = rkr(xn,vn,tn, _t, param) 3 % Runge-Kutta integrator (.orden) Versjon 51. 5 ffa = eval(['@' param.fn]); % Henter opp navn paa Matlabkode for annenderivert 6 7 halv_ _t =.5* _t; 8 t_p_halv = tn + halv_ _t; 9 1 x1 = xn; 11 v1 = vn; 1 a1 = ffa(x1,v1,tn,param); 13 1 15 x = x1 + v1*halv_ _t; 16 v = v1 + a1*halv_ _t; 17 a = ffa(x,v,t_p_halv,param); 18 19 x3 = x1 + v*halv_ _t; v3 = v1 + a*halv_ _t; 1 a3 = ffa(x3,v3,t_p_halv,param); 3 tp = tn + _t; x = x1 + v3* _t; 5 v = v1 + a3* _t; 6 a = ffa(x,v,tp,param); 7 8 % Returnerer (tilnaermet) (x,v,t) i slutten av intervallet. 9 _t6 = _t/6.; 3 xp = xn + _t6*(v1 +.*(v+v3) + v); 31 vp = vn + _t6*(a1 +.*(a+a3) + a); 3 tp = tn + _t; 33 3 return; Funksjonen for den annenderieverte for en dempet svingning, tatt utgangspunkt i koden skrevet i kompendiet: 1 function dvdt = dempet(y,v,t,param) 3 dvdt = - param.a*v - param.b*y; 5 return 9
Kode for å kjøre simulering av numerisk metode på en tvungen svingning i oppgave c). 1 function dempsving15_c 3 global param; 5 %Konstanter m.m. 6 7 8 m =.1; % kg 9 k = 1; % N/m 1 b =.; % kg/s 11 omega = sqrt(k/m); 1 F =.1; % N 13 tid = 5; % s 1 15 % Parametre for rk.m og dempet.m 16 param.a = b/m; 17 param.b = k/m; 18 param.c = F/m; 19 param.d = omega*1.; param.slutt = tid/.; 1 param.fn = 'tvungen'; 3 N = e; % Antal step _t = tid/n; % Tidssteg i beregningene 5 6 y = zeros(1,n); 7 v = zeros(1,n); 8 t = zeros(1,n); 9 y(1) =.; % m 3 v(1) =.; % m/s 31 t(1) =.; % s 3 33 %Lokken 3 for j = 1:N 35 [y(j+1), v(j+1), t(j+1)] = rkr(y(j),v(j),t(j), _t,param); 36 end; 37 38 39 %plot hold 'on' 1 plot(t,y,'-b') maks = max(y); 3 xlabel(''); ylabel(''); 5 axis([-. tid -maks*1. maks*1.]); 6 7 return Funksjonen for den annenderieverte for en tvungen svingning, tatt utgangspunkt i koden skrevet i kompendiet: 1 function dvdt = tvungen(y,v,t,param) if (t < param.slutt) 3 dvdt = - param.a*v - param.b*y + param.c*cos(param.d*t); else 5 dvdt = - param.a*v - param.b*y; 6 end; 7 return; 1
MATLAB-koden for oppgave d) 1 function tvungsving15_d 3 global param; 5 %Konstanter m.m. 6 7 8 m =.1; % kg 9 k = 1; % N/m 1 b =.; % kg/s 11 omega = sqrt(k/m); 1 F =.1; % N 13 tid = 8; % s 1 15 N = e3; % Antal step 16 _t = tid/n; % Tidssteg i beregningene 17 M = ; 18 19 omega_x = linspace(omega*.8,omega*1.,m); E = zeros(1,m); 1 %Lokken 3 for i = 1:M 5 % Parametre for rk.m og dempet.m 6 7 param.a = b/m; 8 param.b = k/m; 9 param.c = F/m; 3 param.d = omega_x(i); 31 param.slutt = tid; 3 param.fn = 'tvungen'; 33 3 %Initialbetingelser settes hver gang omega endres 35 36 y = zeros(1,n); 37 v = zeros(1,n); 38 t = zeros(1,n); 39 y(1) =.; v(1) =.; 1 t(1) =.; 3 %Lokka for RK og maksverdi 5 for j = 1:N 6 [y(j+1), v(j+1), t(j+1)] = rkr(y(j),v(j),t(j), _t,param); 7 z = max(y(n-:n)); 8 end; 9 5 % Finner energien til systemet med gitt omega 51 5 E(i) = (max(z))^; 53 end; 5 55 plot(omega_x,e,'r') 56 xlabel('vinkelfrekvens i Hz') 57 ylabel('energi') 58 59 return 11