| [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
|
|