(* ::Package:: *) (* *** Rechnernutzung in der Physik, WS23/24 Mathematisches Pendel Massenpunkt (Masse m) haengt an einer Schnur der Laenge l und wird um den Winkel phi ausgelenkt. Bewegungsgleichung: d^2 phi / d t^2 + w^2 Sin[phi] = 0 mit: w = Sqrt[ g/l ] Approximation fuer kleine Winkel d^2 phi / d t^2 + w^2 phi = 0 Loesung: phi(t) = A sin(w*t) + B cos(w*t) w = 2*Pi/T Aufgaben: - loese (exakte) Bewegungsgleichung - graphische Darstellung - Vergleich von Approximation Sin[phi] ~ phi und exakter Loesung *** *) (* Anfangsbedingungen: *) phip0 := 0; phi0 := 0.1; (* *** phi0 := 0.1; phi0 := 1.0; phi0 := 3.; phi0 := Pi; phi0 := 5/4*Pi; *** *) (* Loese vereinfachte Bewegungsgleichung analytisch und exakte Bewegungsgleichung numerisch: *) w=1; (* => H.O.: T = 2*Pi ~ 6.28... *) Clear[t]; ergapprox = DSolve[{D[phi[t], {t, 2}] + w^2*phi[t] == 0, phi[0] == phi0, phi'[0] == phip0}, phi[t], t]; ergexakt = NDSolve[{D[phi[t], {t, 2}] + w^2*Sin[phi[t]] == 0, phi[0] == phi0, phi'[0] == phip0}, phi[t], {t, 0, 30}]; (* ergapprox ergexakt *) (* phi[t] /. ergapprox phi[t] /. ergexakt /. {t -> 1.2} *) (* Vergleich zwischen exakter Loesung fuer phi(t) (schwarz) und approximativer Loesung (rot): *) plphit = Plot[{phi[t] /. ergapprox[[1]], phi[t] /. ergexakt[[1]]}, {t, 0, 30}, PlotStyle -> {Red, Black}] (* Vorbereitung der graphischen Darstellung der Schwingung: Disk[] : Massepunkt Line[] : Faden des Pendels; rot und schwarz zur Unterscheidung pl: Norm-Koordinatensystem *) masspkt[phi_] := Graphics[Disk[{Sin[phi], -Cos[phi]}, .03]]; faden1[phi_] := Graphics[{RGBColor[1, 0, 0], Line[{{0, 0}, {Sin[phi], -Cos[phi]}}]}]; faden2[phi_] := Graphics[{RGBColor[0, 0, 0], Line[{{0, 0}, {Sin[phi], -Cos[phi]}}]}]; pl := Plot[0, {x, -1.5, 1.5}, Ticks -> None]; (* Zeichne Pendel im Koordinatensystem 'pl' zum Zeitpunkt t; Verwende exakte und approximative Loesungen. *) pendel[tt_] := Show[pl, faden1[phi[t] /. ergapprox[[1]] /. t->tt], masspkt[phi[t] /. ergapprox[[1]] /. t->tt], faden2[phi[t] /. ergexakt[[1]] /. t->tt], masspkt[phi[t] /. ergexakt[[1]] /. t->tt], PlotRange -> {-1., 1.}, PlotLabel -> "t/T = " <> ToString[N[tt/(2*Pi)]] ]; pendel[Pi] (* Generiere "Standbilder" zu den Zeiten t = 2*Pi * i/10, i=0,1,...,10 *) iimax = 10; For[ ii = 0, ii <= iimax, ii = ii + 1, tt = 2*Pi * ii/iimax; plot[ii] = pendel[tt] ]; GraphicsGrid[ { {plot[0], plot[1], plot[2]}, {plot[3], plot[4], plot[5]}, {plot[6], plot[7], plot[8]}, {plot[9], plot[10]} } ] (* Animiere Pendel: *) Animate[pendel[tt], {tt,0,2*Pi}]