Sonnenstand

Physik, Mathematik & Programmierung
Benutzeravatar
Yukterez
Administrator
Beiträge: 152
Registriert: Mi 21. Okt 2015, 02:16

Sonnenstand

Beitragvon Yukterez » Do 12. Nov 2015, 00:48

Um Sun Outages von Satelliten zu berechnen braucht man den Längen- und Breitengrad des Ortes an dem man sich befindet, und die Zeitzone in der dieser liegt. Zu beachten ist auch dass der julianische Tag um 0 Uhr keine gerade Zahl ist, sondern einen Nachkommawert (in unserer Zone derzeit 0.41667) hat. Nur wenn man das berücksichtigt stimmen auch die Uhrzeiten.

Angenommen man will herausfinden wann der Empfang des Astra-Satelliten in Wien durch ein Sonnen-Outage gestört wird. Dazu erstellt man entweder ein Manipulate[] oder eine Do[]-Liste für die einzelnen Tage des Jahres, und schaut nach ob sich Sonne und Satellit überhaupt treffen.

Wenn das der Fall ist schaut man an welchen zwei Tagen das der Fall ist (es gibt dann jeweils ein Ereignis wenn die Tage länger werden, und eines wenn sie kürzer werden). Manchmal ist auch an dem Tag vor und nach dem Ereignis mit einem Outage zu rechnen, da die Sonne immerhin einen Winkeldurchmesser von einem halben Grad hat. Nun kann man den Tag definieren und stattdessen die Stunden als Parameter durchlaufen lassen. Dabei beachtet man die Zeitzone in der man sich befindet.

Der Satellit wird wie die untere Rechnung zeigt 161 Tage nach Simulationsbeginn (hier der 3.5.2015) am 11.10.2015 um 12:30 und an Tag 304 am 2.3.2016 um 11:45 von Wien aus nicht zu empfangen sein. Will man einen anderen Ort oder einen anderen Satelliten gibt man bei φ, λ und pSat seine neuen Koordinaten ein.

Bild

Code: Alles auswählen

Manipulate[
 
 φ = bg grad; (* Breitengrad Wien *)
 λ = lg grad; (* Längengrad Wien *)
 pSat = {Lg, Bg}; (* Satellitenposition in Grad *)
 grad = π/180; (* Winkelmaß *)
 
 n = JD - 2451545 + d; (* Start:3.5.2015 *)
 
 l[n_] := 28046/100 grad + 9856474/1*^7 grad n; (* Mittlere ekliptikale Länge *)
 L[n_] := Mod[l[n], 2 π]; (* Skalierung *)
 g[n_] := 357528/1000 grad + 9856003/1*^7 grad n; (* mittlere Anomalie *)
 г[n_] := Mod[g[n], 2 π]; (* Skalierung *)
 Λ[n_] := L[n] + 1915/1000 grad Sin[г[n]] + 1997/1*^5 grad Sin[2 г[n]]; (* Ekliptikale Länge *)
 ε[n_] := 23439/1000 grad - 4*^-7 grad n; (* Ekliptik *)
 
 β[n_] := ArcTan[Cos[ε[n]] Sin[Λ[n]]/Cos[Λ[n]]];
 α[n_] := If[Cos[Λ[n]] < 0, β[n] + π, β[n]]; (*  Rektaszension  *)
 δ[n_] := ArcSin[Sin[ε[n]] Sin[Λ[n]]]; (* Deklination *)
 
 t0[n_] := n/36525;
 θhG[n_, T_] := 6697376*^-6 + 240005134*^-5 t0[n] + 1002738*^-6 T;
 θG[n_, T_] := (15 Mod[θhG[n, T], 24]) π/180;
 θ[n_, T_] := θG[n, T] + λ;
 τ[n_, T_] := θ[n, T] - α[n]; (* Stundenwinkel *)
 F[n_, T_] := (Cos[τ[n, T]] Sin[φ] - Tan[δ[n]] Cos[φ]);
 Az[n_, T_] := ArcTan[Sin[τ[n, T]]/F[n, T]];
 a[n_, T_] := If[F[n, T] < 0, Az[n, T], Az[n, T] + π]; (* Azimut *)
 h[n_, T_] := ArcSin[Cos[δ[n]] Cos[τ[n, T]] Cos[φ] + Sin[δ[n]] Sin[φ]]; (* Höhe *)
 
 Grid[{
 
   {Show[ParametricPlot[{a[n, T] 180/π, h[n, T] 180/π}, {T, t - tau - s, t - tau},
   Frame -> True,
   PlotRange -> {{-90, 270}, {-90, 90}}, ImageSize -> 380,
   GridLines -> {Range[-90, 270, 30], Range[-90, 90, 30]}],
   Graphics[Point[pSat]]]},
   
   {{"Tag" -> d, "Uhrzeit" -> t}},
   {{"Az" -> Evaluate[N[a[n, t - tau] 180/π]],
     "Alt" -> Evaluate[N[h[n, t - tau] 180/π]]}}
   
   }],
 
 {{JD, 2.45714541667`*^6, "Start (JD)"}, 0, 24515450},
 {{d, 0, "Tag (JD+...)"}, 0, 365, 1},
 {{t, 24, "Stunde"}, 1, 24},
 {{s, 24, "Schweif"}, 1/100, 24},
 {{tau, 0, "Zeitzone"}, -24, 24},
 {{lg, 163738189*^-7, "Länge Ort"}, -360, 360},
 {{bg, 482081743*^-7, "Breite Ort"}, -90, 90},
 {{Lg, 176.2, "Länge Sat"}, -360, 360},
 {{Bg, 34.5, "Breite Sat"}, -90, 90}]

 (* Yukterez Version 2015.5.7 M *)

Calculations for sun position, Simon Tyran, Wien (Vienna)
Симон Тыран @ wikipedia | stackexchange | wolfram

Zurück zu „Yukterez Notizblock“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast