summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-09-27 09:53:37 -0600
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-09-27 09:53:37 -0600
commit1a8c81d07efe55c5a6909aff32359d4b8866af1c (patch)
treedbaf949a4d20226560d97ef9b48dbdcd71b7ad1a /src
parent5e85a662d21081bc27adc1142759659cca59cd62 (diff)
downloadcmath-1a8c81d07efe55c5a6909aff32359d4b8866af1c.tar.gz
cmath-1a8c81d07efe55c5a6909aff32359d4b8866af1c.zip
keep unit tests but make directory structure more consistent with requirements i did not read
Diffstat (limited to 'src')
-rw-r--r--src/approx/derivative.lisp9
-rw-r--r--src/approx/maceps.lisp11
-rw-r--r--src/approx/package.lisp5
-rw-r--r--src/package.lisp7
-rw-r--r--src/utils/package.lisp5
-rw-r--r--src/utils/table.lisp11
-rw-r--r--src/utils/within-range.lisp5
-rw-r--r--src/vector/distance.lisp6
-rw-r--r--src/vector/norm.lisp17
-rw-r--r--src/vector/package.lisp7
10 files changed, 83 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))
diff --git a/src/package.lisp b/src/package.lisp
new file mode 100644
index 0000000..88b10eb
--- /dev/null
+++ b/src/package.lisp
@@ -0,0 +1,7 @@
+(in-package :cl-user)
+(defpackage lizfcm.vector
+ (:use :cl)
+ (:export
+ :n-norm
+ :max-norm
+ :distance))
diff --git a/src/utils/package.lisp b/src/utils/package.lisp
new file mode 100644
index 0000000..bdd5589
--- /dev/null
+++ b/src/utils/package.lisp
@@ -0,0 +1,5 @@
+(in-package :cl-user)
+(defpackage lizfcm.utils
+ (:use :cl)
+ (:export :within-range-p
+ :table))
diff --git a/src/utils/table.lisp b/src/utils/table.lisp
new file mode 100644
index 0000000..e96f37b
--- /dev/null
+++ b/src/utils/table.lisp
@@ -0,0 +1,11 @@
+(in-package :lizfcm.utils)
+
+(defmacro table ((&key headers domain-order domain-values) &body body)
+ `(cons
+ ,headers
+ (mapcar (lambda (tuple)
+ (destructuring-bind ,domain-order tuple
+ (append tuple
+ (list
+ ,@body))))
+ ,domain-values)))
diff --git a/src/utils/within-range.lisp b/src/utils/within-range.lisp
new file mode 100644
index 0000000..9a0b762
--- /dev/null
+++ b/src/utils/within-range.lisp
@@ -0,0 +1,5 @@
+(in-package :lizfcm.utils)
+
+(defun within-range-p (x true-value delta)
+ (and (< x (+ true-value delta))
+ (> x (- true-value delta))))
diff --git a/src/vector/distance.lisp b/src/vector/distance.lisp
new file mode 100644
index 0000000..74631ce
--- /dev/null
+++ b/src/vector/distance.lisp
@@ -0,0 +1,6 @@
+(in-package :lizfcm.vector)
+
+(defun distance (v1 v2 norm)
+ (let* ((d (mapcar #'- v1 v2))
+ (length (funcall norm d)))
+ length))
diff --git a/src/vector/norm.lisp b/src/vector/norm.lisp
new file mode 100644
index 0000000..2158296
--- /dev/null
+++ b/src/vector/norm.lisp
@@ -0,0 +1,17 @@
+(in-package :lizfcm.vector)
+
+(defun p-norm (p)
+ (lambda (v)
+ (expt
+ (reduce (lambda (acc x)
+ (+ acc x))
+ (mapcar (lambda (x)
+ (abs
+ (expt x p)))
+ v))
+ (/ 1 p))))
+
+(defun max-norm (v)
+ (reduce (lambda (acc x)
+ (max acc x))
+ v))
diff --git a/src/vector/package.lisp b/src/vector/package.lisp
new file mode 100644
index 0000000..009b190
--- /dev/null
+++ b/src/vector/package.lisp
@@ -0,0 +1,7 @@
+(in-package :cl-user)
+(defpackage lizfcm.vector
+ (:use :cl)
+ (:export
+ :p-norm
+ :max-norm
+ :distance))