From 58c73fd511b77cb94124b71a4bb75c7ab6a6d8bc Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Mon, 25 Sep 2023 10:36:23 -0600 Subject: [PATCH] add september notes & hw2 code / pdf --- cl/lizfcm.asd | 10 +- cl/src/approx/maceps.lisp | 13 + cl/src/approx/package.lisp | 3 +- cl/src/package.lisp | 7 + cl/src/vector/distance.lisp | 6 + cl/src/vector/norm.lisp | 17 ++ cl/src/vector/package.lisp | 7 + cl/tests/maceps.lisp | 25 ++ cl/tests/vector.lisp | 31 +++ homeworks/hw-2.org | 179 +++++++++++++ homeworks/hw-2.pdf | Bin 0 -> 65550 bytes homeworks/hw-2.tex | 243 ++++++++++++++++++ .../virtualization}/hw1.pdf | Bin .../virtualization}/img/htop.png | Bin .../virtualization}/img/no_virtualization.png | Bin .../virtualization}/virtual_machines.md | 0 .../virtualization}/virtualization.md | 0 notes/Sep-11.org | 17 +- notes/Sep-13.org | 16 ++ notes/Sep-15.org | 52 ++++ notes/Sep-20.org | 21 ++ notes/Sep-22.org | 45 ++++ notes/Sep-25.org | 48 ++++ 23 files changed, 730 insertions(+), 10 deletions(-) create mode 100644 cl/src/approx/maceps.lisp create mode 100644 cl/src/package.lisp create mode 100644 cl/src/vector/distance.lisp create mode 100644 cl/src/vector/norm.lisp create mode 100644 cl/src/vector/package.lisp create mode 100644 cl/tests/maceps.lisp create mode 100644 cl/tests/vector.lisp create mode 100644 homeworks/hw-2.org create mode 100644 homeworks/hw-2.pdf create mode 100644 homeworks/hw-2.tex rename {virtualization => homeworks/virtualization}/hw1.pdf (100%) rename {virtualization => homeworks/virtualization}/img/htop.png (100%) rename {virtualization => homeworks/virtualization}/img/no_virtualization.png (100%) rename {virtualization => homeworks/virtualization}/virtual_machines.md (100%) rename {virtualization => homeworks/virtualization}/virtualization.md (100%) create mode 100644 notes/Sep-13.org create mode 100644 notes/Sep-15.org create mode 100644 notes/Sep-20.org create mode 100644 notes/Sep-22.org create mode 100644 notes/Sep-25.org diff --git a/cl/lizfcm.asd b/cl/lizfcm.asd index ad69fa1..3e8c289 100644 --- a/cl/lizfcm.asd +++ b/cl/lizfcm.asd @@ -11,7 +11,13 @@ (:file "package"))) (:module "approx" :components - ((:file "derivative" :depends-on ("package")) + ((:file "maceps" :depends-on ("package")) + (:file "derivative" :depends-on ("package")) + (:file "package"))) + (:module "vector" + :components + ((:file "distance" :depends-on ("norm" "package")) + (:file "norm" :depends-on ("package")) (:file "package"))))))) @@ -23,7 +29,9 @@ :components ((:module "tests" :components ((:file "table" :depends-on ("suite")) + (:file "maceps" :depends-on ("suite")) (:file "approx" :depends-on ("suite")) + (:file "vector" :depends-on ("suite")) (:file "suite")))) :perform (asdf:test-op (o c) (uiop:symbol-call :fiveam :run! diff --git a/cl/src/approx/maceps.lisp b/cl/src/approx/maceps.lisp new file mode 100644 index 0000000..cd24482 --- /dev/null +++ b/cl/src/approx/maceps.lisp @@ -0,0 +1,13 @@ +(in-package :lizfcm.approx) + +(defun compute-maceps (val f) + (let* ((h val) + (a val) + (err val)) + (loop while (> err 0) + do + (progn + (setf h (/ h 2) + err (abs (- (funcall f (+ a h)) + (funcall f a))))) + collect (list a h err)))) diff --git a/cl/src/approx/package.lisp b/cl/src/approx/package.lisp index 60dd0bb..c11eb60 100644 --- a/cl/src/approx/package.lisp +++ b/cl/src/approx/package.lisp @@ -1,4 +1,5 @@ (in-package :cl-user) (defpackage lizfcm.approx (:use :cl) - (:export :derivative-at)) + (:export :derivative-at + :compute-maceps)) diff --git a/cl/src/package.lisp b/cl/src/package.lisp new file mode 100644 index 0000000..88b10eb --- /dev/null +++ b/cl/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/cl/src/vector/distance.lisp b/cl/src/vector/distance.lisp new file mode 100644 index 0000000..74631ce --- /dev/null +++ b/cl/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/cl/src/vector/norm.lisp b/cl/src/vector/norm.lisp new file mode 100644 index 0000000..2158296 --- /dev/null +++ b/cl/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/cl/src/vector/package.lisp b/cl/src/vector/package.lisp new file mode 100644 index 0000000..009b190 --- /dev/null +++ b/cl/src/vector/package.lisp @@ -0,0 +1,7 @@ +(in-package :cl-user) +(defpackage lizfcm.vector + (:use :cl) + (:export + :p-norm + :max-norm + :distance)) diff --git a/cl/tests/maceps.lisp b/cl/tests/maceps.lisp new file mode 100644 index 0000000..9d61772 --- /dev/null +++ b/cl/tests/maceps.lisp @@ -0,0 +1,25 @@ +(defpackage lizfcm/tests.maceps + (:use :cl + :fiveam + :lizfcm.approx + :lizfcm.utils + :lizfcm/tests) + (:export :approx-suite)) +(in-package :lizfcm/tests.maceps) + +(def-suite maceps-suite + :in lizfcm-test-suite) +(in-suite maceps-suite) + +(test maceps + :description "double precision provides precision about (mac eps of single precision) squared" + (let* ((maceps-computation-double (compute-maceps 1.0d0 + (lambda (x) x))) + (maceps-computation-single (compute-maceps 1.0 + (lambda (x) x))) + (last-double-h (cadar (last maceps-computation-double))) + (last-single-h (cadar (last maceps-computation-single)))) + (is (within-range-p + (- last-double-h (* last-single-h last-single-h)) + 0 + last-single-h)))) diff --git a/cl/tests/vector.lisp b/cl/tests/vector.lisp new file mode 100644 index 0000000..3ffe5a8 --- /dev/null +++ b/cl/tests/vector.lisp @@ -0,0 +1,31 @@ +(defpackage lizfcm/tests.vector + (:use :cl + :fiveam + :lizfcm.vector + :lizfcm.utils + :lizfcm/tests) + (:export :vector-suite)) +(in-package :lizfcm/tests.vector) + +(def-suite vector-suite + :in lizfcm-test-suite) +(in-suite vector-suite) + +(test p-norm + :description "computes p-norm" + (let ((v '(1 1)) + (length (sqrt 2)) + (2-norm (p-norm 2))) + (is (within-range-p (funcall 2-norm v) + length + 0.00001)))) + +(test vector-distance + :description "computes distance via norm" + (let ((v1 '(0 0)) + (v2 '(1 1)) + (dist (sqrt 2))) + (is (within-range-p (distance v1 v2 (p-norm 2)) + dist + 0.00001)))) + diff --git a/homeworks/hw-2.org b/homeworks/hw-2.org new file mode 100644 index 0000000..c570b65 --- /dev/null +++ b/homeworks/hw-2.org @@ -0,0 +1,179 @@ +#+TITLE: HW 02 +#+AUTHOR: Elizabeth Hunt +#+STARTUP: entitiespretty fold inlineimages +#+LATEX_HEADER: \notindent \notag \usepackage{amsmath} \usepackage[a4paper,margin=1in,portrait]{geometry} +#+LATEX: \setlength\parindent{0pt} +#+OPTIONS: toc:nil + +* Question One +Computing $\epsilon_{\text{mac}}$ for single precision numbers + +#+BEGIN_SRC lisp :session t :results table + (load "../cl/lizfcm.asd") + (ql:quickload :lizfcm) + + (let ((domain-values (lizfcm.approx:compute-maceps 1.0 + (lambda (x) x)))) + (lizfcm.utils:table (:headers '("a" "h" "err") + :domain-order (a h err) + :domain-values domain-values))) +#+END_SRC + +(with many rows truncated) + +| a | h | err | +| 1.0 | 0.5 | 0.5 | +| 1.0 | 0.25 | 0.25 | +| 1.0 | 0.125 | 0.125 | +| 1.0 | 0.0625 | 0.0625 | +| 1.0 | 1.9073486e-06 | 1.9073486e-06 | +| 1.0 | 9.536743e-07 | 9.536743e-07 | +| 1.0 | 4.7683716e-07 | 4.7683716e-07 | +| 1.0 | 2.3841858e-07 | 2.3841858e-07 | +| 1.0 | 1.1920929e-07 | 1.1920929e-07 | +| 1.0 | 5.9604645e-08 | 0.0 | + +$\epsilon_{\text{mac}}$ \approx 5.9604 \cdot 10^{-8} + +* Question Two +Computing $\epsilon_{\text{mac}}$ for double precision numbers: + +#+BEGIN_SRC lisp :session t :results table + (let ((domain-values (lizfcm.approx:compute-maceps 1.0d0 + (lambda (x) x)))) + (lizfcm.utils:table (:headers '("a" "h" "err") + :domain-order (a h err) + :domain-values domain-values))) +#+END_SRC + +(with many rows truncated) +| a | h | err | +| 1.0d0 | 0.5d0 | 0.5d0 | +| 1.0d0 | 0.25d0 | 0.25d0 | +| 1.0d0 | 0.125d0 | 0.125d0 | +| 1.0d0 | 0.0625d0 | 0.0625d0 | +| 1.0d0 | 0.03125d0 | 0.03125d0 | +| 1.0d0 | 0.015625d0 | 0.015625d0 | +| 1.0d0 | 0.0078125d0 | 0.0078125d0 | +| 1.0d0 | 0.00390625d0 | 0.00390625d0 | +| 1.0d0 | 0.001953125d0 | 0.001953125d0 | +| 1.0d0 | 7.105427357601002d-15 | 7.105427357601002d-15 | +| 1.0d0 | 3.552713678800501d-15 | 3.552713678800501d-15 | +| 1.0d0 | 1.7763568394002505d-15 | 1.7763568394002505d-15 | +| 1.0d0 | 8.881784197001252d-16 | 8.881784197001252d-16 | +| 1.0d0 | 4.440892098500626d-16 | 4.440892098500626d-16 | +| 1.0d0 | 2.220446049250313d-16 | 2.220446049250313d-16 | +| 1.0d0 | 1.1102230246251565d-16 | 0.0d0 | + +Thus, $\epsilon_{\text{mac}}$ \approx 1.1102 \cdot 10^{-16} + +* Question Three - |v|_2 +#+BEGIN_SRC lisp :session t + (let ((vs '((1 1) (2 3) (4 5) (-1 2))) + (2-norm (lizfcm.vector:p-norm 2))) + (lizfcm.utils:table (:headers '("x" "y" "2norm") + :domain-order (x y) + :domain-values vs) + (funcall 2-norm (list x y)))) +#+END_SRC + + +| x | y | 2norm | +| 1 | 1 | 1.4142135 | +| 2 | 3 | 3.6055512 | +| 4 | 5 | 6.4031243 | +| -1 | 2 | 2.236068 | + +* Question Four - |v|_1 +#+BEGIN_SRC lisp :session t + (let ((vs '((1 1) (2 3) (4 5) (-1 2))) + (1-norm (lizfcm.vector:p-norm 1))) + (lizfcm.utils:table (:headers '("x" "y" "1norm") + :domain-order (x y) + :domain-values vs) + (funcall 1-norm (list x y)))) +#+END_SRC + + +| x | y | 1norm | +| 1 | 1 | 2 | +| 2 | 3 | 5 | +| 4 | 5 | 9 | +| -1 | 2 | 3 | + +* Question Five - |v|_{\infty} +#+BEGIN_SRC lisp :session t + (let ((vs '((1 1) (2 3) (4 5) (-1 2)))) + (lizfcm.utils:table (:headers '("x" "y" "max-norm") + :domain-order (x y) + :domain-values vs) + (lizfcm.vector:max-norm (list x y)))) +#+END_SRC + + +| x | y | infty-norm | +| 1 | 1 | 1 | +| 2 | 3 | 3 | +| 4 | 5 | 5 | +| -1 | 2 | 2 | + +* Question Six - ||v - u|| via |v|_{2} +#+BEGIN_SRC lisp :session t + (let* ((vs '((1 1) (2 3) (4 5) (-1 2))) + (vs2 '((7 9) (2 2) (8 -1) (4 4))) + (2-norm (lizfcm.vector:p-norm 2))) + (lizfcm.utils:table (:headers '("v1" "v2" "2-norm-d") + :domain-order (v1 v2) + :domain-values (mapcar (lambda (v1 v2) + (list v1 v2)) + vs + vs2)) + (lizfcm.vector:distance v1 v2 2-norm))) +#+END_SRC + + +| v1 | v2 | 2-norm | +| (1 1) | (7 9) | 10.0 | +| (2 3) | (2 2) | 1.0 | +| (4 5) | (8 -1) | 7.2111025 | +| (-1 2) | (4 4) | 5.3851647 | + +* Question Seven - ||v - u|| via |v|_{1} +#+BEGIN_SRC lisp :session t + (let* ((vs '((1 1) (2 3) (4 5) (-1 2))) + (vs2 '((7 9) (2 2) (8 -1) (4 4))) + (1-norm (lizfcm.vector:p-norm 1))) + (lizfcm.utils:table (:headers '("v1" "v2" "1-norm-d") + :domain-order (v1 v2) + :domain-values (mapcar (lambda (v1 v2) + (list v1 v2)) + vs + vs2)) + (lizfcm.vector:distance v1 v2 1-norm))) +#+END_SRC + + +| v1 | v2 | 1-norm-d | +| (1 1) | (7 9) | 14 | +| (2 3) | (2 2) | 1 | +| (4 5) | (8 -1) | 10 | +| (-1 2) | (4 4) | 7 | + +* Question Eight - ||v - u|| via |v|_{\infty} +#+BEGIN_SRC lisp :session t + (let* ((vs '((1 1) (2 3) (4 5) (-1 2))) + (vs2 '((7 9) (2 2) (8 -1) (4 4)))) + (lizfcm.utils:table (:headers '("v1" "v2" "max-norm-d") + :domain-order (v1 v2) + :domain-values (mapcar (lambda (v1 v2) + (list v1 v2)) + vs + vs2)) + (lizfcm.vector:distance v1 v2 'lizfcm.vector:max-norm))) +#+END_SRC + +| v1 | v2 | max-norm-d | +| (1 1) | (7 9) | -6 | +| (2 3) | (2 2) | 1 | +| (4 5) | (8 -1) | 6 | +| (-1 2) | (4 4) | -2 | diff --git a/homeworks/hw-2.pdf b/homeworks/hw-2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fed1f4400b8bca65529034e45c2cb0242918f351 GIT binary patch literal 65550 zcmbSzWmuJK*X@EucZYO0tVM%#moz8{f^!_GrPLV4zqGN zO_vXGnp{y|EoV-Dib2&xXe5wDJRUigh;-%9#v=?b9>4iH^dkZH-3X`V3LZ6bYi0Z1 z>$4x{lZR_Rkj>FuC9GV_y_tJ(tzv_vfoRg@&mtB&W{vulvhfo77E;8yI|;*ZqOui= z)B`c{3tyS>09OYsuGL-|>8{AkigRZMe=0Ckd~!UBQc3TTmqUxmIyLa~-Tc{ZjoFTb zs7yYgS<^71LP8&yB*s5&1`8|*?Apv3BO)kzhSiUzp>%LmBzn4S-_8G?P<(fW2Gh_H zM-nND(G088Y-`*8v-rvOJXN58c{dJ_>X1(~< zNq||aj2Zseh69h|1)Tw}`TLkpL*1&y*4WRrSXVc5bh~NLc&eXx{)j-!ASYJX0-MnZ z7|y>+l4P=nQzCFL8Ke-{eOev-b83zoK`XbGv#=$V=jhtv;HK)ywUB<9Nqo2#mJlVH zxYO6u>Bk}+M&sq%2q|cs~D-Bw)aTWYEv;2IWO^wY zNvH|1-6>c;tWy1&%H;64VEXd@TP#Bn5sIU@(@^{cq4LL*FK08fCjFzIa!0t;W@HfD z=VmFPX30;QU6d>-@#(U7*k#K^pGrSXKlqATIw>9_D@;e&>_DjOG=#(-cd+8#iskn{ zk`RU0`-$x?2(MZz2=cUMW@{4oHwTh_jDJp^W@K(%)%s%HDIrkcHCl~i+30MA?B@Ei z=taD$$h&)u2lzkV{Se3Nmf%)T9pQS;HHL}6#@AefaYA*UYyFA&H))dlt)>=mqc;m* zr-M?A*4;G+zfsUjC@$;v_z&x8qs^Il_UM^9wb$YXIWq>sjw9w4$&3@f0=zq6&k`Mgv%PAzpf9K0N2)&%kau`kP4^is0k&5-4 z1vBJh5Ywd{5WTlg7o#aU{7i{`Xjo3WQzjHD%!E#BK8I3b*a}jKi&=;%HLL82i6*e& zs00Lc9@n+tLrrp&0oIcAb-LZZaQXRI<0&^-?t-bE(_HXg zYI~j%fgNhd@S90YPGJ;W^q#|ur3my+X69$!3YxYLsqP1-sv9pdJ+kN?a{kdPEw7XZ zvRUe#;j_(Ns&g%9Ae!o4A&kucMq@lQU}2Dz3VX00ziMi!YHZ8=F25sD5pVDPLy{HF z2}c!`sS`V^rdEIUd2}TIOw11Fb{q+^hi4CJUf|eSQt^G=#U6g=rd5KeAl8A>;%90R zZ1v;igwT=a7&TK6BZAsaZpNp4q-6i~H1{gsnTF8_=Dt=OihOF!syW->J;@GXiNWWW zNYy+;k}9+-J=CGw-4ke|nm-F2vTM5Z9ftyyHJNFmiwJWjUQTdq&B@7>CASD0p(~lS zR-4`z&#E)lF_R{W>`N#VH7nli@8~+rs@w6=ohp!zxt^Be9!p5XusOGEiPLx!VVu{< zr|{F{`5RI-%)RZMqNmD%ifI^LM#p|{-;G3xye`tUud-WSW90(lrL`0sFVdz7d<%|2 z=hUWNWX9nRf6XY+nBtKwVW}`vB0;*wpKUw7xYPvy(=666gl#0ju%sgh966Z1FiK6NvqJC;Tr*42WtULJY_YmvL0kGI6; z&{uZF$bKx$BA1}fxgX%HKFX!&dXehz#IpZ+^)%XQ5tT#QQlkqc*36e}!Nj-FogJ}#~3E)4EBbeVD>-Tx*Yo&1uXsZL14Uduc)e3#JI)}rS!uY!F6 zL0J5YFdDD1VJuC2x8v!?gHPI!^^4^Zy*y=yd$YzxtqBJ$16Ev^d|&-$&jM4_SUg3A z`v&ohL~L~?*G#rax3;dL*FIvew08HS#h96SqZjn_)IB+m51?W?jII=VcC=L=Hr=aD z7DmDqS&LX4)(+9`@a{v0M28%_;AIyxx=9Q<=(atd+r5;D5|`^}?X%1sq&=m>v=sf& z{GdUGvOiL4r>F+$0JHi_7Oy4?woLJoHvKETVfwcKP3_ghr+Z#|4WEq)+#vwLQ210B zHG}`(HA7H{`|dR(!$`T zdl^~GTh18_i5vlfcgbH~X*dpk><$g~p5Z?loUi$*s=9tMIyoO(pFX*b8G8)3kkI=h z8QK1AXjjfm_^M6gMw6T>dJ#JLi^kWbL^_oOC48tVvxV2q*~IRJP>Ml;@rL|=B=P>_}0}>X?gKVq=rlcHAqGjJIT~3swx(jNQ9Ld zH>ZD4k9tc4Nrb>pd7@{yPz3beBagW(PW{|hHjxM^qDrtzP)gFs@{{$OsS-hJX$$=; zvMg5~;>qDq8;aI!eebtA50hF8Z_ z?^_VaR(lsNE7YG0(GDF)mhn(y8m}j97)vS82kTBhiBy_JDp&4~8K~~cUTUGXoN{jm zk^2}1^!8Rp=;W-@L~h{Yn#HTLbpcjDU&83X>?Ue5Xhft+CGxc?C_(qDQmSMg5m7Qu zPlbkiKN4VPZ*!eqld}IZAm@R(CF4@yri-&3G zxGs?hE~F`IOV9nIPr|!Uot1S~90_Z2;65q9ePuSnyX1<40A_%AUJ`FBlcf$kho=U- ztWhf4aJmf7wWby_9K=){e1Hexk3|1{m-#{ezRP?(ym!9KFJFnq&Vn#P&aTjC`lk`| zA|^uLMInBW{sccggVi+kmB*M#b_Yc^p312AaGjy96(FmDZKV0Cc}L)Fb8(cPnUoFv z<--J;-d9g`0n@}Q@+O*SEuM$hnl*;ch4ZzoGDRLXFKD(Va2CL*-23{W zFBHZ7f$whfMPBkF3%;#5d`xrz*^Oyo@=`{Ka%@56f}K@)CO43T5#s~TUW8WSLwPUZ7v~0PWPMJ86zgZ$ z^$n+Vf^VN4iici_Y=1afd)FgQAGmUDeCA!fqcDrvDm_l|;RR|7C~96a)poD<#Qplm zy&#LUWbD1xq|hI(-!2%5p2+!#yi#V7^nG<)6+`8wgH80y8{|TY7t; z?%tBSRJ?xHrI6RzSRb-Zhrp=CiH7%}IWd?bHDvmy5pXgVL;_wS3dH46X@=aFfRAP7 z)|}wzl<7Ox4@gf+?VKFXX3PN3ZJEOhX^t=wyogF3K#?w7ni0^IOUHQpdi{D${6Ii_ z6vipz{`V;ZbKkvV@PNPa2G;<&O)Bfo1ttZ zWGDZ~Y-P$)f2r^y_jW@9b;z1;xsvvrGpnvu~cY z*Z@g7w8Tk;dYT{Mp2V6Qcf`Q36=!sxqnw?J9JL}u zlGCy-Np13dN)?Q>3I026U?G7!r!6|B94)|@AUKv6#eEaEo=e>(nFS?)a0O>#0_VZx zl=?)vSbFRd9WQ^6k-V!FM$_uIe$n;U2)WGK4;zcHq)+HDy+u8plgfunOL#usr{GGk zSlV&jiL6|DlJTtcY<8JlwLXn)J@|*{bL<2Tf-rw3_P{s(hPjZgEGbP|u6;O+_xBpz z1Fr)Nv(=O^6h`B4cvl`Mg~Dw?K;lM1^@VvGZPRU>{1qv?r6H3|qtPM9c^sM6s=g(I zk>+W=x=rz!DzPwd;ETs|DiL0rBgC__P$jE37Nh9DFY)s z7~?ir5OnA8qE+wTzH*9b`*d;|7kGDRq6e%ra*pVdZ0O~h%ILE9Y2dh$b5WicGuZXi zVx7)lv|rASf`)rW!ni9?r@_1UB2R6A7R-aeQxxTngxS`i)d_oZ*1ovr+@o>)=uy_vI+O zo3R<+Z*EvcgR*qYYjx};OhVpF;vMgo)<>R2lM|<^ZIopbw;YyL10Y~kM18QlA9lh zc8@ugOv)_5r7lCH?zo*WYOwZL)UVCp=bI)p2HAH-20vBdhR`IMBBiRb10>l~3L@cw zI3fU(E^LVaQq{6R)Hnq3R6zj!N~;Vot_&HUy7YuP=eD=u`Whq9rJloa|3EIXSmI87 z#G~lM&d*bX2f(0SCSjF8NGV}@NKFjzL{{d45iu`}!UVcIDEuF9$gC*Nq(`U6+zMqS z@E>moQCgbwC3Y4lrK#Yfl%j?;Yf6)rUnRWyge=XyLZ;;YaaqYXtxefCEf8eTBj1)L z$v6I>mJhN0lZk9`=m4QP4n-Kx%?InbfB#LDLCeQOP>nW-`>!{p4v^#tlX2!uNn}d# zsSPNHOKA!XApM`u9zc`wj~69%4S|T?Kp_P(X<)~%^Cc_HoCxEoVT{vYu;86*!r$5E zRRTOGhmy#~?JdLV-P8;FZ(DBwGzP=Q3x4Q<11+JFr;c@A&WO%%07C?UMi^1RVEMVZ z?_SxS$BL?UNMHmTy)t1C5NbPzkHbXsomA+jjfY2NMUz2%Y!4TZoR+)FxPx0WM;qa} zZ1>dSSg+#kuIF{<=1CIgiGiB%E?4#5acQFaQ-i}(%kI8yUERPcwfD*|x~r<%8-0Ad z?eYvo=a?&PUs?=DV%W;g01NFHi7iO22IQzycm1rooXOjv)g6tEX$ptCsR$XbFWi@B z+KJbjTwU*b+w_!wI*8bOjyQjGv$4|U=i6SsUaEq32ICTQ2Ycp(^9W27*N@h^x}43m zbnnK(dES)&{~s-e<#V;}8otgV$#(qSDG{ost~s zmCTqJl^m^mStS+`8&__!-$2ib#c2{k^7`mM5H_bfss?pKlOI{-Nph{lMmDR<un1IE_IHDk9T>2P8+3QQC_1*;9v+MlY6#9)VQ?5ZLa(ZO z6*k6#=Sy!dk)stFfl5NEpH!XFq(>PnUmH&oQEnaF@dd*uZ@A*Rl1j8Gswmsi%W>sx z&;1$UtCnoy>B2f~{udclRtr`eqnt9ib}7dvo>SSG@AFqihBoFkD!bg|K#K^*=Lk50 zKoD`Qsl~xSxyeS35Q~@OOKo}-9NM{lrjJ_QMj8YcZ<#+e&QldLFF!z2q-NXJK2w)Z zH23TjZyx0}8?Ds~Jo5^e1LFiA5g8p|l%Z+i{X02Otne=}?RTzO=Exra0%;MICCFMt zY7PEgpyGtmK3qOdRRs=Pb(MM*U!DKMK1^pshpczOW>*3llm6eiNxo3lu<|c~2v2Pf#gs?m>Pb?7ZIwtUp3BCwD zqZ%~w%t$f6aqp}^UQYYgm?lQ((yBCaA&Y-S+kS2$DvA7+WEPWZ{b`4m55O?azZpiZ zV1O-d@ZGQ3^H{JdbXJpvum-=gb`BaqY(afZUC7Q6DT78|$gHa^p$He?ww!yxEY_CH zqD$H&Ir3Cb?QrU7y-r-bv0+3PS#+}s@@+V?q1Vf}eDY>zeQi^RKldEj5PQkt5s~<} zt?tY9$n(MZB)6qc_1jf1UpbW&5&^1ZsUIN?U_DA3EF6e&jC`y<44ObzvBHzWKz)D_ zAKKEzOSt13pSE^b-coxbyM&(=)pdid1(#SNQ#)WSW5JA>E|VCSAseY(si0_z&cGs; z!ZqU4nP3p>%w_bF#X%lMo?rknF#rFe-6NUc1OIM6raaVC1OFV(Upw7lI46PdfIwvs z@s<{92m}r&EgE(XfdX*jt6_-0{{?o~dFzdz|25DQ2#m9!4)}9q$AO6Z$@wva@dbAU zLA$Q61m|_AsvpCzrYo)GdI%$Cn4s?NMW(a2916rSkQRke^?stPp*Gmo5oMxP2MC}D z3xy>6* z$qtt+JxA;NaNySXR$}!vqFff*oO~g+F}kbRV)p6hAFCTo(p(mq3Zj?PCgFuYH!9Oh znM?@zpHZK-rtTuuKt?r|3uzB!PDaj%lZk5f5v)_9YhVNo3)eyA`9FVt19|^R!~DV- z|2rBcm5hXh*^WU9``vsc;()j3z z_`p8{!FLHmk)i#?5E!&}WZc4KC`$f+!{wHi^S}dS>6Z|y8*vQC9wZUcy$>xxmk{bh z2m}d551Sy_!5EqKyLih@AOtz?3J`=mMFpT?70N2Ri511UfmmV(K_HVrnka;D3A4IC z=TQ9OFj(&n25JQJ3ElbjcJ_jAxdX(Ja=cr*2*398Q^HbsaKK{}eZ8CSrh=}I;XWF2xlOG7C;q=<@fkUr$8mM7UY;b5p;8^#ru460}gWyXN81EMb3TT{frv-U5yN%qBf<$7 z_4P=gNN2=~?FDa48!j^k#&SjK)J(&Y+S>4IdWyk(@`Iqz^h7XIx?1`Nf&%`i`i=)N z#OcI&ZsY}dy8Mhf?=O5_WGD^_pnu78{$?A4rM-f&he=HUG}DBm#YCdz@}PA%FI}MZ zz(kOY#(Nq(5QLQ7%U+CuQaqO91Mh=9yT%8}sU{nA_^Kmxd_wUv@wC?Io@!5#kYYik z=GGqiJWmz7l`_??uQ7~MF9Z|+-Tl;;j+Eb4I;6z~lR{VY*p^0#*9dyJnY0>lJ?i1A z6gc>H$l&z*XL|>g#XkJ^5fXw00J-meV@ik1m4K4a zWQjj>0u73`4Wg&ck27?z;?Q}>O0c0T5^`wCRPn(XvBwb$^`Ns)p$OS$G`g7D#;=*C z`CmXza=)LXQWza{zB3iK*gLPw{-xPo@3+m2XMF3QzMc_Rj9-#* z_70sFnSIK#=>qL$Avs@Qw8&r;_dINoSRpZ%p{K^rUBk?QOZ3Z;%Z@c%=f@I|NWM}? z_p7PA_+)qJy6!5ZrdPa1^!Y>hhpI{Uo#g6r%Z0kV1qdS9bV=}rc`D<~y9~7lC5en( zke>ntvk{aV$i{DD7hog}78(?|JBd;~1V)3G#6TRGux{{A#24h@4%2O`577F%$_zi! z^FoMSqU@x5Ru}wi01IXIk^V}n+BuHEMs$c-A=fgwko5gXc~{*EYZI3#O3+c^!xi?e zv}YQZLYZnQqFc|vG}CKU$$dyKRRJR`G@u~;25#UHho@zXKUJ?KAuTg!0tiW+&$aW@ zgrrVy#VVWL73ik7#eiXz!=ALMkFbC;!Y!vx%t{J={Ub4f7(w#v;3MpY_NO3F|GU6_ECv4 zhij>&Mn5`7u9&=M%4$S~BM-yn!|4e;O4qssM`e!ert#s}kHo02FKwgoYJQSbdn9<3 zJi;hQO}nP%;aQ0Z&UMa{mg5CQNeG(&ihW5aP*dru7gc%#fDOg1;d;oaC!BQ=W*t$e z-D|IFRwaM*)T1s_J(CJ-s7!vrUaU{%(LWqx3|4;eagS}y;flyvt6$Xzt~}d;3C1ab z1tp)%@ICr5Lg|=r~Zo+MMi_K3&HuD$wf4EfyEQX{e!Yyc z7{<$n0WE)rpR*hKgP#K|hDm=XqRKu)$e(0(D_X=({hObw9?YE-(C~(9?UamiC!WvS zly^?~oUzGYNy#{sv*22m`JFLXlthfldu7lI8Hn!XpO5Gzr7_|b(cNy1?gb((^^t)+1gnV)5y`Mz(wWyd{Op{H%Cja;m+(y9$c zc3|L8?%$Xq&4pfv%%_9}kExc5MS;Bo7v<6}UToi-vaBTg~@7 zF8b4Zv5Ofk55mIyC8+-)0nUcYA2Cz5a?ADzb3I3kyiS?Ejz}9U*p#AG+!?@A)D-IW zHvLT3kU!tO*%xg2=~LQ#eaS-4@=Ze-Ta9w~bdqxzgKz~G12)Y>(z{K?QkmtC=7;4g z4$3DL2z^!~c%xTU?E_u(=#;cPMC$v9Ck+1p4da!_@sV%4QZs3~8y z7kbH165^=(o+AcaAa$9iy;$r+T3Z_*dN&AZGfe6Il;FeWy-t`z&7H##khAqp)+i)S z@r#qy*D?POH`E^euu=sBx&Cit@G^w|LCFCTaS)s(@p|hFRNol<{EpUzWbl(xLWA?A zno)2<&X_jm%L0HUB2<_o4z`j;41C0?MvREGhJ=K43d9+}?mU!uhTVCB4DFg!#>PlX zUeq_(?d$%v5P&p=ctR6g*D19B7KSd0t7ELW{1S_HH1$tm#Rmgqa`W6BWZK0v-`0>& z-*{x@PafuxZvjkIm>@k?Sy~{T3I>$0F$1*DoR9uw_CbgxEhcv-RERgORjdEJcffib+zwd*b3vZUkSj1)AQK9SoN` zJSkl8sHOAkK{Xx%4bZV4;l_AMi3-aN5Ei6@@+1e^DGLcX)%--W_pt{sUUa6xyG-G8 zyZSEy=FiZDfIXxaayjX)N>o+3^}_nw+S=|4E`!Bu+9f)X7qK*v#q1$0CaJU`EI=OO z8|0ZD*V%Epm%z+*cL!LBgN0Ce?mp5y7=adFC~s*jPeJS1+vn!ve~QPz@ibzBC>%op z^jtz^q+D9#bApIIEJ*eH6Q%cTN@*YaJm_qsAa1>_NeGxu-tthd33HL zf)W~h({xAIlwjg@LZ-mu_h~UiE?AyXrWk4#-Z2|;jAqsb41$I%y$XBNL3v+O6NdP& zYQ?$o5_c2m##pFmv0`7nd;jVy>$|HT($pQv#LPhk8~)>{9F82A`v}cMtT>O9aL|L{ z>qgKi9Q7CV?=9-tEIyfb|N0HmOc}KLs@D98jYXD4wYXG0MatZbGArdNObS}`|u9cY;fEU^_lI~^vS20A;sBw>hzQP{>oClp;`9; z8HBYR$dnqcFf#=U7Yp86U3#S!rBP$tY(`BjcrMfY1;D4ff--{8U8TBS}3C@`A~*j&v}pxpn?dBEh*jY2q1n4!rmp(%xhN7yuq zkbYIl0yl2Fy)|@*JZoPLsd@^zK~EtrxR-K{bh>Xq2kX?pLdm~T!=J~ALQ4_UzP3s` z#w*q~glKFxjhe5|f`Ce_psqp9ssNSOh}NxMyb=viCe{r(AYs7^SR*_-YVsU^HpKOq zv+jFk#Ow60#8;Z5WRouCE6+c>zA>_%jrU!wXYkE6Kb+_AZSeik>#+BsmbQ7hJEEUy z%Pq80$-WOf-+0n8Y|KX=f>#L`gr%ghLsKs2^Tmd-o%1~kE4rYMspggt@yN9mZw4N{J|~VyExk9rrh{A}4xkQ? z=YpOdYtQ>9O9#k4d;qN#Hzq@QDW(r!1c)_Vs^dTFTb#|=2OWloDWS_`V#-)3)lDk| zPs?x;#b;Q=_xVS8t5IC|eQeJx1ByDnR56YxlQ^LIDX+4FH?@RiY+dwdk54que!!mw z!^E2n{-w3WX%Wgrwssf1hIGJbt>{ae!$@p-)L4@V#5`nNGkj)19d5KRgM-zR^phYa zU^?B?7$d*ek2+E~94?S+kAuo#WEBhpQV9JuvEId2#{Go{N=2xHv_ZVOAo#I0G?oy9 zV1p1M2}vL#{y)q=*@(C1A5>W8AKsDFTg(&;fnc}b{!%ZruE=5R(15`(8aY_t?v=za z5-Q}YN7VsZ%!LLt^~@yJY3kC`li2Zw=%i70`wd0gjWzG3`_HM*Le$);Wdm1Zq8eJRf zY%3BD}Soolim;<)?+8o}o`D zhihCCE_^t{-|`Z*46Og2`Q1CV>1h_$qLAN~e4HywUc3|$Gmd(p3@T|AfC?LYm3IRx$!s$azl_!gE~E{b=bFZ+7~FDXLaBA=5@`GT$- z7R3SDh}vF$*KpDlc+dT^Ef$$?kTD=o1@{Wl4WUwyVEIL#rIQ*PzzP~xcmIIWrVEHzan73 z-qUQO(&V}Pc5gxSV)YVzedS@ppwMNWMJLFz#n5jCDI+mXhArR4q%#~nmw-QSq;G}S z+94y$H)g{$(l_lX3Kr0S#CR2cHd^Itd&i62%<;T0PfD-T#vVBRT(5bSCpWe^V}zgy zS4#FXi!B3Hhj5t1VB=Ixk23hJ42C3TR z{RF7|d5$#uof8-LUIcM`0x>T?Pox&(9e90a(YKlBu@3T{G3tgZu1a>%x_Bixuw)?d3O!&!oL{XvVDvh0u_lBxu-K<;Az zx`!Wj9tXodNH9A4A(=sTfF;~d4sP&fT-_yc!tqt);Y0nO2N?^`*CS11NAJ5L| zr?PLae)=S<`%2c}c#z2|ovxD@~8y=e@- zSgKDI(vqf*MN+5#Z@AznF#0RLt8N?$i zNFA=FgagzYE7XXR6o`bGujTt+Tcgu1oI-rS57oL`(vWOABZ!ki3zu8CeAm4bg(F1O zGp8ObbartV4WH>eYkaKH$uGic$X5O|9P8~we;{WHsW0PeGtGFkC~zAA{wtK)WduF> z>3-tx?eyWWf`ZWxg#NN$-3hHt^6+Yc)XM-S(&&i4^aW+=VL%UDIOAXYV2_|3&=2MR z!)=jIRc1J?7xDE(m2-3com?teb-UxJ7-^;bX#Fr4Y14-7#3 z|L(7uk!+FP2(%cB24VmY09stXP$t|8Eext2%nhR`{|+dA(EAxnLV`ec^v1jM0^a=x z1%9Kv2^wmWlr}SA(88GlZ-Qazu3-)fMN;}G{GcEkf2!{&*xOV;US2`%C@viikBsuN zPU5g8OG*h#Nq{!FVQ-tNI1CGWV2nBnR+eF~U)v>MDJGEQerVt$q4x|Op}u}qq?B|Jk4yXXAN$1&*?z(S@D z39HjbaJHsik@hMfXdsk)qHH9w$1?cp*6-!1M+=du$2Pob8~mlqKB2f8Lx92rGDcXt zQD)AC7Pa~I5;abr%7=(1;zxxRNt6W=HAF%ge@r-oRB;)yGI_Jm08 zBPWTB8JGTxc#Mx%Bj|FgatH?V_E82r?yNoEsVxyQ1zaC2=st4GhLK$!82me!@9vHo z9-dzq49SFt4oB&BtBSiCaM(&q9sbwe4WbtMty;?rYdHFAg(cwH7i8R$MFqMNZ$Zf; zCD|hLGowgNb|{1!zrrLmPH)TxsPLGMpc<#gQ@@1%OHM7rBViSyagXU50!THvf&gU7 zfu;w@jDx>ctpX){5n+W3gG1+rj$L<^sO^TD|6sNDx!6fkmrfCbGKoh9`({wlZ{W1Z zt)6!}-Fl{G(nb7Z={;YGv?UYKIGz1qUxB(11~87mZX)DPUCGEHyQ!t$OS6H~QKr+Q z!xohV)~Y`P?c}^jyYi0Q#h^y}vGK_$%uONRdqYjkZ+TuJkMQ{wQc%;d9mjuB$D#b7 z^23oZ{UN8ixdg4BuZA7U4*VA7Oilx}bsO!;!TT6EaA)VMC9*5p8SyH$1YH6JdpIZj z4=OrpIu2W`*E0M$N7mjt6IDId53s-HsO-SX5{$8#8+>;mzi|YrbxL3$?+0N?C5uTN z!F$<>ZZn_5x#74v<1jü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 NHZnL0B_%~qMhXg!Prd*E literal 0 HcmV?d00001 diff --git a/homeworks/hw-2.tex b/homeworks/hw-2.tex new file mode 100644 index 0000000..5155448 --- /dev/null +++ b/homeworks/hw-2.tex @@ -0,0 +1,243 @@ +% Created 2023-09-25 Mon 09:52 +% Intended LaTeX compiler: pdflatex +\documentclass[11pt]{article} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{graphicx} +\usepackage{longtable} +\usepackage{wrapfig} +\usepackage{rotating} +\usepackage[normalem]{ulem} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{capt-of} +\usepackage{hyperref} +\notindent \notag \usepackage{amsmath} \usepackage[a4paper,margin=1in,portrait]{geometry} +\author{Elizabeth Hunt} +\date{\today} +\title{HW 02} +\hypersetup{ + pdfauthor={Elizabeth Hunt}, + pdftitle={HW 02}, + pdfkeywords={}, + pdfsubject={}, + pdfcreator={Emacs 28.2 (Org mode 9.7-pre)}, + pdflang={English}} +\begin{document} + +\maketitle +\setlength\parindent{0pt} + +\section{Question One} +\label{sec:orga203815} +Computing \(\epsilon_{\text{mac}}\) for single precision numbers + +\begin{verbatim} +(load "../cl/lizfcm.asd") +(ql:quickload :lizfcm) + +(let ((domain-values (lizfcm.approx:compute-maceps 1.0 + (lambda (x) x)))) + (lizfcm.utils:table (:headers '("a" "h" "err") + :domain-order (a h err) + :domain-values domain-values))) +\end{verbatim} + +(with many rows truncated) + +\begin{center} +\begin{tabular}{rrr} +a & h & err\\[0pt] +1.0 & 0.5 & 0.5\\[0pt] +1.0 & 0.25 & 0.25\\[0pt] +1.0 & 0.125 & 0.125\\[0pt] +1.0 & 0.0625 & 0.0625\\[0pt] +1.0 & 1.9073486e-06 & 1.9073486e-06\\[0pt] +1.0 & 9.536743e-07 & 9.536743e-07\\[0pt] +1.0 & 4.7683716e-07 & 4.7683716e-07\\[0pt] +1.0 & 2.3841858e-07 & 2.3841858e-07\\[0pt] +1.0 & 1.1920929e-07 & 1.1920929e-07\\[0pt] +1.0 & 5.9604645e-08 & 0.0\\[0pt] +\end{tabular} +\end{center} + +\(\epsilon_{\text{mac}}\) \(\approx\) 5.9604 \(\cdot\) 10\textsuperscript{-8} + +\section{Question Two} +\label{sec:orgdd79be1} +Computing \(\epsilon_{\text{mac}}\) for double precision numbers: + +\begin{verbatim} +(let ((domain-values (lizfcm.approx:compute-maceps 1.0d0 + (lambda (x) x)))) + (lizfcm.utils:table (:headers '("a" "h" "err") + :domain-order (a h err) + :domain-values domain-values))) +\end{verbatim} + +(with many rows truncated) +\begin{center} +\begin{tabular}{rrr} +a & h & err\\[0pt] +1.0d0 & 0.5d0 & 0.5d0\\[0pt] +1.0d0 & 0.25d0 & 0.25d0\\[0pt] +1.0d0 & 0.125d0 & 0.125d0\\[0pt] +1.0d0 & 0.0625d0 & 0.0625d0\\[0pt] +1.0d0 & 0.03125d0 & 0.03125d0\\[0pt] +1.0d0 & 0.015625d0 & 0.015625d0\\[0pt] +1.0d0 & 0.0078125d0 & 0.0078125d0\\[0pt] +1.0d0 & 0.00390625d0 & 0.00390625d0\\[0pt] +1.0d0 & 0.001953125d0 & 0.001953125d0\\[0pt] +1.0d0 & 7.105427357601002d-15 & 7.105427357601002d-15\\[0pt] +1.0d0 & 3.552713678800501d-15 & 3.552713678800501d-15\\[0pt] +1.0d0 & 1.7763568394002505d-15 & 1.7763568394002505d-15\\[0pt] +1.0d0 & 8.881784197001252d-16 & 8.881784197001252d-16\\[0pt] +1.0d0 & 4.440892098500626d-16 & 4.440892098500626d-16\\[0pt] +1.0d0 & 2.220446049250313d-16 & 2.220446049250313d-16\\[0pt] +1.0d0 & 1.1102230246251565d-16 & 0.0d0\\[0pt] +\end{tabular} +\end{center} + +Thus, \(\epsilon_{\text{mac}}\) \(\approx\) 1.1102 \(\cdot\) 10\textsuperscript{-16} + +\section{Question Three - |v|\textsubscript{2}} +\label{sec:org04608d9} +\begin{verbatim} +(let ((vs '((1 1) (2 3) (4 5) (-1 2))) + (2-norm (lizfcm.vector:p-norm 2))) + (lizfcm.utils:table (:headers '("x" "y" "2norm") + :domain-order (x y) + :domain-values vs) + (funcall 2-norm (list x y)))) +\end{verbatim} + + +\begin{center} +\begin{tabular}{rrr} +x & y & 2norm\\[0pt] +1 & 1 & 1.4142135\\[0pt] +2 & 3 & 3.6055512\\[0pt] +4 & 5 & 6.4031243\\[0pt] +-1 & 2 & 2.236068\\[0pt] +\end{tabular} +\end{center} + +\section{Question Four - |v|\textsubscript{1}} +\label{sec:orgfb57f3a} +\begin{verbatim} +(let ((vs '((1 1) (2 3) (4 5) (-1 2))) + (1-norm (lizfcm.vector:p-norm 1))) + (lizfcm.utils:table (:headers '("x" "y" "1norm") + :domain-order (x y) + :domain-values vs) + (funcall 1-norm (list x y)))) +\end{verbatim} + + +\begin{center} +\begin{tabular}{rrr} +x & y & 1norm\\[0pt] +1 & 1 & 2\\[0pt] +2 & 3 & 5\\[0pt] +4 & 5 & 9\\[0pt] +-1 & 2 & 3\\[0pt] +\end{tabular} +\end{center} + +\section{Question Five - |v|\textsubscript{\(\infty\)}} +\label{sec:org7bbdf04} +\begin{verbatim} +(let ((vs '((1 1) (2 3) (4 5) (-1 2)))) + (lizfcm.utils:table (:headers '("x" "y" "max-norm") + :domain-order (x y) + :domain-values vs) + (lizfcm.vector:max-norm (list x y)))) +\end{verbatim} + + +\begin{center} +\begin{tabular}{rrr} +x & y & infty-norm\\[0pt] +1 & 1 & 1\\[0pt] +2 & 3 & 3\\[0pt] +4 & 5 & 5\\[0pt] +-1 & 2 & 2\\[0pt] +\end{tabular} +\end{center} + +\section{Question Six - ||v - u|| via |v|\textsubscript{2}} +\label{sec:orge36996c} +\begin{verbatim} +(let* ((vs '((1 1) (2 3) (4 5) (-1 2))) + (vs2 '((7 9) (2 2) (8 -1) (4 4))) + (2-norm (lizfcm.vector:p-norm 2))) + (lizfcm.utils:table (:headers '("v1" "v2" "2-norm-d") + :domain-order (v1 v2) + :domain-values (mapcar (lambda (v1 v2) + (list v1 v2)) + vs + vs2)) + (lizfcm.vector:distance v1 v2 2-norm))) +\end{verbatim} + + +\begin{center} +\begin{tabular}{llr} +v1 & v2 & 2-norm\\[0pt] +(1 1) & (7 9) & 10.0\\[0pt] +(2 3) & (2 2) & 1.0\\[0pt] +(4 5) & (8 -1) & 7.2111025\\[0pt] +(-1 2) & (4 4) & 5.3851647\\[0pt] +\end{tabular} +\end{center} + +\section{Question Seven - ||v - u|| via |v|\textsubscript{1}} +\label{sec:orgd1577f0} +\begin{verbatim} +(let* ((vs '((1 1) (2 3) (4 5) (-1 2))) + (vs2 '((7 9) (2 2) (8 -1) (4 4))) + (1-norm (lizfcm.vector:p-norm 1))) + (lizfcm.utils:table (:headers '("v1" "v2" "1-norm-d") + :domain-order (v1 v2) + :domain-values (mapcar (lambda (v1 v2) + (list v1 v2)) + vs + vs2)) + (lizfcm.vector:distance v1 v2 1-norm))) +\end{verbatim} + + +\begin{center} +\begin{tabular}{llr} +v1 & v2 & 1-norm-d\\[0pt] +(1 1) & (7 9) & 14\\[0pt] +(2 3) & (2 2) & 1\\[0pt] +(4 5) & (8 -1) & 10\\[0pt] +(-1 2) & (4 4) & 7\\[0pt] +\end{tabular} +\end{center} + +\section{Question Eight - ||v - u|| via |v|\textsubscript{\(\infty\)}} +\label{sec:org2661676} +\begin{verbatim} +(let* ((vs '((1 1) (2 3) (4 5) (-1 2))) + (vs2 '((7 9) (2 2) (8 -1) (4 4)))) + (lizfcm.utils:table (:headers '("v1" "v2" "max-norm-d") + :domain-order (v1 v2) + :domain-values (mapcar (lambda (v1 v2) + (list v1 v2)) + vs + vs2)) + (lizfcm.vector:distance v1 v2 'lizfcm.vector:max-norm))) +\end{verbatim} + +\begin{center} +\begin{tabular}{llr} +v1 & v2 & max-norm-d\\[0pt] +(1 1) & (7 9) & -6\\[0pt] +(2 3) & (2 2) & 1\\[0pt] +(4 5) & (8 -1) & 6\\[0pt] +(-1 2) & (4 4) & -2\\[0pt] +\end{tabular} +\end{center} +\end{document} \ No newline at end of file diff --git a/virtualization/hw1.pdf b/homeworks/virtualization/hw1.pdf similarity index 100% rename from virtualization/hw1.pdf rename to homeworks/virtualization/hw1.pdf diff --git a/virtualization/img/htop.png b/homeworks/virtualization/img/htop.png similarity index 100% rename from virtualization/img/htop.png rename to homeworks/virtualization/img/htop.png diff --git a/virtualization/img/no_virtualization.png b/homeworks/virtualization/img/no_virtualization.png similarity index 100% rename from virtualization/img/no_virtualization.png rename to homeworks/virtualization/img/no_virtualization.png diff --git a/virtualization/virtual_machines.md b/homeworks/virtualization/virtual_machines.md similarity index 100% rename from virtualization/virtual_machines.md rename to homeworks/virtualization/virtual_machines.md diff --git a/virtualization/virtualization.md b/homeworks/virtualization/virtualization.md similarity index 100% rename from virtualization/virtualization.md rename to homeworks/virtualization/virtualization.md diff --git a/notes/Sep-11.org b/notes/Sep-11.org index 1568618..3d71f2f 100644 --- a/notes/Sep-11.org +++ b/notes/Sep-11.org @@ -31,17 +31,18 @@ Table of Errors (lizfcm.utils:table (:headers '("u" "v" "e_{abs}" "e_{rel}") :domain-order (u v) :domain-values *u-v*) - (fround (eabs u v) 4) - (fround (erel u v) 4)) + (eabs u v) + (erel u v)) #+END_SRC #+RESULTS: -| u | v | e_{abs} | e_{rel} | -| 1 | 0.99 | 0.0 | 0.0 | -| 1 | 1.01 | 0.0 | 0.0 | -| -1.5 | -1.2 | 0.0 | 0.0 | -| 100 | 99.9 | 0.0 | 0.0 | -| 100 | 99 | 0.0 | 0.0 | +| u | v | e_{abs} | e_{rel} | +| 1 | 0.99 | 0.00999999 | 0.00999999 | +| 1 | 1.01 | 0.00999999 | 0.00999999 | +| -1.5 | -1.2 | 0.29999995 | 0.19999997 | +| 100 | 99.9 | 0.099998474 | 0.0009999848 | +| 100 | 99 | 1 | 1/100 | + Look at $u \approx 0$ then $v \approx 0$, $e_{abs}$ is better error since $e_{rel}$ is high. diff --git a/notes/Sep-13.org b/notes/Sep-13.org new file mode 100644 index 0000000..0ebff2b --- /dev/null +++ b/notes/Sep-13.org @@ -0,0 +1,16 @@ +* Homework 2 +1. maceps - single precision + +2. maceps - double precision + +3. 2-norm of a vector + +4. 1-norm of a vector + +5. infinity-norm of a vector (max-norm) + +6. 2-norm distance between 2 vectors + +7. 1-norm distance between 2 vectors + +8. infinity-norm distance diff --git a/notes/Sep-15.org b/notes/Sep-15.org new file mode 100644 index 0000000..d5bf371 --- /dev/null +++ b/notes/Sep-15.org @@ -0,0 +1,52 @@ +* Taylor Series Approx. +Suppose f has $\infty$ many derivatives near a point a. Then the taylor series is given by + +$f(x) = \Sigma_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!}(x-a)^n$ + +For increment notation we can write + +$f(a + h) = f(a) + f'(a)(a+h - a) + \dots$ + +$= \Sigma_{n=0}^{\infty} \frac{f^{(n)}(a)}{h!} (h^n)$ + +Consider the approximation + +$e = |f'(a) - \frac{f(a + h) - f(a)}{h}| = |f'(a) - \frac{1}{h}(f(a + h) - f(a))|$ + +Substituting... + +$= |f'(a) - \frac{1}{h}((f(a) + f'(a) h + \frac{f''(a)}{2} h^2 + \cdots) - f(a))|$ + +$f(a) - f(a) = 0$... and $distribute the h$ + +$= |-1/2 f''(a) h + \frac{1}{6}f'''(a)h^2 \cdots|$ + +** With Remainder +We can determine for some u $f(a + h) = f(a) + f'(a)h + \frac{1}{2}f''(u)h^2$ + +and so the error is $e = |f'(a) - \frac{f(a + h) - f(a)}{h}| = |\frac{h}{2}f''(u)|$ + +- [https://openstax.org/books/calculus-volume-2/pages/6-3-taylor-and-maclaurin-series] + + > Taylor's Theorem w/ Remainder + + +** Of Deriviatives + +Again, $f'(a) \approx \frac{f(a+h) - f(a)}{h}$, + +$e = |\frac{1}{2} f''(a) + \frac{1}{3!}h^2 f'''(a) + \cdots$ + +$R_2 = \frac{h}{2} f''(u)$ + +$|\frac{h}{2} f''(u)| \leq M h^1$ + +$M = \frac{1}{2}|f'(u)|$ + +*** Another approximation + +$\text{err} = |f'(a) - \frac{f(a) - f(a - h)}{h}|$ + +$= f'(a) - \frac{1}{h}(f(a) - (f(a) + f'(a)(a - (a - h)) + \frac{1}{2}f''(a)(a-(a-h))^2 + \cdots))$ + +$= |f'(a) - \frac{1}{h}(f'(a) + \frac{1}{2}f''(a)h)|$ + diff --git a/notes/Sep-20.org b/notes/Sep-20.org new file mode 100644 index 0000000..ba067bb --- /dev/null +++ b/notes/Sep-20.org @@ -0,0 +1,21 @@ +* Review & Summary +Approx f'(a) with + ++ forward difference $f'(a) \approx \frac{f(a+h) - f(a)}{h}$ + ++ backward difference $f'(a) \approx \frac{f(a) - f(a-h)}{h}$ + ++ central difference $f'(a) \approx \frac{f(a+h) - f(a-h)}{2h}$ + +** Taylor Series +given $C = \frac{1}{2}(|f''(\xi)|) \cdot h^1$ + +with f.d. $e_{\text{abs}} \leq Ch^1$ + +b.d. $e_{\text{abs}} \leq Ch^1$ + +c.d. $e_{\text{abs}} \leq Ch^2$ + +$e_{\text{abs}} \leq Ch^r$ + +$log(e(h)) \leq log(ch^r) = log(C) + log(h^r) = log(C) + rlog(h)$ diff --git a/notes/Sep-22.org b/notes/Sep-22.org new file mode 100644 index 0000000..b631e3b --- /dev/null +++ b/notes/Sep-22.org @@ -0,0 +1,45 @@ +* regression +consider the generic problem of fitting a dataset to a linear polynomial + +given discrete f: x \rightarrow y + +interpolation: y = a + bx + +[[1 x_0] [[y_0] + [1 x_1] \cdot [[a] = [y_1] + [1 x_n]] [b]] [y_n]] + +consider p \in col(A) + +then y = p + q for some q \cdot p = 0 + +then we can generate n \in col(A) by $Az$ and n must be orthogonal to q as well + +(Az)^T \cdot q = 0 = (Az)^T (y - p) + +0 = (z^T A^T)(y - Ax) + = z^T (A^T y - A^T A x) + = A^T Ax + = A^T y + + +A^T A = [[n+1 \Sigma_{n=0}^n x_n] + [\Sigma_{n=0}^n x_n \Sigma_{n=0}^n x_n^2]] + +A^T y = [[\Sigma_{n=0}^n y_n] + [\Sigma_{n=0}^n x_n y_n]] + +a_11 = n+1 +a_12 = \Sigma_{n=0}^n x_n +a_21 = a_12 +a_22 = \Sigma_{n=0}^n x_n^2 +b_1 = \Sigma_{n=0}^n y_n +b_2 = \Sigma_{n=0}^n x_n y_n + +then apply this with: + +log(e(h)) \leq log(C) + rlog(h) + +* homework 3: + +two columns \Rightarrow coefficients for linear regression diff --git a/notes/Sep-25.org b/notes/Sep-25.org new file mode 100644 index 0000000..b2d63e3 --- /dev/null +++ b/notes/Sep-25.org @@ -0,0 +1,48 @@ +ex: erfc(x) = \int_{0}^x (\frac{2}{\sqrt{pi}})e^{-t^2 }dt +ex: IVP \frac{dP}{dt} = \alpha P - \beta P^2 + P(0) = P_0 + +Explicit Euler Method + +$\frac{P(t + \Delta t) - P(t)}{\Delta t} \approx \alpha P(t) - \beta P^2(t)$ + +From 0 \rightarrow T +P(T) \approx n steps + +* Steps +** Calculus: defference quotient +$f'(a) \approx \frac{f(a+h) - f(a)}{h}$ + +** Test. +Roundoff for h \approx 0 + +** Calculus: Taylor Serioes w/ Remainder +$e_{abs}(h) \leq Ch^r$ + +(see Sep-20 . Taylor Series) + +* Pseudo Code +#+BEGIN_SRC python + for i in range(n): + a12 = a12 + x[i+1] + a22 = a22 + x[i+1]**2 + a21 = a12 + b1 = y[0] + b2 = y[0] * x[0] + for i in range(n): + b1 = b1 + y[i+1] + b2 = b2 + y[i+1]*x[i+1] + detA = a22*a11 - a12*a21 + c = (a22*b1 - a12*b2) / detA + d = (-a21 * b1 + a11 * b2) / detA + + return (c, d) +#+END_SRC + +* Error +We want +$e_k = |df(h_kk) - f'(a)|$ + +$= |df(h_k) - df(h_m) + df(h_m) - f'(a)|$ + +$\leq |df(h_k) - df(h_m)| + |df(h_m) - f'(a)|$ and $|df(h_m) - f'(a)|$ is negligible