Magma是一款由悉尼大学数学与统计学系计算代数学小组开发的功能强大的代数计算程序包,该软件专门解决代数系统中的数论、代数几何和代数组合学的计算问题。
新的代数计算软件包——Magma
前言
Magma提供了用户自定义或直接利用诸如群,环,域,模块,代数,计划,曲线,图表,设计,编码和其他很多代数系统进行计算的一个数学环境、Magma还支持很多数据库,这些数据库旨在帮助那些本质上是代数的数学过的计算研究。Magma的核实现了代数系统五大分支结构的定义和相关操作,即组论,环论,场论,模块理论和代数理论,这也是其计算功能里的原因所在。
一、Magama安装
可以在官网上直接免费下载:MAGMA | CTG (cncr.nl),可以基于Linux系统,也可以基于Windows系统。
选择对应的操作系统进行安装,我选择的是Windows版本。或者参考链接计算代数群论magma完整安装程序直接进行安装。Magama安装好后的界面是:
二、基本操作
进入 Magma 后,输入命令。每个完整的命令必须以分号 (;) 结束。然后按回车键(Enter)。
> print 2 + 4;
6
三、多项式运算
> P<x> := PolynomialRing(IntegerRing());
> P;
Univariate Polynomial Ring in x over Integer Ring #相当于其他语言带入的库
> (x^6-5*x^2+2)*(17*x^3-1); #多项式相乘
17*x^9 - x^6 - 85*x^5 + 34*x^3 + 5*x^2 - 2
> Factorization(x^8 - 1); #因式分解
[
<x - 1, 1>,
<x + 1, 1>,
<x^2 + 1, 1>,
<x^4 + 1, 1>
]
要退出 Magma,请在一行的开头键入 control-d。 (按住“control”键并输入“d”。)
1.求商和余数
对于欧几里德环的元素,如整数和多项式,“除法”意味着求商和余数。这些操作符分别是 div 和 mod。
> 23 div 4,23 mod 4;
5 3
表示23除以4得5余3。(注意如果要打印多个表达式,要用逗号隔开。)对于实数和有理数等字段元素,使用斜杠 (/) 运算符计算精确除法。例如
> (2/3) / (4 + 7/9);
6/43
> 4.7 / 2.6;
1.80769230769230769230769230768
2.函数输出
计算18!输入语句,代码如下(示例):
> Factorial(18);
6402373705728000
如果函数有多个参数,则它们必须用逗号分隔。要找到 15130 和 3162 的最大公约数,您可以输入
> GCD(15130, 3162);
34
四、加载文件
到目前为止,您看到的 Magma 代码示例非常简短。当您开始编写更长的程序时,您会发现在 Magma 之外的文本文件中开发代码会很方便。然后你可以要求 Magma 将文件的内容加载到 Magma 中:
load "filename";
这里的“文件名”是文件的名称。 Magma 将使用此输入,就好像您是从键盘输入的一样。Magma 中有很多布尔函数。它们的名称后面通常是对要测试的属性的描述,中间没有空格。例如:
> IsPrime(357);
false
当您希望计算机根据特定条件是真还是假执行不同的操作时,可以使用 Magma 的 if 语句。以下示例使用公式 Area = p s(s − a)(s − b)(s − c) 计算三角形的面积,给定 a、b、c 作为边长,其中 s = (a + b + c)/2。但是,它会检查三角形是否是非退化的,即任意两条边的和是否大于第三条边。 (符号 gt 表示“大于”。)如果 if 之后的条件为真,Magma 执行 then 和 else 之间的语句,如果为假,则执行 else 和 end if 之间的语句;
> a := 6; b := 8; c := 10;
> if ((a+b) gt c) and ((b+c) gt a) and ((c+a) gt b) then
> s := (a+b+c)/2;
> "Area is", Sqrt(s*(s-a)*(s-b)*(s-c)), "square units.";
> else
> "Triangle is degenerate.";
> end if;
Area is 24.00000000000000000000000000 square units.
五、集合、序列、笛卡尔积
集合和序列都是对象的集合,它们都处于相同的代数结构(宇宙)中。集合是无序的,因此一个元素最多只能在一个集合中出现一次。但是,顺序是有序的,因此可以重复。集合用 { } 括起来,序列用 [ ] 括起来。例如:
> t := { (-11)^2, (-7)^2, (-5)^2, (-3)^2, 3^2, 5^2, 7^2, 11^2 };
> q := [ (-11)^2, (-7)^2, (-5)^2, (-3)^2, 3^2, 5^2, 7^2, 11^2 ];
> t, q;
{ 9, 25, 49, 121 }
[ 121, 49, 25, 9, 9, 25, 49, 121 ]
序列 q 的第 i 个条目是 q[i]:
> q[10] := q[5] - 4*q[1]; q[2] := 1000;
> q;
[ 121, 1000, 25, 9, 9, 25, 49, 121, undef, -475 ]
Magma 有针对集合和序列的特殊构造函数。表达方式
{i..j by k} or [i..j by k]
表示等差级数 i, i + k, i + 2k, . . . , j 作为一组或整数序列。
六、迭代语句(循环)
Magma 的迭代语句类似于其他编程语言中的语句。它们是:
• while 布尔表达式 do
语句
end while
• repeat
语句
until 布尔表达式;
• for 对于域中的变量,do
语句
end for;
总结
最近在学习密码学的相关知识时,发现Matlab在GF( P )上进行操作时,困难很多,后来一些参考文献中发现了一个新的代数计算软件包——Magma。比如对于求解多变元高次方程时,被公认用来实现Grobner计算法的最佳环境就是使用Magma代数系统软件。