【问题标题】:Choose a language to write technical engineering maths (can I use Java?) [closed]选择一种语言来编写技术工程数学(我可以使用 Java 吗?)[关闭]
【发布时间】:2010-01-27 10:07:14
【问题描述】:

我必须为一家工程公司编写一个原型应用程序。大部分工作是计算各种工程属性(我在这里说的是管道和真实的东西,而不是软件工程)。

但是,还必须有一个 GUI:

  • 参数输入
  • 显示结果
  • 一些基本图表

  • 目前的计算工作不涉及复杂的数学元素(目前没有矩阵),只是对数、平方根、相对简单的公式。稍后我将不得不做一些事情:

  • 曲线拟合
  • 数值近似

  • 我想知道 Java 是否已用于现实世界的工程应用程序?

    是否有可用于此类事情的库?

    或者我最好在 MatLab 中编写,然后通过 Java 连接到代码?

    也对其他语言开放(虽然我们是一家 Java 商店)。

    【问题讨论】:

      标签: java math matlab programming-languages


      【解决方案1】:

      我对科学/工程类型代码的 Matlab 和 Java 都有一定的经验。是的,Java 用于现实世界的科学和工程代码,是的,有可用的库。您当然可以使用其中任何一种来做您想做的事情,所以我不确定您是否可以仅根据您当前的要求明智地区分两者。我会问自己以下问题:

      1. 我在编程高级数学运算方面的能力如何?函数最小化、微分方程求解器、矩阵代数等操作。如果答案是不是很,那么请使用 Matlab,它将提供所有这些开箱即用的工具(尽管您可能需要额外的工具箱)。如果您选择 Java,请确保您对浮点运算和处理使用它时出现的各种错误非常熟悉。
      2. 我是想用 Java 编写所有代码,还是用 Matlab 编写所有代码,还是我很乐意同时使用这两种代码并与 Matlab 引擎上的 Java GUI 进行较量?我认为使用 Java 可以比使用 Matlab 做得更好(在模糊的意义上)GUI,但是 Matlab 的 GUI 工具对于大多数用户来说已经足够好了,因此将 Matlab 与 Java 集成所增加的复杂性不值得解决。但是很多 Matlab 用户并不是软件工程师。
      3. 原型工作需要什么样的开发速度?如果你在 Java 和 Matlab 方面同样熟练,那么我猜你可以在 Matlab 中做得更快,因为已经提供了数字内容,你可以专注于 GUI。但是,如果您是一名熟练的 Java 程序员,刚接触到 Matlab,您可能会决定坚持您所知道的。
      4. 如果原型成功,我将如何开发和部署生产应用程序?如果 Matlab 不符合您的部署想法,那么学习它并忘记它可能不会有任何回报。

      最后,既然您征求其他语言建议:忘记 Java,忘记 Matlab,忘记 Python,忘记 R,使用 Mathematica,它会更有趣,更强大。

      【讨论】:

        【解决方案2】:

        这听起来像是 Matlab 的工作:你没有理由不使用它。有一些用于从 Java 评估 Matlab 表达式的代码:http://www.cs.virginia.edu/~whitehouse/matlab/JavaMatlab.html

        【讨论】:

          【解决方案3】:

          Python 有几个不错的 GUI 工具包以及 NumPy,编写起来既简单又有趣。

          【讨论】:

          • 如果他在 Java 商店工作,我不会使用 python 库,尽管这可能更有趣。 GUI 似乎不是项目的主要问题,您可以在任何 Gui 框架的任何面板上绘图。
          • 这就是我提到 NumPy 的原因。它类似于 MatLab,但没有 MatLab。
          • 如果您需要与 Java 交互,可以使用 Jython。我不知道将 Jython 与 SciPy 一起使用是否有任何问题,但是将 Iron Python 与 SciPy 一起使用存在问题:您需要 IronClad 来调用内部用 C 实现的函数。
          【解决方案4】:

          我做了一些工作,我不得不用 Java 重新实现 Matlab 代码,所以这当然是可能的。由于 Matlab 能够直接对矩阵/数组等进行操作,因此与 Matlab 原始代码相比,Java 代码最终会变得非常冗长。

          您可能想查看一些数学库,看看它们是否支持您正在寻找的功能:

          【讨论】:

            【解决方案5】:

            我想 Java 会是一个不错的选择,尽管它不被认为是快速应用程序开发的典型语言。

            优点:

            • 标准库 (Swing) 中用于桌面应用程序的多功能 GUI 工具包,
            • (相对)跨平台,
            • 很棒的库,例如来自Apache;一个很棒的数学库是colt;对于图表和图表,您可能喜欢jfreechart ..

            缺点:

            • “不那么快”的原型制作能力

            进一步阅读:

            【讨论】:

              【解决方案6】:

              这主要取决于在您的环境中将数学实验室或其他数学引擎包含在您的产品中的难易程度。如果这很容易,我建议使用 mathlab,但如果不是,例如如果您有许可问题或部署问题,您最好只使用纯 Java 代码。

              【讨论】:

              • 你也可以使用 GNU octave(免费,GPL)
              【解决方案7】:

              您可能还想考虑R language

              【讨论】:

              • R 更多用于统计数据。
              【解决方案8】:

              我会搜索为进行管道计算而编写的软件。这个问题已经解决了。 (正如您所指出的,计算不一定很困难。)我建议您至少了解您可以使用哪些产品、成本是多少,以及开发成本的盈亏平衡点在哪里。

              与您编写的任何产品相比,商业产品将具有一个巨大的优势:它将拥有一个更大的用户社区,与您的原型相比,它会拥有一个更大的用户社区,他们会在更长的时间内使用它并发现错误。这也是值得的。

              您的机会成本是多少?您还能用开发时间做些什么来增加收入?

              【讨论】:

                【解决方案9】:

                不要忘记 numpy 或 scipy。两者都允许您从 Python 调用快速矩阵库。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-02-22
                  • 2016-11-11
                  • 2010-09-15
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多