抽象代数与编程

时间:2009-02-24 03:28:44

标签: computer-science wolfram-mathematica algebra

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

编辑:我并不是真的在看实施我学到的东西。我很想知道任何已经支持它们的语言。

11 个答案:

答案 0 :(得分:33)

对你的问题可能略有不同,但仍然......函数式语言Haskell使用代数(尤其是类别理论)中的概念,如monad,monoids,箭头等等。

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

答案 1 :(得分:20)

你想要的文字是Chuck Sims的抽象代数,计算方法。作者将建议您使用APL编程语言。这本书绝版了,但你可以在你的图书馆找到它。

还有GAP Computer Algebra System用于小组理论很有趣。

高级资源:

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

研究群体理论的一个关键事实是,每个群体都通过常规行动与permutation group同构。因此,理解群体理论的关键是理解排列群。

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

答案 2 :(得分:5)

如果您正在玩群组,则可能需要使用Group explorer对其进行可视化。

答案 3 :(得分:4)

Mathematica在处理抽象代数中的概念方面有很多有用的功能。不幸的是,它是专有软件而且非常昂贵。 Sage是一个免费的替代方案,它也有很好的抽象代数函数,尽管我没有广泛使用它,所以我不能对它进行更多的评论。

答案 4 :(得分:3)

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

但是,对这样一个群体的模块化增加并不是非常有趣。更有趣的可能是在一组大小为N的模块化加法,其中N具有除了2之外的素因子,或者大小为P,其中P是素数。要试验这些组,您可能必须自己实现这样的算术运算(这并不难)。运算符重载的语言可以使实现更方便使用。

答案 5 :(得分:3)

使用对您最有意义的语言。抽象代数包含许多符号操作(符号推动)和重写,适度的归纳,以及相当多的单调乏味。对我来说,这听起来像逻辑或函数式编程; Epigram和Agda做了一些这样的事情,Haskell在某种程度上做了(虽然我不同意幺半群是正确的,mzero和mappend没关系,mconcat:坏)。对于抽象代数,最好的编程语言是Definition notebook和tons paper。虽然现在这一天变得非常深奥。

答案 6 :(得分:3)

嗯......很遗憾地说,但我认为学习一些新的编程语言以帮助你学习抽象代数并不是很有效。

是的,Haskellers喜欢谈论类别理论,但这不是一个很好的起点。

GAP和co。用来帮助成长起来的群体理论家找到新的“怪物” - 它们是学习群体理论的坏工具。

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

答案 7 :(得分:2)

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

Kreutzer和Robbiano处理CoCoA的计算交换代数(2卷)有很好的专着:http://cocoa.dima.unige.it/kr/

在交换代数领域,它具有比Mathematica更先进和专业的功能,尽管在M中有明显的能力(在CoCoA中没有)用于量化消除(有助于处理多项式方程和不等式的系统):{{3 }}。

答案 8 :(得分:1)

我读过的唯一一本试图认真对待抽象代数概念的计算机语言书是 John J. Barton,{R。Nackman {/ 3}}。

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

我不知道这种方法是否100%在数学上是正确的。

答案 9 :(得分:0)

与Greg的答案类似,组在矩阵乘法的形式中有很好的表示,所以你经常看到使用matlab或类似工具完成的例子......

答案 10 :(得分:0)

EAAM 它是一个mathematica特定的包,也可以安装。