来自预先计算的点的球体积积分 - 哪种算法最好?

计算科学 C++ 正交 一体化
2021-12-05 11:44:40

我需要一种快速准确的方法来计算 3d 球面体积积分。

我已经预先计算了高精度的数据,在每个集成步骤之前只需要一些简单的操作 - 换句话说,函数调用大多只是数组查找和乘法,因此相对便宜。

数据在球极坐标中均匀分布:θ 和 phi 每度 4 个样本,500 个径向样本。

我需要良好的精度,但我还需要执行几百万次这样的积分,所以速度是一个重要的问题。

什么算法最适合这个问题?

链接到 C++ 中的实现的奖励积分!

2个回答

所以你想评估

F=0r02π0πf(r,ϕ,θ)r2sin(θ) drdϕdθ
并且您的函数在等距网格点上可用。称呼friϕjθk

fijk=f(ri,ϕj,θk)

简单的方法就是使用梯形规则(我将省略端点处的一半):

Fijkfijkri2sin(θi)

...或者,如果您想要更高阶,请使用另一个 Newton-Cotes 公式。

只需要注意一次。有关其他方法,请参阅评论部分。

编辑:我刚刚注意到你在要求“最好”的方法,所以这对你来说可能会很无聊。

如果子体积均匀分布并且您可以假设函数在其中是恒定的,您可能只需要一个查找表以查找半径中的体积大小并进行加权求和。如果假设不正确,那么它可能不会很准确:)