背景和问题表述
我正在尝试用 C++ 编写一个简单的程序,该程序执行向量值被积函数(在一个变量中)的自适应数值积分,即
其中。
我知道有很好的库可以做到这一点(例如GSL或Cubature),但我不能使用其中任何一个,因为它们在 GNU GPL 下。另一方面,我认为这些库有点涉及到我的简单问题。但是如果有我可以使用的库,我可能会使用它!
我需要的是一些简单的东西,比如自适应Gauss-Kronrod或Gauss-Lobatto求解器,但Newton-Cotes可能就足够了。
在此之前,我一直在使用 Gauss-Lobatto 算法,这是受此代码的启发,理想情况下,我只需修改该算法以使其能够处理向量被积函数。
在这样做之前,我尝试“矢量化”一个更简单的算法,即自适应中点规则算法(即矩形 Newton-Cotes)。这样做时,我意识到很难“矢量化”算法并保持tail-recursion。而且我注意到在这个简单算法中移除尾递归时,性能会显着下降(~30%)。所以我想自适应 Gauss-Lobatto 算法的影响会更大。
所以总结一下,这是我的一些问题:
第一季度
在编写自己的自适应算法时,如果我不能保持尾递归,我应该避免使用递归吗?
第二季度
有没有我可以使用的库来解决我的问题,并且它的许可限制比 GNU GPL 少?(LGPL 应该没问题)。
提前致谢!