在java中做微积分

时间:2010-08-06 00:53:44

标签: java calculus

我正在尝试在java(小型)中实现神经网络,并且我正在使用学习算法的反向传播。这需要找到一般的衍生物。如何在java中找到常规衍生物?

7 个答案:

答案 0 :(得分:3)

尝试Helmut Dersch的Jasymca 2 http://webuser.hs-furtwangen.de/~dersch/jasymca2/。它是一个提供GNU Octave / Matlab功能的Java API。它包括符号数学。

Jasymca最近一直在努力。该文档是从2009年3月开始的,它需要Java 1.5 +。

CAVEAT:Jasymca是GPL,所以在将其用于商业产品之前请咨询律师。

答案 1 :(得分:1)

取决于您是否拥有连续或离散数据。我猜你有离散数据,因为我们在讨论神经网络。

有限差分是近似导数的一种方法。另一种方法可能是进行某种拟合并区分拟合函数,假设它是一个众所周知的函数,具有易于计算的导数(例如,多项式)。

您的数据有多少个自变量?一个变量的功能很容易;两个或两个以上更难,因为你需要偏导数。

答案 2 :(得分:1)

好吧,如果你正在做神经网络,你很可能不需要只使用一些任意函数的一般导数。这就是你需要一个通用的微积分库。 Backprop要求您使用激活函数的衍生物。通常,您的激活函数将是sigmoid函数或双曲线tan函数。这两个你可以从维基百科得到衍生物,并简单地为你的神经网络训练提供这个功能。您不需要每次都实际解决导数。

还有其他常见的激活功能,但实际上只有少数实际使用过。只需查看衍生物并使用您想要的那个。大多数神经网络框架只是构建常规激活函数,并衍生成您使用的某种基类。以下是一些最常见的:

http://www.heatonresearch.com/online/programming-neural-networks-encog-java/chapter-3/page2.html

答案 3 :(得分:1)

您应该尝试对其进行硬编码

double derivative = (f(x+h) - f(x-h)) / (2*h);

答案 4 :(得分:0)

我很确定java没有用于微积分功能的内置库。但是,它可以在任何地方从微不足道到非常具有挑战性的自己实现差异化。

如果您已经具备存储和分析功能的能力,那么获取衍生物就像编写(非常有限的)区分规则一样简单。

但是,如果您正在考虑基于DATAsets(非抽象函数)的区分,那么您可以使用各种近似技术,例如simpsons规则。

答案 5 :(得分:0)

如果您可以向万维网发出HTTP请求,则可以创建SaturnAPI集成脚本。

披露:我参与了SaturnAPI

答案 6 :(得分:0)

如果是java,请查看DMelt math program。它是免费的。在手册中,您可以找到如何进行推导。