【发布时间】:2014-05-30 09:08:23
【问题描述】:
我需要在 C++ 中计算高维积分的值。我找到了许多能够解决固定极限积分任务的库,
\int_{0}^{L} \int_{0}^{L} dx dy f(x,y) .
但是我正在查看的积分有可变限制,
\int_{0}^{L} \int_{x}^{L} dx dy f(x,y) .
为了澄清我的意思,这是一个简单的二维黎曼和实现,它返回所需的结果,
int steps = 100;
double integral = 0;
double dl = L/((double) steps);
double x[2] = {0};
for(int i = 0; i < steps; i ++){
x[0] = dl*i;
for(int j = i; j < steps; j ++){
x[1] = dl*j;
double val = f(x);
integral += val*val*dl*dl;
}
}
其中 f 是某个任意函数,L 是常见的积分上限。虽然此实现有效,但速度很慢,因此对于更高维度不切实际。
存在用于更高维度的有效算法,但据我所知,库实现(例如 Cuba)采用固定值向量作为限制参数,这使得它们对我的问题无用。
这有什么原因和/或有什么技巧可以规避这个问题吗?
【问题讨论】:
-
你也有问题吗? (除了旧约)
-
是的,我的问题是,是否有任何有效的库例程可用和/或任何技巧来使标准方法适应我的问题。答案中提供的实现有效,但对于更高维度是不切实际的。我稍微改述了这个问题以澄清这一点。
-
[cuba] 标签与什么有什么关系?
-
Cuba 是一个解决固定积分限制问题的库示例(但据我所知,耦合限制不是)。 feynarts.de/cuba
-
@user22496 cuba 标签声明:Cuba is a Ruby microframework for web development.
标签: c++ numerical-methods integral