File Exchange

image thumbnail

erfi function

version 1.0 (840 Bytes) by

Imaginary error function (could be complex) using matlab's incomplete gamma function gammainc

5 Downloads

Updated

No License

Imaginary error function, as it is defined in Mathematica erfi(z)==erf(iz)/i (z could be complex) using the incomplete gamma function in matlab: gammainc

Comments and Ratings (11)

Janos

Janos (view profile)

Comment on Steven G. Johnson's code:

Janos

Janos (view profile)

This is a fantastic implementation. This code works about 2000x faster for me (when tested with large multidimensional arrays) than the built-in Matlab erfi function.

Thank you so much

Chris

Chris (view profile)

Thanx man.
You saved my life!

Note that an alternate way of computing erfi, which works for complex z, is to use the Faddeeva function (http://www.mathworks.com/matlabcentral/fileexchange/38787-faddeeva-function-scaled-complex-error-function), via erfi = @(z) -i * (exp(z.^2) .* Faddeeva_w(z) - 1) ... this seems to avoid the below-mentioned problems for large arguments, and is faster.

what is erfz2?

Function gives wrong results for high moduli input. For instance, using Maple ERF converted to DOUBLE (erfz2 function below):

>> z=3+2i; erfz2(z*i)/i, erfi(z)
ans =
8.6873 -20.8295i
ans =
8.6873 -20.8295i

>> z=7+7i; erfz2(z*i)/i, erfi(z)
ans =
-0.0561 + 1.0102i
ans =
7.3774e+024 +1.6269e+025i

PLH

PLH (view profile)

The program does not work as stated. When using complex z (i.e., not pure real, or pure imaginary), I get the following error:

Error using ==> gammainc
Inputs must be real, full, and double or single.

Error in ==> erfi at 19
ans=~isreal(x).*(-(sqrt(-x.^2)./(x+isreal(x))).*gammainc(-x.^2,1/2))+...

This also occurs for Example 2 provided with the code. I'm assuming it's a trivial problem since the figure above seems to correspond to what I would expect (look at the erfi article on Mathworld ). In case it's relevant, I'm using Matlab 7.10.0.499 (R2010a) (64-bit).

PLH

PLH (view profile)

kinor

kinor (view profile)

Hi Ian,

thank your for the hint

and you of course for sharing the function Per!

best

kinor

Ian

Ian (view profile)

-Good work with this function Per!!
-While preforming an optimisation using this function. A bug in MATLAB 7.10 (R2010a) was reported. The function enters an infinite loop when calling gamminc(x,a) with x<0 and abs(x)>>a. They are working to fix this in future releases.
kind regards,
Ian Gregory, Sydney.

MATLAB Release
MATLAB 7 (R14)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video