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
符号样式使用真实的数学规则,类似于您使用代数或微积分规则手工计算极限的方式。
我想用 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
符号样式使用真实的数学规则,类似于您使用代数或微积分规则手工计算极限的方式。