abs(x)
:x
的绝对值或向量x
的长度adj(m)
: 矩阵m
的伴随矩阵,等于m
的行列式乘以m
的逆矩阵and(a,b,...)
: 逻辑与arccos(x)
:x
的反余弦$\cos^{-1}(x)$arccosh(x)
:x
的反双曲余弦$\cosh^{-1}(x)$arcsin(x)
:x
的反正弦$\sin^{-1}(x)$arcsinh(x)
:x
的反双曲正弦$\sinh^{-1}(x)$arctan(y,x)
:y/x
的反正切$\tan^{-1}(y/x)$arctanh(x)
:x
的反双曲正切$\tanh^{-1}(x)$arg(z)
: 复数z
的幅角besselj(x,n)
: 贝塞尔函数binding(s)
: 符号表达式的原本形式binomial(n,k)
: 二项式系数, 或组合数ceiling(x)
: 大于或等于x
的最小整数check(x)
: 测试表达式x
的值并决定是否停止脚本choose(n,k)
: 组合数circexp(x)
: 计算x
表达式,将其中的三角函数和双曲函数转换为指数形式clear
: 清除所有的符号定义clock(z)
: 复数z
的极坐标形式,但使用-1
作为底数,而不使用e
coeff(p,x,n)
: 多项式p
中$x^n$项的系数cofactor(m,i,j)
: 矩阵m
第i
行、第j
列元素的代数余子式, 伴随矩阵的转置。conj(z)
: 复数z
的共轭。contract(a,i,j)
: 张量a
对指标i
和j
缩并, 矩阵m
的迹cos(x)
:x
的余弦cosh(x)
:x
的双曲余弦cross(u,v)
: 向量u
和v
的叉积curl(u)
: 向量u
的旋度d(f,x)
:f
对x
的偏导数defint(f,x,a,b)
: 从a
到b
,f
对x
的定积分deg(p,x)
: 多项式p
中x
的最高次数denominator(x)
: 表达式x
的分母det(m)
: 矩阵m
的行列式dim(a,n)
: 张量a
第n
个指标的维数, 或矩阵a
第n
列的维数div(u)
: 向量u
的散度do(a,b,...)
: 从左到右依次计算每个参数表达式,返回最后一个参数的计算结果dot(a,b,...)
: 向量、矩阵、张量的点积,矩阵乘法draw(f,x)
: 绘制f(x)
的函数图像e
: 初始化为自然常数e
eigen(m)
: 数值计算特征值和特征向量, $m=Q’DQ$erf(x)
:x
的误差函数erfc(x)
:x
的余误差函数eval(f,x,a)
:x
等于a
时表达式f
的值exp(x)
:x
的e
次幂$e^x$expand(r,x)
: 多项式r
按x
次数的部分分数展开expcos(z)
:z
的余弦函数的指数形式expcosh(z)
:z
的双曲余弦函数的指数形式expsin(z)
:z
的正弦函数的指数形式expsinh(z)
:z
的双曲正弦函数的指数形式exptan(z)
:z
的正切函数的指数形式exptanh(z)
:z
的双曲正切函数的指数形式factor(n)
: 数n
的因数(质数分解)factor(p,x)
: 多项式p
关于x
的因式分解factorial(n)
:n
的阶乘n!
filter(f,a,b,...)
:f
中不包含a
、b
等的表达式float(x)
: 表达式x
的有理数和整数转换为浮点数之后的值floor(x)
: 小于或等于x
的最大整数for(i,j,k,a,b,...)
:i
取值从j到k时,计算a
、b
及后续表达式的值gcd(a,b,...)
: 各表达式的最大公约数hermite(x,n)
:x
的n
阶Hermite多项式- (新版本中不可用)
hilbert(n)
:n
阶Hilbert矩阵 hadamard(a,b,...)
: Hadamard积(对应元素的乘积)i
: 初始化为虚数单位$(-1)^{1/2}$imag(z)
:z
的虚部inner(a,b,...)
: 向量、张量、矩阵的内积(矩阵乘法)integral(f,x)
:f
关于x
的不定积分inv(m)
: 矩阵m
的逆矩阵isprime(n)
: 若n
为质数返回1,否则返回0j
: 设置j=sqrt(-1)
, 以便使用j
而不是i
作为虚数单位kronecker(a,b,...)
: 向量, 矩阵的Kronecker积(直积)laguerre(x,n,a)
:x
的n
阶关联Laguerre多项式last
: 上一步的计算结果lcm(a,b,...)
: 各表达式的最小公倍数leading(p,x)
: 多项式p
中x
最高次项的系数legendre(x,n,m)
:x
的n
阶关联Legendre多项式- (新版本中不可用)
lisp(x)
: 计算表达式x
并返回结果的前缀符号形式 log(x)
: 以e
为底x
的对数(自然对数)mag(z)
: 复数z
的模minor(m,i,j)
: 矩阵m
的i
行j
列对应的余子式minormatrix(m,i,j)
: 矩阵m
去除i
行j
列后的结果mod(a,b)
:a
除以b
的模noexpand(x)
: 计算表达式x
的值, 但不展开求和进行not(x)
: 逻辑非nroots(p,x)
: 多项式p(x)
的所有根number(x)
: 判断数字numerator(x)
: 表达式x
的分子or(a,b,...)
: 逻辑或outer(a,b,...)
: 向量、矩阵或张量的外积(张量积)pi
: 符号πpolar(z)
: 复数z
的极坐标形式power
: 使用^
求幂prime(n)
: 第n个质数print(a,b,...)
: 计算表达式并输出结果product(i,j,k,f)
: 连乘积product(y)
:y
分量的连乘积.quote(x)
: 表达式x
,而不先计算其值quotient(p,q,x)
:p(x)
对q(x)
的商rank(a)
: 矩阵或张量a
的秩rationalize(x)
: 通分real(z)
: 复数z
的实部rect(z)
: 复数z
的三角函数形式roots(p,x)
: 多项式p(x)
的根rotate(u,s,k,...)
: 旋转向量u
run(file)
: 执行脚本file
simplify(x)
: 化简表达式x
sin(x)
:x
的正弦函数值sinh(x)
:x
的双曲正弦函数值sqrt(x)
:x
的平方根status
: 当前的内存使用情况stop
: 终止运行当前脚本- (新版本中不可用)
string(x)
: 计算x
表达式并返回字符串 subst(a,b,c)
: 将c
中的b
替换为asum(i,j,k,f)
: 连加和sum(y)
:y
各分量的连加和tan(x)
:x
的正切值tanh(x)
:x
的双曲正切值taylor(f,x,n,a)
:x
趋于a
时,f(x)
的n
阶Taylor展开test(a,b,c,d,...)
: 连续测试trace
: 追踪计算过程transpose(a,i,j)
: 转置tty
: 文本终端unit(n)
:n
阶单位矩阵zero(i,j,...)
: 零张量
- 2021-10-21 00:10:57
Eigenmath
是一个计算机代数系统, 可用于进行简单的数学符号计算, 公式推导. 最近也提供了js版本, 可以直接在浏览器中运行. 我关注它有很多年了, 虽然也只是不时用到. 这里整理了Eigenmath
支持的函数的说明, 供参考.
参考资料
- Eigenmath 官方网站 函数说明 参考手册
- TTT Blog 中文翻译
注意
- 注释符为
#
或--
- 尽量不要使用
d
、e
、i
、pi
作为变量名,因为它们分别代表求导、常数e、虚数i、常数pi。 - 使用括号定义多元矩阵,使用方括号取矩阵中的某个元素。
- 下文中
>
后面为输入.
abs(x)
: x
的绝对值或向量x
的长度
> X = (x,y,z)
> abs(X)
1/2
2 2 2
(x + y + z )
adj(m)
: 矩阵m
的伴随矩阵,等于m
的行列式乘以m
的逆矩阵
> A = ((a,b),(c,d))
> adj(A) == det(A) inv(A)
1
and(a,b,...)
: 逻辑与
如果所有参数都为真(即非零),返回1,否则返回0。
> and(1=1,2=2)
1
arccos(x)
: x
的反余弦$\cos^{-1}(x)$
> arccos(1/2)
1
--- π
3
arccosh(x)
: x
的反双曲余弦$\cosh^{-1}(x)$
arcsin(x)
: x
的反正弦$\sin^{-1}(x)$
> arcsin(1/2)
1
--- π
6
arcsinh(x)
: x
的反双曲正弦$\sinh^{-1}(x)$
arctan(y,x)
: y/x
的反正切$\tan^{-1}(y/x)$
> arctan(1,0)
1
--- π
2
arctanh(x)
: x
的反双曲正切$\tanh^{-1}(x)$
arg(z)
: 复数z
的幅角
> arg(2 - 3i)
arctan(-3,2)
besselj(x,n)
: 贝塞尔函数
> besselj(x,1/2)
1/2
2 sin(x)
-------------
1/2 1/2
π x
binding(s)
: 符号表达式的原本形式
计算一个符号表达式时,其结果可能与符号表达式的原始形式不同,比如结果表达式会展开。使用binding
函数可以返回符号表达式原本的形式。
> p = quote((x + 1)^2)
> p
> binding(p)
2
p = x + 2 x + 1
2
(x + 1)
binomial(n,k)
: 二项式系数, 或组合数
$(x+y)^n$的展开式中$x^k y^(n-k)$项的系数.
此函数与choose
相同。
> binomial(52,5)
2598960
ceiling(x)
: 大于或等于x
的最小整数
> ceiling(1/2)
1
check(x)
: 测试表达式x
的值并决定是否停止脚本
如果x
为真(非零)则继续执行脚本,否则停止脚本。表达式x
可以包含比较运算,比如=
、==
、<
、<=
、>
、>=
。可以使用not
函数测试非等价条件。
> A = 1
> B = 1
> check(A=B) -- 如果A不等于B, 则在此处停止脚本
choose(n,k)
: 组合数
从n
中不考虑顺序取k
个项的组合数(即$C_n^k$)。
> choose(52,5)
2598960
circexp(x)
: 计算x
表达式,将其中的三角函数和双曲函数转换为指数形式
> circexp(cos(x) + i sin(x))
exp(i x)
clear
: 清除所有的符号定义
clock(z)
: 复数z
的极坐标形式,但使用-1
作为底数,而不使用e
> clock(2 - 3i)
arctan(-3,2)
--------------
1/2 π
13 (-1)
coeff(p,x,n)
: 多项式p
中$x^n$项的系数
> p = x^3 + 6x^2 + 12x + 8
> coeff(p,x,2)
6
cofactor(m,i,j)
: 矩阵m
第i
行、第j
列元素的代数余子式, 伴随矩阵的转置。
> A = ((a,b),(c,d))
> cofactor(A,1,2) == adj(A)[2,1]
1
conj(z)
: 复数z
的共轭。
> conj(2 - 3i)
2 + 3 i
contract(a,i,j)
: 张量a
对指标i
和j
缩并, 矩阵m
的迹
如果忽略i
和j
,则分别取1
和2
。表达式contract(m)
表示计算矩阵m
的迹(即$\tr(m)$)。
> A = ((a,b),(c,d))
> contract(A)
a + d
cos(x)
: x
的余弦
> cos(pi/4)
1
------
1/2
2
cosh(x)
: x
的双曲余弦
> circexp(cosh(x))
1 1
--- exp(-x) + --- exp(x)
2 2
cross(u,v)
: 向量u
和v
的叉积
cross
函数可重定义,默认定义如下:
cross(u,v) = (u[2] v[3] - u[3] v[2],
u[3] v[1] - u[1] v[3],
u[1] v[2] - u[2] v[1])
curl(u)
: 向量u
的旋度
curl
函数可重定义,默认定义如下:
curl(u) = (d(u[3],y) - d(u[2],z),
d(u[1],z) - d(u[3],x),
d(u[2],x) - d(u[1],y))
d(f,x)
: f
对x
的偏导数
> d(x^2,x)
2 x
参数f
可以是任意秩的张量,参数x
可以是向量。当x
为向量时,结果为f
的梯度。
> F = (f(),g(),h())
> X = (x,y,z)
> d(F,X)
┌ ┐
│ d(f(),x) d(f(),y) d(f(),z) │
│ │
│ d(g(),x) d(g(),y) d(g(),z) │
│ │
│ d(h(),x) d(h(),y) d(h(),z) │
└ ┘
d
可以用作变量名,它不会与函数d
冲突。
可以将d
重定义为其他函数,这种情况下仍然可以使用derivative
(d
的同义函数)计算偏导数。
defint(f,x,a,b)
: 从a
到b
, f
对x
的定积分
参数可以扩展以对多个变量进行定积分计算(多重积分),例如defint(f,x,a,b,y,c,d)
等价于defint(defint(f,x,a,b),y,c,d)
。
> f = (1 + cos(theta)^2) sin(theta)
> defint(f, theta, 0, pi, phi, 0, 2pi)
16
---- π
3
deg(p,x)
: 多项式p
中x
的最高次数
> p = (2x + 1)^3
> deg(p,x)
3
denominator(x)
: 表达式x
的分母
> denominator(a/b)
b
det(m)
: 矩阵m
的行列式
> A = ((a,b),(c,d))
> det(A)
a d - b c
dim(a,n)
: 张量a
第n
个指标的维数, 或矩阵a
第n
列的维数
注意编号从1开始。
> A = ((1,2),(3,4),(5,6))
> dim(A,1)
3
div(u)
: 向量u
的散度
div
函数可重定义,默认定义如下:
div(u) = d(u[1],x) + d(u[2],y) + d(u[3],z)
do(a,b,...)
: 从左到右依次计算每个参数表达式,返回最后一个参数的计算结果
> do(A=1,B=2,A+B)
3
注意,计算过程的中间变量在函数计算结束后仍然会保留。
dot(a,b,...)
: 向量、矩阵、张量的点积,矩阵乘法
# 计算方程组AX=B的解
> A = ((1,2),(3,4))
> B = (5,6)
> X = dot(inv(A),B)
> X
┌ ┐
│ -4 │
│ │
X = │ 9 │
│ --- │
│ 2 │
└ ┘
draw(f,x)
: 绘制f(x)
的函数图像
可以通过设置xrange
和yrange
指定绘制范围
> xrange = (0,1)
> yrange = (0,1)
> draw(x^2,x)
注意,该功能需要在GUI中使用。
e
: 初始化为自然常数e
> e^x
exp(x)
注意: 可以清除或重定义e
, 用作其他.
eigen(m)
: 数值计算特征值和特征向量, $m=Q’DQ$
注意,矩阵m
必须为数值, 且对称。计算结果会保存在Q
和D
变量中,其中Q
的行保存了特征向量,D
对角线上的元素为特征值。
> A = ((1,2),(2,1))
> eigen(A)
> dot(transpose(Q),D,Q)
┌ ┐
│ 1 2 │
│ │
│ 2 1 │
└ ┘
erf(x)
: x
的误差函数
erfc(x)
: x
的余误差函数
eval(f,x,a)
: x
等于a
时表达式f
的值
参数列表可以扩充以支持多个变量。比如,eval(f,x,a,y,b)
等价于eval(eval(f,x,a),y,b)
。
> eval(x + y,x,a,y,b)
a + b
exp(x)
: x
的e
次幂$e^x$
> exp(i pi)
-1
expand(r,x)
: 多项式r
按x
次数的部分分数展开
> p = (x + 1)^2
> q = (x + 2)^2
> expand(p/q,x)
2 1
-------- + -------------- + 1
x + 2 2
x + 4 x + 4
expcos(z)
: z
的余弦函数的指数形式
> expcos(z)
1 1
--- exp(i z) + --- exp(-i z)
2 2
expcosh(z)
: z
的双曲余弦函数的指数形式
> expcosh(z)
1 1
--- exp(-z) + --- exp(z)
2 2
expsin(z)
: z
的正弦函数的指数形式
> expsin(z)
1 1
---- i exp(i z) + --- i exp(-i z)
2 2
expsinh(z)
: z
的双曲正弦函数的指数形式
> expsinh(z)
1 1
---- exp(-z) + --- exp(z)
2 2
exptan(z)
: z
的正切函数的指数形式
> exptan(z)
i i exp(2 i z)
---------------- - ----------------
exp(2 i z) + 1 exp(2 i z) + 1
exptanh(z)
: z
的双曲正切函数的指数形式
> exptanh(z)
1 exp(2 z)
--------------- + --------------
exp(2 z) + 1 exp(2 z) + 1
factor(n)
: 数n
的因数(质数分解)
> factor(12/35)
2
2 3
------
5 7
如果n
是一个浮点数,则选取它的一个近似值进行计算。
> factor(float(pi))
5 71
------
113
factor(p,x)
: 多项式p
关于x
的因式分解
对于多变量的多项式,函数的参数列表可以扩展。
> p = 2x + x y + y + 2
> factor(p,x,y)
(x + 1) (y + 2)
注意,factor
函数返回的是未展开的表达式,如果将结果赋值给一个符号变量,则对这个符号变量的计算会将结果展开。如果希望保持不展开的结果,可通过binding
函数进行处理。
> p = 2x + x y + y + 2
> q = factor(p,x,y)
> q
q = 2 x + x y + y + 2
> binding(q)
(x + 1) (y + 2)
factorial(n)
: n
的阶乘n!
也可以使用n!
。
> 20!
2432902008176640000
filter(f,a,b,...)
: f
中不包含a
、b
等的表达式
> p = x^2 + 3x + 2
> filter(p,x^2)
3 x + 2
float(x)
: 表达式x
的有理数和整数转换为浮点数之后的值
注意,pi
和e
也会转换。
> float(212^17)
39
3.52947 10
floor(x)
: 小于或等于x
的最大整数
> floor(1/2)
0
for(i,j,k,a,b,...)
: i
取值从j到k时,计算a
、b
及后续表达式的值
> for(k,1,3,A=k,print(A))
A = 1
A = 2
A = 3
注意,for
循环中i
的值在for
循环结束后会恢复原值,除非for
循环被check
之类的函数打断。如果使用i
作为计数变量,for
循环内的虚数单位会被覆盖(涉及复数计算时,尽量不使用i
作为变量)。
gcd(a,b,...)
: 各表达式的最大公约数
> gcd(x,x y)
x
hermite(x,n)
: x
的n
阶Hermite多项式
> hermite(x,3)
3
8 x - 12 x
(新版本中不可用) hilbert(n)
: n
阶Hilbert矩阵
> hilbert(3)
1 1
1 --- ---
2 3
1 1 1
--- --- ---
2 3 4
1 1 1
--- --- ---
3 4 5
hadamard(a,b,...)
: Hadamard积(对应元素的乘积)
参数的维数必须相同. Hadamard积也可以通过简单地对参数相乘进行计算.
> A = ((A11,A12),(A21,A22))
> B = ((B11,B12),(B21,B22))
> A B
┌ ┐
│ A B A B │
│ 11 11 12 12 │
│ │
│ A B A B │
│ 21 21 22 22 │
└ ┘
i
: 初始化为虚数单位$(-1)^{1/2}$
> exp(i pi)
-1
注意: 可以清除或重定义i
做其他用途.
imag(z)
: z
的虚部
> imag(2 - 3i)
-3
inner(a,b,...)
: 向量、张量、矩阵的内积(矩阵乘法)
> A = ((a,b),(c,d))
> B = (x,y)
> inner(A,B)
┌ ┐
│ a x + b y │
│ │
│ c x + d y │
└ ┘
注意,inner
与dot
是同一函数。
integral(f,x)
: f
关于x
的不定积分
> integral(x^2,x)
1 3
--- x
3
inv(m)
: 矩阵m
的逆矩阵
> A = ((1,2),(3,4))
> inv(A)
┌ ┐
│ -2 1 │
│ │
│ 3 1 │
│ --- ---- │
│ 2 2 │
└ ┘
isprime(n)
: 若n
为质数返回1,否则返回0
> isprime(2^31 - 1)
1
j
: 设置j=sqrt(-1)
, 以便使用j
而不是i
作为虚数单位
> j = sqrt(-1)
> 1/sqrt(-1)
-j
kronecker(a,b,...)
: 向量, 矩阵的Kronecker积(直积)
> A = ((1,2),(3,4))
> B = ((a,b),(c,d))
> kronecker(A,B)
┌ ┐
│ a b 2 a 2 b │
│ │
│ c d 2 c 2 d │
│ │
│ 3 a 3 b 4 a 4 b │
│ │
│ 3 c 3 d 4 c 4 d │
└ ┘
laguerre(x,n,a)
: x
的n
阶关联Laguerre多项式
> laguerre(x,3,0)
1 3 3 2
---- x + --- x - 3 x + 1
6 2
last
: 上一步的计算结果
> 212^17
3529471145760275132301897342055866171392
> last^(1/17)
212
注意,对某些函数,如果未指定参数,则会将last
作为参数。
> 212^17
3529471145760275132301897342055866171392
> float
39
3.52947 10
lcm(a,b,...)
: 各表达式的最小公倍数
> lcm(x,x y)
x y
leading(p,x)
: 多项式p
中x
最高次项的系数
> leading(3x^2+y^4+1,x)
3
legendre(x,n,m)
: x
的n
阶关联Legendre多项式
> legendre(x,3,0)
5 3 3
--- x - --- x
2 2
(新版本中不可用) lisp(x)
: 计算表达式x
并返回结果的前缀符号形式
在调试脚本时很有用。
> lisp(x^2 + 1)
(+ (^ x 2) 1)
log(x)
: 以e
为底x
的对数(自然对数)
> log(x^y)
y log(x)
如果要计算以其他值,如a
,为底的对数,可使用换底公式:$log_a(x) = log(x)/log(a)$.
mag(z)
: 复数z
的模
> mag(x + i y)
┌ ┐1/2
│ 2 2│
│x + y │
│ │
└ ┘
注意,mag
函数会将未定义的符号函数视为实数,而abs
函数不会。
minor(m,i,j)
: 矩阵m
的i
行j
列对应的余子式
> A = ((1,2,3),(4,5,6),(7,8,9))
> minor(A,1,1) == det(minormatrix(A,1,1))
1
minormatrix(m,i,j)
: 矩阵m
去除i
行j
列后的结果
> A = ((1,2,3),(4,5,6),(7,8,9))
> minormatrix(A,1,1)
┌ ┐
│ 5 6 │
│ │
│ 8 9 │
└ ┘
mod(a,b)
: a
除以b
的模
即a
除以b
计算整数商时的余数。
> mod(10,7)
3
> mod(5,3/8)
1
---
8
noexpand(x)
: 计算表达式x
的值, 但不展开求和进行
> noexpand((x + 1)^2 / (x + 1))
x + 1
not(x)
: 逻辑非
若x
为真(非零)返回0,否则返回1
> not(1=1)
0
nroots(p,x)
: 多项式p(x)
的所有根
包括实数和复数根。该函数只进行数值计算。p(x)
的系数可以是复数。
> nroots((x-1)*(x+2),x)
┌ ┐
│ -2 │
│ │
│ 1 │
└ ┘
number(x)
: 判断数字
如果x
为有理数或者浮点数返回1,否则返回0。
> number(1/2)
1
numerator(x)
: 表达式x
的分子
> numerator(a/b)
a
> numerator(a/b+b/a)
2 2
a + b
or(a,b,...)
: 逻辑或
如果参数列表中至少有一个表达式为真(非0),则返回1,否则返回0。
> or(1=1,2=2)
1
outer(a,b,...)
: 向量、矩阵或张量的外积(张量积)
> A = (a,b,c)
> B = (x,y,z)
> outer(A,B)
┌ ┐
│ a x a y a z │
│ │
│ b x b y b z │
│ │
│ c x c y c z │
└ ┘
pi
: 符号π
> exp(i pi)
-1
polar(z)
: 复数z
的极坐标形式
> polar(x - i y)
┌ ┐1/2
│ 2 2│
│x + y │ exp(i arctan(-y,x))
│ │
└ ┘
power
: 使用^
求幂
指数为负值时需要加括号.
> x^(-1/2)
1
------
1/2
x
prime(n)
: 第n个质数
注意,n
应介于1和10000之间。
> prime(100)
541
print(a,b,...)
: 计算表达式并输出结果
通常与for
函数配合使用, 用于在循环内部输出结果。
> for(j,1,3,print(j))
j = 1
j = 2
j = 3
product(i,j,k,f)
: 连乘积
令i
取值从j
到k
,分别计算f
,并将它们的值累乘作为结果.
下面的例子等价于计算$(x+1)(x+2)(x+3)$的展开式。
> product(j,1,3,x + j)
3 2
x + 6 x + 11 x + 6
注意,i
在函数计算结束后会恢复。如果使用i
作为变量,则product
函数内表达式中的复数单位i
会被覆盖。
product(y)
: y
分量的连乘积.
> product((1,2,3,4))
24
quote(x)
: 表达式x
,而不先计算其值
> quote((x + 1)^2)
2
(x + 1)
> x=2
> quote((x+1)^2)
2
(x + 1)
> t=last
> t
t = 9
quotient(p,q,x)
: p(x)
对q(x)
的商
> p = x^2 + 1
> q = x + 3
> quotient(p,q,x)
x - 3
rank(a)
: 矩阵或张量a
的秩
> A = ((a,b),(c,d))
> rank(A)
2
rationalize(x)
: 通分
计算表达式x
,并使其只有一个分母(即结果只含有一个分式)
> rationalize(1/a + 1/b + 1/2)
2 a + a b + 2 b
-----------------
2 a b
注意,rationalize
函数返回未展开的表达式。如果将结果赋值给一个符号变量,对其求值会展开表达式。可以使用binding
函数保持未展开的表达式。
> f = rationalize(1/a + 1/b + 1/2)
> binding(f)
2 a + a b + 2 b
-----------------
2 a b
real(z)
: 复数z
的实部
> real(2 - 3i)
2
rect(z)
: 复数z
的三角函数形式
> rect(exp(i x))
cos(x) + i sin(x)
roots(p,x)
: 多项式p(x)
的根
该多项式应当能够因式分解。返回的向量中包含了每个根。
> roots(x^2 + 3x + 2,x)
┌ ┐
│ -2 │
│ │
│ -1 │
└ ┘
rotate(u,s,k,...)
: 旋转向量u
向量u
必须具有2n个元素, 其中n为整数, 取值范围为1到15. 参数s,k,...
为旋转代码的一个序列, 其中s
为大写字母, k
为4位的数, 从0到n-1. 旋转从左到右进行求值. 可以使用的旋转为:
C, k
: 控制前缀 prefixH, k
: HadamardP, k, φ
: 修改相位(φ = 1/4 π 用于 T 旋转)Q, k
: 量子傅里叶变换Quantum Fourier transformV, k
: 逆 量子傅里叶变换QuantumInverse quantum Fourier transformW, k, j
: 交换位 Swap qubitsX, k
: 泡利 XY, k
: 泡利 YZ, k
: 泡利 Z
控制前缀C, k
修改下一个旋转代码, 以便使其成为一个使用k作为控制位的控制旋转. 使用两个会更多前缀来指定多个控制位. 例如, C, k, C, j, X, m
为Toffoli旋转. 傅里叶旋转Q, k
和V, k
用于从0到k的量子位.(Q
和V
忽略所有控制前缀). 另见手册的第三节.
> psi = (1,0,0,0)
> rotate(psi,H,0)
┌ ┐
│ 1 │
│ ------ │
│ 1/2 │
│ 2 │
│ │
│ 1 │
│ ------ │
│ 1/2 │
│ 2 │
│ │
│ 0 │
│ │
│ 0 │
└ ┘
run(file)
: 执行脚本file
file
应为脚本的绝对路径或相对当前可执行文件位置的路径。在批量加载一些自定义函数时很有用,或可以实现脚本的嵌套调用。
> run("Downloads/EVA.txt")
simplify(x)
: 化简表达式x
> simplify(sin(x)^2 + cos(x)^2)
1
sin(x)
: x
的正弦函数值
> sin(pi/4)
1
------
1/2
2
sinh(x)
: x
的双曲正弦函数值
> circexp(sinh(x))
1 1
---- exp(-x) + --- exp(x)
2 2
sqrt(x)
: x
的平方根
> sqrt(10!)
1/2
720 7
status
: 当前的内存使用情况
stop
: 终止运行当前脚本
(新版本中不可用) string(x)
: 计算x
表达式并返回字符串
在测试脚本时很有用。
> string((x + 1)^2) == "x^2 + 2 x + 1"
1
subst(a,b,c)
: 将c
中的b
替换为a
> subst(x,y,y^2)
2
x
sum(i,j,k,f)
: 连加和
令i
取值从j
到k
, 分别计算f
,并返回各个结果的连加和。
> sum(j,1,5,x^j)
5 4 3 2
x + x + x + x + x
注意,sum
函数计算结束后,i
的值会还原。如果使用i
作为变量,则sum
函数内的复数单位i
会被覆盖。
sum(y)
: y
各分量的连加和
> sum((1,2,3,4))
10
tan(x)
: x
的正切值
> simplify(tan(x) - sin(x)/cos(x))
0
tanh(x)
: x
的双曲正切值
> circexp(tanh(x))
1 exp(2 x)
--------------- + --------------
exp(2 x) + 1 exp(2 x) + 1
taylor(f,x,n,a)
: x
趋于a
时, f(x)
的n
阶Taylor展开
> taylor(sin(x),x,5,0)
1 5 1 3
----- x - --- x + x
120 6
test(a,b,c,d,...)
: 连续测试
如果表达式a
为真(非零),则返回b
,否则如果表达式c
为真,则返回d,依次类推。
如果参数的个数为奇数,则当所有被测试表达式均为假时,返回最后一个表达式。表达式可以包含=
、==
、<
、<=
、>
、>=
。可以使用not
函数测试非等价性。(在=
为赋值算符的情况下, 可以使用等价算符==
)
> A = 1
> B = 1
> test(A=B,"yes","no")
yes
trace
: 追踪计算过程
设置trace=1
时,脚本会输出计算过程。有助于调试。
> trace = 1
注意,使用contract
函数计算矩阵的迹。
transpose(a,i,j)
: 转置
张量a
对指标i
、j
的转置。
如果未指定i
和j
,则默认为1和2,因此可以只使用一个参数对矩阵进行转置。
> A = ((a,b),(c,d))
> transpose(A)
┌ ┐
│ a c │
│ │
│ b d │
└ ┘
注意,参数可以扩展以实现多个转置操作。参数从左到右依次计算。例如,transpose(A,1,2,2,3)
等价于transpose(transpose(A,1,2),2,3)
。
tty
: 文本终端
设置tty=1
时,结果将以普通文本形式输出。
> tty = 1
> (x + 1/2)^2
x^2 + x + 1/4
unit(n)
: n
阶单位矩阵
> unit(3)
┌ ┐
│ 1 0 0 │
│ │
│ 0 1 0 │
│ │
│ 0 0 1 │
└ ┘
zero(i,j,...)
: 零张量
给定维数i
, j
等的空张量。在创建张量并给每个元素赋值时会很有用。
> A = zero(3,3)
> for(k,1,3,A[k,k]=k)
> A
┌ ┐
│ 1 0 0 │
│ │
A = │ 0 2 0 │
│ │
│ 0 0 3 │
└ ┘