fork download
  1. ;; from http://r...content-available-to-author-only...e.org/wiki/Numerical_integration#Common_Lisp
  2. (defun left-rectangle (f a b n &aux (d (/ (- b a) n)))
  3. (* d (loop for x from a below b by d summing (funcall f x))))
  4.  
  5. (defun integral (f)
  6. (left-rectangle f 0 1 10))
  7.  
  8.  
  9. (defun integral-range (f a b)
  10. (* (- b a) (integral #'(lambda (x) (funcall f (float (+ a (* x (- b a)))))))))
  11.  
  12. (defun test-fn (x) (* x 2))
  13. (trace test-fn)
  14.  
  15. (let ((i (integral-range #'test-fn 3 9)))
  16. (format t "Result of numerical integration: ~a~%" i)
  17. (format t "Error of numerical integration: ~a~%" (abs (- i (- (* 9 9) (* 3 3))))))
Success #stdin #stdout #stderr 0.01s 10584KB
stdin
Standard input is empty
stdout
;; Tracing function TEST-FN.
1. Trace: (TEST-FN '3.0)
1. Trace: TEST-FN ==> 6.0
1. Trace: (TEST-FN '3.6)
1. Trace: TEST-FN ==> 7.2
1. Trace: (TEST-FN '4.2)
1. Trace: TEST-FN ==> 8.4
1. Trace: (TEST-FN '4.8)
1. Trace: TEST-FN ==> 9.6
1. Trace: (TEST-FN '5.4)
1. Trace: TEST-FN ==> 10.8
1. Trace: (TEST-FN '6.0)
1. Trace: TEST-FN ==> 12.0
1. Trace: (TEST-FN '6.6)
1. Trace: TEST-FN ==> 13.2
1. Trace: (TEST-FN '7.2)
1. Trace: TEST-FN ==> 14.4
1. Trace: (TEST-FN '7.8)
1. Trace: TEST-FN ==> 15.6
1. Trace: (TEST-FN '8.4)
1. Trace: TEST-FN ==> 16.8
Result of numerical integration: 68.4
Error of numerical integration: 3.5999985
stderr
WARNING: TRACE: redefining function TEST-FN in /home/HQSiu3/prog.lisp, was
         defined in top-level