summaryrefslogtreecommitdiff
path: root/src/approx
diff options
context:
space:
mode:
Diffstat (limited to 'src/approx')
-rw-r--r--src/approx/derivative.lisp9
-rw-r--r--src/approx/maceps.lisp11
-rw-r--r--src/approx/package.lisp5
3 files changed, 25 insertions, 0 deletions
diff --git a/src/approx/derivative.lisp b/src/approx/derivative.lisp
new file mode 100644
index 0000000..02fcb4c
--- /dev/null
+++ b/src/approx/derivative.lisp
@@ -0,0 +1,9 @@
+(in-package :lizfcm.approx)
+
+(defun derivative-at (f x &optional (delta 0.01))
+ (let* ((x2 (+ x delta))
+ (x1 (- x delta))
+ (y2 (apply f (list x2)))
+ (y1 (apply f (list x1))))
+ (/ (- y2 y1)
+ (- x2 x1))))
diff --git a/src/approx/maceps.lisp b/src/approx/maceps.lisp
new file mode 100644
index 0000000..ad234e8
--- /dev/null
+++ b/src/approx/maceps.lisp
@@ -0,0 +1,11 @@
+(in-package :lizfcm.approx)
+
+(defun compute-maceps (f a init)
+ (let ((h init)
+ (err init))
+ (loop while (> err 0)
+ do
+ (setf h (/ h 2)
+ err (abs (- (funcall f (+ a h))
+ (funcall f a))))
+ collect (list a h err))))
diff --git a/src/approx/package.lisp b/src/approx/package.lisp
new file mode 100644
index 0000000..c11eb60
--- /dev/null
+++ b/src/approx/package.lisp
@@ -0,0 +1,5 @@
+(in-package :cl-user)
+(defpackage lizfcm.approx
+ (:use :cl)
+ (:export :derivative-at
+ :compute-maceps))