【发布时间】:2014-05-12 23:01:29
【问题描述】:
我必须在 Java 中实现双积分的数值计算。 专注于集成()函数,这就是我必须要做的:
public static double Integrate(Integravel integrando, boolean pontoMedio) {
double sum = 0.0;
double f2;
double deltaX = (integrando.getb() - integrando.geta())
/ (double) integrando.getN();
double deltaY = (integrando.getd() - integrando.getc())
/ (double) integrando.getN();
double deltaArea = deltaX * deltaY;
double x, xi, y, yi;
if (pontoMedio) {
xi = integrando.geta() + deltaX/2;
yi = integrando.getc() + deltaY/2;
}
else {
xi = integrando.geta() + deltaX;
yi = integrando.getc() + deltaY;
}
for (int j=0; j<integrando.getN(); j++) {
for (int i = 0; i < integrando.getN(); i++) {
if (j==0) {
x = xi;
} else {
x = xi + deltaX;
}
if (i==0) {
y = yi;
} else {
y = yi + deltaY;
}
f2 = integrando.funcao(x, y);
sum += f2*deltaArea;
}
}
return sum;
}
它确实适用于某些情况,但是每当我使 N 太大(这应该使积分计算更精确,因为它应该去无穷大),它返回一个错误的积分估计值。 我在这里做错了吗?如果需要该项目的更多代码,请告诉我。 任何帮助将不胜感激。谢谢!
【问题讨论】:
-
“太大”有多大?
-
您能否举一个您认为输出不正确的输入示例、您期望的输出以及输出的真实情况?
-
如果 n = 2,它返回正确的估计。如果它高于 100、1000 或 4000,就会出错。不确定这是否与我用来计算总和的方法有关,还是与变量分配中的某些错误有关。
-
可能是因为您只是将 N 类型转换为(双)? N 实际上是双精度数吗?
-
单步执行代码,看看有问题的变量何时开始采用错误的值。 How to debug small programs.
标签: java double numerical integral