AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Kompilierender Matheparser
Thema durchsuchen
Ansicht
Themen-Optionen

Kompilierender Matheparser

Ein Thema von Dax · begonnen am 26. Mai 2005 · letzter Beitrag vom 24. Aug 2006
Antwort Antwort
Seite 9 von 14   « Erste     789 1011     Letzte »    
Dax
Huhu DP!

Ich hab (mal wieder ) einen Matheparser geschrieben, aber diesmal einen besonderen. Mit diesem kann man Ausdrücke nicht nur Parsen, sondern auch noch kompilieren (Habs mal duchgetestet, ist schneller als Delphieigene Kompilate)

Ich stells einfach mal so hier rein, zum Doks-schreiben ist es einfach zu.. heiß.. und das Interface erklärt sich eh fast von selbst, und mit den Comments in den Units und den Units selbst kommt man auch gut über die Runden. Hoffe ich

read you,
Dax

[edit] da waren ein paar Fehler, verzeiht [/edit]
nocheinedit: Wieder ein paar Fehler ausgebügelt
Angehängte Dateien
Dateityp: zip excqparser_207.zip (16,1 KB, 524x aufgerufen)
Dateityp: zip realdemo_442.zip (11,1 KB, 399x aufgerufen)
Dateityp: zip ecqpdemo-exe_649.zip (244,6 KB, 484x aufgerufen)
 
Dax
 
#81
  Alt 30. Mai 2005, 17:07
Ich glaube, das sprengt schon sehr den Rahmen des Parser

Aber: Weil das Ding wirklich verdammt schnell ist, könnte ich versuchen eine Approximationsmethode () 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
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

 
Delphi 2006 Professional
 
#82
  Alt 30. Mai 2005, 17:54
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?
Lukas Erlacher
  Mit Zitat antworten Zitat
Dax
 
#83
  Alt 30. Mai 2005, 17:59
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
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

 
Delphi 2006 Professional
 
#84
  Alt 30. Mai 2005, 18:28
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....

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.
Lukas Erlacher
  Mit Zitat antworten Zitat
Dax
 
#85
  Alt 30. Mai 2005, 18:31
Danke Anakin (), ich seh mal zu, das es irgendwann kommt
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

 
Delphi 5 Standard
 
#86
  Alt 30. Mai 2005, 19:53
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;
Christian Reich
  Mit Zitat antworten Zitat
Dax
 
#87
  Alt 31. Mai 2005, 13:56
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
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

 
Delphi 5 Standard
 
#88
  Alt 31. Mai 2005, 14:31
Zitat von Dax:
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
Hehe. Willst jetzt damit sagen, dass du meine Formeln fest einprogrammiert hast?
Hehe. Nein natürlich nicht. Schaue es mir mal heute Abend mal an und such nach den Formeln, die du noch nicht kennst
Christian Reich
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

 
Delphi 5 Standard
 
#89
  Alt 31. Mai 2005, 18:21
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?
Christian Reich
  Mit Zitat antworten Zitat
Dax
 
#90
  Alt 31. Mai 2005, 18:24
Zitat von jim_raynor:
Der neue Serializer scheint wirklich gut zu funktionieren Falls ich ne Formel finde, die den deine Komponente ins schleudern bringt, melde ich mich
Macnhmal sieht man eben den Wald vor lauter Bäumen nicht

Zitat von jim_raynor:
Ach ja, was hälst du denn davon Funktionen wie min und max mit einzubauen?
Werde ich im nächsten Release machen

Bis dahin kannst du es ja selbst machen 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 9 von 14   « Erste     789 1011     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz