SageMath


SageMath代码

1.同余运算

R.<x> = Zmod(module)[]

相当于将 x 作为需要求得的未知数 Zmod()内填入同余运算的模数

f = x^3 + ...

将同余运算的所有项移到同一边,赋值给函数 f 来表示

f.roots()

运行之后就求解出来;以列表形式返回所有解 列表内部是元组类型

f.smallroots(upper)
以upper作为求解的上限

eg

需要求解

$ n^2\equiv p^3+ap^2+bp\pmod{moudle} $

把同余式移到一边

$ 0\equiv p^3+ap^2+bp-n^2\pmod{moudle} $

已知 a,b,n,moudle 要求p

R.<p> = Zmod(moudle)[]
f = p^3 + a*p^2 + b*p - n^2 
f = f.monic()
roots = f.small_roots()

那么 p 的所有满足该同余式的解就会返回出来

PR.<x> = PolynomialRing(Zmod(n))
f = (M + x*r)**e - c
f = f.monic()
roots = f.small_roots()

2.基本运算

sage的大部分基本运算和python都一样、

比较运算符

== <=  >= < > 

数学运算符

2**3 代表幂运算  ^**的作用一样
%  对于整型参数  %代表mod运算
/
//

常见的数学函数

sqrt(4)  #2
sin()
cos()
#有些数学表达式返回的是精确的值而不是近似值,要想得到近似值使用函数n或者方法n(均有一个长名称,numerical_approx,并且函数N和n相同),它们都有可选参数prec,即所需的比特位精度以及digits,即所需的十进制位精度
exp(2)  e^2
n(exp(2))    #7.38905609893065
sin(10).n(digits=5)  #-0.54402
numerical_approx(pi,prec=200)  #3.1415926535897932384626433832795028841971693993751058209749

3.基础代数和微积分

solve函数用来求解方程

x=var('x')
solve(x^2+3*x+2,x)

也可以求解用其他变量表示另一个变量

x,b,c=var('x b c')
solve([x^2+b**x+c==0],x)
#[x == -sqrt(-b^x - c), x == sqrt(-b^x - c)]

也可以求解多个变量

x,y=var('x y')
solve([x+y==6,x-y==4],x,y)

微分函数

u=var('u')
diff(sin(u),u)
#cos(u)

求四阶导数

diff(sin(x^2),x,4)

求偏导数

求x^2 + 17*y^2

x,y=var('x,y')
f=x^2+17*y^2
f.diff(x)
f.diff(y)

积分函数

integral(x*sin(x^2),x)
-1/2*cos(x^2)

4.基础的环

整数环 ZZ

有理数环 QQ

实数环 RR

复数环 CC

ratpoly.<t>=PolynomialRing(QQ)   #这里的ratpoly和realpoly没什么很大区别无关紧要
realpoly.<z>=PolynomiaRing(RR)
factor(t^2 - 2)  #无结果
factor(z^2 -2)  #(z - 1.41421356237310) * (z + 1.41421356237310)

5.线性代数

创建矩阵和实现矩阵运算

A = Matrix([[1,2,3],[3,2,1],[1,1,1]])
w = vector([1,1,-4])
w*A
(0, 0, 0)
A*w
(-9, 1, -2)

求解矩阵方程是容易的,使用solve_right方法求解A.solve_right(Y)返回使得AX=Y成立的矩阵或向量X:

A = Matrix([[1,2,3],[3,2,1],[1,1,1]])
Y = vector([0,-4,-1])
X = A.solve_right(Y)
#(-2, 1, 0)

反斜杠 \ 可以用来代替solve_right A\Y

A\Y

#(-2, 1, 0)

6.多项式

一元多项式

第一种方法

R = PolynomialRing(QQ, 't')

这将创建一个多项式环,并告诉Sage在向屏幕打印时使用(字符串)“t”作为未定元。然而,这并未定义供Sage使用的符号t,因此您不能使用它输入属于R的多项式(例如t^2+1).

第二种方法

S = QQ['t']

第三种方法

R.<t> = PolynomialRing(QQ)
R.<t> = QQ['t']

7.数论函数

gcd(10,25)   #5

factor(35)   #5*7

next_prime(2005) #2011

previous_prime(2005) #2003

#扩展欧几里得算法
d,u,v = xgcd(12,15)
d == u*12 + v*15
True

phi=euler_phi(n)

中国剩余定理

x = crt(2, 1, 3, 5)

文章作者: f14g
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 f14g !
评论
  目录