【问题标题】:Numerical Double Integration in JavaJava中的数值二重积分
【发布时间】: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


【解决方案1】:

i 不为0 时,y 的值应为y + deltaY,而不是yi + deltaYx 需要进行类似的更改。

使用当前代码,每个循环的第一次和第二次迭代将得到正确的xy。第三次及后续迭代将继续使用 xy 值进行第二次迭代。

您正在处理另一个问题,但您可能不知道。直到某一点,增加 N 会提高准确性,但使用非常大的 N 会降低准确性。误差是两项之和,浮点舍入误差 + 由于实际函数之间的差异而产生的误差和由于 N 的有限性而导致的近似值。第一项随着 N 的增加而增加,因为您进行了更多的计算。随着 N 接近无穷大,第二个减少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2016-12-13
    • 2019-11-22
    • 2019-05-07
    • 2012-02-07
    • 2020-12-25
    • 1970-01-01
    相关资源
    最近更新 更多