Mathematica 的替代品

计算科学 可视化 符号计算
2021-12-14 11:58:49

希望在我的工作中引入数学程序,我将有 2 个用途:

  • 在课堂(高中水平)中,提供物理思想的良好可视化,并使我的讲座更具互动性。一个例子是 Mathematica 演示项目,或简单的交互式绘图。
  • 符号计算,我使用非对易几何、代数等。

我对数学程序的经验非常有限,而对编程的经验为零。我在工作中使用 Ubuntu,在家里使用 Mac。我大部分时间都避开终端,但当它似乎是唯一的解决方案时我会使用它(有很多复制粘贴)。我用 Latex 写数学。

Mathematica 看起来很神奇也很容易,但是如果按照当前的汇率,学校许可证似乎有点贵,那么研究许可证是不可能的。

Jupyter notebook 和 Sagemath 替代品看起来不错,但我不了解 Python,不确定实现它们会有多复杂,以及制作简单的演示文稿可能会耗费多少时间。

那么几个问题:

  • 这些是我最好的选择吗?
  • 就像我解释的那样,它们对我的课堂有好处吗?
  • 与 Mathematica 相比,实施它们有多困难?
  • Sagemath 似乎有很多不同的语言,我应该专注于特定的语言(如 Maxima 或 R)吗?
2个回答

使用过 Mathematica,然后尝试 Sage,现在在 Julia 中使用 SymPy/SymEngine,显然赢家是 SymEngine.jl。Sage 很难开始工作,速度很慢,而且我发现很难开发自己的算法(这将获得不错的性能。这是关键:你可以为它编写算法,但它们不一定很快!) . 语法也很难学。

虽然我仍然喜欢 Mathematica 的笔记本,但 SymEngine.jl 有很多优点。甚至从 Julia 中使用的 SymPy.jl 也是非常好的体验(比在 Python 中使用更好)。[SymEngine.jl 是 SymPy 的 C++ 重写]。首先,它们是免费的。但最重要的是,它作为 Julia 的一部分工作,并且通过调度自然地工作。如果您有表达式aand b,那么要制作表达式a+b,代码是a+b...。一切都只是通过适当的调度工作。我的意思是,一切。您甚至不需要真正了解软件包本身。Julia 提供了一个通用的回退,inv(A)它采用矩阵的逆矩阵。如果你有一个符号表达式矩阵,那么因为符号表达式已经定义了+/通过扩展inv(A)只是工作。您甚至可以用它们做一些荒谬的事情,例如将它们放入数值 ODE 求解器中,它会像数字一样工作,并在n步骤后给出解的符号表达式。因此,如果您了解 Julia 及其 Base 库,那么您已经了解 SymEngine.jl/SymPy.jl 的所有命令。此外,您编写的每个类型稳定的 Julia 函数都可以编译为具有 C 性能的东西,因此您也不必担心。因此,您倾向于像普通的 Julia 数字一样使用它们,并带有一些特殊功能(如differentiate),并且一切都很快:使其非常易于使用。

唯一缺少的是漂亮的笔记本。您可以使用 Jupyter 笔记本,但它仍然不一样,因为您编写代码的 Mathematica 笔记本实际上有分数和所有这些。但性能和生产力的提升肯定弥补了笔记本的不足。

Sage 非常适合课堂使用。我曾经帮助一位教授在课堂上演示物理,效果很好。

使用 Sage 不需要高级编程知识。学生们将能够做到这一点,而不会像在通常的编程课上那样打破他们的头脑。您可以从本教程本书开始。在我看来,唯一让它比 Mathematica“更难”的是基于文本的输入。在 Mathematica 中,您有一个工具箱,您可以从中单击积分符号等,并且您几乎可以按照书面方程的外观进行输入。在 Sage 中,一切都必须通过文本来完成。ex2dx可能比integral(e^(-x^2), x,-oo,oo). 否则,使用 Sage 编程并不比在 Mathematica 中更难。

与其专注于 Maxima 或 R 或​​其他可能的扩展,我建议您使用 Sage 语言本身。这些扩展每个只能做一件事,您只需要在高级情况下使用这些扩展。

最后,我不知道 Sage 在研究层面的工作会有多好。我在 Sage 中为我的第一篇论文制作了数字,但发现 Mathematica 可以做积分,但 Sage 做不到。