about summary refs log tree commit diff
path: root/usth/MATH2.2/labwork/1/ratpoison.m
diff options
context:
space:
mode:
authorNguyễn Gia Phong <vn.mcsinyx@gmail.com>2019-12-16 21:31:18 +0700
committerNguyễn Gia Phong <vn.mcsinyx@gmail.com>2019-12-16 21:31:18 +0700
commite461df7573c2b7b7e26c965d8cf2d8e175d67378 (patch)
tree193b8439edac52c1749764395fe5f7787889eda9 /usth/MATH2.2/labwork/1/ratpoison.m
parentc1008fe39217be7f91f0ea23483e747bfbc5743e (diff)
downloadcp-e461df7573c2b7b7e26c965d8cf2d8e175d67378.tar.gz
[usth/MATH2.2] Numerical Methods
The future starts now.
Diffstat (limited to 'usth/MATH2.2/labwork/1/ratpoison.m')
-rw-r--r--usth/MATH2.2/labwork/1/ratpoison.m15
1 files changed, 15 insertions, 0 deletions
diff --git a/usth/MATH2.2/labwork/1/ratpoison.m b/usth/MATH2.2/labwork/1/ratpoison.m
new file mode 100644
index 0000000..f2db823
--- /dev/null
+++ b/usth/MATH2.2/labwork/1/ratpoison.m
@@ -0,0 +1,15 @@
+function [x fx ea i] = ratpoison (f, df, x0, es = 0.00000001, imax = 20)
+  nargin < 2 && error ('ratpoison requires at least 2 ingredients');
+  [x fx dfx ea i] = deal (x0, f (x0), df (x0), 1, 0);
+  while (ea > es && i++ < imax)
+    [xold x] = deal (x, x - fx/dfx);
+    [fx dfx] = deal (f (x), df (x));
+    if (fx == 0)
+      ea = 0;
+      break;
+    elseif (x)
+      % just drop the percent BS
+      ea = abs ((x - xold) / x);
+    end
+  end
+end