File Exchange

## erfi function

version 1.0 (840 Bytes) by

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

Updated

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

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.

Javier Del Águila

### Javier Del Águila (view profile)

Thank you so much

Chris

### Chris (view profile)

Thanx man.
You saved my life!

Steven G. Johnson

### Steven G. Johnson (view profile)

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.

Mohamed Yassin OUKILA

what is erfz2?

Marcelo Pisani

### Marcelo Pisani (view profile)

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

kinor

### kinor (view profile)

Hi Ian,

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 7 (R14)