summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]compile_archive.sh (renamed from compile.sh)0
-rw-r--r--lizfcm.abin9632 -> 9632 bytes
-rw-r--r--md2pdf.css3
-rw-r--r--src/lizfcm.asd1
-rw-r--r--src/main.lisp60
-rw-r--r--src/tests,vector.lisp11
-rw-r--r--src/vector,least-squares-reg.lisp2
-rw-r--r--src/vector,least-squares.lisp14
-rw-r--r--src/vector,package.lisp3
9 files changed, 90 insertions, 4 deletions
diff --git a/compile.sh b/compile_archive.sh
index f174fbe..f174fbe 100644..100755
--- a/compile.sh
+++ b/compile_archive.sh
diff --git a/lizfcm.a b/lizfcm.a
index 1d27463..ec49adb 100644
--- a/lizfcm.a
+++ b/lizfcm.a
Binary files differ
diff --git a/md2pdf.css b/md2pdf.css
deleted file mode 100644
index e2718ba..0000000
--- a/md2pdf.css
+++ /dev/null
@@ -1,3 +0,0 @@
-img {
- max-width: 100%;
-}
diff --git a/src/lizfcm.asd b/src/lizfcm.asd
index ee8beb0..0096257 100644
--- a/src/lizfcm.asd
+++ b/src/lizfcm.asd
@@ -9,6 +9,7 @@
(:file "approx,maceps" :depends-on ("approx,package"))
(:file "approx,derivative" :depends-on ("approx,package"))
(:file "approx,package")
+ (:file "vector,least-squares")
(:file "vector,distance" :depends-on ("vector,norm" "vector,package"))
(:file "vector,norm" :depends-on ("vector,package"))
(:file "vector,package")))
diff --git a/src/main.lisp b/src/main.lisp
new file mode 100644
index 0000000..7a8b455
--- /dev/null
+++ b/src/main.lisp
@@ -0,0 +1,60 @@
+(load "lizfcm.asd")
+(ql:quickload :lizfcm)
+
+;; this is a collection showcasing the library developed for math4610, required
+;; from the Shared Library definition
+
+(defun smaceps ()
+ (cadar (last (lizfcm.approx:compute-maceps
+ (lambda (x) x) 1.0 1.0))))
+
+(defun dmaceps ()
+ (cadar (last (lizfcm.approx:compute-maceps
+ (lambda (x) x) 1.0d0 1.0d0))))
+
+(defun l2-norm (v)
+ (let ((2-norm (lizfcm.vector:p-norm 2)))
+ (funcall 2-norm v)))
+
+(defun l1-norm (v)
+ (let ((1-norm (lizfcm.vector:p-norm 1)))
+ (funcall 1-norm v)))
+
+(defun linf-norm (v)
+ (lizfcm.vector:max-norm v))
+
+(defun l2-distance (v1 v2)
+ (let ((2-norm (lizfcm.vector:p-norm 2)))
+ (lizfcm.vector:distance v1 v2 2-norm)))
+
+(defun l1-distance (v1 v2)
+ (let ((1-norm (lizfcm.vector:p-norm 1)))
+ (lizfcm.vector:distance v1 v2 1-norm)))
+
+(defun linf-distance (v1 v2)
+ (lizfcm.vector:distance v1 v2 'lizfcm.vector:max-norm))
+
+(defun f (x)
+ (/ (- x 1) (+ x 1)))
+
+(defun fprime (x)
+ (/ 2 (expt (+ x 1) 2)))
+
+(defmacro showcase (s-expr)
+ `(format t "~a = ~a~%" ,(format nil "~a" s-expr) ,s-expr))
+
+(defun main ()
+ (showcase (smaceps))
+ (showcase (dmaceps))
+ (showcase (l2-norm '(1 2)))
+ (showcase (l1-norm '(1 2)))
+ (showcase (linf-norm '(1 2)))
+ (showcase (l1-distance '(1 2) '(-3 4)))
+ (showcase (l2-distance '(1 2) '(-3 4)))
+ (showcase (linf-distance '(1 2) '(-3 4)))
+ (showcase (lizfcm.vector:least-squares-reg '(1 2 3 4 5 6 7)
+ '(0.5 3 2 3.5 5 6 7.5)))
+ (showcase (lizfcm.approx:forward-derivative-at 'f 1 0.00001))
+ (showcase (lizfcm.approx:central-derivative-at 'f 1 0.00001))
+ (showcase (lizfcm.approx:backward-derivative-at 'f 1 0.00001)))
+
diff --git a/src/tests,vector.lisp b/src/tests,vector.lisp
index 3ffe5a8..6edb1ac 100644
--- a/src/tests,vector.lisp
+++ b/src/tests,vector.lisp
@@ -29,3 +29,14 @@
dist
0.00001))))
+(test least-squares
+ :description "least squares is correct enough"
+ (let ((x '(0 1 2 3 4))
+ (y '(1 2 3 4 5)))
+ (destructuring-bind (m b) (lizfcm.vector:least-squares-reg x y)
+ (is (within-range-p m 1 0.00001))
+ (is (within-range-p b 1 0.00001))))
+ (let ((x '(1 2 3 4 5 6 7))
+ (y '(0.5 3 2 3.5 5 6 7.5)))
+ (destructuring-bind (m b) (lizfcm.vector:least-squares-reg x y)
+ (is (within-range-p m 1 0.3))))) ;; just a guestimate for best fit
diff --git a/src/vector,least-squares-reg.lisp b/src/vector,least-squares-reg.lisp
new file mode 100644
index 0000000..1c7272c
--- /dev/null
+++ b/src/vector,least-squares-reg.lisp
@@ -0,0 +1,2 @@
+(in-package :lizfcm.vector)
+
diff --git a/src/vector,least-squares.lisp b/src/vector,least-squares.lisp
new file mode 100644
index 0000000..687af32
--- /dev/null
+++ b/src/vector,least-squares.lisp
@@ -0,0 +1,14 @@
+(in-package :lizfcm.vector)
+
+(defun least-squares-reg (x y)
+ (let* ((n (length x))
+ (sum-y (reduce #'+ y))
+ (sum-x (reduce #'+ x))
+ (sum-xy (reduce #'+ (mapcar #'* x y)))
+ (sum-xsquared (reduce #'+ (mapcar #'* x x)))
+ (b (/ (- (* sum-y sum-xsquared) (* sum-x sum-xy))
+ (- (* n sum-xsquared) (* sum-x sum-x))))
+ (a (/ (- (* n sum-xy) (* sum-x sum-y))
+ (- (* n sum-xsquared) (* sum-x sum-x)))))
+ (list a b)))
+
diff --git a/src/vector,package.lisp b/src/vector,package.lisp
index 009b190..f491908 100644
--- a/src/vector,package.lisp
+++ b/src/vector,package.lisp
@@ -4,4 +4,5 @@
(:export
:p-norm
:max-norm
- :distance))
+ :distance
+ :least-squares-reg))