www.pudn.com > Correlation.Multiple.Cluster.rar > erfcomp.m
function E=erfcomp(z); % ERFCOMP (komplexes) Fehlerintegral % % E=ERFCOMP(Z) % % Die (komplexe) Matrix Z ist das Eingabeargument % für diese Prozedur. Zurückgeliefert wird die % komplexe Error-Funktion. % % Entnommen aus Abramowitz, % Abschnitt "Error Functions and Fresnel Integrals", % Seite 299 [zx,sx]=size(z); % Dimension der Eingabematrix x=real(z); y=imag(z); x=x(:); y=y(:); i=sqrt(-1); % E=erf(x); KOa=+0.3275911; % Hier erfolgt die Berechnung der KOA=+0.254829592; % Error-Funktion durch eine rationale KOB=-0.284496736; % Approximation für reelle Argumente. KOC=+1.421413741; KOD=-1.453152027; KOE=+1.061405429; w=1 ./(1 + KOa .*abs(x)); P=KOE .*w + KOD; P=P .*w + KOC; P=P .*w + KOB; P=P .*w + KOA; P=P .*w; Q=exp(-(x .*x)); E=(1 - Q .*P) .*sign(x); S=zeros(size(E)); abserr=100; n=1; while abserr>1E-12, fn=2 .*x - 2 .*x .*cosh(n .*y) .*cos(2 .*x .*y) + n .*sinh(n .*y) .*sin(2 .*x .*y); gn=2 .*x .*cosh(n .*y) .*sin(2 .*x .*y) + n .*sinh(n .*y) .*cos(2 .*x .*y); fgn=(fn + i .*gn) .*exp(-0.25 .*(n .^2)) ./( (n .^2) + (4 .*(x .^2))); Sakt=2 .*fgn .*exp(-(x .^2)) ./pi; abserr=max(abs(Sakt)); n=n+1; S=S + Sakt; end ki=find(x==0 & y==0); if ~isempty(ki), E(ki)=zeros(size(ki)); end ki=find(x==0 & y~=0); if ~isempty(ki), E(ki)=i .*y(ki) ./pi; end ki=find(x~=0 & y~=0); if ~isempty(ki), xk=x(ki); yk=y(ki); E(ki)=erf(xk) + (exp(-(xk .^2)) .*( (1 - cos(2 .*xk .*yk)) + i .*sin(2 .*xk .*yk)) ./(2 .*pi .*xk)); end E=E+S; E=reshape(E,zx,sx);