Appell 系列有 C++/C 实现吗?GSL 和 Boost 好像没有这个功能。
C++ 中的 Appell 函数实现?
您可能最好为您链接到的 Fortran 实现编写一个 C 包装器:Colavecchia, FD, Gasaneo, G.,“f1:计算 Appell 的 F1 超几何函数的代码”,计算机物理通信,第 157 卷,第 1 期,页。32-38 (2004),见http://cpc.cs.qub.ac.uk/summaries/ADSJ。
R 包appell包装了 Appell 的的实现。R 包提供了额外的实现(所有 Fortran 都带有 R 包装器)和参考。Python 包mpmath提供了自己的实现;你可以试着把它翻译成C。
鉴于利基领域(特殊功能),以及 C 或 C++ 实现的 Google 搜索结果的缺乏,编写包装器的过程(即使您必须学习如何去做)可能比再搜索一两天花费的时间更少对于甚至可能不存在的本机 C 或 C++ 实现。
要编写包装器,有许多可用的资源,但Ondrej Certik 的http://www.fortran90.org/src/best-practices.html#interfacing-with-c可能是描述包装现代 Fortran 代码的过程;即 Fortran 2003 或更高版本。如果 Colavecchia 实现是 Fortran 90 或 Fortran 95,那么除了接口中声明的变量的类型声明之外,您无需对其进行太多更改。关键是使用iso_c_binding模块;您可以在 Google 上搜索该术语,它将帮助您编写 C 包装器(以及扩展的 C++ 包装器)。
如果 Colavecchia 代码使用 Fortran 77、Fortran 90 或 Fortran 95,那么有许多链接将描述使您的包装器工作所需的复杂过程。在这种情况下,您可以尝试遵循这些不太容易混淆的资源之一(欢迎推荐!):
- http://caligari.dartmouth.edu/doc/solaris-forte/manuals/fortran/prog_guide/11_cfort.html
- http://www.math.utah.edu/software/c-with-fortran.html
- http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html
有以下注意事项:
- 我暂时会忽略自动语言包装器或语言标头的任何建议;如果它们有效,它们很有用,但我从来没有让它们为我工作,另外,您可能想要包装少量功能,因此自动化对您没有太大帮助。(对于大型项目,例如 PETSc,自动包装器生成是必不可少的。)
g77用gfortran;替换任何提及g77不再积极开发。
我确信还有其他警告,将“如何将 C 包装器编写为 Fortran 函数?”可能会很有用。进入一个单独的问题,在这种情况下,我将迁移我的答案并链接到它。