freddy2020 Geschrieben 26. Februar 2011 Geschrieben 26. Februar 2011 Hallo, ich habe mir einen Funktionsparser gebaut, der eine Funktion von Infix in Postfix konvertiert und dann das Ergebnis errechnet. Nun will ich auch die Ableitung errechnen, aber ich finde keinen effizienten Weg. Ich würde die Funktion als String erstmal in Einzelteile zerlegen und dann einzeln ableiten. Aber gibt es keine effizientere Möglichkeit ?
flashpixx Geschrieben 26. Februar 2011 Geschrieben 26. Februar 2011 Du willst hier symbolisch die Differentation durchführen. Ich gehe davon aus, dass Dir die Regeln bekannt sind. Im Grunde kann man das selbst implementieren, ich würde hier aber zu fertigen Bibliotheken greifen GiNaC is Not a CAS denn diese sind entsprechend getestet. Man kann das zwar auch selbst implementieren, wobei ich dann hier ganz dringend von einer Stringverarbeitung abraten würde und das ganze über eine entsprechende Grammatik definiere, mit Lexer und Parser verarbeiten würde und dann aus dem entsprechenden Syntaxbaum die Ableitungen bilden würde
freddy2020 Geschrieben 26. Februar 2011 Autor Geschrieben 26. Februar 2011 Danke für die Antwort. Ich hab schon geahnt das es keinen einfachen Weg gibt es selbst zu implementieren. Da werd ich wohl auf eine Bibliothek zurückgreifen. Danke.
flashpixx Geschrieben 26. Februar 2011 Geschrieben 26. Februar 2011 Naja das Bilden von Ableitung geschieht nach deterministischen Regeln, somit sollte das kein Problem sein. Deine Grammatik für arithmetische Ausdrücke zu schreiben ist auch nicht viel Aufwand. Parser & Lexer kann man mit entsprechenden Tools aus der Grammatik direkt erzeugen (dafür gibt es Toolunterstützung). Sofern man dann einen passenden Syntaxbaum hat, kann man eben diesen passend zu den Ableitungsregeln verarbeiten. Im Gegensatz zur Integration ist das noch recht leicht
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden