【问题标题】:Bessel library function in JavaJava中的贝塞尔库函数
【发布时间】:2026-02-15 22:55:01
【问题描述】:

我正在寻找与 Excel 函数 BESSELI 匹配的 Java 贝塞尔函数,提供描述:


返回修改后的贝塞尔函数,相当于为纯虚参数计算的贝塞尔函数。

语法 贝塞利(x,n)

X 是评估函数的值。

N 是贝塞尔函数的阶数。如果 n 不是整数,则将其截断。


我找到了看起来很接近的东西,但是贝塞尔函数有很多不同的类型......

我的另一个选择是尝试得出一个近似值,但这听起来很难。谁能给我任何关于如何在 Java 中表示该 excel 函数的好建议?

【问题讨论】:

  • 我认为只有一种“类型”的 Bessel 函数 (en.wikipedia.org/wiki/Bessel_function),虽然顺序不同,但你找到的任何东西都应该有效。
  • 不,不是真的。有J和Y,I和K,ber和bei,ker和kei等,都是n阶。
  • 对,我现在依稀记得..对不起。虽然我认为大多数处理贝塞尔函数的库可能会支持你可能需要的任何东西。

标签: java excel bessel-functions


【解决方案1】:

我认为您应该能够很容易地移植其中之一:

http://www.astro.rug.nl/~gipsy/sub/bessel.c

【讨论】:

  • 寻找 bessk0、bessk1、bessk。
  • 现在只看源代码...看起来很有希望。谢谢。
【解决方案2】:

JScience 提供了一个类SpecialMathsUtils 具有修改的贝塞尔函数。

如果 Excel 函数在当前形式/实现中对您特别重要,您可以通过启动 Excel COM 对象并在 Excel 中调用该方法来直接使用 Excel。我在使用JACOB 之前已经这样做了,它工作正常。

但它确实取决于您的用例、性能标准和部署场景。

【讨论】:

  • 由于各种原因(包括性能),我目前正试图摆脱 excel 模型,但感谢您的建议。
  • 很公平。刚刚修改了上面的re。 JScience 的东西
  • JScience 库似乎只提供 0 和 1 阶的修改 Bessel 函数,而不是问题中要求的 N。
【解决方案3】:

挖出一份 Numerical Recipes 的副本,您可以在 Fortran、C 和 C++ 风格中找到它(或者,如果您的库非常好,还可以在 Basic 和 Pascal 中找到)并进行翻译。按照外来函数的通常标准,贝塞尔函数非常“简单”。欲了解更多信息,您可以从http://mathworld.wolfram.com/BesselFunction.html开始

【讨论】:

    【解决方案4】:

    您可以使用数学函数数字图书馆:

    http://dlmf.nist.gov/

    以下是我从经验中学到的一些关于 Java 编程和计算特殊函数的简短内容。

    如果您有足够的 CPU 能力这样做,请尽可能使用 BigDecimal。目前(2015 年 7 月),微软似乎在 .NET 框架中没有内部任意数值精度库。这使得科学计算变得棘手。我不知道他们是如何达到在 VB6/VBA for Excel 中所做的精确度的。

    另一方面,BigDecimal 相对容易使用。一位朋友向我介绍了 BigDecimal,并在 Murach 的一本关于 Java 5 的书中读到了它。我强烈推荐 Oracle 文档:

    http://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html

    其次,正如您可能已经观察到的那样,浮点误差与特殊函数近似中引入的数学数值误差之间存在差异。数学数值误差和浮点误差共同使应用程序开发变得困难。使用许多不同的程序来检查你自己和你的计算。

    第三,BigDecimal 的字符串构造函数在许多情况下比双精度构造函数更可取。请参阅上面的 Oracle 文档。

    第四,在使用具有 MathContext 无限精度的 BigDecimal 时要非常小心。请注意,您可能必须使用 setScale 来介绍应用程序需要多少个小数位,以避免无限重复小数表达式以及 JVM 抛出的异常。

    第五,首先尝试检查第一类修正贝塞尔函数的整数参数。此外,您可以根据可用的递归关系或根据它们作为退化超几何函数的定义来计算 Bessel 函数。

    最后,

    祝你好运!

    【讨论】:

      【解决方案5】:

      或参考Abramowitz and Stegun。它们对所有这些功能都有很好的表示。易于编程。

      【讨论】: