📄 erfz.m
字号:
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@intersil.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;endif ~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;endf=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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -