Jens Chamberley: Programmiertechnik: Zielwert/Nullstellensuche, Verfahren?

Beitrag lesen

Hallo Forumgemeinde,

als stiller Mitleser stehe ich nun selbst gerade vor einem Problem, wobei ich nun auf Hilfe angewiesen bin. Dabei handelt es sich zwar um kein HTML/PHP/CSS-spezifisches Problem, wohl aber um eines aus der Programmiertechnik. Leider wüsste ich selbst kein Forum, in welchem ich sonst diese Frage (Cross?)-Posten könnte.

Nun. Vereinfacht gesagt, geht es um eine Nullstellen- bzw. Zielwertsuche, die ich mir schreiben muss. Ich habe eine Funktion f(x,a,b,c,d) = y die von verschiedenen Parametern abhängig ist, wobei der einzig veränderliche Parameter x ist. (Klingt etwas komisch, aber ich übergebe beim Funktionsaufruf sämtliche andere Konstanten). Für jede x, bei festgehaltenen a,b,c,d gibt es also ein y.

Nun habe ich einen Wert für y vorgegeben und möchte nun das dazugehörige x bestimmen. Quasi eine Nullstellensuche. Ich habe nun das Problem, dass besagte (eindimensionale) Funktion f(x) zwar stetig, aber nicht analytisch differenzierbar ist: beim Aufruf von f(x) wird y über einige Schleifen etc. ermittelt. Und hier komme ich irgendwie nicht weiter bzw. weiß nicht, wie ich überhaupt anfangen soll ...

Bisher habe ich das Problem in Matlab gelöst, eben über eine Nullstellensuche bzw. der Matlab-Funktion fzero().

Nun bin ich auf der Suche nach einem möglichst schnellen Algorithmus, mit dem ich das x für mein gegebenes y hinreichend genau bestimmen kann (z.B. über ein Toleranzkriterium o.ä.).

Aus dem Studium ist mir noch Newton-Raphson, Sekantenmethode o.ä. ein Begriff, aber leider ist das schon viel zu lange her, als dass ich wüsste, wie man es auf meine nicht differenzierbare Funktion übertragen/anwenden könnte. Gut wäre auch, wenn es ein Verfahren gäbe, welches schnell konvergiert.

Einziges Problem ist noch: Ich muss o.g. in einer internen "Skriptsprache" eines Programmes (Sofistik) umsetzen, das leider sehr wenig Funktionalität bzgl. Programmierung bietet. D.h. es stehen mir nur die allernotwendigsten Dinge zur Verfügung: Bedingungen, Schleifen und einige mathematische Basisfunktionen. "Höchster" möglicher Datentyp sind eindimensionale Arrays.

Hat jemand von Euch evtl. eine Idee oder vielleicht gar ein fertiges Skript, das obige Aufgabe erfüllen könnte und das ich "nur" noch übersetzen müsste?

Vielen lieben Dank im Voraus, Jens C.