Rekursionsformeln automatisiert in Python übersetzen

Gast #5856370
Lesenswert?

Für die Lösung einiger Probleme, haben wir Rekursive Formeln erarbeitet, 
welche i.A. von Parametern isolierte Insellösungen finden. Die Lösungen 
sind deshalb in Inseln, weil die beschreibenden Funktionen lokale Minima 
aufweisen. Obendrein haben sie Knicke.

Ich möchte gerne einen Lösungssatz erzeugen, welcher es ermöglicht, bei 
gegebenen Parametern in eine Tabelle zu schauen und einen Ansatz zu 
haben, wie man die Lösungsparameter einstellen kann, um zu einer 
Endlösung zu kommen.

Dafür muss jede Rechnung mit unterschiedlichen Parametern durchgespielt 
werden. Leider haben einige Formeln sehr viele Parameter und es sind 
auch nicht wenige Formeln. Ich habe begonnen, einiges in MATLAB zu 
entwerfen, aber das dauert irgendwie ewig, bis ich die Rekursion 
einprogrammiert und mit Schleifen zur Ansteuerung mit den Parametern 
umgeben habe.

In einem Forum bekam ich den Tipp, es mit Python zu versuchen. Lässt 
sich das irgendwie automatisieren? Ich hätte gern ein script, dass die 
Formel liest und in ein Pythonprogramm übersetzt, das dann seinerseits 
Unterprogramme/-scripte auf die Platte schreibt, die dann die richtige 
Codierung für die einzelnen Fälle enthalten und die mit MATLBA (oder 
eben Python) ausführbar sind.

Denkt ihr, dass das geht?
Gast #5856732
Lesenswert?

Tobias N. schrieb:
...
>
> In einem Forum bekam ich den Tipp, es mit Python zu versuchen. Lässt
> sich das irgendwie automatisieren? Ich hätte gern ein script, dass die
> Formel liest und in ein Pythonprogramm übersetzt, das dann seinerseits
> Unterprogramme/-scripte auf die Platte schreibt, die dann die richtige
> Codierung für die einzelnen Fälle enthalten und die mit MATLBA (oder
> eben Python) ausführbar sind.
>
> Denkt ihr, dass das geht?

Ja, schau dir mal das 'generator'-Konzept an. Du kannst dir da deine 
kleine Fabrik aus Funclets erzeugen, mit denen du allenfalls zum Ziel 
kommst.
Aber: Schreib die Formel doch gleich in Python hin, die 
Wiederverwertbarkeit ist besser, und du brauchst die Translation nicht 
extern erledigen, das geht alles prima "inline".

Besser, du schreibst dir dann deine passenden Konverter (auch via 
Generatorklassen), die in Matlab/LaTeX oder was auch immer ausgeben.

So als Beispiel könntest du dir MyHDL anschauen. Das ist eine 
Bibliothek, die Python-Ausdrücke in Hardware-Beschreibung übersetzt. 
Darauf aufbauend gibt es einige Module, die z.B. aus einer Formel die 
entsprechende Hardware-Pipeline generieren und die korrekte Funktion 
überprüfen (simulieren), dem ist vom Python-Funktionsumfang her kaum 
Grenzen gesetzt. Nur das Selbst-Parsen per AST ist etwas schwerfällig.

Es gibt auch Leute die sagen: "Numpy/sciplot ist das bessere Matlab". 
Wenn du nicht zwingend auf matlab-Kompatibilität angewiesen bist.
Beitrag #5877442 wurde von einem Moderator gelöscht.
#5877449
Lesenswert?

Auf Anhieb würde ich sagen: Wenn Du Funktionen durch andere Funktionen 
programmieren willst, machst Du etwas falsch. Meistens gibt es einen 
Ansatz, die gewünschte Funktion systematisch zusammenzusetzen.

Wenn Dich das nicht stört: In Matlab kannst Du natürlich auch Quelltext, 
der in Matlab erzeugt wird, ausführen. eval()/feval()
Gast #5879947
Lesenswert?

Walter T. schrieb:
> Auf Anhieb würde ich sagen: Wenn Du Funktionen durch andere Funktionen
> programmieren willst, machst Du etwas falsch.

Ich möchte die Struktur abtrahier analysieren und mit einem Parser oder 
Übersetzer oder Compiler erstellen lassen.

Eine einfache Formel kriegt MATLAB auch ins C übersetzt, aber es erkennt 
nicht, wie man die Rekursion so aufsetzen kann, dass es optimal ist, 
welche Variationen es gibt. Das müsste per Hand ausprobiert und 
simuliert werden. Man kann MATLAB aber diese Randbedingungen nicht 
mitteilen.

Ich kann sie nur verbal fomulieren.

Die Struktur der Formeln ist so ähnlich, dass ich denke, dass es sich 
lohnen müsste, ein Script dafür zu machen. MATLAB reicht aber mit seiner 
Mächtigkeit nicht dafür aus.

Daher kam ich auf Python und sogleich auf die Idee, es komplett in 
Python zu machen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren