Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Kompilierender Matheparser (https://www.delphipraxis.net/46536-kompilierender-matheparser.html)

Dust Signs 27. Mai 2005 16:26

Re: Kompilierender Matheparser
 
Hier mal die Areafunktionen (Hauptwerte):

Code:
Arsinh z = Ln( z + sqrt(z^2 + 1)
Arcosh z = Ln( z + sqrt(z^2 - 1)
Artanh z = Ln[sqrt((1 +z)/(1-z))]
Wobei alle vorkommenden Funktionen komplex sind, d.h. zB beim Artanh, dass Ln und Sqrt ein komplexes Ergebnis liefern müssen. Wegen den inversen Kreisfunktionen such ich noch. Hier noch die Hyperbelfunktionen, falls du sie noch nicht hast:

Code:
sinh z = sinh(x)*cos(y) + j*cosh(x)*sin(y)
cosh z = cosh(x)*cos(y) + j*sinh(x)*sin(y)
tanh z = [sinh(2x) + j*sinh(2y)]/[cosh(2x) + cos(2y)]
wobei z (komplex) = x+ jy. Hier sind die normalen Funktionen gemeint - also die normalen Hyperbelfunktionen (z.B. cos(2y) ist einfach der Cosinus vom Imaginärteil * 2)

Dust Signs

//EDIT:

Zitat:

Zum Thema 0^0: Es ist definiert: x^0 = 1 für alle x element R. Ich wüsste nicht, dass die 0 da einen Sonderfall darstellt.
Ist eine sogenannte unbestimmte Form und lässt sich durch Limesrechnung beweisen ;)

//EDIT 2:

Hab die Arcusfunktionen doch noch gefunden - der Arcustangens fehlt noch, aber den treib ich noch irgendwo auf ;)

Code:
Arcsin z = -j * Ln(j*z + Sqrt(1 - z^2))
Arccos z = -j * Ln(z + Sqrt(z^2 - 1))
wobei hier Ln und Sqrt auch wieder komplex arbeiten müssen

dizzy 27. Mai 2005 16:35

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dust Signs
Zitat:

Zum Thema 0^0: Es ist definiert: x^0 = 1 für alle x element R. Ich wüsste nicht, dass die 0 da einen Sonderfall darstellt.
Ist eine sogenannte unbestimmte Form und lässt sich durch Limesrechnung beweisen ;)

Der Beweis würde mich interessieren!


Zitat:

Zitat von Dust Signs
Hab die Arcusfunktionen doch noch gefunden - der Arcustangens fehlt noch, aber den treib ich noch irgendwo auf ;)
Code:
Arcsin z = -j * Ln(j*z + Sqrt(1 - z^2))
Arccos z = -j * Ln(z + Sqrt(z^2 - 1))
wobei hier Ln und Sqrt auch wieder komplex arbeiten müssen

Komplexe Ln und Sqrt sind drin. Danke dir ganz kräftig für die Formeln! Ich nehme die Anwendbarkeit auf zerlegte Quaternionen einfach mal an - es geht mit eigentlich jeder anderen Funktion/Operator ja auch ;).

OT: Woher kannst du das mit 18 schon alles? Ich hatte damals keinen Lehrer an unserer Schule der mir grad mal das Wesen der komplexen Zahlen erklären konnte. Ich musse leider komplett autodidaktisch ran :?.


\\EDIT: Deine Signatur is mal geil ^^

\\EDIT2: Die komplexen hyperbolischen Funktionen sind drin - jedoch nicht die inversen dazu.

Dax 27. Mai 2005 16:42

Re: Kompilierender Matheparser
 
So, neue Echsen und Soßen gegen jim's AV-Problem sind oben, aber gegen DS' tan hab ich leider nich nix tun können :?

Ich geh jetzt rasen mähen *bäh* Dann implementier ich nach möglichkeit die Arcusfunktion usw und mach die CaseSensitivity weg

Dust Signs 27. Mai 2005 16:44

Re: Kompilierender Matheparser
 
Zitat:

Zitat von dizzy
Zitat:

Zitat von Dust Signs
Zitat:

Zum Thema 0^0: Es ist definiert: x^0 = 1 für alle x element R. Ich wüsste nicht, dass die 0 da einen Sonderfall darstellt.
Ist eine sogenannte unbestimmte Form und lässt sich durch Limesrechnung beweisen ;)

Der Beweis würde mich interessieren!

Müsst ich suchen, hab ich nicht da atm.

Zitat:

OT: Woher kannst du das mit 18 schon alles? Ich hatte damals keinen Lehrer an unserer Schule der mir grad mal das Wesen der komplexen Zahlen erklären konnte. Ich musse leider komplett autodidaktisch ran :?.
In der Schule (Gymnasium) haben wir nie komplexe Zahlen gemacht, aber jetzt in der FH machen wir das schon fast ein ganzes Semester lang (bin jetzt im 2. Semester)

Zitat:

\\EDIT: Deine Signatur is mal geil ^^
Thx :mrgreen:

Zitat:

\\EDIT2: Die komplexen hyperbolischen Funktionen sind drin - jedoch nicht die inversen dazu.
Die hab ich doch gepostet, das sind die Areafunktionen

Dust Signs

//EDIT: @Dizzy: Zu OT (18 und komplexe Zahlen): können uns gerne über Messenger (dustsigns@hotmail.com) weiter darüber unterhalten, damit wir das Topic hier nicht zuspammen. Und zwecks Eigennutzen :mrgreen: <werbung> http://www.dustsigns.de.vu/cmpxcalc.html </werbung>

jim_raynor 27. Mai 2005 17:05

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dax
So, neue Echsen und Soßen gegen jim's AV-Problem sind oben, aber gegen DS' tan hab ich leider nich nix tun können :?

Ich geh jetzt rasen mähen *bäh* Dann implementier ich nach möglichkeit die Arcusfunktion usw und mach die CaseSensitivity weg

Der Fehler ist behoben, nur hab ich gemerkt, dass das Ergbnis völlig falsch war. Recherchen haben ergeben, dass meine Formel falsch war und nun korrigiert habe. Leider bekomme ich mit der neuen Formel (A*B/100*(1/(C*C))*(D*D)) beim zweiten Berechne (dann ist es egal welche Formel) wieder eine AV :(

Sieht so aus, als ob er bei komplexeren Formeln Probleme hätte :( Hoffentlich bekommst du das in den Griff ;) Aber auf jeden Fall bisher gute Arbeit, vor allem weil dies der Anfang für einen Compiler größerer Art ist ;)

Dust Signs 27. Mai 2005 17:06

Re: Kompilierender Matheparser
 
Hier ein Beispiel für 0^0, wo nicht 1 herauskommt. Ist zwar kein Beweis, aber immerhin ein Beispiel dafür, dass 0^0 nicht immer 1 ist:

Code:
f(x) = x^(r / ln(x))
für r Element R (rationale Zahlen)

Code:
lim x->0+ f(x)
Anmerkung: gegen 0+ deshalb, weil der Ln einer negativen Zahl ja komplex wäre

Hier haben wir eine unbestimmte Form 0^0. Lösen kann man das Ganze durch Logarithmieren:

Code:
Ln f(x) = r / ln(x) * ln(x)
wobei sich hier das ln(x) kürzt

Also im Limes:

Code:
lim x->0+ r
und da r unabhängig von x ist, kommt hier r heraus. Da wir jetzt aber die logarithmierte Funktion haben, müssen wir diese wieder e^ nehmen, also:

Code:
e^r
, wodurch sich der Limes ergibt:

Code:
lim x->0+ f(x) = e^r
, was man mit jedem besseren Taschenrechner (z.B. TI-92) nachprüfen kann

Dust Signs

dizzy 27. Mai 2005 17:09

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dust Signs
Müsst ich suchen, hab ich nicht da atm.

So dringend ist's auch nicht. Wenn es dir mal in die Hände fällt... :)
\\Edit: Dein Beispiel ist schon sehr einleuchtend! Danke dir. Wieder was gelernt :)

Zitat:

Zitat von Dust Signs
In der Schule (Gymnasium) haben wir nie komplexe Zahlen gemacht, aber jetzt in der FH machen wir das schon fast ein ganzes Semester lang (bin jetzt im 2. Semester)

Letztes OT, dann bin ich zu frieden: Okay, ich war bis 19 an der Schule (-> Vollabi und 13 Jahre lang). Dann ist das geklärt.

Zitat:

Zitat von Dust Signs
Die hab ich doch gepostet, das sind die Areafunktionen

:wall:

Zitat:

Zitat von Dust Signs
//EDIT: @Dizzy: Zu OT (18 und komplexe Zahlen): können uns gerne über Messenger (dustsigns@hotmail.com) weiter darüber unterhalten, damit wir das Topic hier nicht zuspammen. Und zwecks Eigennutzen :mrgreen: <werbung> http://www.dustsigns.de.vu/cmpxcalc.html </werbung>

Programm ist nett, Thema geklärt, und nen Messenger hab ich (noch) keinen :mrgreen:. (Wird aber immer nötiger...)

Dax 27. Mai 2005 17:23

Re: Kompilierender Matheparser
 
@kirk_raynor: Ich hab als Übeltäter den PreSolver entlarvt, wird der ausgeschaltet funktioniert deine Formel ;-) Aber besser als ausschalten ist korrigieren, und das mach ich jetzt mal.

Dax 27. Mai 2005 17:50

Re: Kompilierender Matheparser
 
So... jims Parsermörderformel funktioniert wieder, Echse und Soßen sind auf dem aktuellen (funktionierenden) Stand :)

Dax 27. Mai 2005 22:02

Re: Kompilierender Matheparser
 
Und die Bugfixes nehmen kein Ende ;) Wieder eine von jims Parsermörderformeln "ausgebügelt" :)

Dax 28. Mai 2005 14:51

Re: Kompilierender Matheparser
 
Neue Version - neues Glück.

Jetzt sind die Arcusfunktionen sind Real und Komplex auch eingebaut, danke Dusty :)

Presolver sollte perfekt (:?) funktionieren, CaseSensitivity ist weg, in der Demo (jetzt im ersten Post) kann zwischen Komplex- und Real-Zahlenraum gewählt werden.. Und Operatoren entfernen funktioniert :oops: Da war so ein dummer kleiner Copy&Waste-Fehler drin.

read you,
Dax (auf Feedback hoffend ;))

Dust Signs 28. Mai 2005 15:03

Re: Kompilierender Matheparser
 
Gut ;)

1.) Bug in der Liste der Variablen: je öfter ich sie aufrufe, desto länger wird sie. Ich glaube, da hast du wo vergessen zu löschen ;)

2.) So, hier mal gleich ein paar Unterpunkte im Komplexen :mrgreen:

a) sin(pi/2) funktioniert nicht, arctan(1) auch nicht - und etliche andere ebenfalls

b) Wie gibt man die imaginäre Einheit an? Weder 1+i, noch 1+j funktioniert

c) Ohne imaginäre Einheit kann ich leider nicht weiterrechnen ^^

3.) arctan(1) funktioniert auch im reellen Zahlenraum nicht - auch nicht mit einem anderen Argument (z.B. 0,5)

4.) (e^2 - e^(-2))/2 ergibt nicht das selbe wie sinh(2) - da stimmt was nicht

Bring mal diese Bugs raus, dann test ich weiter ;)

Dust Signs

Dax 28. Mai 2005 15:38

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dust Signs
1.) Bug in der Liste der Variablen: je öfter ich sie aufrufe, desto länger wird sie. Ich glaube, da hast du wo vergessen zu löschen ;)

Danke, wird verbessert :)

Zitat:

Zitat von Dust Signs
2.) So, hier mal gleich ein paar Unterpunkte im Komplexen :mrgreen:

a) sin(pi/2) funktioniert nicht, arctan(1) auch nicht - und etliche andere ebenfalls

Ich hatte kein ArcTan fürs Komplexe hab einfach mal angenommen, das komplexe ArcTan = ArcSin/ArcCos, okay? ;)

Zitat:

Zitat von Dust Signs
b) Wie gibt man die imaginäre Einheit an? Weder 1+i, noch 1+j funktioniert

Imaginär 1: 1i. Imaginär 5: 5i. Imaginär x: (x)i :?

Zitat:

Zitat von Dust Signs
3.) arctan(1) funktioniert auch im reellen Zahlenraum nicht - auch nicht mit einem anderen Argument (z.B. 0,5)

Verbessert :)

Zitat:

Zitat von Dust Signs
4.) (e^2 - e^(-2))/2 ergibt nicht das selbe wie sinh(2) - da stimmt was nicht

Mistpresolver :?

Wenn ich das mit dem e raus hab, gibts ne neue Version..falls niemand schon vorher eine wollen sollte ^^

Dust Signs 28. Mai 2005 15:50

Re: Kompilierender Matheparser
 
@2a: nein. Außerdem sollte sin(pi/2) auch im Komplexen etwas anderes liefern als "Invalid expression"

@2b: funktioniert nicht

Dust Signs

Dax 28. Mai 2005 15:57

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dust Signs
@2a: nein. Außerdem sollte sin(pi/2) auch im Komplexen etwas anderes liefern als "Invalid expression"

Liefert bei mir 1, aber zeig mal bitte die ArcTan-Komplex-Formel, die hab ich glaube ich nicht :)

Zitat:

Zitat von Dust Signs
@2b: funktioniert nicht

"Funktioiert nicht" ist keine Fehlerbeschreibung :?

read you,
Dax

DGL-luke 28. Mai 2005 17:56

Re: Kompilierender Matheparser
 
wie wärs mit :

@2b: die von dir vorgeschlagene syntax wird nicht angenommen.

scheint mir relativ klar zu sein, dax. :zwinker:

Dax 28. Mai 2005 17:58

Re: Kompilierender Matheparser
 
Das ist ja das Problem ;) Wenn ich in meinen Parser.. was weiß ich, zum Beispiel "sin(pi/2)i" eingebe, klappt das, genauso bei "1i+2i", "1+2i", "(pi)i" usw...

Dust Signs 28. Mai 2005 18:13

Re: Kompilierender Matheparser
 
Ich war eigentlich der Meinung, das folgendes auch funktionieren sollte (wäre logischer):

i
2*i
pi*i

sin(pi/2) nimmt dein Parser nicht ("Invalid expression").

Dust Signs

Dax 28. Mai 2005 18:16

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dust Signs
Ich war eigentlich der Meinung, das folgendes auch funktionieren sollte (wäre logischer):

i
2*i
pi*i

Ja, das is etwas verzwickt, weil i ja als Operator eingetragen wird.. einen anderen gescheiten Weg hab ich leider nicht gefunden :(

Zitat:

Zitat von Dust Signs
sin(pi/2) nimmt dein Parser nicht ("Invalid expression").

:shock: Das wäre mir ganz neu. Bei mir kommt dabei immer "1 + 0i" heraus, egal ob Komplexer Modus oder Reller...

btw: Hast du die komplexe Arctan-Formel? Das wäre genial :)

read you,
Dax

Dust Signs 28. Mai 2005 18:22

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dax
Zitat:

Zitat von Dust Signs
Ich war eigentlich der Meinung, das folgendes auch funktionieren sollte (wäre logischer):

i
2*i
pi*i

Ja, das is etwas verzwickt, weil i ja als Operator eingetragen wird.. einen anderen gescheiten Weg hab ich leider nicht gefunden :(

Solltest du aber, das ist ansonsten viel zu umständlich; nimm's doch einfach als multiplikative konstante... (sqrt(-1))

Zitat:

Zitat:

Zitat von Dust Signs
sin(pi/2) nimmt dein Parser nicht ("Invalid expression").

:shock: Das wäre mir ganz neu. Bei mir kommt dabei immer "1 + 0i" heraus, egal ob Komplexer Modus oder Reller...

btw: Hast du die komplexe Arctan-Formel? Das wäre genial :)
Nein, leider noch nicht; könnt aber versuchen, sie herzuleiten.

Dust Signs

Dax 28. Mai 2005 18:25

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dust Signs
Zitat:

Zitat von Dax
Zitat:

Zitat von Dust Signs
Ich war eigentlich der Meinung, das folgendes auch funktionieren sollte (wäre logischer):

i
2*i
pi*i

Ja, das is etwas verzwickt, weil i ja als Operator eingetragen wird.. einen anderen gescheiten Weg hab ich leider nicht gefunden :(

Solltest du aber, das ist ansonsten viel zu umständlich; nimm's doch einfach als multiplikative konstante... (sqrt(-1))

Oh, ich seh grade.. ich hatte da nen kleinen Denkfehler ^^ Ich machs mal im nächsten "Release", dann sehen wir, obs besser ist ;)

Zitat:

Zitat von Dust Signs
Zitat:

Zitat:

Zitat von Dust Signs
sin(pi/2) nimmt dein Parser nicht ("Invalid expression").

:shock: Das wäre mir ganz neu. Bei mir kommt dabei immer "1 + 0i" heraus, egal ob Komplexer Modus oder Reller...

btw: Hast du die komplexe Arctan-Formel? Das wäre genial :)
Nein, leider noch nicht; könnt aber versuchen, sie herzuleiten.

Dust Signs

Uhhh das ist genial :love: Deswegen funktioniert der komplexe ArcTan auch nicht ;)

Edit: Neue EXE und Soßen sind oben, i ist jetzt eine Konstante.

read you,
Dax

jim_raynor 29. Mai 2005 11:28

Re: Kompilierender Matheparser
 
Hallo,

ich mal wieder ;) Es gibt Leute die benutzen noch Delphi 5. Leider ist dein Code nicht ganz Delphi 5 Kompatibel aus folgenden Gründen:

1. in ECQ_Def:
Delphi-Quellcode:
TParserMode = (pmReal = 1, pmComplex = 2, pmQuad = 4);
wird in Delphi 5 nicht unterstützt. Hab es in
Delphi-Quellcode:
TParserMode = (pmReal, pmComplex, pmQuad);
Ist es wirklich notwendig, dem pmQuad eine 4 zuzuweisen?

2. gleiches Problem bei TRegister in ECQ_Assembler. Habs in
Delphi-Quellcode:
TRegister = (rEAX, rECX, rEDX, rEBX);
geändert, damit die Werte noch stimmen

3. Die Funktion Sign gibt es in Delphi 5 leider nicht. Habe Deshalb in EXCQP_Predefs die Funktion Sign manuell definiert:

Delphi-Quellcode:
function Sign(Value: double) : Integer;
begin
  if Value=0 then
    result:=0
  else if Value<0 then
    result:=-1
  else if Value>0 then
    result:=1;
end;
4. Die Funktion Coth gibt es ebenfalls nicht :( Da ich diese Funktion vermutlich erstmal nicht brauche hab ich es auskommentiert. Vielleicht findet ja jemand Ersatz ...

Auf jeden Fall, kann ich es jetzt mit Delphi 5 kompilieren ;) Wäre vielleicht schön, wenn du die Änderungen in deine Sourcen mit einbauen würdest. Dann geht es auch unter Delphi 5, das bestimmt noch einige benutzen.

gruß vom nervendem jim ;)

Dax 29. Mai 2005 11:41

Re: Kompilierender Matheparser
 
hi jim, du nervst doch nicht ;)

Ich seh zu, das ichs ändere :)

read you,
Dax

jim_raynor 29. Mai 2005 18:17

Re: Kompilierender Matheparser
 
Nächstes Problem: Wenn ich den Parser mit Free freigeben bekomme ich wieder unschöne AV. Ich weiss nicht ob es eine Rolle spielt aber hier mal der Code:

Delphi-Quellcode:
Parser:=TExCQParser.Create;
Parser.SolveMode:=smRM;
Parser.PreSolve:=false;

RegisterVarsAndConst(Parser);

Parser.Parse('UnitTreff*(1/(Range*Range))*(BaseRange*BaseRange)');

Parser.Free;
In RegisterVarsAndConst werden die entsprechenden Variablen mit
Delphi-Quellcode:
Parser.RegisterVariable(xxx)
registriert. Hoffe du kannst das Problem lösen bzw. erstmal nachstellen ;)

Dax 29. Mai 2005 18:31

Re: Kompilierender Matheparser
 
Danke jim, is korrigiert, neue Versionen oben :)

PS: Wenn du die Variablen und Konstanten eh am Anfang registrierst und nie löschst, leite doch vom ECQP ab und tu' alles in den Constructor ;) (Tip von Robert_G)

read you,
Dax

jim_raynor 29. Mai 2005 19:19

Re: Kompilierender Matheparser
 
MMhh. Irgendwie ist der Wurm drin.

Habe jetzt zum Testen (wirklich nur zum Testen) folgendes:

Delphi-Quellcode:
  Parser:=TExCQParser.Create;
  Parser.SolveMode:=smVM;
  Parser.PreSolve:=true;

  Parser.RegisterVariable('Range');

  Parser.SetVariable('Range',[10]);

  Parser.Parse('(1/(Range*Range))');

  ShowMessage(FloatToStr(Parser.Solve.X));
  Parser.Free;
Leider stürzt er bei dem Solve wieder zuverlässig ab. Da ist es egal welcher SolveMode aktiv ist, und ob PreSolve an oder aus ist :(

P.S: Danke für den Hinweis mit dem Ableiten, allerdings hatte ich den Code etwas vereinfacht. In wirklichkeit lese ich die Formeln und die benötigten Variablen aus einer INI-Datei ;)

Dax 29. Mai 2005 19:24

Re: Kompilierender Matheparser
 
Hast du ne alte Version? :? Ich habs grad ausprobiert, es funktioniert ohne Probleme...

read you,
Dax

Nicodius 29. Mai 2005 19:30

Re: Kompilierender Matheparser
 
sry schnell ne frage(ich hab jetzt nicht alels durchgelesen)

was sind imaginäre Werte? ... also nur vorgestellte werte - was hat dass für nen sinn(weil auch immer kommt ()i

jim_raynor 29. Mai 2005 19:35

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dax
Hast du ne alte Version? :? Ich habs grad ausprobiert, es funktioniert ohne Probleme...

Diesmal nicht :(

Ich hab so das Gefühl, dass es an der Delphi Version hakt. Habs jetzt mal mit Delphi 5 und 7 getestet. Beides das gleich Problem :( Hab leider kein Delphi 2005 hier zum Testen.

Dax 29. Mai 2005 19:36

Re: Kompilierender Matheparser
 
Bei meinem Delphi 6 und 2005 funktionierts :?

Edit: Mein Demoprogramm verarscht mich. Mit der Demo gehts, mit dem Code nicht.. Mal sehn was da schief gelaufen ist.

Edit2: Fehler beseitigt, neue Version :mrgreen:

Dust Signs 29. Mai 2005 20:10

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Nicodius
sry schnell ne frage(ich hab jetzt nicht alels durchgelesen)

was sind imaginäre Werte? ... also nur vorgestellte werte - was hat dass für nen sinn(weil auch immer kommt ()i

Die Imaginäre Einheit ist definiert als
Code:
i^2 = -1
; also unter uns gesagt ist i die Wurzel aus minus 1; ist nicht korrekt so, aber so lässt sich's leicht verstehen. Wenn du mehr dazu wissen willst, such einfach mal bei Google:

[google]Gauss'sche Zahlenebene[/google]
[google]Imaginäre Einheit[/google]
[google]Resonanz+Schwingkreis+Formel[/google]

Dust Signs

jim_raynor 29. Mai 2005 20:24

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dax
Edit2: Fehler beseitigt, neue Version :mrgreen:

So langsam wirds ;) Merkwürdigerweise gibts massive Probleme, wenn PreSolve false ist. Da knallt selbst

Delphi-Quellcode:
  Parser:=TExCQParser.Create;
  Parser.SolveMode:=smVM;
  Parser.PreSolve:=false;

  Parser.RegisterVariable('Range');

  Parser.SetVariable('Range',[10]);

  Parser.Parse('1*2');

  ShowMessage(FloatToStr(Parser.Solve.X));
  Parser.Free;
Schreibt man es statt dessen in Klammern: (1*2) dann klappt es.

Hier scheint es also ein generelles Problem zu geben, wenn PreSolve false ist. Da ich den Variablen erst später einen Wert zuweise, aber die Formeln schon bei Programmstart kompiliere, bin ich auf PreSolve false angewiesen :(

dizzy 29. Mai 2005 21:19

Re: Kompilierender Matheparser
 
Zitat:

Zitat von jim_raynor
Da ich den Variablen erst später einen Wert zuweise, aber die Formeln schon bei Programmstart kompiliere, bin ich auf PreSolve false angewiesen :(

Der Sinn eines Presolver ist es, konstante Teile eines Ausdrucks vorauszuberechnen und als einen einzigen konstanten Wert zu verbraten. Variablen bleiben variabel - daher kann man imho auch bei der Registrierung angeben ob eine Variable als Konstante (der Presolver verwurstets mit), oder als echte Variable angesehen werden soll, die der Presolver bestehen lässt.
Ich denke mal Dax hat das so eingebaut :)

\\edit: Er macht also im Grunde aus "(x*2)+(sin(pi/2)*2)" --> "x*2+2"

Robert_G 29. Mai 2005 21:52

Re: Kompilierender Matheparser
 
Ich kam zwar noch nicht zum Testen. Aber der Code gefällt mir, wirklich hübsch geschrieben. :)
Das wollte ich nur mal loswerden...

btw: Nach all dem
Zitat:

Hi jim...
Zitat:

danke jim
... irgendwie lag mir da ein "He's dead, Jim" auf der Zunge. :mrgreen:

Dax 30. Mai 2005 06:23

Re: Kompilierender Matheparser
 
Zitat:

Zitat von jim_raynor
Zitat:

Zitat von Dax
Edit2: Fehler beseitigt, neue Version :mrgreen:

So langsam wirds ;) Merkwürdigerweise gibts massive Probleme, wenn PreSolve false ist. Da knallt selbst

=schnipp=

Schreibt man es statt dessen in Klammern: (1*2) dann klappt es.

Hier scheint es also ein generelles Problem zu geben, wenn PreSolve false ist. Da ich den Variablen erst später einen Wert zuweise, aber die Formeln schon bei Programmstart kompiliere, bin ich auf PreSolve false angewiesen :(

Das deutet alles auf ein Problem mit dem Serialisierer hin :? Sobald ich Zeit habe beziehungse wieder zuhause bin, sehe ich mir das mal an :)

PS:
Zitat:

Zitat von Robert_G
... irgendwie lag mir da ein "He's dead, Jim" auf der Zunge. :mrgreen:

Nein, noch lebt der Parser :mrgreen:

read you,
Dax

Dust Signs 30. Mai 2005 08:24

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dax
PS:
Zitat:

Zitat von Robert_G
... irgendwie lag mir da ein "He's dead, Jim" auf der Zunge. :mrgreen:

Nein, noch lebt der Parser :mrgreen:

Und Jim? :mrgreen:

Dust Signs

Dax 30. Mai 2005 13:12

Re: Kompilierender Matheparser
 
Huhu :)

Also, hab den Fehler gefunden und korrigiert, danke ;)

:arrow:
Delphi-Quellcode:
procedure ThisThread.NewVersion;
begin
  WriteLn('Korrigierte Version ist oben ;-)');
end;
ThisThread.NewVersion; :mrgreen:

Zitat:

Zitat von Dust Signs
Und Jim? :mrgreen:

Dust Signs

Wenn er weiter Fehler findet, wird es ihn so schnell nicht treffen ;)

read you,
Dax

DGL-luke 30. Mai 2005 15:25

Re: Kompilierender Matheparser
 
weisst du, was genial wäre? wenn der parser gleichungen (bzw. eine seite einer gleichung) lösen (bzw. vereinfachen) könnte.

nur als kleine anregung :)

Dax 30. Mai 2005 15:30

Re: Kompilierender Matheparser
 
Sag mal ein konkretes Beispiel, dann überleg ichs mir :)

read you,
Dax

DGL-luke 30. Mai 2005 15:59

Re: Kompilierender Matheparser
 
(aus der heutigen mathe-hausafgabe, was aber REIN GAR NICHTS zur sache tut :mrgreen: )

(lg(x))² - lg(4x-4) = 0

jetzt eben entweder komplett nach x auflösen, so dass zum schluss L={x;y} dasteht oder die linke seite so weit wie möglich vereinfachen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 Uhr.
Seite 2 von 4     12 34      

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