Funktionsorientierte Programmierung
Aus ProgrammingWiki

Inhaltsverzeichnis |
Symbolisches Differenzieren
In dieser Übung geht es um das symbolische Differenzieren einstelliger Funktionen:
Dieses Verfahren kann in Scheme angemessen realisiert werden: Für jede Ableitungsregel schreiben Sie eine Prozedur.
Beispiel: Ableitung einer Summe
Die mathematische Notation für die Ableitung y´ einer Summe y sieht wie folgt aus:
Daraus ergibt sich folgende Schemeprozedur:
Hinweis: Beachten Sie, dass die abzuleitenden Funktionen in der Regel verkettet sind.
derive-, derive*, derive/
Erstellen Sie nach dem Vorbild von derive+ drei weitere Prozeduren derive-,derive* und derive/.
derive-sin, derive-cos
Implementieren Sie 2 weitere Prozeduren derive-sin und derive-cos für die Ableitung der Sinus- und der Kosinusfunktion.
Top-Level-Ableitungsprozedur
Schreiben Sie eine (top-level-) Ableitungsprozedur, welche derive+ und die Prozeduren aus den vorherigen Aufgaben nutzt. derive erwartet einen Ausdruck als Parameter, der die Funktion definiert. Es soll also nicht die entsprechende Prozedur für die Funktion übergeben werden, wie wir das üblicherweise tun. Es soll auch keine Prozedur zurückgegeben werden, sondern analog lediglich der die Ableitungsfunktion definierende Term in Gestalt eines Scheme-Ausdruckes.
Die Präfixausdrücke dürfen enthalten:
- die Variable, nach der abgeleitet wird, also x,
- Symbole für Konstanten (im mathematischen Sinn) und Zahlen, z. B. A und 4,
- Namen einstelliger Funktionen, wie sin und cos
- Symbole für zweistellige Operationen, wie + und *.
Hinweis: Stellen Sie sicher, dass ALLE Hilfsprozeduren in den oberen code-Blöcken stehen!
WICHTIG: Beachten Sie die Ausgaben der Aufrufbeispiele!
Aufrufbeispiele
> (derive '(* x x)) (+ (* 1 x) (* x 1)) > (derive '(/ 1 x)) (/ (- (* 0 x) (* 1 1)) (* x x)) > (derive '(sin (* x x)) (* (+ (* 1 x) (* x 1)) (cos (* x x))) > (derive '(cos (* x x))) (* (+ (* 1 x) (* x 1)) (* -1 (sin (* x x)))) > (derive '(+ (* x x) (sin x))) (+ (+ (* 1 x) (* x 1)) (* 1 (cos x)))
Quelltext überprüfen:
Wenn Sie möchten, können nun weitere Term-Vereinfachungen vorgenommen werden. Beispielsweise kann (* 0 a) durch 0 ersetzt werden usw. Hierzu sind weitere Prozeduren notwendig.