Jakobimatrix Tachymeter Numerisch teilweise fertig. Tabelle Beobachtungen muss noch Substituiert werden

This commit is contained in:
2025-12-15 11:30:13 +01:00
parent 4db713b2da
commit 669db5373f
10 changed files with 2765 additions and 49 deletions

View File

@@ -1,11 +1,13 @@
from Datenbank import *
import sympy as sp
import csv
from Export import Export
from Berechnungen import Berechnungen
class FunktionalesModell:
def __init__(self, pfad_datenbank):
def __init__(self, pfad_datenbank, a, b):
self.pfad_datenbank = pfad_datenbank
self.berechnungen = Berechnungen(a, b)
def jacobi_matrix_symbolisch(self):
liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung", "tachymeter_zenitwinkel"]
@@ -14,17 +16,8 @@ class FunktionalesModell:
liste_beobachtungen_rohdaten = []
liste_punktnummern =[]
liste_beobachtungen_jacobian = []
liste_orientierungsunbekannte = []
liste_beobachtungsgleichungen_jacobian = []
liste_beobachtungsgleichungen_abgeleitet = []
liste_beobachtungen_abgeleitet = []
liste_zeilenbeschriftungen_jacobian = []
liste_zeilenbeschriftungen_abgeleitet = []
for beobachtungsart in liste_beobachtungsarten:
liste_id_standpunkt_zielpunkt = db_zugriff.get_beobachtungen_id_beobachtungsgruppe_standpunkt_zielpunkt(beobachtungsart)
@@ -164,22 +157,31 @@ class FunktionalesModell:
else:
return None
# --- Export der A_jacobian-Matrix in eine CSV-Datei ---
dateiname_export = "Jacobi_Matrix.csv"
Export.matrix_to_csv(r"Zwischenergebnisse\Jacobi_Matrix_Symbolisch.csv", liste_unbekannte,
liste_zeilenbeschriftungen_gesamt, A_gesamt, "Beobachtung")
return A_gesamt, liste_unbekannte, liste_zeilenbeschriftungen_gesamt
with open(dateiname_export, "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile, delimiter=";")
def jacobi_matrix_zahlen_iteration_0(self, A_symbolisch, koordinatenart, liste_unbekannte = None, liste_zeilenbeschriftungen_gesamt = None):
if koordinatenart == "naeherung_us":
db_zugriff = Datenbankzugriff(self.pfad_datenbank)
dict_koordinaten_B_L = self.berechnungen.geometrische_breite_laenge(db_zugriff.get_koordinaten(koordinatenart))
# Kopfzeile: leere Ecke + Namen der Unbekannten
kopfzeile = ["Beobachtung"]
for unbekannte in liste_unbekannte:
kopfzeile.append(str(unbekannte))
writer.writerow(kopfzeile)
substitutionen = {}
# Zeilen: Standpunkt-Zielpunkt + Jacobimatrix-Zeile
for zeilenbeschriftung, zeile in zip(liste_zeilenbeschriftungen_gesamt, A_gesamt.tolist()):
zeile_als_text = [zeilenbeschriftung] + [str(eintrag) for eintrag in zeile]
writer.writerow(zeile_als_text)
for punktnummer, vektor in dict_koordinaten_B_L.items():
X_sym, Y_sym, Z_sym, B_sym, L_Sym = sp.symbols(f"X{punktnummer} Y{punktnummer} Z{punktnummer} B{punktnummer} L{punktnummer}")
substitutionen[X_sym] = vektor[0][0]
substitutionen[Y_sym] = vektor[0][1]
substitutionen[Z_sym] = vektor[0][2]
substitutionen[B_sym] = vektor[1]
substitutionen[L_Sym] = vektor[2]
return A_gesamt
A_numerisch = A_symbolisch.xreplace(substitutionen)
Export.matrix_to_csv(r"Zwischenergebnisse\Jacobi_Matrix_Numerisch_Iteration0.csv", liste_unbekannte,
liste_zeilenbeschriftungen_gesamt, A_numerisch, "Beobachtung")
return A_numerisch
else:
print("Koordinaten noch nicht implementiert!")