Iteration
This commit is contained in:
147
Campusnetz.ipynb
147
Campusnetz.ipynb
@@ -563,22 +563,149 @@
|
|||||||
"execution_count": null
|
"execution_count": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2025-12-30T10:11:25.614597Z",
|
||||||
|
"start_time": "2025-12-30T10:11:24.213436Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"source": [
|
"source": [
|
||||||
"# Datumsfestlegung: Bitte geben Sie nachfolgend die Koordinatenkomponenten an, die das Datum definieren sollen\n",
|
"import importlib\n",
|
||||||
|
"import Netzqualität_Genauigkeit\n",
|
||||||
|
"importlib.reload(Netzqualität_Genauigkeit)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"auswahl = [\n",
|
"import Parameterschaetzung\n",
|
||||||
" (\"101\",\"X\"), (\"101\",\"Y\"), # Punkt 101 nur Lage\n",
|
"importlib.reload(Parameterschaetzung)"
|
||||||
" (\"205\",\"X\"), (\"205\",\"Y\"), (\"205\",\"Z\"), # Punkt 205 voll\n",
|
],
|
||||||
" (\"330\",\"Z\") # Punkt 330 nur Höhe\n",
|
"id": "dae9ff512fb17160",
|
||||||
"]\n",
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"<module 'Parameterschaetzung' from 'C:\\\\Users\\\\miche\\\\PycharmProjects\\\\Masterprojekt_V3\\\\Parameterschaetzung.py'>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 1,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"execution_count": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2025-12-30T10:11:28.574122Z",
|
||||||
|
"start_time": "2025-12-30T10:11:28.181972Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cell_type": "code",
|
||||||
|
"source": [
|
||||||
|
"import sympy as sp\n",
|
||||||
"\n",
|
"\n",
|
||||||
"aktive_unbekannte_indices = Datumsfestlegung.datumskomponenten(auswahl, liste_punktnummern)"
|
"# -----------------------------\n",
|
||||||
|
"# 1) Punktliste aus Unbekannten ableiten (konsistent zur A-Matrix!)\n",
|
||||||
|
"# -----------------------------\n",
|
||||||
|
"liste_punktnummern = []\n",
|
||||||
|
"for sym in Jacobimatrix_symbolisch_liste_unbekannte:\n",
|
||||||
|
" name = str(sym)\n",
|
||||||
|
" if name.startswith(\"X\"): # X10001, X10002, ...\n",
|
||||||
|
" liste_punktnummern.append(name[1:]) # \"10001\", ...\n",
|
||||||
|
"\n",
|
||||||
|
"# -----------------------------\n",
|
||||||
|
"# 2) idx_X / idx_Y / idx_Z passend zur Punktliste\n",
|
||||||
|
"# (weil Unbekanntenreihenfolge pro Punkt: X,Y,Z)\n",
|
||||||
|
"# -----------------------------\n",
|
||||||
|
"nP = len(liste_punktnummern)\n",
|
||||||
|
"idx_X = [3*p for p in range(nP)]\n",
|
||||||
|
"idx_Y = [3*p + 1 for p in range(nP)]\n",
|
||||||
|
"idx_Z = [3*p + 2 for p in range(nP)]\n",
|
||||||
|
"\n",
|
||||||
|
"# -----------------------------\n",
|
||||||
|
"# 3) Datumsauswahl (gemischt möglich) -> aktive Indizes\n",
|
||||||
|
"# -----------------------------\n",
|
||||||
|
"auswahl = [(pt, c) for pt in liste_punktnummern for c in (\"X\",\"Y\",\"Z\")]\n",
|
||||||
|
"\n",
|
||||||
|
"aktive_unbekannte_indices = Datumsfestlegung.Datumsfestlegung.datumskomponenten(\n",
|
||||||
|
" auswahl,\n",
|
||||||
|
" liste_punktnummern\n",
|
||||||
|
")\n",
|
||||||
|
"\n",
|
||||||
|
"# -----------------------------\n",
|
||||||
|
"# 4) Startwerte x(0) aus den vorhandenen Substitutionen (Iteration 0)\n",
|
||||||
|
"# Alles, was nicht im Dict ist (z.B. Orientierungen), wird 0.0 gesetzt.\n",
|
||||||
|
"basis_subs = fm.substitutionen_dict\n",
|
||||||
|
"\n",
|
||||||
|
"x = sp.Matrix([[float(basis_subs.get(sym, 0.0))] for sym in Jacobimatrix_symbolisch_liste_unbekannte])\n",
|
||||||
|
"\n",
|
||||||
|
"# 5) Iteration mit lokaler Ausgleichung + Teilspur\n",
|
||||||
|
"max_iter = 1\n",
|
||||||
|
"tol = 1e-4 # m\n",
|
||||||
|
"\n",
|
||||||
|
"for it in range(max_iter):\n",
|
||||||
|
"\n",
|
||||||
|
" # a) Substitutionen für diese Iteration: Basis + aktuelle Unbekannte\n",
|
||||||
|
" subs_it = dict(basis_subs)\n",
|
||||||
|
" for sym, val in zip(Jacobimatrix_symbolisch_liste_unbekannte, list(x)):\n",
|
||||||
|
" subs_it[sym] = float(val)\n",
|
||||||
|
"\n",
|
||||||
|
" # b) A(x) numerisch aus symbolischer Jacobi\n",
|
||||||
|
" A_it = Jacobimatrix_symbolisch.xreplace(subs_it)\n",
|
||||||
|
"\n",
|
||||||
|
" # c) l0(x) numerisch aus symbolischem Näherungs-Beobachtungsvektor\n",
|
||||||
|
" l0_it = beobachtungsvektor_naeherung_symbolisch.xreplace(subs_it)\n",
|
||||||
|
"\n",
|
||||||
|
" # d) dl = l - l0\n",
|
||||||
|
" dl_it = beobachtungsvektor_numerisch - l0_it\n",
|
||||||
|
"\n",
|
||||||
|
" # e) lokale Ausgleichung\n",
|
||||||
|
" res_dict, dx = Parameterschaetzung.ausgleichung_lokal(\n",
|
||||||
|
" A=A_it,\n",
|
||||||
|
" dl=dl_it,\n",
|
||||||
|
" Q_ll=Qll_matrix_numerisch,\n",
|
||||||
|
" x0=x,\n",
|
||||||
|
" liste_punktnummern=liste_punktnummern,\n",
|
||||||
|
" auswahl=auswahl,\n",
|
||||||
|
" mit_massstab=False\n",
|
||||||
|
" )\n",
|
||||||
|
"\n",
|
||||||
|
" x = x + dx\n",
|
||||||
|
"\n",
|
||||||
|
" # f) Abbruchkriterium\n",
|
||||||
|
" max_abs_dx = max(abs(float(v)) for v in dx)\n",
|
||||||
|
" print(\n",
|
||||||
|
" f\"Iter {it}: max|dx| = {max_abs_dx:.3e} m, \"\n",
|
||||||
|
" f\"r_gesamt={res_dict.get('r_gesamt', None)}, \"\n",
|
||||||
|
" f\"sigma0={res_dict.get('sigma0_apost', None)}\"\n",
|
||||||
|
" )\n",
|
||||||
|
" print(\"l :\", float(beobachtungsvektor_numerisch[0]))\n",
|
||||||
|
" print(\"l0 :\", float(l0_it[0]))\n",
|
||||||
|
" print(\"dl :\", float(dl_it[0]))\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
" if max_abs_dx < tol:\n",
|
||||||
|
" print(\"Konvergenz erreicht.\")\n",
|
||||||
|
" break\n",
|
||||||
|
"\n",
|
||||||
|
"# Ergebnis: x enthält die geschätzten Unbekannten nach letzter Iteration\n",
|
||||||
|
"x"
|
||||||
],
|
],
|
||||||
"id": "cd09dd5a716736b1",
|
"id": "cd09dd5a716736b1",
|
||||||
"outputs": [],
|
"outputs": [
|
||||||
"execution_count": null
|
{
|
||||||
|
"ename": "NameError",
|
||||||
|
"evalue": "name 'Jacobimatrix_symbolisch_liste_unbekannte' is not defined",
|
||||||
|
"output_type": "error",
|
||||||
|
"traceback": [
|
||||||
|
"\u001B[31m---------------------------------------------------------------------------\u001B[39m",
|
||||||
|
"\u001B[31mNameError\u001B[39m Traceback (most recent call last)",
|
||||||
|
"\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[2]\u001B[39m\u001B[32m, line 7\u001B[39m\n\u001B[32m 3\u001B[39m \u001B[38;5;66;03m# -----------------------------\u001B[39;00m\n\u001B[32m 4\u001B[39m \u001B[38;5;66;03m# 1) Punktliste aus Unbekannten ableiten (konsistent zur A-Matrix!)\u001B[39;00m\n\u001B[32m 5\u001B[39m \u001B[38;5;66;03m# -----------------------------\u001B[39;00m\n\u001B[32m 6\u001B[39m liste_punktnummern = []\n\u001B[32m----> \u001B[39m\u001B[32m7\u001B[39m \u001B[38;5;28;01mfor\u001B[39;00m sym \u001B[38;5;129;01min\u001B[39;00m \u001B[43mJacobimatrix_symbolisch_liste_unbekannte\u001B[49m:\n\u001B[32m 8\u001B[39m name = \u001B[38;5;28mstr\u001B[39m(sym)\n\u001B[32m 9\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m name.startswith(\u001B[33m\"\u001B[39m\u001B[33mX\u001B[39m\u001B[33m\"\u001B[39m): \u001B[38;5;66;03m# X10001, X10002, ...\u001B[39;00m\n",
|
||||||
|
"\u001B[31mNameError\u001B[39m: name 'Jacobimatrix_symbolisch_liste_unbekannte' is not defined"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"execution_count": 2
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
|||||||
Reference in New Issue
Block a user