c++中的虚误差函数
imaginary error function in c++
是否有一个GPL库或一段代码可以免费实现虚错误函数:
erfi(x)=-i*erf(i*x)
其中x
是任何复数(或至少是实数),i
是虚单位?
一个免费/开源的C++实现,用于实参数和复杂参数的所有常见错误函数,包括erfi和缩放的erfi(以抵消erfi的指数增长)(Dawson函数),包括对实参数的erfi的优化,可在http://ab-initio.mit.edu/Faddeeva
(请注意,这个实现实际上在即将发布的SciPy 0.12版本中使用,取代了早期版本中存在准确性问题的复杂erf代码:http://projects.scipy.org/scipy/ticket/1207)
(不幸的是,评估复杂参数的特殊函数并不像将复数插入实际参数的代码中那么简单,这就是为什么Boost的实值erf中的模板化在这里没有帮助的原因。)
在发现Boost不支持erf函数的复数后,我进行了更多的搜索。我发现了几个每年100美元的C++数学包,这不能满足你的需求。然后我查看了其他语言,发现Python中的SciPy包在其erf函数中确实支持复数。
>>> from scipy.special import erf
>>> from numpy import complex
>>> erfi = lambda z: complex(0.0, -1.0)*erf(complex(0.0, 1.0)*z)
>>> z_in = complex(0.75, 1.25)
>>> erfi(z_in)
(0.09511238... + 1.0828473...j)
这与wolphramalpha的erfi(0.75+1.25*i)完全匹配。
因此,要在C++中使用它,您可以通过Boost.Python、Cython或各种其他包来集成它。有关在C++中封装Python的一些代码示例,请参阅在C++中嵌入Python。请注意,这确实增加了在您的系统上安装Python和SciPy的要求,但我没有看到许多实现不是基于订阅的,并且需要复杂的参数,所以您可能会被限制在其他语言包中,而不自己实现它。
!编辑下面显示的答案不扩展到复数编辑
如果你使用C++,那么试着查看Boost的数学库(这里定义了erf,Boost支持复数,所以你应该能够直接将它与复数值一起使用,以执行erfi的右侧计算:i*erf(i*x)。
对于x
的实际值,您可以使用GNU科学库(GSL),它实现了Dawson函数。将该函数的值乘以2π-1/2exp(x2),得到erfi(x)。
- C++17中不定参数函数的误差
- 犰狳函数的不同最小二乘误差
- variadic函数和折叠表达:试图在Visual Studio 2017中编译时致命误差
- C lambda函数转换误差
- 用struct初始化C 向量时的构造函数误差
- C 类函数链拨打编译误差
- C 中的空隙函数误差
- 控制可能达到C 中非空隙函数误差的末端
- C 中带有读取函数的编译误差
- Aruco函数估计posesinglemarkers()误差
- 带有模板构造函数的预期未合格的ID误差
- 需要说明简单的C 程序中的编译误差,以演示超载函数
- 传递variadic arg to模板函数时的汇编误差
- 功能原型误差,非空隙函数
- cmath精度误差中的楼层函数
- 在没有CRT,Memcpy和Memset固有函数的情况下链接误差
- c++中的虚误差函数
- 在C++中使用地板函数的舍入误差
- 循环函数给出"return’ with a value, in function returning void"误差
- 非常简单的优化算法产生一个函数参数误差