Adjustment UDF — Ausgleichungsrechnung für AutoIt
Die Ausgleichungsrechnung nach der Methode der kleinsten Quadrate bestimmt aus überbestimmten, widersprüchlichen Beobachtungen die optimalen Werte — und sagt dir dabei genau, wie zuverlässig die Ergebnisse sind. Sie ist die mathematische Grundlage hinter Positionierung, Navigation, Kalibrierung, Fitting, Regression, Signalverarbeitung und praktisch jedem Bereich, in dem Messungen auf die Realität treffen.
Diese UDF bringt diese Fähigkeit mit einer radikal einfachen Schnittstelle nach AutoIt: Beschreibe dein Modell als String-Formeln, füge Messungen mit ihren Unsicherheiten hinzu und rufe _adj_solve() auf. Keine Matrizenrechnung, keine numerischen Kopfstände, keine externen Tools — nur dein Problem und deine Daten.
Unter der Haube steckt eine vollständige Ausgleichungsengine auf Basis von OpenBLAS mit nichtlinearen iterativen Lösern, Varianzkomponentenschätzung, robusten Schätzern und vollständiger statistischer Diagnostik — die Art von Werkzeug, die normalerweise MATLAB oder spezialisierter wissenschaftlicher Software vorbehalten ist.
Download: Aktuelles Release auf GitHub
GitHub: https://github.com/Sylvan86/autoit-adjustment-udf
Schnellstart
#include "Adjustment.au3"
; 5 Messungen einer Strecke — finde den besten Schätzwert
Local $mSystem = _adj_createSystem()
_adj_addObsFunction($mSystem, "M1", "X", 10.02, 1.0)
_adj_addObsFunction($mSystem, "M2", "X", 9.98, 1.0)
_adj_addObsFunction($mSystem, "M3", "X", 10.01, 1.0)
_adj_addObsFunction($mSystem, "M4", "X", 10.03, 1.0)
_adj_addObsFunction($mSystem, "M5", "X", 9.99, 1.0)
_adj_setInitialValue($mSystem, "X", 10.0)
_adj_solve($mSystem)
ConsoleWrite(_adj_displayResults($mSystem))
; Ergebnis: X = 10.006 ± 0.009
Alles anzeigen
Das ist nur der einfachste Fall — ein Mittelwert. Die eigentliche Stärke liegt im gleichzeitigen Ausgleichen verschiedener Messungen mit unterschiedlichen Formeln. Zum Beispiel: Die Position eines Punktes aus Strecken- und Richtungsmessungen bestimmen, oder eine Kurve an Daten anpassen und dabei Nebenbedingungen erzwingen.
Funktionsübersicht
Für Experten — der volle Umfang der UDF:
Modelltypen
- OLS / WLS / GLS — Überbestimmtes System (gewichtet, generalisiert mit voller Kovarianzmatrix)
- LSE / WLSE / GLSE — Mit Parameterrestriktionen
- CLS / WCLS / GCLS — Bedingungsausgleichung
- GLM / WGLM / GGLM — Gauß-Helmert-Modell (allgemeinste Form)
Die Modelltyperkennung erfolgt automatisch anhand der Eingabestruktur.
Löser und Iterationsverfahren
- Iterationsverfahren: Gauß-Newton, Levenberg-Marquardt (Nielsen-Dämpfung)
- Linearer Löser: QR-Zerlegung (DGELSY), Singulärwertzerlegung (DGELSD)
- Jacobi-Matrizen: Numerisch (Zentral, Vorwärts, Rückwärts, Ridder, Higham) oder analytisch
- Skalierung: Jacobi-Äquilibrierung (automatische Spaltenbalancierung)
Statistik und Diagnostik
- Grundstatistiken: A-posteriori-Varianzfaktor s0², Freiheitsgrade, vTPv
- Genauigkeit: Kofaktormatrix Qxx, Standardabweichungen (Parameter, Beobachtungen)
- Kontrollierbarkeit: Redundanzanteile r_i, Kofaktormatrizen Qvv und Qy
- Modellvalidierung: Globaltest (Chi²)
- Ausreißerdiagnostik: Baarda-Test (w-Statistik), Pope-Test (tau-Statistik), p-Werte, MDB
Varianzkomponentenschätzung (VKS)
Helmert-Methode: Separate Varianzfaktoren für verschiedene Beobachtungsgruppen (z.B. Strecken vs. Richtungen). Iterativ bis zur Konvergenz.
Robuste Schätzung (IRLS)
- L1 (Median) — Bruchpunkt: 50%
- Huber (c = 1.345) — Bruchpunkt: ~5%
- Hampel (a = 1.7, b = 3.4, c = 8.5) — Bruchpunkt: ~25%
- Biweight (Tukey) (c = 4.685) — Bruchpunkt: 50%
- BIBER (Schweppe) (c = 3.5) — Bruchpunkt: hebelwertabhängig
- Modified-M (Koch) (c = 1.5) — Bruchpunkt: hebelwertabhängig
Skalenparameter: MAD, s0, a priori, benutzerdefiniert.
Weitere Features
- Symbolische Formeleingabe als Strings — Parameter und Beobachtungen werden automatisch erkannt
- Compute-on-Demand — Statistiken werden erst bei Abruf berechnet
- Konfigurierbare Ergebnisanzeige mit wählbaren Spalten und Abschnitten
- Ausreißererkennung und -entfernung (_adj_getOutliers, _adj_removeObs)
Installation
Voraussetzungen:
- AutoIt v3.3.16+ (x64)
- OpenBLAS DLL (libopenblas_x64.dll)
Einrichtung:
- Download: Aktuelles Release von GitHub Releases herunterladen
- Entpacken: Dateien in ein Verzeichnis entpacken
- OpenBLAS: Die libopenblas_x64.dll wird beim ersten Start automatisch heruntergeladen oder kann manuell ins UDF-Verzeichnis gelegt werden
- Einbinden:
Dokumentation
Die vollständige Dokumentation ist auf GitHub verfügbar:
- Tutorial — Schritt-für-Schritt-Anleitung, 9 Kapitel (Einsteiger)
- Funktionsübersicht — Alle Fähigkeiten auf einen Blick (Alle)
- API-Referenz — Alle 17 öffentlichen Funktionen (Entwickler)
- Konfiguration — Löser-, Anzeige- und Robust-Konfiguration (Fortgeschrittene)
- Ergebnisstruktur — Alle Schlüssel der Ergebnis-Map (Fortgeschrittene)
- Modelltypen — OLS bis GGLM mit Mathematik (Experten)
- Löser — GN, LM, QR, SVD im Detail (Experten)
- Statistik — s0, Qxx, Globaltest, Baarda/Pope (Experten)
- Robuste Schätzung — IRLS, 6 Schätzer, Gewichtsfunktionen (Experten)
- Fehlercodes — Alle $ADJ_ERR_* mit Lösungen (Alle)
Tutorial-Kapitel
- Erste Schritte — Was ist Ausgleichungsrechnung?
- Erstes Netz — Trilateration
- Gewichtung — Messgenauigkeit berücksichtigen
- Gemischte Beobachtungen — Strecken und Richtungen kombinieren
- Nebenbedingungen — Restriktionen und feste Parameter
- Regression — OLS, orthogonal, Deming, York
- Kovarianzmatrix — Korrelierte Messungen
- Ergebnisse verstehen — Ausgabe konfigurieren und interpretieren
- Robuste Schätzung — Umgang mit Ausreißern
Download
>>> Aktuelles Release von GitHub herunterladen <<<
Quellcode und Issue-Tracker: https://github.com/Sylvan86/autoit-adjustment-udf