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 ? Zitieren
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 Zitieren
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. Zitieren
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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.