Java 的微积分极限

Calculus Limits with Java

我想用 Java 计算极限(微积分)。我有以下 class Limit 可以计算限制:

package calculus;

public final class Limit {
    private Limit() {

    }

    public static final double limit(Function function, double approach) {
        double below = Limit.limitFromBelow(function, approach);
        double above = Limit.limitFromAbove(function, approach);
        return below == above ? below : Double.NaN;
    }

    public static final double limitFromBelow(Function function, double approach) {
        for (double d = approach - 10; d <= approach; d = approach
                - ((approach - d) / 10)) {
            if (function.apply(d) == Double.POSITIVE_INFINITY) {
                return Double.POSITIVE_INFINITY;
            } else if (function.apply(d) == Double.NEGATIVE_INFINITY) {
                return Double.NEGATIVE_INFINITY;
            } else if (Double.isNaN(function.apply(d))) {
                return function.apply(approach + ((approach - d) * 10));
            } else {
                if (d == approach) {
                    return function.apply(d);
                } else if (approach - d < 0.00000000001) {
                    d = approach;
                }

            }
        }
        return Double.NaN;
    }

    public static final double limitFromAbove(Function function, double approach) {
        for (double d = approach + 10; d >= approach; d = approach
                - ((approach - d) / 10)) {
            if (function.apply(d) == Double.POSITIVE_INFINITY) {
                return Double.POSITIVE_INFINITY;
            } else if (function.apply(d) == Double.NEGATIVE_INFINITY) {
                return Double.NEGATIVE_INFINITY;
            } else if (Double.isNaN(function.apply(d))) {
                return function.apply(approach + ((approach - d) * 10));
            } else {
                if (d == approach) {
                    return function.apply(d);
                } else if (d - approach < 0.00000000001) {
                    d = approach;
                }

            }
        }
        return Double.NaN;
    }
}

但是,我想知道:除了穷尽和递归测试之外,还有另一种计算限制的方法吗?有没有更有效的方法?

计算很多极限问题无法用数值计算,通常涉及符号规则,例如 L'Hopital 规则,因此您需要一个符号代数工具集,在 java 中不是很好,因为有没有操作超载,所有数学人员都去 python,如果你正在做一些严肃的事情,或者去 maple。 单独的数值实现不会很好,你不能简单地使用数值近似来限制,一旦你输入符号数学,数值近似就非常局限于你可以用它们实现的目标,你需要检查收敛性和各种东西,但无论如何我想你可以尝试一下它的价值,但不要在任何严肃的应用程序中使用它。

您的技术称为极限的数值逼近。它被广泛使用,易于实现,并且通常足以满足许多应用程序的需求。它易于使用,因为您只需要一个可以评估的函数即可应用它。

如果你想要另一种方式,它被称为符号代数极限计算。在这种情况下,您需要了解更多信息,而不仅仅是评估未知函数的能力。您需要一个函数的完整解析树表达式,包括自变量的指示。这不仅仅是在给定点评估函数的能力。 Python 中的一个示例如下所示:

http://scipy-lectures.github.io/advanced/sympy.html#limits

符号样式使用真实的数学规则,类似于您使用代数或微积分规则手工计算极限的方式。