mathematische Funktionen ableiten
-
Danke, aber kannst du das bitte näher erläutern?
-
Schreib dir erst einmal den Parsebaum (such mal nach Formel-Parser oder so was) und frag dann noch einmal.
-
Meinst du, ich sollte eine Funktion f(x) in die Teilfunktionen u(x), v(x) etc. zerlegen und dann die Kettenregel verwenden?
-
Die Funktion in alle Bestandteile zerlegen, z.B.
sin(5*(x+ln(x))) ->
(sin (* (5 (+ x (ln x)))))
und dann jeden Knoten einzeln differenzieren. Jeder Knoten muss daher überprüfen, ob unter ihm etwas Variables oder Konstantes ist und danach die Regel anwenden: Produktregel muss z.B. bei (* 5 x) nicht angewendet werden, wohl aber bei (* (sin x) x). Wenn der Knoten die Aufgabe nicht alleine erledigen kann (* (sin x) x), muss er eine Teilaufgabe an seine Kinder weiterleiden (hier zum Bestimmen von (sin(x))').Hinweis: Meine Baumschreibweise ist eine Art LISP-Präfix-Notation.
-
Die Funktion in alle Bestandteile zerlegen
Jo! Und zwar zuerst additiv und dann multiplikativ. Danach Kettenregel (falls nötig).
-
Hallo,
das mit den analytischen ableiten ist nicht wirklich einfach. Mach es lieber numerisch!
siehe: http://www.we.fh-osnabrueck.de/fbwe/vorlesung/edv2/node19.html
-
Naja, symbolisches *Ableiten* ist eigentlich recht einfach. Beim symbolischen Integrieren wird es aber sehr kompliziert (die richtigen Substitutionen finden...).
-
Original erstellt von Norondion:
Naja, symbolisches *Ableiten* ist eigentlich recht einfach. Beim symbolischen Integrieren wird es aber sehr kompliziert (die richtigen Substitutionen finden...).Fuer einen Menschen mag das einfach sein. Aber einen Computer alle regeln beibringen ( insbesondere wann er welche anwenden soll) und ihn mit den ganzne tabellen zu fuettern (cosh, aresin usw. ) ist nicht ganz trivial. Hat schon seine gruende warum tools wie Mathematika ne ganze menge geld kosten.
-
Ich spreche schon von einem Computer. Ich habe nämlich schon einmal Quelltext zum symbolische Differenzieren gesehen (weniger als 50kB). Es war natürlich nicht ganz trivial, aber wenn man das Prinzip verstanden hat, ist es einfach.
Bei dem Preis Mathematica/Maple/MathCAD wird vor allem das symbolische Integrieren und Lösen von (Differential-)Gleichungen eine große Rolle spielen.
Wie man soetwas allgemein programmiert, würde ich auch gerne wissen.[ Dieser Beitrag wurde am 15.04.2003 um 10:07 Uhr von Norondion editiert. ]
-
Das Ableiten ist wahrscheinlich ziemlich einfach, schätze 50 Zeilen Lisp, das danach hübsch zusammenzufassen ist schon schwerer.
-
Cool, kannst du mal LISP-Code zeigen?
-
http://www.norvig.com/paip/README.html
Die Files macsyma.lisp, macsymar.lisp und patmatch.lisp sind relevant. Das Teil kann dann aber auch wesentlich mehr, ich würde nur sagen, der Differenzier-Teil davon ist der kleinste. Wenn man es auf Minimalität anlegt, wird man auf ein paar Pattern-Matching-Funktionen verzichten müssen; wenn man die Ausdrücke von vornherein in Prefix-Form eingibt, noch auf ein wenig mehr ...
-
He, das hat mich echt neugierig auf LISP gemacht! Wieso kann man solche Parsing-/Pattern Matching-Sachen so einfach in LISP programmieren?
Wo gibt es eine kostenlose IDE und Interpreter/Compiler für Windows?
DANKE!
-
ich hab mir mal die Trial-Version von www.franz.com runtergeladen. Gibt es noch etwas besseres?
-
-
Kannst du das Buch "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp" empfehlen?
-
wenn du dich für KI interessierst, klar
-
Kann man daraus auch LISP lernen? Wenn nicht, gibt es bessere Tutorials/Online-Bücher als dieses: http://www.psg.com/~dlamkins/sl/contents.html ?
-
volkard, was hältst du von LISP?
Und die anderen?
-
@<C++>: Kann man versuchen, die ersten 3 Kapitel sind nur Lisp-Einführung, aber danach gehts in die vollen ... und du hast das doppelte Problem, Lisp und die behandelten Algorithmen verstehen zu müssen. Das geht am Anfang noch (Graphensuche), aber später dann wirds sehr schwer.
Ich würde ansonsten Paul Graham: "ANSI Common Lisp" empfehlen.