Parser für mathematische Ausdrücke
lima-city → Forum → Programmiersprachen → C/C++ und D
anwendung
art
ausdruck
auswerten
auswertung
beispiel
betreiben
code
datum
ergebnis
funktion
http
mathematische string
mathematischen funktionen
mathematischen sinne
nutz
sinus
string
url
verwenden
-
Hallo,
es gibt doch solche Matheparser, mit denen man mathematische String-Ausdrücke auswerten kann. Zum Beispiel um Rechenoperationen mit Zahlen durchzuführen oder Funktionswerte zu errechnen.
Kennt ihr einen guten Parser, den man mit C++ verwenden kann? Wichtig wäre es mir, dass es den Quellcode bzw. die Bibliothek möglichst günstig oder frei erhältlich gibt.
Wünschenswert, aber nicht unbedingt notwendig, wäre es, wenn man auch kommerziell damit arbeiten könnte (also z.B. lizensiert über LGPL).
Cool wären Zusatzfunktionalitäten wie das Umstellen von Gleichungen oder das plotten von Funktionsgraphen... (nicht unbedingt notwendig).
Wichtig wäre mir, dass möglichst nur Vorschläge angebracht werden, mit denen man persönlich Erfahrungen gemacht hat. In dem Falle wäre eine Bewertung der Handhabung, Performance, Funktionalität, Qualität der Dokumentation usw. ganz nett. (möchte jetzt nicht unbedingt selber 100 Parser testen, bevor ich einen guten gefunden habe^^)
Wenn mir jemand mit irgendeinem Google-Suchergebnis ankommt, dann bin ich echt enttäuscht...^^ Das kann ich ja gerade noch selber...
Viele Grüße
tangoal
Edit: Achso, als Beispiel: so was in der Art wie muParserX
Beitrag zuletzt geändert: 27.11.2010 11:56:58 von tangoal -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
tangoal schrieb:
Hallo,
es gibt doch solche Matheparser, mit denen man mathematische String-Ausdrücke auswerten kann. Zum Beispiel um Rechenoperationen mit Zahlen durchzuführen oder Funktionswerte zu errechnen.
Wenn es wirklich nur um die Auswertung von Ausdrücken geht (und nicht um Formelumformerrei), dann wäre es denkbar Lua in C++ einzubetten und die entsprechenden Lua-Ausdrücke (die im Mathematischen Sinne intuitiv sind) direkt auszuwerten.
Siehe Die C API von Lua für technische Hintergründe.
Edit: Achso, als Beispiel: so was in der Art wie muParserX
Da wäre Lua wahrscheinlich schon eine gute Wahl, um sowas umzusetzen. -
Zum plotten von Funktionsgraphen kann man dann eine Anwendung wie bspw. gnuplot verwenden.
Ich habe bspw. die Ergebnisse einer Ladezeitaufzeichnung durch ein Python Script damit visualisiert, indem ich vom Script ein Template mit den Diagrameinstellungen und den Beschriftungen usw. erstellen lasse und dann Gnuplot auf das Logfile des Scripts unter Beachtung des Templates loslasse...sieht dann so aus:
http://fatfox.lima-city.de/pics/url_check_02.png -
bladehunter schrieb: Wenn es wirklich nur um die Auswertung von Ausdrücken geht (und nicht um Formelumformerrei), dann wäre es denkbar Lua in C++ einzubetten und die entsprechenden Lua-Ausdrücke (die im Mathematischen Sinne intuitiv sind) direkt auszuwerten.
Siehe Die C API von Lua für technische Hintergründe.
Ok, Lua kann in C++ eingebettet werden, also von dort aus aufgerufen werden. Über diesen virtuellen Stack können Daten in beide Richtungen ausgetauscht werden. Heißt, ich übergeb einen Mathe-String und evtl. noch einige andere Variablenwerte an ein Lua-Skript und dieses gibt dann das Ergebnis zurück?
Aber was meinst du mit "Lua-Ausdrücke"? Meinst du damit sowas wie einen Ausdruck Math.sin(x)?
fatfox schrieb: Zum plotten von Funktionsgraphen kann man dann eine Anwendung wie bspw. gnuplot verwenden.
Gnuplot kenn ich, habe es bisher nur noch nicht verwendet... könnte schon eine nützliche Sache sein...
Ich habe bspw. die Ergebnisse einer Ladezeitaufzeichnung durch ein Python Script damit visualisiert, indem ich vom Script ein Template mit den Diagrameinstellungen und den Beschriftungen usw. erstellen lasse und dann Gnuplot auf das Logfile des Scripts unter Beachtung des Templates loslasse...sieht dann so aus:
http://fatfox.lima-city.de/pics/url_check_02.png -
tangoal schrieb:
Ok, Lua kann in C++ eingebettet werden, also von dort aus aufgerufen werden. Über diesen virtuellen Stack können Daten in beide Richtungen ausgetauscht werden. Heißt, ich übergeb einen Mathe-String und evtl. noch einige andere Variablenwerte an ein Lua-Skript und dieses gibt dann das Ergebnis zurück?
Genau
Aber was meinst du mit "Lua-Ausdrücke"? Meinst du damit sowas wie einen Ausdruck Math.sin(x)?
Einmal das, und natürlich auch Ausdrücke wie "a+4*7". -
bladehunter schrieb:
Ok, die Grundoperationen sind klar. Aber hm, das heißt immer wenn ich eine Funktion nutze wie den Sinus, muss ich dieses "Math" davor schreiben. Dann müsste ich ja selber schon einen Interpretationsaufwand betreiben, um aus dem String sin(x) den String Math.sin(x) zu machen. Das finde ich nicht so gut...
Aber was meinst du mit "Lua-Ausdrücke"? Meinst du damit sowas wie einen Ausdruck Math.sin(x)?
Einmal das, und natürlich auch Ausdrücke wie "a+4*7".
Trotzdem ist Lua schon eine interessante Sache, muss ich mir mal genauer anschauen. Wenn sogar Teile von Spielen damit programmiert werden... -
Du könntest dir ja mit Flex (http://flex.sourceforge.net/) eine eigene "Sprache" schreiben.
Der sollte dir schon den größten Teil der arbeit abnehmen und mit regulären Ausdrücken solltest du ja arbeiten können. -
tangoal schrieb:
Das heißt immer wenn ich eine Funktion nutze wie den Sinus, muss ich dieses "Math" davor schreiben. Dann müsste ich ja selber schon einen Interpretationsaufwand betreiben, um aus dem String sin(x) den String Math.sin(x) zu machen. Das finde ich nicht so gut...
Dan führst du eben am Anfang folgendes Script aus:
for k,_ in pairs( math ) do _G[ k ] = math[ k ] end
Und dann sind alle mathematischen Funktionen im globalem Namensraum.
-
bladehunter schrieb:
Aha, ok, hätt ich mir eigentlich denken können, dass es so etwas in Lua gibt... danke bladehuntertangoal schrieb:
Das heißt immer wenn ich eine Funktion nutze wie den Sinus, muss ich dieses "Math" davor schreiben. Dann müsste ich ja selber schon einen Interpretationsaufwand betreiben, um aus dem String sin(x) den String Math.sin(x) zu machen. Das finde ich nicht so gut...
Dan führst du eben am Anfang folgendes Script aus:
for k,_ in pairs( math ) do _G[ k ] = math[ k ] end
Und dann sind alle mathematischen Funktionen im globalem Namensraum.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage