【问题标题】:Abstract algebra and Programming [closed]抽象代数和编程
【发布时间】:2010-10-09 11:37:03
【问题描述】:

我要开始学习抽象代数——群、环等。我有兴趣了解任何编程语言,如果有的话可以帮助我学习/尝试我在理论上学到的概念。

编辑:我并没有真正考虑实施我学到的东西。我很想知道任何已经支持它们的语言。

【问题讨论】:

    标签: computer-science wolfram-mathematica algebra


    【解决方案1】:

    也许对您的问题略有不同,但仍然......函数式语言 Haskell 使用代数(尤其是范畴论)的概念,例如单子、幺半群、箭头等等。

    使用 Haskell 的类型类,您还可以将任何对象组成一个组或一个环,例如,只需在它们上定义操作(运算符)即可。但是,确保您定义的操作实际上符合群/环公理将是您的责任。

    【讨论】:

    • 这就是我想要的答案:-)。谢谢!
    • 实际上,Haskell 非常适合抽象代数和其他离散数学,因为它使定义和评估组合数据结构变得轻量和容易。
    • 这篇论文很好地介绍了使用 Haskell 进行代数:people.cs.uu.nl/jeroen/article/algebra/index.html
    【解决方案2】:

    你想要的文本是 Chuck Sims 的 Abstract Algebra, A Computational Approach。作者会推荐你使用APL 编程语言。这本书已绝版,但您可能会在您的图书馆找到它。

    还有GAP Computer Algebra System,用于群论很有趣。

    高级资源:

    Magma:相当复杂的CAS,可以处理抽象代数中的各种概念。
    Macaulay 2:用于研究多项式环,尤其是Gröbner bases
    SINGULAR:用于研究多项式环。

    研究群论的一个关键事实是,每个群都与permutation group 同构。因此,理解群论的关键是理解置换群。

    最后,任何支持定义自己的对象并在对象的两个实例上定义二元运算符的语言都将支持通过编程学习理论。

    【讨论】:

    • 我今天在图书馆里偶然发现了“抽象代数,一种计算方法”……你能推荐一个用于练习的 APL 实现吗?
    • NARS2000 的实现很棒;我已经在 Linux 下成功使用了它(它也可以在其他系统上运行)。我听说(但没有体验过)VisualAPL(APL 的 .NET 实现)非常棒。
    • 虽然我迟到了 4 年多,但我想指出并非每个组都同构到一个排列组;相反,每个组嵌入在一个排列组中。此外,虽然这在技术上是正确的,但它并不总是最好的还原。这很像说每个整数除以一个阶乘,所以数论可以简化为对阶乘的研究。
    • 这是一个很好的答案,但是如果您正在寻找一种具有强大社区支持并在行业中有实际应用的语言,请使用 Haskell,正如 Thomas 的评论所指出的那样。近来,随着对并发、并行和分布式计算的重视,Typed FP 越来越受欢迎,实现这一点的模型似乎从 ML 和 Haskell 中借用最多(尽管 Lisp 也在做秀,但无济于事你喜欢抽象代数)。
    【解决方案3】:

    如果您正在与组一起玩,您可能希望使用Group explorer 将它们可视化。

    【讨论】:

      【解决方案4】:

      Mathematica 有很多有用的函数来处理抽象代数中的概念。不幸的是,它是专有软件并且非常昂贵。 Sage 是一个免费的替代品,它也有相当不错的抽象代数函数库,虽然我没有广泛使用它,所以我不能对此发表更多评论。

      【讨论】:

        【解决方案5】:

        任何具有固定大小无符号整数的语言(例如 C 中的 unsigned int 类型)都是这种实现的示例。无符号值的加法本质上与 Z232 上的加法相同(即整数模 232),您可能正在学习关于你的抽象代数课。

        不过,对这样一个组进行模块化添加并不是很有趣。更有趣的可能是对一组大小为 N 的模加法,其中 N 具有除 2 以外的质因子,或者大小为 P,其中 P 是质数。要试验这样的组,您可能必须自己实现这样的算术运算(这并不难)。具有运算符重载的语言可以使实现更方便使用。

        【讨论】:

        • 没错,我会为了精确而进行编辑。乘法也是,但除法是一个棘手的问题。
        • 乘法不能作为 Z/nZ 中的组运算,除非 n 是素数。这是保证逆元素存在所必需的。
        • 又是好点。谢谢,已经很多年了。 :)
        【解决方案6】:

        使用对您最有意义的语言。抽象代数包含大量的符号操作(符号推送)和重写、适量的归纳和大量的繁琐。对我来说,这听起来像是逻辑或函数式编程; Epigram 和 Agda 做了一点,Haskell 在某种程度上做了(尽管我不同意 monoid 是正确的,mzero 和 mappend 还可以,mconcat:不好)。对于抽象代数,最好的编程语言是定义笔记本和吨纸。尽管这些天来这个变得非常深奥。

        【讨论】:

          【解决方案7】:

          嗯...很抱歉,但我认为学习一些花哨的新编程语言来帮助您学习抽象代数并不有效。

          是的,Haskellers 喜欢谈论范畴论,但这并不是一个好的起点。

          GAP 和公司。被用来帮助成年的群论者寻找新的“怪物”——它们是学习群论的坏工具。

          也许你可以看看这个:http://freecomputerbooks.com/mathAlgebraBooks.html - 有很多关于这个主题的免费书籍。

          【讨论】:

          • 我在这里必须不同意。如果你有不错的编程能力,那么在 Haskell 之类的东西中实现这些概念可能是一个很棒的学习练习。类型和二元运算的抽象在概念上接近抽象代数的基础。
          • @Alex 是的,我同意实施概念是了解它们真正含义的最佳方式。另一方面,该问题专门要求支持这种概念的语言,以便不必实现它们。在这种情况下,我同意 carten。
          • 这并不是说你在语言之上实现了这些东西。该语言从根本上建立在代数概念之上:您得到代数数据类型,在 haskell 中这些数据类型形成最终的 colegbras,而在 ML 中它们形成初始代数,您不会在 all 中看到类似的结构数学等...
          • @Eric:感谢您的反对:感谢您让我知道原因,但对于拼写错误:作为非本地英语用户帮助我并纠正他们,而不是抱怨这个
          • @Eric:关于“非建设性”......我给出了诚实的答案(我确实以 old 方式学习代数并且是 Haskell/FP 用户)并指出到一些免费资源
          【解决方案8】:

          令人惊讶的是,到目前为止还没有人提到 CoCoA(Computations in Commutative Algebra 的首字母缩写),一个指向主站点的链接:http://cocoa.dima.unige.it/ 可以下载最新的 CoCoA适用于主要平台(Linux、MacOS X、Windows)的 5.0,(也可以在此处找到有用的 CoCoA 4.7 手册,因为 5.0 即将更新)。
          一个免费可用的计算机代数系统(用 C 编写)已经开发了 20 多年。其目标是专业的科学应用,其中包括 Gröbner 基计算、多项式分解、精确线性代数、希尔伯特函数、复曲面理想等。

          有像 Kreutzer 和 Robbiano 处理 CoCoA 的 Computational Commutative Algebra (2 vol.) 这样的优秀专着:http://cocoa.dima.unige.it/kr/

          在交换代数领域,它比 Mathematica 具有更高级和更专业的功能,尽管在 M 中具有出色的量词消除功能(CoCoA 中没有)(有助于处理多项式方程和不等式系统):http://www.wolfram.com/learningcenter/tutorialcollection/AdvancedAlgebra/ .

          【讨论】:

            【解决方案9】:

            我读过的唯一一本试图认真处理抽象代数概念的计算机语言书籍是 Scientific and Engineering C++: An Introduction with Advanced Techniques and Examples John J. Barton, Lee R. Nackman。

            这是一本关于 C++ 的好书,虽然很老了。

            我无法判断该方法在数学上是否 100% 正确。

            【讨论】:

              【解决方案10】:

              与 Greg 的回答类似,组以矩阵乘法的形式具有很好的表示,因此您经常看到使用 matlab 或类似工具完成的示例...

              【讨论】:

                【解决方案11】:

                EAAM 它是一个特定于数学的软件包,也可以安装。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-01-23
                  • 2014-08-12
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多