sage常用命令
这里会记录一点点sage比较好用的命令,简易手册原文件丢这里了,平时再遇到一些好用的命令应该还会更新。
基本语法:
将整数转化为二进制列表
sage: 10.bits()
基本代数
解方程
solve 函数用于解方程。要使用它,先要指定变量,然后将方程(或方程组)以及要求解的变量作为参数 传给 solve。
1 | sage: var('x y p q') |
求解方程的数值解
用 find root 在区间 0 < ϕ < π/2 上寻找上述方程的解。
1 | sage: phi = var('phi') |
基本的环
• 整数环 {…,−1,0,1,2,…}, Sage 中叫 ZZ;
• 有理数环 ,即整数构成的分数,Sage 中叫 QQ;
• 实数环,Sage 中叫 RR;
• 复数环,Sage 中叫 CC;
sage: ratpoly.<t> = PolynomialRing(QQ)
ratpoly是集合的名字,自己定义
.<t>是变量的名字,自己定义
PolynomialRing()是环
QQ是有理数环
有限域还有,GF(2)、GF(2^8,modulus=[1,0,0,1,1,1,0,0,1]) ……
线性代数
使用方法 solve right. 执行 A.solve right(Y) 返回一个矩阵(或向量)X 满 足 AX = Y:
1 | sage: A = Matrix([[1,2,3],[3,2,1],[1,1,1]]) |
类似的,使用 A.solve left(Y) 求解满足 XA = Y 的 X.
矩阵所在的环影响它的性质。
matrix 命令中的第一个参数告诉 Sage 这个矩阵 是整数环 (ZZ) 上的,有理数环 (QQ) 上的,还是实数环 (RR) 上的:
1 | sage: AZ = matrix(ZZ, [[2,0], [0,1]]) |
新建一个3*3的矩阵A
sage: A = Matrix(3,range(9))
A的阶梯形式
sage: A.echelon form()
A的转置矩阵
sage: A.T == A.transpose()
A的行向量
sage: A.rows()
A的列向量
sage: A.columns()
多项式
一元多项式
三种方式创建多项式环
sage: R = PolynomialRing(QQ, ‘t’)
sage: R = QQ[‘t’]
sage: R.<t> = PolynomialRing(QQ) or sage: R.<t> = QQ[‘t’] or R.<t> = QQ[]
eg:
1 | sage: R.<t> = QQ[] |
生成随机多项式
sage: R.<y> = PolynomialRing(GF(p))
sage: S = R.random_element(degree)
多项式的系数
sage: S.coefficients()
检测多项式是否不可约:
sage: S.is_irreducible()
(把多项式每一项的模数由p转变为S对应项的系数)
sage: RS = R.quotient(S)
将整数列表转为多项式对应项的系数(阶递增)
sage: R([111,222])
222*y + 111
1 | F.<x> = GF(2^8,modulus=[1,0,0,1,1,1,0,0,1]) #感觉那个PolymonialRing都不用写了 |
多元多项式
跟定义一元多项式一样,定义多元多项式也有多种方法:
sage: GF(5)[‘z0, z1, z2’]
sage: R.<z0,z1,z2> = GF(5)[];
sage: PolynomialRing(GF(5), 3, ‘xyz’)
eg:
1 | sage: R.<x,y> = RationalField()[] |
数论
sage: R = IntegerModRing(97) or R = Zmod(97) #定义模数为97的环
sage: a = R(2) / R(3) #环上的除法
sage: a.is_square() #是否为二次剩余
sage: gcd(3,2) #最大公因数
sage: factorial(5) #阶乘
sage: next_prime() #后一个素数
sage: previous_prime() #前一个素数
sage: divisors() #所有因子
sage: sigma(n,k) #n的所有因子的k次幂之和
sage: inverse_mod(a,n) #求逆
两种因式分解
sage: factor(1024) -> 2^10
sage: prime_divisors(1024) -> [2]
有限域下开根
sage: R.<X> = PolynomialRing(Zmod(p))
sage: f = x^256 - c
sage: f.monic().roots()
sage: euler_phi(n) #求n的欧拉函数 sage: phi = n*prod([1 - 1/p for p in prime divisors(n)]);
sage: crt(m1,m2,n1,n2) #中国剩余定理 【x % n1 = m1; x % n2 = m3】
Elliptic Curves
EllipticCurve(R, [a1, a2, a3, a4, a6]) eg:
sage: ecc = EllipticCurve(GF(q), [a,b]) #初始化一条线
sage: G = ecc(x,y) #选定其上的一个点
sage: G.order() #G点的阶
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可联系QQ 643713081,也可以邮件至 643713081@qq.com
文章标题:sage常用命令
文章字数:1.1k
本文作者:Van1sh
发布时间:2020-05-20, 11:22:00
最后更新:2021-03-05, 00:22:39
原始链接:http://jayxv.github.io/2020/05/20/sage常用命令/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。