Jakobimatrix Tachymeter Symbolisch fertig und kontrolliert

This commit is contained in:
2025-12-12 15:25:01 +01:00
parent 5a1fa3d76a
commit 38eb77d91f
3 changed files with 1815 additions and 696 deletions

File diff suppressed because one or more lines are too long

View File

@@ -8,7 +8,7 @@ class FunktionalesModell:
self.pfad_datenbank = pfad_datenbank
def jacobi_matrix_symbolisch(self):
liste_beobachtungsarten = ["tachymeter_richtung"]
liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung", "tachymeter_zenitwinkel"]
db_zugriff = Datenbankzugriff(self.pfad_datenbank)
liste_beobachtungen_rohdaten = []
@@ -69,6 +69,10 @@ class FunktionalesModell:
for beobachtungsart, beobachtungenID, beobachtungsgruppeID, standpunkt, zielpunkt in liste_beobachtungen_rohdaten:
X_sp, Y_sp, Z_sp = dict_punkt_symbole[standpunkt]
X_zp, Y_zp, Z_zp = dict_punkt_symbole[zielpunkt]
B_sp, L_sp = sp.symbols(f"B{standpunkt} L{standpunkt}")
alpha = sp.symbols(f"alpha{standpunkt}_{zielpunkt}")
zw = sp.symbols(f"zw{standpunkt}_{zielpunkt}")
s = sp.symbols(f"s{standpunkt}_{zielpunkt}")
if beobachtungsart == "tachymeter_distanz":
beobachtungsgleichung = sp.sqrt(
@@ -81,11 +85,6 @@ class FunktionalesModell:
if beobachtungsart == "tachymeter_richtung":
#for beobachtungenID, beobachtungsgruppeID, standpunkt, zielpunkt in liste_id_standpunkt_zielpunkt:
B_sp, L_sp = sp.symbols(f"B{standpunkt} L{standpunkt}")
alpha = sp.symbols(f"alpha{standpunkt}_{zielpunkt}")
zw = sp.symbols(f"zw{standpunkt}_{zielpunkt}")
s = sp.symbols(f"s{standpunkt}_{zielpunkt}")
d_r_dX_zp = ((sp.sin(B_sp)*sp.cos(L_sp)*sp.sin(alpha) - sp.sin(L_sp)*sp.cos(alpha)) / (s * sp.sin(zw)))
d_r_dX_sp = - d_r_dX_zp
d_r_dY_zp = ((sp.sin(B_sp)*sp.sin(L_sp)*sp.sin(alpha) + sp.cos(L_sp)*sp.cos(alpha)) / (s * sp.sin(zw)))
@@ -114,6 +113,31 @@ class FunktionalesModell:
f"R {beobachtungsgruppeID} {standpunkt}-{zielpunkt}"
)
if beobachtungsart == "tachymeter_zenitwinkel":
d_r_dX_zp = ((X_zp - X_sp) * sp.cos(zw) - s * sp.cos(B_sp) * sp.cos(L_sp)) / (s ** 2 * sp.sin(zw))
d_r_dX_sp = - d_r_dX_zp
d_r_dY_zp = ((Y_zp - Y_sp) * sp.cos(zw) - s * sp.cos(B_sp) * sp.sin(L_sp)) / (s ** 2 * sp.sin(zw))
d_r_dY_sp = - d_r_dY_zp
d_r_dZ_zp = ((Z_zp - Z_sp) * sp.cos(zw) - s * sp.sin(B_sp)) / (s ** 2 * sp.sin(zw))
d_r_dZ_sp = - d_r_dZ_zp
zeile_A_Matrix = []
for punkt in liste_punktnummern:
if punkt == standpunkt:
zeile_A_Matrix.extend([d_r_dX_sp, d_r_dY_sp, d_r_dZ_sp])
elif punkt == zielpunkt:
zeile_A_Matrix.extend([d_r_dX_zp, d_r_dY_zp, d_r_dZ_zp])
else:
zeile_A_Matrix.extend([0, 0, 0])
for orientierung in liste_orientierungsunbekannte:
zeile_A_Matrix.append(0)
liste_A_richtung_zeilen.append(zeile_A_Matrix)
liste_zeilenbeschriftungen_richtung.append(
f"ZW {beobachtungsgruppeID} {standpunkt}-{zielpunkt}"
)
if liste_beobachtungsgleichungen_distanz:
f_matrix_dist = sp.Matrix(liste_beobachtungsgleichungen_distanz)
unbekanntenvektor = sp.Matrix(liste_unbekannte)

File diff suppressed because it is too large Load Diff