function [root,ea,iter]=modsecantmethod(func,xr,del,es,maxit,varargin) % Modified secant method - uses a numerical derivative to find the solution % input: % func = name of function % xr = initial guess % del = perturbation from initial guess, to calculate slope % es = desired relative error (default = 0.0001%) % maxit = maximum allowable iterations (default = 50) % p1,p2,... = additional parameters used by function % output: % root = real root % ea = approximate relative error (%) % iter = number of iterations if nargin<3,error('at least 3 input arguments required'),end if nargin<4|isempty(es),es=0.0001;end if nargin<5|isempty(maxit),maxit=50;end iter = 0; while (1) xrold = xr; xr = xr - del*xr*func(xr)/(func(xr+del*xr)-func(xr)); iter = iter + 1; if xr ~= 0, ea = abs((xr - xrold)/xr) * 100; end if ea <= es | iter >= maxit, break, end end root = xr; end