![]() |
Re: Kompilierender Matheparser
Ich glaube, das sprengt schon sehr den Rahmen des Parser ;)
Aber: Weil das Ding wirklich verdammt schnell ist, könnte ich versuchen eine Approximationsmethode (:mrgreen:) einzubauen, die die Formel so lange durchrechnet, bis x bis zu einer gewissen Grenze mit der wirklichen Lösung übereinstimmt (manche wissenschaftliche Taschenrechner bieten solche Lösungsmethoden auch an). Wäre das was? ;) read you, Dax |
Re: Kompilierender Matheparser
es gibt doch variablen in dem parser, oder? kann er also nicht
(lg(x))² - lg(4x-4) so auflösen, dass zum schluss der term halt etwas einfacher da steht? |
Re: Kompilierender Matheparser
Ich fürchte nicht :?
Der Parser wandelt die Formel intern in einen Stream aus Funktionsaufrufen um, ohne wirklich zu "wissen", was er da tut. Das eigentliche lösen der Formel wird auch nicht vom Parser übernommen, sondern von den registrierten Funktionen und Operatoren. In der Hinsicht sehe ich im Moment keine wirkliche Möglichkeit, aber wenn du denkst, du könntest es einbauen, nur zu :) read you, Dax |
Re: Kompilierender Matheparser
was, ich denke? um himmels willen nein.....
wenn ich so gut in mathe wär, dass ich das könnte, würd ich nicht danach fragen, ob der parser meine hausuafgaben machen kann.... :stupid: aber das mit dem approximationsverfahren wär natürlcih ne idee - ich kann da aber wirklcih nix machen. kenn mich da weder in theorie noch in praxis damit aus. |
Re: Kompilierender Matheparser
Danke Anakin (;)), ich seh mal zu, das es irgendwann kommt :)
|
Re: Kompilierender Matheparser
Ich lebe noch ;) und komme gleich mit dem nächsten Problem. Diesmal wieder die Formel vom Anfang. Am besten du machst dir mal ein Testprogramm, in dem alle Formeln drin sind, berechnet werden und das Ergebnis geprüft wird. Testet sich vermutlich leichter ;)
Delphi-Quellcode:
Parser:=TExCQParser.Create;
Parser.SolveMode:=smVM; Parser.PreSolve:=true; Parser.RegisterVariable('BaseRange'); Parser.RegisterVariable('Range'); Parser.RegisterVariable('UnitTreff'); Parser.SetVariable('BaseRange',[10]); Parser.SetVariable('UnitTreff',[8]); Parser.SetVariable('Range',[10]); Parser.Parse('UnitTreff*(1/(Range*Range))*(BaseRange*BaseRange)'); ShowMessage(FloatToStr(Parser.Solve.X)); Parser.Free; |
Re: Kompilierender Matheparser
Huhu :)
Ich hab den Serializer für den numeralen Stack einmal komplett neu geschrieben und den Parser mit allen mir zur Verfügung stehenden Parsermörderformel (;)) getestet - erfolgreich :) ThisThread.NewVersion; ;) read you, Dax |
Re: Kompilierender Matheparser
Zitat:
Hehe. Nein natürlich nicht. Schaue es mir mal heute Abend mal an und such nach den Formeln, die du noch nicht kennst ;) |
Re: Kompilierender Matheparser
Der neue Serializer scheint wirklich gut zu funktionieren ;) Falls ich ne Formel finde, die den deine Komponente ins schleudern bringt, melde ich mich ;)
Ach ja, was hälst du denn davon Funktionen wie min und max mit einzubauen? |
Re: Kompilierender Matheparser
Zitat:
Zitat:
Bis dahin kannst du es ja selbst machen :mrgreen: Kuck dir einfach mal die ExCQP_PreDef.pas an, dort wird unter anderem (auch wenns nicht ganz Absicht war ^^) gezeigt, wie man Funktionen und Operatoren registriert :) read you, Dax |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz