Code covered by the BSD License  

Highlights from
slatec

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

[clnrelresult,z]=clnrel(z);
function [clnrelresult,z]=clnrel(z);
clnrelresult=[];
persistent firstCall rho sqeps x ; if isempty(firstCall),firstCall=1;end; 

;
if isempty(rho), rho=0; end;
if isempty(sqeps), sqeps=0; end;
if isempty(x), x=0; end;
%***BEGIN PROLOGUE  CLNREL
%***PURPOSE  Evaluate ln(1+X) accurate in the sense of relative error.
%***LIBRARY   SLATEC (FNLIB)
%***CATEGORY  C4B
%***TYPE      COMPLEX (ALNREL-S, DLNREL-D, CLNREL-C)
%***KEYWORDS  ELEMENTARY FUNCTIONS, FNLIB, LOGARITHM
%***AUTHOR  Fullerton, W., (LANL)
%***DESCRIPTION
%
% CLNREL(Z) = LOG(1+Z) with relative error accuracy near Z = 0.
% Let   RHO = ABS(Z)  and
%       R**2 = ABS(1+Z)**2 = (1+X)**2 + Y**2 = 1 + 2*X + RHO**2 .
% Now if RHO is small we may evaluate CLNREL(Z) accurately by
%       LOG(1+Z) = CMPLX  (LOG(R), CARG(1+Z))
%                 = CMPLX  (0.5*LOG(R**2), CARG(1+Z))
%                 = CMPLX  (0.5*ALNREL(2*X+RHO**2), CARG(1+Z))
%
%***REFERENCES  (NONE)
%***ROUTINES CALLED  ALNREL, CARG, R1MACH, XERMSG
%***REVISION HISTORY  (YYMMDD)
%   770401  DATE WRITTEN
%   890531  Changed all specific intrinsics to generic.  (WRB)
%   890531  REVISION DATE from Version 3.2
%   891214  Prologue converted to Version 4.0 format.  (BAB)
%   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
%***end PROLOGUE  CLNREL
if firstCall,   sqeps=[0.0];  end;
firstCall=0;
%***FIRST EXECUTABLE STATEMENT  CLNREL
if( sqeps==0. )
sqeps = sqrt(r1mach(4));
end;
%
if( abs(1.+z)<sqeps )
xermsg('SLATEC','CLNREL','ANSWER LT HALF PRECISION BECAUSE Z TOO NEAR -1',1,1);
end;
%
rho = abs(z);
if( rho>0.375 )
clnrelresult = log(1.0+z);
end;
if( rho>0.375 )
csnil=dbstack(1); csnil=csnil(1).name(1)~='@';
if csnil&&~isempty(inputname(1)), assignin('caller','FUntemp',z); evalin('caller',[inputname(1),'=FUntemp;']); end
return;
end;
%
x = real(z);
clnrelresult = complex(0.5.*alnrel(2..*x+rho.^2),carg(1.0+z));
%
csnil=dbstack(1); csnil=csnil(1).name(1)~='@';
if csnil&&~isempty(inputname(1)), assignin('caller','FUntemp',z); evalin('caller',[inputname(1),'=FUntemp;']); end
end
%DECK CLOG10

Contact us