sagemath的相关操作倒是一直有在用,但是谈不上熟悉,还是需要整理一下。
sagemath与python的一些不同
x**y
#在两者中均表示幂
x^y
#sage中表示幂,python中则是异或
x^^y
#sage中合法且表示异或
环和域
- 整数环,ZZ
- 有理数环,QQ
- 实数域,RR
- 负数域,CC
- 多项式环,PolynomialRing(),用的最频繁的。
定义:
PR.<x> = PolynomialRing(Zmod(N))
PR:定义的环的名字
x:变量名
Zmod()可选择任意环或域
将一个数转为对应环或域上的数,举例:
a = CC(7)
print(a)
#7.00000000000000
相关数论应用
求逆元:inverse_mod(x,n)
求阶乘:factorial(x)
求欧拉函数:euler_phi(n)
中国剩余定理求解:crt([m1,m2],[n1,n2])
分解素数(包括分解多项式):factor()
离散对数求解:a的对数,base为底,ord为base的阶,operation可以是+与,默认为
如求解:a^x ≡ b (mod n)
- 通用:discrete_log(n,b,a)
- Pollard-Rho算法:discrete_log_rho(n,b,a)
- Pollard-kangaroo算法:discrete_log__lambda(n,b,a)
在python中,对于$7^3 \equiv 41 \pmod {15}$:
from sympy import *
a = discrete_log(41, 15, 7)
print(a)
#3
在sage中却实现不了
相关线代应用
定义矩阵
A = matrix(Zmod(2),[[1,2,3],[3,2,1],[1,1,1]])
print(A)
B=matrix(GF(2),A)
print(B)
'''
[1 0 1]
[1 0 1]
[1 1 1]
[1 0 1]
[1 0 1]
[1 1 1]
'''
m = matrix(GF(2), 3, 3)
print(m)
#定义3*3初始化矩阵,默认元素为0
定义向量
Y = vector(ZZ,[0,-4,-1])
print(Y)
Y = vector(GF(2),[0,-4,-1])
print(Y)
'''
(0, -4, -1)
(0, 0, 1)
'''
矩阵转置:A.transpose()
矩阵求逆:A.inverse()
特征值:A.eigenvalues()
特征向量:A.eigenvectors_right()和M.eigenvectors_left()
行列式:A.det()
秩:A.det()
解线性方程组
$A\cdot X = B$
X = A.solve_right(B)
$X\cdot A = B$
X = A.solve_left(B)
解一般和模方程
# 一般方程
x, y = var('x, y')
solve([x+y==10, x-y==0], x, y)
# 解模方程
solve_mod([x+y==66, x-y==23],97)
遇到其它的再补充。。。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1666739907@qq.com