;; Die ersten drei Zeilen dieser Datei wurden von DrRacket eingefügt. Sie enthalten Metadaten ;; über die Sprachebene dieser Datei in einer Form, die DrRacket verarbeiten kann. #reader(lib "DMdA-vanilla-reader.ss" "deinprogramm")((modname higherorder) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Berechne die Näherung für eine Nullstelle durch Intervallhalbierung (: search ((number -> number) number number -> number)) (check-within (search (lambda (x) (* x x x)) -1 1) 0 0.1) ; Voraussetzung: (f a) ist negativ, (f b) ist positiv (define search (lambda (f a b) (letrec ((close-enough? (lambda (x y) (< (abs (- x y)) 0.00001))) (x (average a b))) (if (close-enough? a b) x (letrec ((fx (f x))) (cond ((positive? fx) (search f a x)) ((negative? fx) (search f x b)) (else x))))))) ; "Benutzerschnittstelle" für die Intervallhalbierung (: half-interval-method ((number -> number) number number -> number)) (check-within (half-interval-method sin 2 4) 3.14 0.1) (define half-interval-method (lambda (f a b) (letrec ((fa (f a)) (fb (f b))) (cond ((and (negative? fa) (positive? fb)) (search f a b)) ((and (positive? fa) (negative? fb)) (search f b a)) (else (violation "Werte haben gleiches Vorzeichen!")))))) (define average (lambda (x y) (/ (+ x y) 2))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Berechne (als numerische Näherung) die 1. Ableitung einer Funktion (: derive ((number -> number) -> (number -> number))) (define derive (lambda (f) (lambda (x) (/ (- (f (+ x dx)) (f x)) dx)))) (define dx 0.001) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Berechne die Komposition zweier Funktionen: (: comp ((%b -> %c) (%a -> %b) -> (%a -> %c))) (define comp (lambda (f g) (lambda (x) (f (g x))))) (define square (lambda (x) (* x x)))