24 lines
864 B
Racket
24 lines
864 B
Racket
#lang racket
|
|
(define (integrate f a b steps meth)
|
|
(define h (/ (- b a) steps))
|
|
(* h (for/sum ([i steps])
|
|
(meth f (+ a (* h i)) h))))
|
|
|
|
(define (left-rect f x h) (f x))
|
|
(define (mid-rect f x h) (f (+ x (/ h 2))))
|
|
(define (right-rect f x h)(f (+ x h)))
|
|
(define (trapezium f x h) (/ (+ (f x) (f (+ x h))) 2))
|
|
(define (simpson f x h) (/ (+ (f x) (* 4 (f (+ x (/ h 2)))) (f (+ x h))) 6))
|
|
|
|
(define (test f a b s n)
|
|
(displayln n)
|
|
(for ([meth (list left-rect mid-rect right-rect trapezium simpson)]
|
|
[name '( left-rect mid-rect right-rect trapezium simpson)])
|
|
(displayln (~a name ":\t" (integrate f a b s meth))))
|
|
(newline))
|
|
|
|
(test (λ(x) (* x x x)) 0. 1. 100 "CUBED")
|
|
(test (λ(x) (/ x)) 1. 100. 1000 "RECIPROCAL")
|
|
(test (λ(x) x) 0. 5000. 5000000 "IDENTITY")
|
|
(test (λ(x) x) 0. 6000. 6000000 "IDENTITY")
|