2015-07-10 119 views
6

我想用Java计算极限(微积分)。我有以下类Limit可以计算范围:微积分极限与Java

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; 
    } 
} 

不过,我想知道:是否有另一种方法来计算比疲惫和递归测试其他限制?有没有更有效的方法?

+0

如果我是你,我会研究L'Hopital的评估限制规则。它可能非常有帮助,尽管你可能需要在'Function'类中添加一些方法。 (如下所示:http://tutorial.math.lamar.edu/Classes/CalcI/LHospitalsRule.aspx) – StephenButtolph

回答

4

你的技术被称为极限的数值近似。它被广泛使用,实施起来很简单,而且对于许多应用程序而言通常足够好。它很容易使用,因为您需要的只是一个您可以评估以应用它的功能。

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

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

象征式的使用方式类似,您可以通过使用代数演算或规则的手摸出限制真正的数学规则。

+0

谢谢你的附录。 –

1

计算许多限制问题不能用数字来完成,其中涉及符号规则,比如L'Hopital的规则,因此您需要一个符号代数工具集,这在java中不是很好,因为没有操作重载,所有如果你正在做一些严肃的事情,数学家们会去蟒蛇,或枫树。 一个单独的数值实现不会很好,你不能简单地使用限制数字的近似值,一旦你输入符号数学数值近似值是非常有限的,你可以用它们实现,你需要检查收敛和各种的东西,但无论如何,我想你可以有它的价值,但不要在任何严肃的应用程序中使用它。

+0

我发现符号规则在微积分中很重要。 – HyperNeutrino

+0

谁downvoted和为什么请。 – Snickers3192