No BSD License
-
bern(n)
Bern Bernoulli number
-
betad(z)
BETAD Dirichlet Beta function
-
binomial(n,d)
BINOMIAL calculate the binomial coefficient
-
deta(z,k)
DETA Calculates Dirichlet functions of the form
-
erfz(zz)
ERFZ Error function for complex inputs
-
eta(z)
ETA Dirichlet Eta function
-
euler(n)
Euler Euler number
-
eulergamma
Euler-Mascheroni constant = -Psi(1) = 0.5772156649015328606...
-
fact(n)
FACT Vectorized Factorial function
-
factd(n)
FACTD Double Factorial function = n!!
-
gamma(z)
GAMMA Gamma function valid in the entire complex plane.
-
gammaln(z)
GAMMALOG Natural Log of the Gamma function valid in the entire complex plane.
-
genocchi(z)
Genocchi number
-
harm(z)
Harm Harmonic sum function valid in the entire (complex) plane.
-
lambda(z)
LAMBDA Dirichlet Lambda function
-
poch(z,n)
-
psi(z)
Psi Psi (or Digamma) function valid in the entire complex plane.
-
psin(n,z)
Psin Arbitrary order Polygamma function valid in the entire complex plane.
-
totient(n)
TOTIENT calculates the totient function (also
-
zeta(z)
ZETA Riemann Zeta function
-
View all files
from
Special Functions math library
by Paul Godfrey
Collection of Special Functions programs.
|
| erfz(zz) |
function f = erfz(zz)
%ERFZ Error function for complex inputs
% f = erfz(z) is the error function for the elements of z.
% Z may be complex and of any size.
% Accuracy is better than 12 significant digits.
%
% Usage: f = erfz(z)
%
% Ref: Abramowitz & Stegun section 7.1
% equations 7.1.9, 7.1.23, and 7.1.29
%
% Tested under version 5.3.1
%
% See also erf, erfc, erfcx, erfinc, erfcore
% Main author Paul Godfrey <pgodfrey@conexant.com>
% Small changes by Peter J. Acklam <jacklam@math.uio.no>
% 09-26-01
error(nargchk(1, 1, nargin));
% quick exit for empty input
if isempty(zz)
f = zz;
return;
end
twopi = 2*pi;
sqrtpi=1.772453850905516027298;
f = zeros(size(zz));
ff=f;
az=abs(zz);
p1=find(az<=8);
p2=find(az> 8);
if ~isempty(p1)
z=zz(p1);
nn = 32;
x = real(z);
y = imag(z);
k1 = 2 / pi * exp(-x.*x);
k2 = exp(-i*2*x.*y);
s1 = erf(x);
s2 = zeros(size(x));
k = x ~= 0; % when x is non-zero
s2(k) = k1(k) ./ (4*x(k)) .* (1 - k2(k));
k = ~k; % when x is zero
s2(k) = i / pi * y(k);
f = s1 + s2;
k = y ~= 0; % when y is non-zero
xk = x(k);
yk = y(k);
s5 = 0;
for n = 1 : nn
s3 = exp(-n*n/4) ./ (n*n + 4*xk.*xk);
s4 = 2*xk - k2(k).*(2*xk.*cosh(n*yk) - i*n*sinh(n*yk));
s5 = s5 + s3.*s4;
end
s6 = k1(k) .* s5;
f(k) = f(k) + s6;
ff(p1)=f;
end
if ~isempty(p2)
z=zz(p2);
pn=find(real(z)<0);
if ~isempty(pn)
z(pn)=-z(pn);
end
nmax=193;
s=1;
y=2*z.*z;
for n=nmax:-2:1
s=1-n.*(s./y);
end
f=1.0-s.*exp(-z.*z)./(sqrtpi*z);
if ~isempty(pn)
f(pn)=-f(pn);
end
pa=find(real(z)==0);
% fix along i axis problem
if ~isempty(pa)
f(pa)=f(pa)-1;
end
ff(p2)=f;
end
f=ff;
return
%a demo of this function is
x = -4:0.125:4;
y = x;
[X, Y] = meshgrid(x,y);
z = complex(X, Y);
f = erfz(z);
af = abs(f);
%let's truncate for visibility
p = find(af > 5);
af(p) = 5;
mesh(x, y, af);
view(-70, 40);
rotate3d on;
return
|
|
Contact us at files@mathworks.com