diff --git a/Campusnetz.ipynb b/Campusnetz.ipynb index 2dc3c4d..3286e7f 100644 --- a/Campusnetz.ipynb +++ b/Campusnetz.ipynb @@ -563,22 +563,149 @@ "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", "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", - "auswahl = [\n", - " (\"101\",\"X\"), (\"101\",\"Y\"), # Punkt 101 nur Lage\n", - " (\"205\",\"X\"), (\"205\",\"Y\"), (\"205\",\"Z\"), # Punkt 205 voll\n", - " (\"330\",\"Z\") # Punkt 330 nur Höhe\n", - "]\n", + "import Parameterschaetzung\n", + "importlib.reload(Parameterschaetzung)" + ], + "id": "dae9ff512fb17160", + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "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", - "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", - "outputs": [], - "execution_count": null + "outputs": [ + { + "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": {