Questions in category: Magma (Magma)
软件 >> Magma
<[1] [2] [3] >

1. [Magma] 运行 Magma 自带的例子

Posted by haifeng on 2011-08-14 15:19:46 last update 2011-08-14 15:19:46 | Answers (0) | 收藏


load \"H28E1\"; //H28E1 表示第28章第一个例子, 位于 C:\Program Files\Magma\libs\examples, 如果是默认安装的话

2. [Magma] Magma 安装的目录结构

Posted by haifeng on 2011-08-14 15:13:47 last update 2011-08-14 15:13:47 | Answers (0) | 收藏


如果安装 Magma 时采用默认安装, 则如下

C:\PROGRAM FILES\MAGMA
├─help
├─htmlhelp
│  └─rel
├─libs
│  ├─data
│  │  ├─ecpp
│  │  │  └─Data
│  │  │      └─Weber
│  │  ├─Galois
│  │  ├─ModEq
│  │  │  ├─Atkin
│  │  │  └─Canonical
│  │  ├─Prm1000
│  │  └─TrnGps
│  ├─examples
│  ├─galpols
│  ├─intro
│  ├─isolgps
│  ├─matgps
│  ├─pergps
│  ├─prof
│  ├─simgps
│  ├─solgps
│  └─test
│      ├─FCCS
│      ├─lib
│      └─other
├─package
│  ├─Aggregate
│  │  ├─Cop
│  │  ├─SeqEnum
│  │  ├─SetIndx
│  │  ├─SetMulti
│  │  └─Tup
│  ├─Algebra
│  │  ├─AlgAss
│  │  ├─AlgFP
│  │  ├─AlgLie
│  │  └─AlgQuat
│  ├─Code
│  │  ├─CodeFld
│  │  └─CodeRng
│  ├─Commut
│  │  ├─RngMPol
│  │  └─RngMPolRes
│  ├─Crypt
│  ├─Geometry
│  │  ├─Algaem
│  │  ├─Arith
│  │  ├─Clstr
│  │  ├─Crv
│  │  ├─CrvAnJac
│  │  ├─CrvCon
│  │  ├─CrvEll
│  │  │  ├─FourDesc
│  │  │  └─SEA
│  │  ├─CrvG2
│  │  ├─CrvHyp
│  │  │  └─Canonlift_char2
│  │  ├─CrvMod
│  │  ├─CrvRat
│  │  ├─GrdRng
│  │  │  ├─Baskets
│  │  │  ├─CalabiYau
│  │  │  ├─DatabaseFano
│  │  │  ├─DatabaseK3
│  │  │  ├─Fano
│  │  │  ├─Generic
│  │  │  ├─HilbertSeries
│  │  │  ├─K3
│  │  │  └─SubKCurve
│  │  ├─GrphRes
│  │  │  ├─DualGraph
│  │  │  └─Resolution
│  │  ├─GrpPSL2
│  │  │  ├─Graphics
│  │  │  ├─GrpPSL2
│  │  │  ├─SpcHyp
│  │  │  └─SymFry
│  │  ├─LinearSys
│  │  ├─MapSch
│  │  ├─ModAbVar
│  │  ├─ModBrdt
│  │  ├─ModFrm
│  │  ├─ModSS
│  │  ├─ModSym
│  │  ├─NwtnPgon
│  │  └─Sch
│  ├─Group
│  │  ├─Grp
│  │  ├─GrpAb
│  │  ├─GrpAtlas
│  │  ├─GrpBB
│  │  ├─GrpBrd
│  │  ├─GrpCoh
│  │  ├─GrpData
│  │  │  ├─p6
│  │  │  └─perfgps
│  │  ├─GrpExt
│  │  ├─GrpFin
│  │  │  ├─Lix
│  │  │  └─SimpleRecog
│  │  ├─GrpFP
│  │  │  └─SQ
│  │  ├─GrpMat
│  │  │  ├─ClassicalRec
│  │  │  ├─FIURG
│  │  │  ├─GLConjugate
│  │  │  ├─isolgps
│  │  │  ├─lie
│  │  │  ├─Misc
│  │  │  ├─SmallerField
│  │  │  ├─Smash
│  │  │  ├─Tensor
│  │  │  └─TensorInduced
│  │  ├─GrpPC
│  │  │  ├─central
│  │  │  ├─count-pgrps
│  │  │  └─pgrps
│  │  └─GrpPerm
│  │      ├─aut
│  │      └─max
│  ├─HomAlg
│  │  └─AlgBas
│  ├─Incidence
│  │  ├─AlgSym
│  │  ├─Designs
│  │  ├─Graph
│  │  ├─Plane
│  │  └─Tableau
│  ├─Lattice
│  │  ├─Lat
│  │  └─QuadBin
│  ├─LieThry
│  ├─Module
│  │  ├─ModRng
│  │  ├─Mtrx
│  │  └─MtrxSprs
│  ├─Opt
│  │  └─LinProg
│  ├─RepThry
│  │  ├─AlgChtr
│  │  ├─GrpPC
│  │  ├─ModGrp
│  │  └─RngInvar
│  ├─Ring
│  │  ├─FldAb
│  │  ├─FldCyc
│  │  ├─FldFin
│  │  ├─FldFun
│  │  │  └─FldAb
│  │  ├─FldNum
│  │  ├─FldQuad
│  │  ├─FldRat
│  │  ├─FldRe
│  │  ├─RingExt
│  │  ├─Rng
│  │  ├─RngDiff
│  │  ├─RngInt
│  │  ├─RngLoc
│  │  ├─RngMPol
│  │  └─RngUPol
│  ├─Semigroup
│  └─System
│      └─Prof
└─pdf

3. [Magma]主要的域类型

Posted by haifeng on 2011-08-13 17:01:34 last update 2011-08-13 17:02:52 | Answers (0) | 收藏


符号含义Category
$\mathbb{Q}$ 有理数域 FldRat
$\mathbb{F}_q$ 有限域 FldFin
$F(x_1,\ldots,x_m)$ 有理函数域 FldFun
$F((x))$ Field of Laurent series RngSerLaur
$\mathbb{Q}(\sqrt{D})$ quadratic number field FldQuad
$\mathbb{Q}(\zeta_n)$ cyclotomic number field FldCyc
$\mathbb{Q}(\alpha)$ number field FldNum
$\mathbb{Q}_p$ $p$-adic field FldPad
$\mathbb{Q}_p(\alpha)$ local field FldLoc
$\mathbb{R}$ 实数域 FldPr, FldRe
$\mathbb{C}$ 复数域 FldPr, FldCom

4. [Magma]主要的环类型

Posted by haifeng on 2011-08-13 16:47:07 last update 2011-08-13 16:52:03 | Answers (0) | 收藏


符号含义Category
$\mathbb{Z}$ 整数环 RngInt
$\mathbb{Z}/m\mathbb{Z}$ ring of residue classes RngIntRes
$R[x]$ 一元多项式环 RngUPol
$F[x]/f(x)$ 多项式因子环 RngUPolRes
$R[x_1,\ldots,x_m]$ 多元多项式环 RngMPol
$R[x_1,\ldots,x_m]^G$ 不变环 RngInvar
$R[[x]]$ 幂级数环 RngSer
$O$ order in a number field RngOrd
$\mathbb{Z}_p$ $p$-adic 环 RngPad
$R_m$ 局部环 RngLoc
$V$ valuation ring RngVal

5. [Magma]属性(Attributes)

Posted by haifeng on 2011-08-13 16:09:09 last update 2011-08-13 16:34:11 | Answers (0) | 收藏


介绍

对于 Magma 的任一种结构, 都可伴之某种属性. 属性其实就是一些值, 存储在结构中, 需要使用时就用其名字字段来引用它.

属性与宏包

属性的使用在 packages 中是十分普遍的.

属性分为系统预定义属性和用户自定义属性两类

系统预定义属性

系统预定义属性的值在 Magma 启动时就自动赋予了. 可以使用 AssertAttribute 或 HasAttribute 来改变系统预定义属性的值. (为了保持向后兼容, HasAttribute 在某些时候还是可以使用的.)

对于任何可以作为 AssertAttribute 或 HasAttribute 的第一个有效参数的名字, 这个名字也是某个适当的类别结构的有效属性字段. 因此我们现在使用反引号(back quote `)方法来获取属性的值, 而不再使用旧的方法. 如

> S`Name := x;

完全等同于

> AssertAttribute(S, \"Name\", x);

函数 AssertAttribute 和 HasAttribute 的第二个参数都是字符串, 因此必须用双引号括起来.

类似的, 下面的代码

> if assigned S`Name then
> x := S`Name;
> // do something with x...
> end if;

等价于

> l, x := HasAttribute(S, \"Name\");
> if l then
> // do something with x...
> end if;

注意: 当系统属性没有被设定时, 使用反引号 ` 引用它并不会触发计算其值(但相应的内在函数会计算, 如果存在的话), 反而会出现错误. 因此我们常用 assigned 来测试属性是否确实被设定了.

用户自定义属性

6. [Magma]List

Posted by haifeng on 2011-08-13 15:51:41 last update 2011-08-13 15:52:22 | Answers (0) | 收藏


List

Magma 中的 List 是有限个对象的一个有序排列. 它不同于序列(sequence)必须属于某个共同的结构. List 的存储并不是紧凑的, 对于List, 所提供的运算也并不广泛. 只是用于为用户临时把各种对象放在一起而已.

构造方式

[**]//空的 List
[* e1,e2,...,en *]// ei 可以是表达式

7. 编程生成 Lucas 数列

Posted by haifeng on 2011-08-13 15:33:42 last update 2011-08-13 15:33:42 | Answers (1) | 收藏


使用 Magma 编程生成 Lucas 数列

8. 编程生成 Fibonacci 数列

Posted by haifeng on 2011-08-13 15:25:52 last update 2011-08-13 15:25:52 | Answers (3) | 收藏


使用 Magma 编程生成 Fibonacci 数列

9. [Magma]函数的定义

Posted by haifeng on 2011-08-13 14:50:55 last update 2021-03-14 18:49:59 | Answers (0) | 收藏


Magma 中函数的定义有两种句法:

  • f := function(x1,...,xn: parameters)
        statements
    end function;
    
  • function f(x1,...,xn: parameters)
        statements
    end function;
    

函数体中至少有一句应是 return 语句, 可以返回多个值, 形如

return expression,...,expression;

当在 if ... then ... else 结构中, 如果要返回无定义的值, 则可使用下划线 _ , 这可以使得函数体的所有分支的返回值数目都是一样的.


参数的给定

参数的给定必须是逗号分隔的列表形式, 形如:

identifier1 := value, identifier2 := value, identifier3 := value

两者的区别

这两种定义方式的唯一区别在于递归调用时, 第一种形式的函数 f 不能在其定义体中调用 f 自己, 必须使用 $$ 来指代 f 自身. 而第二种形式的函数可以在定义体中调用函数自身.

例子: 生成 Fibonacci 数列


可变参数的函数定义方式

  • f := function(x1,...,xn,... : parameters)
        statements
    end function;
    
  • function f(x1,...,xn,... : parameters)
        statements
    end function;
    

这种函数在调用时可以传递多于 n 个参数. 形如: $f(y_1,...,y_m)$, $m\geqslant n$.

  • 对于 $i < n $, 实参 $y_i$ 被绑定到虚参 $x_i$ 上;
  • 对于 $i\geqslant n$, $y_i$ 被绑定到 $x_n$ 作为一个列表 $[*y_n,\ldots,y_m*]$.

 


简写方式

当函数体非常简单, 可以用一个表达式来定义时可以使用下面的简写方式来定义.

  • f := func < x1,...,xn : parameters | expression >;
    
  • f := func < x1,...,xn, ... : parameters | expression >;
    

10. 编程寻找 amicable 数对

Posted by haifeng on 2011-08-10 16:44:13 last update 2011-08-13 10:18:58 | Answers (0) | 收藏


// prints all amicable numbers up to 100000
d:=func < m | DivisorSigma(1,m)-m >;
for m:=2 to 100000 do
    n:=d(m);
    if m ge n and d(n) eq m then
        print m, n;
    end if;
end for;

这里函数 DivisorSigma(i,n) 的功能是:

\[ \sigma_i(n)=\sum_{d|n}d^i \]
<[1] [2] [3] >