Push 05.02.2026
This commit is contained in:
@@ -9,6 +9,32 @@ class Datumsfestlegung:
|
||||
@staticmethod
|
||||
def weiches_datum(Q_ll: np.ndarray, Q_AA: np.ndarray, varianzkompontenschaetzung_erfolgt: bool,
|
||||
dict_indizes_beobachtungsgruppen: dict) -> np.ndarray:
|
||||
"""
|
||||
Erstellt die erweiterte Kofaktor- und Gewichtsmatrix für eine weiche Datumsfestlegung.
|
||||
|
||||
Aus den Kofaktormatrizen der Beobachtungen Q_ll und der Kofaktormatrix der Anschlusspunkte Q_AA
|
||||
wird eine erweiterte Kofaktormatrix Q_ext aufgebaut. Zusätzlich wird die zugehörige Gewichtsmatrix P erzeugt.
|
||||
|
||||
Falls keine Varianzkomponentenschätzung durchgeführt wurde, wird P als Blockmatrix aus den
|
||||
Inversen (Gewichten) von Q_ll und Q_AA aufgebaut.
|
||||
|
||||
Falls eine Varianzkomponentenschätzung durchgeführt wurde, wird Q_ext entsprechend den in definierten
|
||||
Beobachtungsgruppen in Teilblöcke zerlegt (z.B. SD, R, ZW, gnss, niv, lA). Für jeden Block wird die Gewichtsmatrix
|
||||
berechnet und anschließend zu einer Gesamtgewichtsmatrix zusammengesetzt.
|
||||
|
||||
:param Q_ll: a-priori Kofaktormatrix der Beobachtungen.
|
||||
:type Q_ll: numpy.ndarray
|
||||
:param Q_AA: a-priori Kofaktormatrix der Anschlusspunkte.
|
||||
:type Q_AA: numpy.ndarray
|
||||
:param varianzkompontenschaetzung_erfolgt: Kennzeichen, ob eine Varianzkomponentenschätzung berücksichtigt werden soll.
|
||||
:type varianzkompontenschaetzung_erfolgt: bool
|
||||
:param dict_indizes_beobachtungsgruppen: Dictionary mit Indexbereichen je Beobachtungsgruppe zur Blockzerlegung.
|
||||
:type dict_indizes_beobachtungsgruppen: dict
|
||||
:return: Tuple aus erweiterter Kofaktormatrix Q_ext und zugehöriger Gewichtsmatrix P.
|
||||
:rtype: tuple[numpy.ndarray, numpy.ndarray]
|
||||
:raises ValueError: Wenn Q_ll oder Q_AA keine quadratische Matrix ist.
|
||||
"""
|
||||
|
||||
if Stochastisches_Modell.StochastischesModell.berechne_P(Q_ll).ndim != 2 or \
|
||||
Stochastisches_Modell.StochastischesModell.berechne_P(Q_ll).shape[0] != \
|
||||
Stochastisches_Modell.StochastischesModell.berechne_P(Q_ll).shape[1]:
|
||||
@@ -95,21 +121,37 @@ class Datumsfestlegung:
|
||||
Z(aufgeteilt_lA_invertiert, aufgeteilt_gnss_invertiert),
|
||||
Z(aufgeteilt_lA_invertiert, aufgeteilt_niv_invertiert), aufgeteilt_lA_invertiert]
|
||||
])
|
||||
|
||||
# print(aufgeteilt)
|
||||
# print(beobachtungsgruppe, indizes)
|
||||
# Export.matrix_to_csv(
|
||||
# fr"Zwischenergebnisse\_{beobachtungsgruppe}.csv",
|
||||
# [""],
|
||||
# labels,
|
||||
# aufgeteilt,
|
||||
# f"{beobachtungsgruppe}"
|
||||
# )
|
||||
|
||||
return Q_ext, P
|
||||
|
||||
@staticmethod
|
||||
def indizes_beobachtungsvektor_nach_beobachtungsgruppe(Jacobimatrix_symbolisch_liste_beobachtungsvektor):
|
||||
"""
|
||||
Ermittelt Indexbereiche des Beobachtungsvektors getrennt nach Beobachtungsgruppen.
|
||||
|
||||
Die Funktion analysiert die Bezeichner des symbolischen Beobachtungsvektors (z.B.
|
||||
aus der Jacobi-Matrix) und ordnet jede Beobachtung anhand ihres Kennzeichens
|
||||
(Beobachtungsart) einer Gruppe zu. Für jede Beobachtungsgruppe wird anschließend
|
||||
der minimale und maximale Index im Beobachtungsvektor bestimmt.
|
||||
|
||||
Unterstützte Beobachtungsgruppen sind u.a.:
|
||||
|
||||
- SD : Tachymeter-Strecken,
|
||||
- R : Tachymeter-Richtungen,
|
||||
- ZW : Tachymeter-Zenitwinkel,
|
||||
- gnss: GNSS-Basislinienkomponenten (bx/by/bz),
|
||||
- niv : Geometrisches Nivellement,
|
||||
- lA : Pseudobeobachtungen.
|
||||
|
||||
Die zurückgegebenen Indexbereiche dienen insbesondere zur Blockzerlegung von
|
||||
Kofaktor- oder Gewichtsmatrizen (z.B. bei Varianzkomponentenschätzung oder
|
||||
weicher Datumsfestlegung).
|
||||
|
||||
:param Jacobimatrix_symbolisch_liste_beobachtungsvektor: Liste der Beobachtungen.
|
||||
:type Jacobimatrix_symbolisch_liste_beobachtungsvektor: list
|
||||
:return: Dictionary mit Indexbereichen je Beobachtungsgruppe.
|
||||
:rtype: dict
|
||||
:raises ValueError: Wenn für eine Beobachtungsgruppe keine Indizes ermittelt werden können.
|
||||
"""
|
||||
liste_strecken_indizes = []
|
||||
liste_richtungen_indizes = []
|
||||
liste_zenitwinkel_indizes = []
|
||||
@@ -156,7 +198,7 @@ class Datumsfestlegung:
|
||||
return names, {n: i for i, n in enumerate(names)}
|
||||
|
||||
@staticmethod
|
||||
def build_G_from_names(x0, unbekannten_liste, liste_punktnummern=None, mit_massstab=True):
|
||||
def erstelle_G(x0, unbekannten_liste, liste_punktnummern=None, mit_massstab=True):
|
||||
"""
|
||||
Baut G (u x d) in den vollen Unbekanntenraum.
|
||||
Wenn liste_punktnummern=None, werden alle Punkt-IDs aus unbekannten_liste
|
||||
@@ -235,11 +277,8 @@ class Datumsfestlegung:
|
||||
return E
|
||||
|
||||
|
||||
def loese_geraendert_mit_Qxx(N, n, G):
|
||||
"""
|
||||
löst [N G; G^T 0] [dx;k] = [n;0]
|
||||
und liefert zusätzlich Q_xx als oberen linken Block von inv(K).
|
||||
"""
|
||||
def berechne_dx(N, n, G):
|
||||
|
||||
N = np.asarray(N, float)
|
||||
n = np.asarray(n, float).reshape(-1, 1)
|
||||
G = np.asarray(G, float)
|
||||
|
||||
Reference in New Issue
Block a user