;; 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 half-interval) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Berechne eine Näherung für eine Nullstelle einer stetigen(!) ; Funktion innerhalb vorgegebener Grenzen (durch Intervallhalbierung) (: search ((real -> real) real real -> real)) (check-within (search (lambda (x) (* x x x)) -1 1) 0 0.1) (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 ((real -> real) real real -> real)) (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)))