about summary refs log tree commit diff
path: root/usth/MATH2.2/labwork/1/ratpoison.m
blob: f2db823073b2cf0d2627ad61abc6820acd143c4c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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