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 5 von 14   « Erste     345 67     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)
 
Dust Signs
 
#41
  Alt 27. Mai 2005, 17:26
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
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#42
  Alt 27. Mai 2005, 17:35
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 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.
Fabian K.
  Mit Zitat antworten Zitat
Dax
 
#43
  Alt 27. Mai 2005, 17:42
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
  Mit Zitat antworten Zitat
Dust Signs
 
#44
  Alt 27. Mai 2005, 17:44
Zitat von dizzy:
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

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 <werbung> http://www.dustsigns.de.vu/cmpxcalc.html </werbung>
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

 
Delphi 5 Standard
 
#45
  Alt 27. Mai 2005, 18:05
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
Christian Reich
  Mit Zitat antworten Zitat
Dust Signs
 
#46
  Alt 27. Mai 2005, 18:06
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
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#47
  Alt 27. Mai 2005, 18:09
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 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 von Dust Signs:
Die hab ich doch gepostet, das sind die Areafunktionen


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 <werbung> http://www.dustsigns.de.vu/cmpxcalc.html </werbung>
Programm ist nett, Thema geklärt, und nen Messenger hab ich (noch) keinen . (Wird aber immer nötiger...)
Fabian K.
  Mit Zitat antworten Zitat
Dax
 
#48
  Alt 27. Mai 2005, 18:23
@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.
  Mit Zitat antworten Zitat
Dax
 
#49
  Alt 27. Mai 2005, 18:50
So... jims Parsermörderformel funktioniert wieder, Echse und Soßen sind auf dem aktuellen (funktionierenden) Stand
  Mit Zitat antworten Zitat
Dax
 
#50
  Alt 27. Mai 2005, 23:02
Und die Bugfixes nehmen kein Ende Wieder eine von jims Parsermörderformeln "ausgebügelt"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 14   « Erste     345 67     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 20:50 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