sagemath相关操作

  1. sagemath与python的一些不同
  2. 环和域
  3. 相关数论应用
  4. 相关线代应用
    1. 定义矩阵
    2. 定义向量
    3. 解线性方程组
    4. 解一般和模方程

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)

遇到其它的再补充。。。

SageMath简明教程 | tl2cents blog


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1666739907@qq.com
github