diff options
author | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-09-27 09:53:37 -0600 |
---|---|---|
committer | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-09-27 09:53:37 -0600 |
commit | 1a8c81d07efe55c5a6909aff32359d4b8866af1c (patch) | |
tree | dbaf949a4d20226560d97ef9b48dbdcd71b7ad1a /src | |
parent | 5e85a662d21081bc27adc1142759659cca59cd62 (diff) | |
download | cmath-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.lisp | 9 | ||||
-rw-r--r-- | src/approx/maceps.lisp | 11 | ||||
-rw-r--r-- | src/approx/package.lisp | 5 | ||||
-rw-r--r-- | src/package.lisp | 7 | ||||
-rw-r--r-- | src/utils/package.lisp | 5 | ||||
-rw-r--r-- | src/utils/table.lisp | 11 | ||||
-rw-r--r-- | src/utils/within-range.lisp | 5 | ||||
-rw-r--r-- | src/vector/distance.lisp | 6 | ||||
-rw-r--r-- | src/vector/norm.lisp | 17 | ||||
-rw-r--r-- | src/vector/package.lisp | 7 |
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)) |