我需要计算 C++ 中高维积分的值。我发现许多库能够解决固定极限积分的此任务,
\int_{0}^{L} \int_{0}^{L} dx dy f(x,y) .
但是我正在研究的积分有可变的限制,
\int_{0}^{L} \int_{x}^{L} dx dy f(x,y) .
为了澄清我的意思,这里是一个简单的 2D 黎曼求和在 2D 中的实现,它返回所需的结果,
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 是公共(public)积分上限。虽然这种实现有效,但速度很慢,因此对于更高的维度来说是不切实际的。
存在更高维度的有效算法,但据我所知,库实现(例如古巴)采用固定值 vector 作为限制参数,这使得它们对我的问题毫无用处。
这有什么原因和/或有什么技巧可以规避这个问题吗?
最佳答案
您的集成顺序错误,应该是dy dx
。
您正在对三角形进行积分
0 <= x <= y <= L
在正方形 [0,L]x[0,L] 内。这可以通过在整个正方形上积分来模拟,其中被积函数 f 在三角形外部定义为 0。在许多情况下,当 f 定义在整个正方形上时,可以通过将 f 与三角形指示函数的乘积作为新的被积函数来实现。
关于c++ - 多维积分 - 耦合极限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23950862/