Adjustment UDF — Ausgleichungsrechnung für AutoIt

  • 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

    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:

    1. Download: Aktuelles Release von GitHub Releases herunterladen
    2. Entpacken: Dateien in ein Verzeichnis entpacken
    3. OpenBLAS: Die libopenblas_x64.dll wird beim ersten Start automatisch heruntergeladen oder kann manuell ins UDF-Verzeichnis gelegt werden
    4. Einbinden:
    AutoIt
    $__g_hBLAS_DLL = DllOpen("libopenblas_x64.dll")
    #include "Adjustment.au3"


    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

    1. Erste Schritte — Was ist Ausgleichungsrechnung?
    2. Erstes Netz — Trilateration
    3. Gewichtung — Messgenauigkeit berücksichtigen
    4. Gemischte Beobachtungen — Strecken und Richtungen kombinieren
    5. Nebenbedingungen — Restriktionen und feste Parameter
    6. Regression — OLS, orthogonal, Deming, York
    7. Kovarianzmatrix — Korrelierte Messungen
    8. Ergebnisse verstehen — Ausgabe konfigurieren und interpretieren
    9. Robuste Schätzung — Umgang mit Ausreißern


    Download

    >>> Aktuelles Release von GitHub herunterladen <<<

    Quellcode und Issue-Tracker: https://github.com/Sylvan86/autoit-adjustment-udf

  • Nun ist es soweit: 11 Jahre Arbeit an dieser UDF und nun habe ich ein vorzeigbares Ergebnis.

    Es handelt sich hier nicht um etwas beliebiges was nun auch mal in AutoIt umgesetzt wurde.
    Tatsächlich ist mir kein Projekt wie dieses auch in anderen Sprachen bekannt.
    Die Fähigkeit Usern selbst komplexeste Ausgleichungsrechnung dermaßen simpel zugänglich zu machen ist meines Wissens nach einzigartig.

    Ausgleichungsrechnung war eher eine Nische für Geodäten und Mathematiker. Tatsächlich ist es aber ein derart nützliches Werkzeug bei allen Arten von fehlerbehafteten Daten - sprich: Messungen.
    Was bisher einer weiten Verbreitung entgegenstand war die doch komplexe Mathematik dahinter.
    Genau hier setzt die UDF an in dem sie diesen Aspekt dem User abnimmt. Er muss nur noch sein Problem beschreiben - den Rest macht die UDF.

    Ich empfehle unbedingt das Tutorial mal durchzulesen um einen Eindruck zu bekommen um was es geht.
    Gleichzeitig hoffe ich auf intensive Diskussionen zu euren konkreten Problemen die sich mit dieser UDF lösen lassen.

    Bin ich etwas emotional? Definitiv! Diese UDF ist schon so etwas wie mein Lebenswerk.
    Vom Umfang und fachlicher Tiefe geht es weit über alles hinaus was ich bisher gemacht habe.

  • Bin ich etwas emotional? Definitiv! Diese UDF ist schon so etwas wie mein Lebenswerk.

    Der Text davor, die Erläuterung, die tolle Beschreibung zeigen das auch. Beeindruckend AspirinJunkie , wirklich!
    Im Moment kann ich nicht tiefer in das Thema einsteigen, Tutorial lesen usw., da wenig Zeit. Aber ich werde es... super spannend!


    Eine Empfehlung hätte ich aber direkt: wenn dies wirklich so unique ist, wenn es dir wirklich so viel bedeutet und dich so viel Zeit gekostet hat, dann vermarkte es doch ein bisschen mehr (besser). Wirklich: du hast verdient das wenn Leute darauf aufmerksam werden, hier oder im englischen Forum oder vor allem auf GitHub, dass sie nicht einfach deinen Ansatz kopieren und tun was sie wollen. Zudem könntest du auch über ein Sponsoring auf GitHub nachdenken, aber erstmal ein paar mehr Gedanken zur Lizenz.

    Mit anderen Worten: willst du wirklich hier eine WTFPL license Lizenz geltend machen? Tue das nicht Andreas, stelle es zumindest unter eine MPL (Mozilla Public License) oder sogar noch strikter und überlege dir später ob du es wieder offener lizenzieren möchtest. Gerade in Zeiten wo KI sich alles unter den Nagel reißt oder sich jeder Hinz und Kunz alles klaut, ist eine rechtliche Grundlage/Lizenz aus meiner Sicht wichtig und nur gerecht im Kosmus von Open Source.

    Natürlich schreibe ich dir nichts vor. Wenn dein WTFPL Gedanke für dich fein ist, dann tue das. Doch meine Gedanken und Empfehlung dazu hast du nun bekommen (ungefragt, so wie ich es immer tue 😅).

    Viele Grüße
    Sven

  • Früher schrieb ich „Ich liebe dich“, und meine künstlerische Ausdrucksweise wurde kopiert, ohne dass mein geistiges Eigentum gewürdigt wurde.
    Aber ich bezweifle, dass die Leute anfangen werden zu sagen: „Wie argumentum einmal sagte …“ 🤷‍♂️

    Ich würde mir also keine Gedanken darüber machen, eine Lizenz auf den Code anzuwenden 😊

    Übrigens habe ich keine Ahnung, wie Mathematik funktioniert, außer bei „Ja“ oder „Nein“, aber das ist ja nur Boolesche Logik. So, wie du dieses „vielleicht“ formuliert hast … 🤯

    Notiz an mich selbst: Mathe lernen 😅

    Edit: Ich wünschte, ich würde mehr Wörter kennen als nur 🤯🤯🤯🤯🤯

    2 Mal editiert, zuletzt von argumentum (21. März 2026 um 16:31)

  • In der genutzten mathematischen Sprache ist mir das „reindenken“ in die Funktion zu anstrengend. Ich brauche immer praktische Beispiele, die mir die Nutzung veranschaulichen. Anders ausgedrückt: Wie würde man die Anwendbarkeit der Funktion einem Kind erklären?

    Andernfalls vermute ich, dass diese Funktion nur von Leuten verwendet wird, die sowieso schon in dem Bereich tätig sind.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • ja, kurz.

    Aber für ein Thema, das in sich schon kompliziert klingt, ist für mich in englisch nicht der ideale Einstieg.

    Daher habe ich das Tutorial nicht vollständig durchgelesen.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • Ok für die Fraktion, für die das (zu Recht) noch etwas zu abstrakt ist, habe ich mal ein weiteres Beispiel dem Example-Ordner hinzugefügt: InteractiveCircleFit.au3 (und das sogar auf deutsch!...)

    Mit dem Skript klickt der User beliebige Punkte auf der Zeichenfläche und das Skript gleicht über diese Punkte einen bestanpassenden Kreis aus.
    Das Beispiel eignet sich meiner Meinung nach sehr gut da man hiermit schnell viele Dinge der Ausgleichungsrechnung visualisieren kann:

    - was sind Beobachtungen, was sind Parameter?
    - was sind diese "Residuen"?
    - was bedeuten die Standardabweichungen?
    - was genau wird da eigentlich "ausgeglichen"?
    - was bedeutet "robuste Ausgleichung"?

    Einfach mal herumspielen damit (neues Release liegt auf Github).

    Hinweis zur Urheberschaft: Da ich nicht so der visuelle Typ bin und von Grafik in AutoIt null Ahnung habe, habe ich mich für dieses Beispielskript intensiv Claude bedient.
    Ich bin vom Ergebnis sehr angetan und freue mich, dass auch Claude die Verwendung meiner UDF komplett verstanden hat.