Code covered by the BSD License  

Highlights from
slatec

from slatec by Ben Barrowes
The slatec library converted into matlab functions.

[ar,ai,br,bi,ierr]=zlog(ar,ai,br,bi,ierr);
function [ar,ai,br,bi,ierr]=zlog(ar,ai,br,bi,ierr);
%***BEGIN PROLOGUE  ZLOG
%***SUBSIDIARY
%***PURPOSE  Subsidiary to ZBESH, ZBESI, ZBESJ, ZBESK, ZBESY, ZAIRY and
%            ZBIRY
%***LIBRARY   SLATEC
%***TYPE      ALL (ZLOG-A)
%***AUTHOR  Amos, D. E., (SNL)
%***DESCRIPTION
%
%     doubleprecision COMPLEX LOGARITHM B=CLOG(A)
%     IERR=0,NORMAL RETURN      IERR=1, Z=CMPLX(0.0,0.0)
%***SEE ALSO  ZAIRY, ZBESH, ZBESI, ZBESJ, ZBESK, ZBESY, ZBIRY
%***ROUTINES CALLED  ZABS
%***REVISION HISTORY  (YYMMDD)
%   830501  DATE WRITTEN
%   910415  Prologue converted to Version 4.0 format.  (BAB)
%***end PROLOGUE  ZLOG
persistent dhpi dpi dtheta firstCall zm ; if isempty(firstCall),firstCall=1;end; 

if isempty(zm), zm=0; end;
if isempty(dtheta), dtheta=0; end;
if isempty(dpi), dpi=0; end;
if isempty(dhpi), dhpi=0; end;
if firstCall,   dpi =[3.141592653589793238462643383d+0];  end;
if firstCall,  dhpi=[1.570796326794896619231321696d+0];  end;
firstCall=0;
%***FIRST EXECUTABLE STATEMENT  ZLOG
ierr = 0;
if( ar==0.0d+0 )
if( ai==0.0d+0 )
ierr = 1;
else;
bi = dhpi;
br = log(abs(ai));
if( ai<0.0d+0 )
bi = -bi;
end;
return;
end;
elseif( ai==0.0d+0 ) ;
if( ar>0.0d+0 )
br = log(ar);
bi = 0.0d+0;
return;
else;
br = log(abs(ar));
bi = dpi;
return;
end;
else;
dtheta = atan(ai./ar);
if( dtheta<=0.0d+0 )
if( ar<0.0d+0 )
dtheta = dtheta + dpi;
end;
else;
if( ar<0.0d+0 )
dtheta = dtheta - dpi;
end;
end;
[zm ,ar,ai]=zabs(ar,ai);
br = log(zm);
bi = dtheta;
return;
end;
end
%DECK ZMLRI

Contact us at files@mathworks.com