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
Comment on Steven G. Johnson's code:
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
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)
>> z=7+7i; erfz2(z*i)/i, erfi(z)
-0.0561 + 1.0102i
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
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 220.127.116.119 (R2010a) (64-bit).
thank your for the hint
and you of course for sharing the function Per!
-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.
Ian Gregory, Sydney.