Iteration

This commit is contained in:
2025-12-30 11:14:29 +01:00
parent 00ec7ebf35
commit 59b7f33cf1

View File

@@ -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": {